There are two types of ABI changes: ones that are backward-compatible and ones 
that are not. An ABI change is backward-compatible if any reasonable program or 
library that was linked with the previous version of the shared library will 
still work correctly with the new version of the shared library. 15 Adding new 
symbols to the shared library is a backward-compatible change. Removing symbols 
from the shared library is not. Changing the behavior of a symbol may or may 
not be backward-compatible depending on the change; for example, changing a 
function to accept a new enum constant not previously used by the library is 
generally backward-compatible, but changing the members of a struct that is 
passed into library functions is generally not unless the library takes special 
precautions to accept old versions of the data structure.

ABI changes that are not backward-compatible normally require changing the 
SONAME of the library and therefore the shared library package name, which 
forces rebuilding all packages using that shared library to update their 
dependencies and allow them to use the new version of the shared library. For 
more information, see Run-time shared libraries.

----
The run-time shared library must be placed in a package whose name changes 
whenever the SONAME of the shared library changes. This allows several versions 
of the shared library to be installed at the same time, allowing installation 
of the new version of the shared library without immediately breaking binaries 
that depend on the old version. 2

Normally, the run-time shared library and its SONAME symlink should be placed 
in a package named librarynamesoversion, where soversion is the version number 
in the SONAME of the shared library. Alternatively, if it would be confusing to 
directly append soversion to libraryname (if, for example, libraryname itself 
ends in a number), you should use libraryname-soversion instead. 3


https://www.debian.org/doc/debian-policy/ch-sharedlibs.html

Reply via email to