
EineBinärschnittstelle (englischapplication binary interface,ABI) definiert eine Schnittstelle zwischen zweiComputerprogrammen auf Maschinenebene. Ein Programm ist dabei meist dasBetriebssystem oder eineProgrammbibliothek.
Die Binärschnittstelle definiert, wie auf Ebene derMaschinensprache der Programmcode auszusehen hat, der eine solche Schnittstelle verwendet. Beispiele dafür sind die Reservierung von bestimmtenProzessorregistern für bestimmte Zwecke, die Richtung desStacks oder das Format vonGleitkommazahlen.
Eine Binärschnittstelle unterscheidet sich von einerProgrammierschnittstelle (englischapplication programming interface, API) darin, dass die Programmierschnittstelle eine Schnittstelle aufQuelltextebene 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 insBetriebssystem dar. Sie regelt Dinge wieAufrufkonventionen,Systemaufruftabellen, die Bedeutung vonSignalnummern 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 eineProgrammiersprache bzw. einen Compilertyp, da die Regeln, wie beispielsweise aus einerFunktionsdefinition einsymbolischer Name gebildet werden soll, sprachabhängig sind.
Ändert sich eine ABI, müssen alleProgramme, für die sie gilt, neu kompiliert werden – daher passiert dies sehr selten. Ein jüngeres Gegenbeispiel ist jedoch dieC++-ABI für denGNU-C++-Compiler, die sich zuerst vonVersion 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 vonIntel 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ürARM64-Prozessoren, um einen Fehler in derImplementierung von Prozeduraufrufen mit einemBitfeld zu beheben.[1]
Eine Binärschnittstelle füreingebettete Systeme wird auch alsEABI (embedded-application binary interface) bezeichnet.
1993 veröffentlichteMicrosoft dasComponent 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 demBetriebssystemWindows die Voraussetzungen verschiedene Softwarekomponenten in einem System anzusprechen und mit anderen Komponenten zu verknüpfen. Neben demObject Linking and Embedding (OLE), sindActiveX undDirectX Technologien, die auf dem COM-Modell basieren.[2]
Einige Technologien bauen auf COM auf, wie etwaObject Linking and Embedding (OLE), das eine Automatisierung von Anwendungen ermöglichte. Die Versionen vonVisual 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 vonMicrosoft-Office-Makros gewählt wurde.[3]
DieCommon Object Request Broker Architecture (CORBA) ist eine Spezifikation für objektorientierte, anwendungsneutrale Programme, die zwischen Anwendungsprogrammen vermitteln und dieplattformübergreifendeProtokolle undDienste definiert. Den Kern dieser Spezifikation bildet ein Vermittler, derObject Request Broker (ORB). In Kombination mit einerInterface Definition Language (IDL) und einem Binärprotokoll unterstützt CORBA den Binärstandard.
Object Linking and Embedding (OLE) ist ein vonMicrosoft entwickeltes Objektsystem undProtokoll, das die Zusammenarbeit unterschiedlicher (OLE-fähiger) Applikationen und damit die Erstellung heterogener Verbunddokumente ermöglichen soll. Während CORBAInteroperabilität im Zusammenhang mit einer IDL garantiert, definiert OLE selbst einen Binärstandard für den Zugriff auf Serverschnittstellen.