[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Current NEW review process saps developer motivation



On Sat, 27 Aug 2022 at 09:01:01 +0800, Paul Wise wrote:
> > I don't think building from the least-derived form is always the
> > right thing to do.
> 
> Personally, I believe that instances of that represent bugs in how the
> upstream source trees and build processes are organised.

While I'm flattered that you think I have the level of control required
over upstream projects to be able to demand that they change their
procedures in this way, I'm just a relatively minor contributor doing
my best. If the bar for being a Debian maintainer is set at "must be
influential enough to coerce the upstream project into behaving as we
want, against other developers' wishes", then I think we will have an
unsustainably small contributor base.

If I recall correctly, there have been vague plans to integrate
GObject-Introspection with GLib for about a decade (in order to break
the circular dependency that GObject-Introspection depends on GLib, while
the interface description for GLib is conceptually part of GLib but must
be generated using GObject-Introspection), so if there was not a barrier
to doing that, I'm sure it would already have happened. I don't know the
details, but to the best of my understanding the major objection is that
GLib essentially cannot ever break API/ABI without extensive disruption,
while GObject-Introspection is not felt to be sufficiently mature to
be able to say with confidence that it can live up to that standard
of stability.

However, GObject-Introspection has worked approximately the way it
currently works since at least 2008, and was apparently fine. I am less
familiar with the Rust bindings, but I believe they've worked the same way
they currently work since they were introduced to Debian in 2018. What has
changed? Have the goalposts been moved? I share Sebastian's concern that
if upstreams are led to believe that something has been fine for multiple
years, demanding that they put a significant amount of work into changing
how they operate is unlikely to lead to positive results. I already have
to spend a significant amount of time defending "weird Debianisms" even
in sitations where there is a compelling technical reason for what we do;
upstream goodwill is a finite currency, and I think we should prioritize
spending it in the ways that will give us the best return on investment.

Requiring GLib and GObject-Introspection to be upgraded in lockstep would
also limit our ability to test new versions of GLib in experimental,
which is something I have been putting a significant amount of work into
in recent years: at an early stage in the GLib release cycle, there is
usually no corresponding version of GObject-Introspection yet. If we
do not test development versions of important libraries like GLib, then
we will be stuck in the situation of always catching up with upstream,
and will be unable to respond to upstream changes quickly enough to have
influence over whether they are accepted, reverted or adjusted. If we
claim to be maintainers rather than mere packagers, which we do, then
we need to spend less time working with branches where it is already
too late to make significant changes.

> I feel like the right way to organise this upstream is for GLib itself
> to be building the bindings for itself (as Bastian Roucariès suggests).

Meanwhile, the language bindings for GLib and most GLib-based libraries
(for Rust, Python, JavaScript, Perl, Haskell, C++, etc.) have always been
separate from GLib itself. There are broadly two categories: the ones for
dynamic languages like Python, Perl and JavaScript that are brought into
existence at runtime on a just-in-time basis, which are not a problem in
this context because there is already an expectation that these languages
are dynamic, and the ones for compiled languages like Rust, Haskell and
C++, which get compiled and have a fixed API/ABI for all subsequent uses.

I for one am grateful that it is possible to be a GLib maintainer without
being proficient in Rust, Haskell, C++, D, Pascal and whatever other
statically-compiled languages people want to support. If GLib upstream
were to integrate the Rust bindings into GLib, therefore requiring
maintainers to be proficient in Rust, then I would no longer be able to be
an effective GLib maintainer. Even if I was proficient in Rust, requiring
maintainers to also know (for example) Haskell seems unrealistic.

I know some people would consider me to be irresponsible for not yet having
learned Rust to an expert level, and I apologise for only having a finite
amount of time available for Debian; but there are too many things in
my queue already, and the higher we put the bar for being a maintainer,
the smaller our potential contributor base gets.

As well as the scalability problems inherent in having each library
be responsible for explicitly supporting every language, the same
stability concerns as for GObject-Introspection apply here: GLib is a
mature library with a long-term stable API/ABI, but its Rust bindings
are relatively new and cannot guarantee stability on a scale of decades
(they haven't yet *existed* for decades).

The glibmm bindings into C++ are in a similar situation of being less
long-term-stable than GLib itself, and have had at least two intentional,
parallel-installable API/ABI breaks during the lifetime of GLib 2.x
(glibmm2.3 -> glibmm2.4 and glibmm2.4 -> glibmm2.68) even though GLib
itself has not. I expect that the Rust bindings will have to behave
similarly over time, to avoid being constrained by whichever early design
decisions turn out with hindsight to have been a poor choice.

> Alternatively, if the GLib bindings really need to be separate, then
> GLib could build the XML description of its APIs, include that in a
> package, then rust-glib-sys build-dep on that, include a Built-Using
> header and get binNMUed after every GLib update.

I think I explained earlier in this thread why it is not desirable
for the API of a rust-glib-sys package of the same upstream version to
change depending on the version of GLib that it happens to have been
built against.

    smcv


Reply to: