The binary interface defines what the program code has to look like at the machine language level that uses such an interface. Examples of this are the reservation of certain processor registers for certain purposes, the direction of the stack or the format of floating point numbers .
A binary interface differs from a programming interface (English application programming interface , API) in that the programming interface defines an interface at the source code level . This allows the source code to be compiled on different machines that support the programming interface. The binary interface, on the other hand, allows operation on all systems that provide a binary-compatible interface without the need to recompile.
In addition to the definition of an architecture, the binary interface also represents a defined transition from the program to the operating system. It regulates things such as calling conventions , system call tables , the meaning of signal numbers and so on. It should be possible to run the same program in binary format on all systems that support its ABI.
An ABI sometimes only applies to one programming language or one type of compiler, since the rules on how a symbolic name is to be formed from a function definition, for example , are language-dependent.
If an ABI changes, all programs for which it applies have to be recompiled - therefore this happens very rarely. A more recent counterexample, however, is the C ++ ABI for the GNU C ++ compiler , which first changed from version 2.95 to version 3.0; Due to errors in this new ABI, there was soon another change in version 3.1, which in turn was soon replaced by the ABI of version 3.2 in order to be compatible with other compilers such as the one from Intel . Since it is hardly possible to gently adapt the system to a new ABI, this quick change caused a lot of resentment. The last ABI change took place with version 3.4 (released on April 18, 2004), which is also used in the current 4.x series of the GCC.
A binary interface for embedded systems is also known as an EABI ( embedded-application binary interface ) .