Bundling EFL library packages

Andreas Metzler ametzler at bebt.de
Sat Feb 22 17:26:04 GMT 2020


On 2020-02-22 Ross Vandegrift <rvandegrift at debian.org> wrote:
> On Thu, Feb 20, 2020 at 02:48:01PM +0100, Andreas Metzler wrote:
>> I think you forgot to list the biggest downside: soname bumps are hard
>> to handle properly unless the soname is bumped upstream in lockstep over
>> all libraries (probably uselessly, since not all of them will break the
>> ABI at the same time.)

> Yes, this is the biggest risk.  Weird that I didn't mention it.  Here
> are some factors that I think mitigate the risk:

> - Since the merge in 1.8, upstream has said that versions and sonames of
>   components must be kept in sync.  They've stuck with it since then,
>   and it was reiterated at [1].

> - EFL components can use one another's private interfaces.  Hence the
>   requirement that they all be the same version.  So if one lib breaks
>   an interface, all consumers in EFL must be adapted to the new api/abi.
>   This makes it more likely that most components actually do need a
>   soname bump at the same time.

Pretty strong arguments for merging.

>> Consider this:
>> 
>> Status quo (version 1.0) libfoo1, libbar1
>> Proposal: libfooandbar1 (includes libfoo.so.1 and libbar.so.1)
>> 
>> Now with release 2.0 libfoo has an ABI break, bumping the soname to
>> libfoo.so.2.  With a regular setup you simply change the package name to
>> match the soname
>> libfoo2, libbar1
>> and upgrades work without any special handholding since libfoo2 and
>> libfoo1 are co-installable. With a bundled package things get
>> complicated, starting with the question whether you'll change the
>> packagename to libfoo2bar1 or keep the original one. If you
>> kept the original name you would need to come up with some magic to
>> prevent libfoo2bar1 2.0 fullfilling the dependency of the binary
>> package linkedagainstfooandbar on libfooandbar1 (>= 1.0). I currently
>> cannot think of a useful way to do this so I think a new packagename
>> will be needed. libfoo2bar1 would Conflicts or Breaks and
>> Replaces libfooandbar1. This could be done with a virtual package.

> Yea, it get complicated.  I think I understand.

> We could rename libefl1 -> libefl1a -> libefl1b, etc.  Each rename would
> Conflicts & Replace the previous name.

> And one stable release cycle could include multiple library bumps.  Is
> this where the virtual package would come in?  For example, libefl-abi-5
> would retain all of the Conflicts & Replaces on previous releases to
> ensure a stable release containing libefl1a could be upgraded to a
> stable release with libefl1d.

The virtual package would[1] make the Breaks/Conflicts maintenance-free and
keep it short.

Instead of
Package: libefl1

Package: libefl1a
Breaks: libefl1
Replaces: libefl1

Package: libefl1b
Breaks: libefl1, libefl1a
Replaces: libefl1, libefl1a
etc.

you do
Package: libefl1
Provides: efl-lib-bundle
Breaks: efl-lib-bundle
Replaces: efl-lib-bundle

Package: libefl1a
Provides: efl-lib-bundle
Breaks: efl-lib-bundle
Replaces: efl-lib-bundle

Package: libefl1b
Provides: efl-lib-bundle
Breaks: efl-lib-bundle
Replaces: efl-lib-bundle

Regarding Breaks/Conflicts I /think/ [2] the weaker form (Breaks) would
be sufficient and therefore the right thing. We do not need to prevent
simultaneous unpacking of libefl1 and libefl1a.

[1] [2] Untested. And needs a second pair of eyes. :-)

cu Andreas
-- 
`What a good friend you are to him, Dr. Maturin. His other friends are
so grateful to you.'
`I sew his ears on from time to time, sure'



More information about the Pkg-e-devel mailing list