アプリケーションバイナリインタフェース
Unix系OSでは、同じハードウェアプラットフォーム上で非互換な複数のOSが動作する。
例えばRISCチップにおいては以下のような例がある。
POWER系 : AIX 5L / Solaris10g / Linux等
MIPS系 : UX/4800 / Irix 等
Itanium系 : HP-UX / Linux 等
最も互換Unix系OSが多いのは、IA-32系であろう。それらOS間でABIを定義して相互にアプリケーションが動作できるようにしようという試みがいくつかあった。しかし、そのような計画が成功したことはない。Linuxにおいては、Linux Standard Base(LSB)が同様の試みを行っている(LSBはABI以外にも多くの規定を試みている)。
一方、採用ベンダ数が多く、複数のUnix系OSが乱立していたMIPS系においては、何度もABIの共通化を目指した試みがなされている。
例えば、1990年代中盤〜後半にかけてUNIXワークステーション / サーバにおいて、MIPS系CPUを採用したNEC(UX/4800)、Sony(NEWS)、住友電工(EWS4800などのNECからのOEM品とSUMIStation)、日本タンデムコンピュータ(MIPS系だったNonStopServer)によるOCMP (Open Computing Environment for MIPS Platform) が定義され、シェアの維持など一定の成果を挙げた。OCMPはMIPS-ABIの日本語対応の側面とAPバスの標準化による周辺デバイスの共通化の側面がある。
EABI (Embedded Application Binary Interface) とは、組み込みシステムのソフトウェアについてのファイルフォーマット、データ型、レジスタ使用法、スタックフレームの構成、関数の引数渡し方法などについての規約を意味する。
あるEABIをサポートするコンパイラで生成したオブジェクトコードは、同じEABIをサポートする別のコンパイラで生成したコードと互換性があり、コンパイラが異なっていても同じEABIに対応していればライブラリやオブジェクトコード間でリンク可能である。アセンブリ言語でコードを書く場合でもEABIに準拠するように書けば、他のコードとのリンクが保証される。
EABIと汎用OS向けABIとの主な違いは、アプリケーションのコードでも特権命令の使用が許されている点、ダイナミックリンクが要求されない点(完全に不可能とされている場合もある)、メモリを節約するためスタックフレームをなるべくコンパクトに構成している点が挙げられる。
EABIが広く使われているCPUアーキテクチャとしては、PowerPC、ARM、MIPSがある。
EABIの選択は性能に影響することがある。