From Fedora Project Wiki

No edit summary
No edit summary
Line 1: Line 1:
== Introduction ==
== Introduction ==


When a new version of an ELF shared library (that we shall name L) is installed on the system, it's critically important that its [http://en.wikipedia.org/wiki/Application_binary_interface Application Binary Interface] (a.k.a ABI) stays compatible with the ABI of its previous version.  That compatibility ensures that ELF binaries, that [https://en.wikipedia.org/wiki/Linker_%28computing%29 dynamically link] with *L*, keep seeing the ABI they expect from that library L.  Otherwise, if the ABI of the new version of L is incompatible of with the ABI expected by the binaries that link with it, subtle and sometimes hard to debug runtime errors follow.
When a new version of an ELF shared library (that we shall name L) is installed on the system, it's critically important that its [http://en.wikipedia.org/wiki/Application_binary_interface Application Binary Interface] (a.k.a ABI) stays compatible with the ABI of its previous version.  That compatibility ensures that ELF binaries, that [https://en.wikipedia.org/wiki/Linker_%28computing%29 dynamically link] with L, keep seeing the ABI they expect from that library L.  Otherwise, if the ABI of the new version of L is incompatible of with the ABI expected by the binaries that link with it, subtle and sometimes hard to debug runtime errors follow.


As maintainers of a package that contains the shared library L, its our duty to ensure that the ABI of the new version L stays compatible with the ABI of the former version L.
As maintainers of a package that contains the shared library L, its our duty to ensure that the ABI of the new version L stays compatible with the ABI of the former version L.

Revision as of 10:47, 18 November 2015

Introduction

When a new version of an ELF shared library (that we shall name L) is installed on the system, it's critically important that its Application Binary Interface (a.k.a ABI) stays compatible with the ABI of its previous version. That compatibility ensures that ELF binaries, that dynamically link with L, keep seeing the ABI they expect from that library L. Otherwise, if the ABI of the new version of L is incompatible of with the ABI expected by the binaries that link with it, subtle and sometimes hard to debug runtime errors follow.

As maintainers of a package that contains the shared library L, its our duty to ensure that the ABI of the new version L stays compatible with the ABI of the former version L.

Thus, comparing the ABI of the new version of a package against its previous version is critical to detect possible incompatibilities, review them and file relevant bugs upstream, should the need arise. That comparison should be part of the normal update process followed by maintainers of packages that contain ELF libraries.

Hands on

There are two main tools tailored for comparing the ABIs of packages: abipkgdiff and abi-compliance-checker