アプリケーションバイナリインタフェース
アプリケーションバイナリインタフェース(ABI, 英: Application Binary Interface)とは、アプリケーション(ユーザ)プログラムとシステム(オペレーティングシステムやライブラリ)との間の、バイナリレベルのインタフェースである。また、アプリケーション相互間や、それらの部品(プラグイン等)とのバイナリインタフェースもある。
ABIはアプリケーションプログラミングインタフェース (API) とは異なる。APIはソースコードとライブラリ間のインタフェースを定義したものであり、同じAPIをサポートしたシステム間では同じソースコードをコンパイルして利用できる。一方、ABIはオブジェクトコードレベルのインタフェースであり、互換ABIをサポートするシステム間では同じ実行ファイルを変更無しで動作させることができる。
ABIには、以下のような定義が含まれる。
CPU - 命令セット、エンディアンなど。
データ - データ型、大きさ、配置(アラインメント)など。
呼出規約 - 関数の引数がどのように渡され、リターン値がどのように渡されるかを定義したもの。
システムコール - システムコール番号と具体的なシステムコールの仕組み。
実行ファイルやライブラリの詳細なフォーマット(UNIXならば、COFFやELFなど)。
Intel Binary Compatibility Standard (iBCS) のような完全なABIでは、オペレーティングシステム (OS) が何であれ必要な共有ライブラリが存在するなどの前提条件が満たされていれば、そのABIをサポートしたシステム間でプログラム(実行ファイル)を全く修正せずに動作させることができる。
他のABIとして例えばC++の名前修飾や例外の伝播や呼出規約があるが、あくまでも同じプラットフォーム上のコンパイラ間のABIであり、プラットフォーム間の互換性までは要求されない。