• Re: How to handle breakages when the size of a class in a shared lib in

    From Tobias Frost@21:1/5 to Pierre Gruet on Tue Jul 11 17:10:01 2023
    Hi Pierre,

    On Tue, Jul 11, 2023 at 04:10:49PM +0200, Pierre Gruet wrote:
    Dear Mentors,

    I maintain a package that builds a shared library. I uploaded a new upstream version of it to Debian, with no removed symbols, no ABI change... Fine.

    Unfortunately, it turns out fields were added to some class (of which size thus increased) in the shared library, so that binaries built against a previous version of it now segfault as they are not allocating enough space.

    Of course, rebuilding the reverse dependencies fixes the segfaults.
    How should we handle such situation in Debian? Quoting Policy 8.1:

    The SONAME and binary package name need not, and indeed normally
    should not, change if new interfaces are added but none are removed or
    changed, since this will not break binaries linked against the old
    shared library. Correct versioning of dependencies on the newer shared
    library by binaries that use the new interfaces is handled via the
    symbols or shlibs system.

    So my understanding is that no SONAME change and no transition are needed, although the rdeps indeed have to be rebuilt as their binaries _are_ broken by the new version of the library.

    In short: ABI change is not limited to removing symbols.
    Your library broke ABI by adding members, and would have required a SONAME bump.

    There is some guide what you can and cannot do in terms of ABI: https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C++

    There is a tool to check for breakage: https://lvc.github.io/abi-compliance-checker/
    (it is in Debian: https://tracker.debian.org/pkg/abi-compliance-checker)

    --
    Cheers,
    tobi

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Pierre Gruet@21:1/5 to All on Tue Jul 11 17:50:01 2023
    This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------Q3YWfeIt0ikCL48bGtpDWUhI
    Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64

    SGkgdG9iaSwNCg0KTGUgMTEvMDcvMjAyMyDDoCAxNjo1MiwgVG9iaWFzIEZyb3N0IGEgw6lj cml0wqA6DQo+IEhpIFBpZXJyZSwNCj4gDQo+IE9uIFR1ZSwgSnVsIDExLCAyMDIzIGF0IDA0 OjEwOjQ5UE0gKzAyMDAsIFBpZXJyZSBHcnVldCB3cm90ZToNCj4+IERlYXIgTWVudG9ycywN Cj4+DQo+PiBJIG1haW50YWluIGEgcGFja2FnZSB0aGF0IGJ1aWxkcyBhIHNoYXJlZCBsaWJy YXJ5LiBJIHVwbG9hZGVkIGEgbmV3IHVwc3RyZWFtDQo+PiB2ZXJzaW9uIG9mIGl0IHRvIERl Ymlhbiwgd2l0aCBubyByZW1vdmVkIHN5bWJvbHMsIG5vIEFCSSBjaGFuZ2UuLi4gRmluZS4N Cj4gDQo+PiBVbmZvcnR1bmF0ZWx5LCBpdCB0dXJucyBvdXQgZmllbGRzIHdlcmUgYWRkZWQg dG8gc29tZSBjbGFzcyAob2Ygd2hpY2ggc2l6ZQ0KPj4gdGh1cyBpbmNyZWFzZWQpIGluIHRo ZSBzaGFyZWQgbGlicmFyeSwgc28gdGhhdCBiaW5hcmllcyBidWlsdCBhZ2FpbnN0IGENCj4+ IHByZXZpb3VzIHZlcnNpb24gb2YgaXQgbm93IHNlZ2ZhdWx0IGFzIHRoZXkgYXJlIG5vdCBh bGxvY2F0aW5nIGVub3VnaCBzcGFjZS4NCj4+DQo+PiBPZiBjb3Vyc2UsIHJlYnVpbGRpbmcg dGhlIHJldmVyc2UgZGVwZW5kZW5jaWVzIGZpeGVzIHRoZSBzZWdmYXVsdHMuDQo+PiBIb3cg c2hvdWxkIHdlIGhhbmRsZSBzdWNoIHNpdHVhdGlvbiBpbiBEZWJpYW4/IFF1b3RpbmcgUG9s aWN5IDguMToNCj4+DQo+PiAgICBUaGUgU09OQU1FIGFuZCBiaW5hcnkgcGFja2FnZSBuYW1l IG5lZWQgbm90LCBhbmQgaW5kZWVkIG5vcm1hbGx5DQo+PiAgICBzaG91bGQgbm90LCBjaGFu Z2UgaWYgbmV3IGludGVyZmFjZXMgYXJlIGFkZGVkIGJ1dCBub25lIGFyZSByZW1vdmVkIG9y DQo+PiAgICBjaGFuZ2VkLCBzaW5jZSB0aGlzIHdpbGwgbm90IGJyZWFrIGJpbmFyaWVzIGxp bmtlZCBhZ2FpbnN0IHRoZSBvbGQNCj4+ICAgIHNoYXJlZCBsaWJyYXJ5LiBDb3JyZWN0IHZl cnNpb25pbmcgb2YgZGVwZW5kZW5jaWVzIG9uIHRoZSBuZXdlciBzaGFyZWQNCj4+ICAgIGxp YnJhcnkgYnkgYmluYXJpZXMgdGhhdCB1c2UgdGhlIG5ldyBpbnRlcmZhY2VzIGlzIGhhbmRs ZWQgdmlhIHRoZQ0KPj4gICAgc3ltYm9scyBvciBzaGxpYnMgc3lzdGVtLg0KPj4NCj4+IFNv IG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBubyBTT05BTUUgY2hhbmdlIGFuZCBubyB0cmFu c2l0aW9uIGFyZSBuZWVkZWQsDQo+PiBhbHRob3VnaCB0aGUgcmRlcHMgaW5kZWVkIGhhdmUg dG8gYmUgcmVidWlsdCBhcyB0aGVpciBiaW5hcmllcyBfYXJlXyBicm9rZW4NCj4+IGJ5IHRo ZSBuZXcgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4NCj4gDQo+IEluIHNob3J0OiBBQkkgY2hh bmdlIGlzIG5vdCBsaW1pdGVkIHRvIHJlbW92aW5nIHN5bWJvbHMuDQo+IFlvdXIgbGlicmFy eSBicm9rZSBBQkkgYnkgYWRkaW5nIG1lbWJlcnMsIGFuZCB3b3VsZCBoYXZlIHJlcXVpcmVk IGEgU09OQU1FDQo+IGJ1bXAuDQo+IA0KPiBUaGVyZSBpcyBzb21lIGd1aWRlIHdoYXQgeW91 IGNhbiBhbmQgY2Fubm90IGRvIGluIHRlcm1zIG9mIEFCSToNCj4gaHR0cHM6Ly9jb21tdW5p dHkua2RlLm9yZy9Qb2xpY2llcy9CaW5hcnlfQ29tcGF0aWJpbGl0eV9Jc3N1ZXNfV2l0aF9D KysNCg0KVGhhbmsgeW91IHNvIG11Y2ggZm9yIHlvdXIgcXVpY2sgYW5zd2VyISBJIHdpbGwg cmVhZCB0aGlzLg0KDQo+IA0KPiBUaGVyZSBpcyBhIHRvb2wgdG8gY2hlY2sgZm9yIGJyZWFr YWdlOiBodHRwczovL2x2Yy5naXRodWIuaW8vYWJpLWNvbXBsaWFuY2UtY2hlY2tlci8NCj4g KGl0IGlzIGluIERlYmlhbjogaHR0cHM6Ly90cmFja2VyLmRlYmlhbi5vcmcvcGtnL2FiaS1j b21wbGlhbmNlLWNoZWNrZXIpDQo+IA0KDQpUaGF0J3MgcmlnaHQsIGFmdGVyIHNlZWluZyB0 aGUgc2VnZmF1bHRzIEkgcmFuIGFiaS1jb21wbGlhbmNlLWNoZWNrZXIgDQphbmQgaXQgY29y cmVjdGx5IGZsYWdnZWQgdGhlIGlzc3VlLi4uDQoNClRoYW5rcyBhZ2FpbiBmb3IgdGhlIGV4 cGxhbmF0aW9uLg0KDQpCZXN0IHJlZ2FyZHMsDQoNCi0tIA0KUGllcnJlDQo=

    --------------Q3YWfeIt0ikCL48bGtpDWUhI--

    -----BEGIN PGP SIGNATURE-----

    iQIzBAEBCgAdFiEEM8soQxPpC9J9y0UjYAMWptwndHYFAmStedUACgkQYAMWptwn dHYsVBAAkAtLi9Mb27NnZg86vd+Z+fOhdVPjdTcc0vJ+a9/dKWk//JeNNcEwAvYE gVLneBpasGW9kukVfU72+SSfKvIMhtMqe1r4dpZbhGHLhSIRciFB04LfIrGiE9uN DeHjjAu3wZQdIw9jISjFs/o3evRlE8cDBkDmxSGu8yL+3V21KtqaC13483gYwhaz 2LJvGbQpQVHjcm/nWNXXF1gZjqZ6JU46w8ZoOjaQKIkLuSu5IKcG206pfLYhdugA 6u5ShfelTIEIID1DDhuSHJ3cBcaaBKfAMng0OuCrOMRDngYNPuKTyn7Xh6I/80w+ jJajhGVvlS+MtbHk5iP2hSOAOn/Rk5QcRHvLhd/n4xnxJzEn4vCBnF7f5ifEm1lJ woogc8BzvVL8rVwX8rIwRc0p08ESbRj0f2vavcpl0MZeD6eh+Mj5WDytaOXBSF8k Snmf9h6z1hc194gtIZbuzDJEddbawv2TF41vLz4MmtvCfNQgF89ixUSHX1rNpm+7 39w1/EaXKK/lwH1QploBcZJTKxLlC6fMoIU+XZtRY3DKieb9S3MFc7XYerfxcocD aEghb36z6ARdiN9xqKSWcEdTPxOebn6duY+T3/cD4GvMpg2e91eiySHwAo5RTfhw ozILeqAF6SMaUWILDkl7Rs2u366RCRWKfKsovD/ynTd3sOvkVjI=
    =WWOy
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Andrey Rakhmatullin@21:1/5 to Pierre Gruet on Tue Jul 11 17:50:01 2023
    On Tue, Jul 11, 2023 at 04:10:49PM +0200, Pierre Gruet wrote:
    I maintain a package that builds a shared library. I uploaded a new upstream version of it to Debian, with no removed symbols, no ABI change... Fine.
    Tobias already explained that there was actually an ABI change, but...

    How should we handle such situation in Debian? Quoting Policy 8.1:

    The SONAME and binary package name need not, and indeed normally
    should not, change if new interfaces are added but none are removed or
    changed, since this will not break binaries linked against the old
    shared library. Correct versioning of dependencies on the newer shared
    library by binaries that use the new interfaces is handled via the
    symbols or shlibs system.

    So my understanding is that no SONAME change and no transition are needed, although the rdeps indeed have to be rebuilt as their binaries _are_ broken by the new version of the library.
    ... I want to add that "the rdeps indeed have to be rebuilt" means, by definition, that an ABI change happened. It's not similar to adding a
    symbol when the same SONAME may mean different symbol lists but you can
    say "this binary needs at least this version of the library", it's a true
    ABI breakage like with removing a symbol, when old binaries only work with
    the old library, which the quote is about.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Sune Vuorela@21:1/5 to Pierre Gruet on Wed Jul 12 08:50:02 2023
    On 2023-07-11, Pierre Gruet <pgt@debian.org> wrote:
    Unfortunately, it turns out fields were added to some class (of which
    size thus increased) in the shared library, so that binaries built
    against a previous version of it now segfault as they are not allocating enough space.

    Either you need to do a packagename change (and debian specific SONAME
    iwth all that entails; or maybe there is a way to restore the old abi.
    Can you provide a full diff of header,implementation of the relevant
    classes ?

    /Sune

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Paul Wise@21:1/5 to Sune Vuorela on Thu Jul 13 06:00:01 2023
    On Wed, 2023-07-12 at 06:49 +0000, Sune Vuorela wrote:

    Either you need to do a packagename change (and debian specific SONAME
    iwth all that entails; or maybe there is a way to restore the old abi.
    Can you provide a full diff of header,implementation of the relevant
    classes ?

    You can also obtain an ABI diff using abipkgdiff (from abigail-tools) and pkg-abidiff (not in Debian). These are complementary tools, use both.

    https://github.com/lvc/pkg-abidiff

    --
    bye,
    pabs

    https://wiki.debian.org/PaulWise

    -----BEGIN PGP SIGNATURE-----

    iQIzBAABCgAdFiEEYQsotVz8/kXqG1Y7MRa6Xp/6aaMFAmSvdgkACgkQMRa6Xp/6 aaNTRQ//bxhtZSEwgNtqqGDuERrDPW7phydSdQdwoRf0bjrEpYzMCqrhiqEIG+d2 375hgwiVPwxhpk6RPtqcIrW5a+CRLTNuVqlrLbAhnWy9rgfJq9Kp89pnI+6HnB99 D2JzMgukDq58D/HKs8hluJNBTRn+Uf9RnV3051J4Sp4CjNa9R4zCDFtC7bWngyU/ t0eYnFW+9UXpdyfR0Pj/I0oDcPyrJPVbhCwViXbVi7jqihRm8tyyiYRotFgEw1vF NYE+RUXeVae2cGt1S3iH9o/wUyMb4prWkxLRwg9frOAXRPyJKo38j6zsT4DbdAB2 ruQ9bdHmwDe85jIbTjIGk6dUfK1/2vqxZ+QQgxW2IdBEeJb8Be9ut4mChe1pG2iV 6TrjXAuzCayZFcNfTAx+EPNRnoYn+0pFJEqyi9KmX703kqz1QLgqJYr3lnG5okFe PRmDxMf4NaXUzjQBYwGdXKIiVRMp7EztlRAhviODsvhAAqFdPg3yhrmXKjysEQkp XYy/VBLUgxMI10G6hH1yboX5JEqhs8lR0k+80LO7eN3fjpTzMX0pmElDfA1r4JYN E0+8HpoGYnk8+pEowURNXv13q0nALKEMzOJjwlSXoTn7ik4QQIDbBPYbdwK4TjF3 hjoZrNnpQc6kwq5DAnt1Fp5mdXuYUfNivmP3IF82/FVvHl9nJx4=
    =ImzU
    -----END PGP SIGNATURE-----

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)