Application Binary Interface
Application Binary Interface(アプリケーション・バイナリー・インタフェース、ABI)とは、アプリケーションプログラムと基本ソフトウェアであるオペレーティングシステム (OS) の間の低レベルのインタフェースを意味する。あるいはアプリケーションとライブラリ、あるいはアプリケーション内の部品間のインタフェースもABIと言うことがある。
ABIはアプリケーションプログラミングインタフェース (API) とは異なる。APIはソースコードとライブラリ間のインタフェースを定義したものであり、同じAPIをサポートしたシステム間では同じソースコードをコンパイルして利用できる。一方、ABIはオブジェクトコードレベルのインタフェースであり、互換ABIをサポートするシステム間では変更無しで同じ実行ファイルを動作させることができる。
[編集] 概要
ABIには、以下のような定義が含まれる。
- CPU - 命令セット、エンディアンなど。
- 呼出規約 - 関数の引数がどのように渡され、リターン値がどのように渡されるかを定義したもの。
- システムコール - システムコール番号と具体的なシステムコールの仕組み。
- 実行ファイルやライブラリの詳細なフォーマット(UNIXならば、COFFやELFなど)。
Intel Binary Compatibility Standard (iBCS) のような完全なABIでは、OSが何であれ、そのABIをサポートしたシステム間でプログラム(実行ファイル)を全く修正せずに動作させることができる。他のABIとして例えばC++の名前修飾や呼び出し規則があるが、あくまでも同じプラットフォーム上のコンパイラ間のABIであり、プラットフォーム間の互換性までは要求されない。
[編集] ABI共通化の試みとその成果
Unix系OSでは、同じハードウェアプラットフォーム上で非互換な複数のOSが動作する。
例えばRISCチップにおいては以下のような例がある。
最も互換Unix系OSが多いのは、IA-32系であろう。それらOS間でABIを定義して相互にアプリケーションが動作できるようにしようという試みがいくつかあった。しかし、そのような計画が成功したことはない。Linuxにおいては、Linux Standard Baseが同様の試みを行っている。
一方、採用ベンダ数が多く、複数のUnix系OSが乱立していたMIPS系においては、何度もABIの共通化を目指した試みがなされている。
例えば、1990年代中盤~後半にかけてUNIXワークステーション/サーバにおいて、MIPS系CPUを採用したNEC(UX/4800)、SONY(NEWS-OS)、住友電工(EWS4800などのNECからのOEM品とSUMIStation),日本タンデムコンピュータ(MIPS系だったNonStopServer)によるOCMP (Open Computing Environment for MIPS Platform) が定義され、シェアの維持など一定の成果を挙げた。OCMPはMIPS-ABIの日本語対応の側面とAPバスの標準化による周辺デバイスの共通化の側面がある。
[編集] 関連項目
- プログラミング (コンピュータ)
- 不透明ポインタ (英: Opaque Pointer)