# Binärschnittstelle

Eine Binärschnittstelle (englisch application binary interface, ABI) definiert eine Schnittstelle zwischen zwei Computerprogrammen auf Maschinenebene. Ein Programm ist dabei meist das Betriebssystem oder eine Programmbibliothek.

## Funktionsweise

Die Binärschnittstelle definiert, wie auf Ebene der Maschinensprache der Programmcode auszusehen hat, der eine solche Schnittstelle verwendet. Beispiele dafür sind die Reservierung von bestimmten Prozessorregistern für bestimmte Zwecke, die Richtung des Stacks oder das Format von Gleitkommazahlen.
Eine Binärschnittstelle unterscheidet sich von einer Programmierschnittstelle (englisch application programming interface, API) darin, dass die Programmierschnittstelle eine Schnittstelle auf Quelltextebene definiert. Dadurch lässt sich der Quelltext auf verschiedenen Maschinen kompilieren, die die Programmierschnittstelle unterstützen. Die Binärschnittstelle dagegen erlaubt den Betrieb auf allen Systemen, die eine binärkompatible Schnittstelle zur Verfügung stellen, ohne dass ein Neukompilieren erforderlich wäre.
Die Binärschnittstelle stellt neben der Festlegung auf eine Architektur auch einen definierten Übergang vom Programm ins Betriebssystem dar. Sie regelt Dinge wie Aufrufkonventionen, Systemaufruftabellen, die Bedeutung von Signalnummern und so weiter. Es sollte möglich sein, dasselbe Programm im Binärformat auf allen Systemen laufen zu lassen, die dessen ABI unterstützen.
Eine ABI gilt manchmal nur für eine Programmiersprache bzw. einen Compilertyp, da die Regeln, wie beispielsweise aus einer Funktionsdefinition ein symbolischer Name gebildet werden soll, sprachabhängig sind.
Ändert sich eine ABI, müssen alle Programme, für die sie gilt, neu kompiliert werden – daher passiert dies sehr selten. Ein jüngeres Gegenbeispiel ist jedoch die C++-ABI für den GNU-C++-Compiler, die sich zuerst von Version 2.95 zu Version 3.0 änderte; auf Grund von Fehlern in dieser neuen ABI kam es bald darauf in der Version 3.1 zu einer weiteren Umstellung, die wiederum bald darauf durch die ABI der Version 3.2 abgelöst wurde, um zu anderen Compilern wie dem von Intel kompatibel zu sein. Da es kaum möglich ist, das System sanft an eine neue ABI anzupassen, lösten diese schnellen Wechsel viel Unmut aus. Der letzte ABI-Wechsel erfolgte mit Version 3.4 (freigegeben am 18. April 2004), welche auch in der aktuellen 4.x-Reihe des GCC Verwendung findet.
GCC 9 bedingte 2019 einen ABI-Wechsel für Code für ARM64-Prozessoren, um einen Fehler in der Implementierung von Prozeduraufrufen mit einem Bitfeld zu beheben.
Eine Binärschnittstelle für eingebettete Systeme wird auch als EABI (embedded-application binary interface) bezeichnet.

## Beispiele
### Component Object Model

1993 veröffentlichte Microsoft das Component Object Model (COM) für wiederverwendbare Objekte, die von anderen Anwendungen benutzt werden konnten. COM bietet eine sprachenunabhängige Kommunikation zwischen verschiedenen Software-Komponenten. Das COM-Modell schafft unter dem Betriebssystem Windows die Voraussetzungen verschiedene Softwarekomponenten in einem System anzusprechen und mit anderen Komponenten zu verknüpfen. Neben dem Object Linking and Embedding (OLE), sind ActiveX und DirectX Technologien, die auf dem COM-Modell basieren.
Einige Technologien bauen auf COM auf, wie etwa Object Linking and Embedding (OLE), das eine Automatisierung von Anwendungen ermöglichte. Die Versionen von Visual Basic, die nach 1993 veröffentlicht wurden, waren im Hinblick auf COM und OLE konzipiert worden. Dieser Ansatz war so erfolgreich, dass ein Dialekt der Sprache, Visual Basic for Applications (VBA), zur Programmiersprache von Microsoft-Office-Makros gewählt wurde.

### Common Object Request Broker Architecture

Die Common Object Request Broker Architecture (CORBA) ist eine Spezifikation für objektorientierte, anwendungsneutrale Programme, die zwischen Anwendungsprogrammen vermitteln und die plattformübergreifende Protokolle und Dienste definiert. Den Kern dieser Spezifikation bildet ein Vermittler, der Object Request Broker (ORB). In Kombination mit einer Interface Definition Language (IDL) und einem Binärprotokoll unterstützt CORBA den Binärstandard.

### Object Linking and Embedding

Object Linking and Embedding (OLE) ist ein von Microsoft entwickeltes Objektsystem und Protokoll, das die Zusammenarbeit unterschiedlicher (OLE-fähiger) Applikationen und damit die Erstellung heterogener Verbunddokumente ermöglichen soll. Während CORBA Interoperabilität im Zusammenhang mit einer IDL garantiert, definiert OLE selbst einen Binärstandard für den Zugriff auf Serverschnittstellen.