Package: debhelper
Version: 13
Severity: wishlist

We recently had some crash bugs reported against GNOME (#958017, #958025)
which turned out to involve a minimal partial upgrade from stable to
testing/unstable.

On one hand, partial upgrades from stable to testing/unstable need to
be at least vaguely supported (working well enough to run maintainer
scripts), because they will exist as transitional states during a full
upgrade (in particular, from oldstable to stable after the testing
distribution gets released) - so if particular combinations of packages
that can't work together are identified, then that's a bug, and in
principle we should fix it, either by tightening positive and negative
dependencies (mainly Depends and Breaks) or by changing code to make it
more tolerant.

On the other hand, arbitrary partial upgrades from stable to
testing/unstable are not feasible to support with finite developer
effort available, because there's a combinatorial explosion of possible
combinations of packages. So, pragmatically, we should not encourage
users to perform partial upgrades, and the majority of bugs of that
class will go undetected and unfixed.

One type of partial upgrade that is particularly problematic (which did
happen in the case of #958017) is if the user selects some but not all
of the binary packages built by a source package for upgrade. This is
not something that the upstream developers of a package are ever going
to support, and I don't think it's something that Debian should make any
attempt to support either, because it's very common for interdependent
binary packages from the same source to "know" that they are installed
with matching versions, and make use of assumptions or implementation
details that are outside the package's public interface.

pango in #958017 was a good example: the various libraries built by
src:pango1.0 share headers like pango/pango-fontset-private.h, and will
crash if they don't all agree on the struct layouts in those headers.

I've fixed this in src:pango1.0 (and several other GNOME libraries,
not uploaded yet) by adding a d/shlibs.local that gives the libraries
lockstep dependencies on each other, but I can't help thinking this is
something that debhelper could be doing for us.

Two implementation options spring to mind:
- generate a shlibs.local (possibly by altering an existing,
  hand-written shlibs.local) and pass that to dpkg-shlibdeps -L;
- postprocess the dpkg-shlibdeps output to convert
  LIBNAME (>= x) into LIBNAME (= ${binary:Version}) for each
  LIBNAME that is a binary package built by this source

Does this seem a reasonable debhelper feature?

Thanks,
    smcv

Reply via email to