API and ABI
Explaining basic terms
Application Binary Interface (ABI)
of a software library is the machine code level interface between this library and other libraries and programs using it.
The layout of data types in memory (classes, structures, unions, etc.) and calling conventions of the library symbols (layout of the calling stack, used registers, etc.) are the main parts of the library ABI.
Backward binary compatibility
(i.e. ABI compatibility
) allows old programs compiled with old versions of a library to run with newer versions without the need to recompile. This allows your users to upgrade easily to new versions of your software library.
Backward source compatibility
(i.e. API compatibility
) allows old programs to be recompiled successfully with newer versions of your library.
You need to verify and improve both binary and source compatibility of updates to easy life of the library users and let them upgrade.
You can check backward compatibility of your C/C++ API libraries manually by the open-source ABI Compliance Checker
and ABI Dumper
tools or automate the analysis of all release versions by the ABI Tracker
tool. For Java libraries you can use JAPICC
and JAPI Tracker
Please refer to ABI Viewer
if you'd like to visualize ABI differences and control binary compatibility in details.