Den 2026-10-08 kl. 16:16, skrev John Scott:
You may already be aware but it deserves an explicit mention: WebKitGTK now requires the use of Skia for
graphics. And if the words "WebKitGTK" and "Skia" together are giving anyone déjà vu,
that's because of the recent debian-devel thread "WebKitGTK and architecture support in Debian".
◦ As an aside, the reason that Skia isn't portable isn't due to a genuine constraint,
but to my understanding, it's simply because the code was written to correspond to
little-endian byte ordering when "type punning" or manipulating the in-memory
representation of various data types. Such problems have been well-known since antiquity
and is a sign of poorly-written code, which wouldn't be a big deal if folks at Google
were to care. See UNIX Network Programming (Third Edition, by W. Richard Stevens et al)
page 80 for example:
🙶A common network programming error in the 1980s was to develop code on Sun
workstations (big-endian Motorola 68000s) and forget to call any of these four
functions [htons(), htonl(), ntohs(), ntohl()]. The code worked fine on these
workstations, but would not work when ported to little-endian machines (such as
VAXes).🙷
I saw the discussion - and I saw the issue when packaging Skia ~6 months
ago. The error message says "The Skia team is not endian-savvy enough to
support big-endian CPUs...", which to me reads in line with your
understanding, perhaps in combination with a lack of regular testing on
big-endian machines.
Anyway, here are a couple important details about WebKitGTK and what it means
for us:
‣ WebKitGTK is supported in Debian stable releases by providing new stable
releases as needed, but it's a big undertaking and a miracle that the
maintainers and security team were able to make this work at all.
‣ Currently WebKitGTK uses an embedded code copy of Skia as provided in the
WebKitGTK releases, so it doesn't use your proper libskia package at all. In
fact WebKitGTK doesn't even have a build option to try using a system copy, but
I've filed a request at https://webkit.org/b/320369 to make the desire known.
This is sadly in line with the recommendations from upstream. The tone
is essentially: link it statically with your program. At least they do
have build options for shared libraries, but I needed to tweak them a
bit to give the .so file a proper soname, which indicates that
system-wide installation may be a bit of an afterthought.
The latter bit adds an extra degree of freedom. What's the ABI stability of
Skia like? Is it susceptible to Heisenbugs at the worst possible time (like
libxml2...) or is it just as reasonable as usual for other packages to depend
on the libskia package? I see libskia is available as a shared library which
makes me optimistic about the latter. On the other hand
https://skia.googlesource.com/skia/+/refs/heads/main/RELEASE_NOTES.md does show
such changes as function removals.
I see https://skia.org/docs/user/release/ says
We recommend most clients track our tip-of-tree as we work hard to keep it
green. [...]
If you require less frequent updates, we cut a stable milestone every four
weeks along with Chrome.
Chromium (and Skia) have a staged branching strategy. Every four weeks a branch
is cut from a relatively stable revision near HEAD, is stabilized for six
weeks, and then promoted to stable.
(Is that still accurate? At https://chromiumdash.appspot.com/schedule it hints
Chromium could be on a biweekly schedule now.)
You are right, they recently switched to a bi-weekly release schedule
(which is one thing that made me re-think the situation). I suppose they
have not updated that page yet.
As for API stability: the milestones are very stable (only backporting
high-priority patches), but that does not matter too much as they are
only active for two weeks. As upstream for storm-lang (the other user of
libskia), I have updated the Skia version 2-3-times by now. Each time
about a year of releases. Most parts of the API are the same, but each
time there have been some (relatively small) details that I needed to
change. For example, gradient fills moved from one place to another, and
later changed what color parameter they received (to be explicit about
color spaces, I think). A bit annoying, but small patches at the end of
the day (I carried one such patch in storm-lang in Debian for a while).
That being said, I think I am using a relatively small portion of the
API there.
I am not familiar with the libxml2 situation, so I cannot say too much
about it. My experience is that the API on a source level is
well-designed enough to break when details are changed, so I am not
worried about version mismatch causing issues. Given that it is C++,
binary compatibility across such changes is another thing (e.g. removing
a virtual function may cause vtables to mismatch). This is why I use the
milestones for the so-version. Both the API and ABI are stable across
milestones, but this will of course lead to more frequent soname bumps.
In conclusion, I recognize there are difficult social factors at play. I am concerned
about consequences for the free software movement with respect to fast-moving, "take
it or leave it" projects (and I don't assert that Skia is one, but that's where my
thoughts are headed so far). When code changes so frequently that no one who *isn't* a
full-time employee of the producer can wrap their head around it, this creates some
practical friction with the freedom to modify, share, and use the software. The challenge
of keeping up with security issues for you could be an example. I don't have any idea
what motivates you to work on the Skia package. Take care of yourself and set a boundary
as you see fit: you owe no one an explanation for how you choose to spend your time
contributing. If that means providing the libskia package primarily just for skia-pathops
and asserting there is no security support, that'd be quite sensible.
Thank you for these thoughts - after reading them, I think they are a
good summary of my own feelings as well. The high pace of development
and CVEs makes it difficult to keep up. It is a bit sad - Skia is
otherwise a good library. The reason I ended up with it for storm-lang
was that I did not find any other hardware-accelerated 2D rendering
library that fulfilled my needs at the time, and Skia seemed to be
recommended almost as a de-facto standard. It seems skia-pathops is in a
similar position, at least in some areas.
Thanks also for the note about boundaries. I think I was aiming a bit
too high initially, especially given the importance of security work. I
was in contact with Moritz (jmm) from the security team about this, and
we ended up with something like your suggestion: providing libskia
without security support for cases where that is acceptable (they were
fine using it for storm-lang also, which is the main reason I packaged
it initially).
(On a positive note, this entire situation inspired me to sketch out a
custom OpenGL-based 2D renderer for storm-lang based on ideas from
nanovg. It ended up being a quite fun thing to do! Maybe it will even be
good enough to ship someday.)
Greetings,
Filip