[prev in list] [next in list] [prev in thread] [next in thread] 

List:       cairo
Subject:    Re: [cairo] Release management for Cairo
From:       Emmanuele Bassi <ebassi () gmail ! com>
Date:       2021-04-25 18:01:19
Message-ID: CALnHYQHnjjA2ZSaZTquNd=s_dZroiSuxLwPugfLAyoJd_p=QDA () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


On Sun, 25 Apr 2021 at 18:48, Petr Kobalíček <kobalicek.petr@gmail.com>
wrote:

> Hi,
>
> I think the proposal makes sense. The only thing I would disagree with is
> the Meson build system. It can only generate build files for Ninja, which
> means you cannot just use plain old make to build the project.
>

I'd consider this a plus, given that plain Makefiles are usually tragically
less performant. Plus, Meson doesn't *only* target Ninja: it generates
Visual Studio project files, and the Meson maintainer is working on
improving the XCode support.


> Not saying Ninja is bad, but it's an additional dependency and having a
> change accepted in Ninja is also very difficult.
>

Yes, Ninja is an additional dependency; nevertheless, it's available
everywhere.

The point about changes in Ninja is a good one; luckily, there aren't many
changes needed, as far as I know. Additionally, there's a Ninja-compatible
tool called "Samurai", which is ostensibly easier to contribute to.


> I think CMake would be much better option in such case - it just provides
> more options than Meson and since it has a wider adoption it has much nicer
> integration with many IDEs.
>

CMake is terrible in many, many ways. I have never had a good experience
with it, in my roles as a contributor to projects, as a maintainer, and as
a downstream integrator. Cross-compilation is usually horrific and broken,
and from a maintenance perspective, there's literally no difference to me
between an idiomatic, clean CMake build and a broken one. The Makefile
generator for CMake is busted, and does not really work with parallel make,
to the point that I'd still recommend using Ninja.


> BTW It's just an opinion. I'm on this list, but I don't really use Cairo
> anymore, I should unsubscribe :)
>

Your opinion is nevertheless welcome. Thank you!

Ciao,
 Emmanuele.

On Sun, Apr 25, 2021 at 7:12 PM Emmanuele Bassi <ebassi@gmail.com> wrote:
>
>> Hi all;
>>
>> I have breached this topic on a couple of IRC channels, but I wanted to
>> open the floor for discussion on the Cairo mailing list, in order to reach
>> out to the larger Cairo community.
>>
>> After the last discussion[0] on this list about the state of the
>> maintenance of Cairo, I decided to have a look at the current development
>> branch and see what we can do about it.
>>
>> Background: I am currently working for the GNOME Foundation as a GTK
>> developer. I have been part of the GNOME community for the past 15+ years,
>> and maintain a few libraries and low level dependencies of GTK, like:
>>
>>  - [libepoxy](https://github.com/anholt/libepoxy)
>>  - [gdk-pixbuf](https://gitlab.gnome.org/GNOME/gdk-pixbuf)
>>  - [graphene](https://github.com/ebassi/graphene)
>>
>> I have taken over the first two after they stopped being maintained, and
>> worked on getting them to a clean, releasable state.
>>
>> While I have been using Cairo for more than a decade, I have never been
>> involved in its development. For the past 5 years, the GTK developers have
>> actually been working on reducing the use of Cairo inside GTK, towards the
>> use of GL (and Vulkan) as the main drawing API for the toolkit.
>> Nevertheless, while GTK4 tries very hard *not* to use Cairo in its default
>> code paths, we do fall back to it whenever GL is not available; on top of
>> that, we still expose some Cairo types in our API, and we still use Cairo
>> as the default backend for text rendering and printing. While that might
>> change in the future, we are still three to four years away from that, and
>> we'd still have to maintain our extant code and API for a few more years
>> after that.
>>
>> From the perspective of GTK, the current state of maintenance of Cairo is
>> problematic at best. We'd like to add API and functionality to it, but the
>> lack of response for those changes makes iterating and fixing issues very
>> complicated; we are, after all, stretched too thin ourselves. Not knowing
>> if a change will effectively land, or be part of a release, naturally leads
>> to workarounds; downstream distributors end up either shipping snapshots of
>> Cairo, or we end up with issue reports because we have to depend on
>> unstable features. This inevitably leads to friction between end users,
>> distributors, and maintainers, and instead of working together we end up
>> trying to route around one another. This is an untenable situation for
>> everyone.
>>
>> Ideally, I'd like to help with the maintenance of Cairo. I am not an
>> expert in the tesselation code, or in font rendering, or in the image
>> scaling code; but I can deal with making releases, keeping the CI running,
>> automating the website maintenance, triaging issues, and fixing the build.
>> More importantly, since Cairo is still a GTK dependency, I can spend my
>> work time on those tasks.
>>
>> Of course, since this might look too good to be true: my offer comes with
>> strings attached, and this is where things might get controversial.
>>
>> First of all: Cairo is full of conditionally built code that is barely
>> maintained, and seldom enabled. This makes maintenance more complicated
>> because nobody is really exercising the whole code base except for some
>> long tail end user. Cairo has too many science experiments, and too many
>> small fiefdoms, and not enough people that care about the whole project.
>> People end up enabling some random feature without realising that it's a
>> trap; downstream packagers don't really know what to enable at compile
>> time, either.
>>
>> For this reason, I'd like to whittle down the size of the code base. The
>> following backends would need to go:
>>
>>  - OS/2
>>  - BeOS
>>  - Qt
>>  - DRM
>>  - GL (GLES, EGL, GLX, WGL)
>>  - Cogl
>>  - DirectFB
>>  - XML
>>
>> The supported backends would be:
>>
>>  - image
>>  - recording
>>  - Xlib
>>  - XCB
>>  - Win32
>>  - Quartz [1]
>>  - Tee [2]
>>  - SVG
>>  - PDF
>>  - PS
>>
>> This is, essentially, the currently exercised subset of Cairo that GTK
>> needs in order to work, plus the requirements of other users of Cairo
>> according to Debian's code search. I'd like to be able to say: "if you want
>> to keep a backend alive, please show up and maintain it", but the truth is:
>> none of the backends I'd like to remove are really used by anything that is
>> currently relevant outside of a moderately long tail of niche users. If you
>> rely on custom builds for your project/product, I'm sure you can also
>> continue using Cairo 1.16. I'd be happy to backport all the relevant
>> changes to the 1.16 branch, before sealing it for good.
>>
>> Additionally, I would drop the Autotools build from the repository, and
>> rely entirely on Meson. Maintaining two build systems is not anybody's idea
>> of "fun", and the extant Autotools build is basically running on cargo
>> culting alone. Meson has proved itself to be a reliable build environment,
>> especially after GNOME, Mesa, and the X.org projects have switched to it.
>>
>> Of course, the Meson build needs some additional fixes, like:
>>
>>  - a better test suite integration, to enable parallelism and per-backend
>> options
>>  - porting some of the existing tests currently written as shell scripts,
>> and vetting their usefulness
>>
>> With the Autotools build gone, it's possible to avoid targeting the
>> minimum common denominator, and ensure that Cairo can build properly on
>> multiple platforms. GTK currently builds Cairo as a Meson sub-project on
>> Windows (with the MSVC toolchain) and macOS, which gives us a functional
>> baseline.
>>
>> I have started these changes in a separate branch, called "Tanis"[3]
>> available on GitLab:
>>
>>   https://gitlab.freedesktop.org/ebassi/cairo/-/tree/tanis
>>
>> Some of the commits there are fairly uncontroversial, and deal with
>> fixing compiler warnings or other small build issues. The commits prefixed
>> with "tanis" are the ones that I feel are going to be more controversial.
>>
>> As I said above, I am not really involved with the development of Cairo;
>> I am just a downstream consumer of it. The larger Cairo community might not
>> be enthused by somebody dropping by and asking to assume the role of
>> release manager with a laundry list of changes that drop code and features.
>> I *do* empathise with that, and I'm entirely prepared to a "get lost" reply.
>>
>> Sadly, it seems that the other option is keeping Cairo on life support,
>> landing changes but never really releasing them; since there are still
>> downstream users of Cairo, and those projects do have quite some traction
>> in the larger free and open source ecosystem, either those projects will
>> accelerate dropping Cairo, or will be forced to perform a soft fork, with
>> an ABI compatible release from a separate branch or repository. Neither of
>> those solutions would be acceptable to me, and I'm sure multiple
>> downstreams would also find it very hard to swallow.
>>
>> So, I guess my question is: would this plan be acceptable to the people
>> still involved with the development of Cairo?
>>
>> If it is, I'd be happy to work on:
>>
>>  - merging the Tanis branch
>>  - cleaning up the documentation, and updating it to the current status
>>  - refactoring the test suite so that it can properly run on the CI
>> pipeline
>>  - going through the API reference and ensuring that it's up to date and
>> correct
>>  - fixing the cairo-www repository, and using GitLab pages for publishing
>> the content
>>  - doing a new development snapshot
>>
>> Ciao,
>>  Emmanuele.
>>
>> [0]:
>> https://lists.freedesktop.org/archives/cairo/2020-November/029080.html
>> [1]: Provisionally; the performance of the Quartz backend on modern macOS
>> has degraded to such a point that it's literally faster to draw on image
>> surfaces.
>> [2]: I have checked on the Debian code search, and while the Tee backend
>> is still in use for Firefox, I'd also consider dropping it given its
>> experimental nature.
>> [3]: an old capital of the ancient kingdom of Egypt; and, of course, the
>> fictional resting place of the Ark of the Covenant in "Raiders of the Lost
>> Ark".
>>
>> --
>> https://www.bassi.io
>> [@] ebassi [@gmail.com]
>> --
>> cairo mailing list
>> cairo@cairographics.org
>> https://lists.cairographics.org/mailman/listinfo/cairo
>>
>

-- 
https://www.bassi.io
[@] ebassi [@gmail.com]

[Attachment #5 (text/html)]

<div dir="ltr"><div dir="ltr">On Sun, 25 Apr 2021 at 18:48, Petr Kobalíček &lt;<a \
href="mailto:kobalicek.petr@gmail.com">kobalicek.petr@gmail.com</a>&gt; \
wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" \
style="margin:0px 0px 0px 0.8ex;border-left:1px solid \
rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi,<div><br></div><div>I think the \
proposal makes sense. The only thing I would disagree with is the Meson build system. \
It can only generate build files for Ninja, which means you cannot just use plain old \
make to build the project.</div></div></blockquote><div><br></div><div>I&#39;d \
consider this a plus, given that plain Makefiles are usually tragically less \
performant. Plus, Meson doesn&#39;t *only* target Ninja: it generates Visual Studio \
project files, and the Meson maintainer is working on improving the XCode \
support.<br></div><div>  </div><blockquote class="gmail_quote" style="margin:0px 0px \
0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div \
dir="ltr"><div> Not saying Ninja is bad, but it&#39;s an additional dependency and \
having a change accepted in Ninja is also very \
difficult.</div></div></blockquote><div><br></div><div>Yes, Ninja is an additional \
dependency; nevertheless, it&#39;s available everywhere.</div><div><br></div><div>The \
point about changes in Ninja is a good one; luckily, there aren&#39;t many changes \
needed, as far as I know. Additionally, there&#39;s a Ninja-compatible tool called \
&quot;Samurai&quot;, which is ostensibly easier to contribute to.<br></div><div>  \
</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px \
solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div> I think CMake would be \
much better option in such case -  it just provides more options than Meson and since \
it has a wider adoption it has much nicer integration with many \
IDEs.</div></div></blockquote><div><br></div><div>CMake is terrible in many, many \
ways. I have never had a good experience with it, in my roles as a contributor to \
projects, as a maintainer, and as a downstream integrator. Cross-compilation is \
usually horrific and broken, and from a maintenance perspective, there&#39;s \
literally no difference to me between an idiomatic, clean CMake build and a broken \
one. The Makefile generator for CMake is busted, and does not really work with \
parallel make, to the point that I&#39;d still recommend using Ninja.<br></div><div>  \
</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px \
solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>BTW It&#39;s just an \
opinion. I&#39;m on this list, but I don&#39;t really use Cairo anymore, I should \
unsubscribe :)</div></div></blockquote><div><br></div><div>Your opinion is \
nevertheless welcome. Thank you!</div><div><br></div><div>Ciao,</div><div>  \
Emmanuele.</div><br><blockquote class="gmail_quote" style="margin:0px 0px 0px \
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div \
class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Apr 25, 2021 at 7:12 PM \
Emmanuele Bassi &lt;<a href="mailto:ebassi@gmail.com" \
target="_blank">ebassi@gmail.com</a>&gt; wrote:<br></div><blockquote \
class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid \
rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi all;<br><br>I have breached this \
topic on a couple of IRC channels, but I wanted to open the floor for discussion on \
the Cairo mailing list, in order to reach out to the larger Cairo \
community.<br><br>After the last discussion[0] on this list about the state of the \
maintenance of Cairo, I decided to have a look at the current development branch and \
see what we can do about it.<br><br>Background: I am currently working for the GNOME \
Foundation as a GTK developer. I have been part of the GNOME community for the past \
15+ years, and maintain a few libraries and low level dependencies of GTK, \
like:<br><br>  - [libepoxy](<a href="https://github.com/anholt/libepoxy" \
target="_blank">https://github.com/anholt/libepoxy</a>)<br>  - [gdk-pixbuf](<a \
href="https://gitlab.gnome.org/GNOME/gdk-pixbuf" \
target="_blank">https://gitlab.gnome.org/GNOME/gdk-pixbuf</a>)<br>  - [graphene](<a \
href="https://github.com/ebassi/graphene" \
target="_blank">https://github.com/ebassi/graphene</a>)<br><br>I have taken over the \
first two after they stopped being maintained, and worked on getting them to a clean, \
releasable state.<br><br>While I have been using Cairo for more than a decade, I have \
never been involved in its development. For the past 5 years, the GTK developers have \
actually been working on reducing the use of Cairo inside GTK, towards the use of GL \
(and Vulkan) as the main drawing API for the toolkit. Nevertheless, while GTK4 tries \
very hard *not* to use Cairo in its default code paths, we do fall back to it \
whenever GL is not available; on top of that, we still expose some Cairo types in our \
API, and we still use Cairo as the default backend for text rendering and printing. \
While that might change in the future, we are still three to four years away from \
that, and we&#39;d still have to maintain our extant code and API for a few more \
years after that.<br><br>From the perspective of GTK, the current state of \
maintenance of Cairo is problematic at best. We&#39;d like to add API and \
functionality to it, but the lack of response for those changes makes iterating and \
fixing issues very complicated; we are, after all, stretched too thin ourselves. Not \
knowing if a change will effectively land, or be part of a release, naturally leads \
to workarounds; downstream distributors end up either shipping snapshots of Cairo, or \
we end up with issue reports because we have to depend on unstable features. This \
inevitably leads to friction between end users, distributors, and maintainers, and \
instead of working together we end up trying to route around one another. This is an \
untenable situation for everyone.<br><br>Ideally, I&#39;d like to help with the \
maintenance of Cairo. I am not an expert in the tesselation code, or in font \
rendering, or in the image scaling code; but I can deal with making releases, keeping \
the CI running, automating the website maintenance, triaging issues, and fixing the \
build. More importantly, since Cairo is still a GTK dependency, I can spend my work \
time on those tasks.<br><br>Of course, since this might look too good to be true: my \
offer comes with strings attached, and this is where things might get \
controversial.<br><br>First of all: Cairo is full of conditionally built code that is \
barely maintained, and seldom enabled. This makes maintenance more complicated \
because nobody is really exercising the whole code base except for some long tail end \
user. Cairo has too many science experiments, and too many small fiefdoms, and not \
enough people that care about the whole project. People end up enabling some random \
feature without realising that it&#39;s a trap; downstream packagers don&#39;t really \
know what to enable at compile time, either.<br><br>For this reason, I&#39;d like to \
whittle down the size of the code base. The following backends would need to \
go:<br><br>  - OS/2<br>  - BeOS<br>  - Qt<br>  - DRM<br>  - GL (GLES, EGL, GLX, \
WGL)<br>  - Cogl<br>  - DirectFB<br>  - XML<br><br>The supported backends would \
be:<br><br>  - image<br>  - recording<br>  - Xlib<br>  - XCB<br>  - Win32<br>  - \
Quartz [1]<br>  - Tee [2]<br>  - SVG<br>  - PDF<br>  - PS<br><br>This is, \
essentially, the currently exercised subset of Cairo that GTK needs in order to work, \
plus the requirements of other users of Cairo according to Debian&#39;s code search. \
I&#39;d like to be able to say: &quot;if you want to keep a backend alive, please \
show up and maintain it&quot;, but the truth is: none of the backends I&#39;d like to \
remove are really used by anything that is currently relevant outside of a moderately \
long tail of niche users. If you rely on custom builds for your project/product, \
I&#39;m sure you can also continue using Cairo 1.16. I&#39;d be happy to backport all \
the relevant changes to the 1.16 branch, before sealing it for \
good.<br><br>Additionally, I would drop the Autotools build from the repository, and \
rely entirely on Meson. Maintaining two build systems is not anybody&#39;s idea of \
&quot;fun&quot;, and the extant Autotools build is basically running on cargo culting \
alone. Meson has proved itself to be a reliable build environment, especially after \
GNOME, Mesa, and the X.org projects have switched to it.<br><br>Of course, the Meson \
build needs some additional fixes, like:<br><br>  - a better test suite integration, \
to enable parallelism and per-backend options<br>  - porting some of the existing \
tests currently written as shell scripts, and vetting their usefulness<br><br>With \
the Autotools build gone, it&#39;s possible to avoid targeting the minimum common \
denominator, and ensure that Cairo can build properly on multiple platforms. GTK \
currently builds Cairo as a Meson sub-project on Windows (with the MSVC toolchain) \
and macOS, which gives us a functional baseline.<br><br>I have started these changes \
in a separate branch, called &quot;Tanis&quot;[3] available on GitLab:<br><br>   <a \
href="https://gitlab.freedesktop.org/ebassi/cairo/-/tree/tanis" \
target="_blank">https://gitlab.freedesktop.org/ebassi/cairo/-/tree/tanis</a><br>   \
<br>Some of the commits there are fairly uncontroversial, and deal with fixing \
compiler warnings or other small build issues. The commits prefixed with \
&quot;tanis&quot; are the ones that I feel are going to be more \
controversial.<br><br>As I said above, I am not really involved with the development \
of Cairo; I am just a downstream consumer of it. The larger Cairo community might not \
be enthused by somebody dropping by and asking to assume the role of release manager \
with a laundry list of changes that drop code and features. I *do* empathise with \
that, and I&#39;m entirely prepared to a &quot;get lost&quot; reply.<br><br>Sadly, it \
seems that the other option is keeping Cairo on life support, landing changes but \
never really releasing them; since there are still downstream users of Cairo, and \
those projects do have quite some traction in the larger free and open source \
ecosystem, either those projects will accelerate dropping Cairo, or will be forced to \
perform a soft fork, with an ABI compatible release from a separate branch or \
repository. Neither of those solutions would be acceptable to me, and I&#39;m sure \
multiple downstreams would also find it very hard to swallow.<br><br>So, I guess my \
question is: would this plan be acceptable to the people still involved with the \
development of Cairo?<br><br>If it is, I&#39;d be happy to work on:<br><br>  - \
merging the Tanis branch<br>  - cleaning up the documentation, and updating it to the \
current status<br>  - refactoring the test suite so that it can properly run on the \
CI pipeline<br>  - going through the API reference and ensuring that it&#39;s up to \
date and correct<br>  - fixing the cairo-www repository, and using GitLab pages for \
publishing the content<br>  - doing a new development snapshot<br><br>Ciao,<br>  \
Emmanuele.<br><br>[0]: <a \
href="https://lists.freedesktop.org/archives/cairo/2020-November/029080.html" \
target="_blank">https://lists.freedesktop.org/archives/cairo/2020-November/029080.html</a><br>[1]: \
Provisionally; the performance of the Quartz backend on modern macOS has degraded to \
such a point that it&#39;s literally faster to draw on image surfaces.<br>[2]: I have \
checked on the Debian code search, and while the Tee backend is still in use for \
Firefox, I&#39;d also consider dropping it given its experimental nature.<br>[3]: an \
old capital of the ancient kingdom of Egypt; and, of course, the fictional resting \
place of the Ark of the Covenant in &quot;Raiders of the Lost Ark&quot;.<br \
clear="all"><br>-- <br><div dir="ltr"><a href="https://www.bassi.io" \
target="_blank">https://www.bassi.io</a><br>[@] ebassi [@<a href="http://gmail.com" \
                target="_blank">gmail.com</a>]</div></div>
-- <br>
cairo mailing list<br>
<a href="mailto:cairo@cairographics.org" \
target="_blank">cairo@cairographics.org</a><br> <a \
href="https://lists.cairographics.org/mailman/listinfo/cairo" rel="noreferrer" \
target="_blank">https://lists.cairographics.org/mailman/listinfo/cairo</a><br> \
</blockquote></div> </blockquote></div><br clear="all"><br>-- <br><div dir="ltr" \
class="gmail_signature"><a href="https://www.bassi.io" \
target="_blank">https://www.bassi.io</a><br>[@] ebassi [@<a href="http://gmail.com" \
target="_blank">gmail.com</a>]</div></div>



-- 
cairo mailing list
cairo@cairographics.org
https://lists.cairographics.org/mailman/listinfo/cairo


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic