互換レイヤー(ごかんレイヤー、英: compatibility layer)とは、プログラムバイナリに互換性がないOSやコンピュータ・アーキテクチャ上において、エミュレーションやシステムコールの読み替え等の技法で互換性を提供するレイヤーである。
例
ソフトウェア
以下のような場合がある。
- 新しいハードウェアにおいて古いプログラムバイナリを動かす
- 古いハードウェアにおいて新しいプログラムバイナリを動かす
- 異なったアーキテクチャ用のプログラムバイナリを動かす(例:ARMマシンでx86用プログラムバイナリを動かす)
互換性がないOSのプログラムバイナリをエミュレーション実行する場合、エミュレーション実行されているシステムのシステムコールから、動かしているシステムのシステムコールに変換することでエミュレーションを行う。多くの場合、ライブラリについてのサポートを要する。実行されるバイナリの本来のシステム側のライブラリを必要とする場合が多いが、ホストOS側のライブラリを使用されるようなシステムもある。
以上のようなものでは、ハードウェアをエミュレーションするのに比べ、簡単で高速に動作するものが多い。元の環境よりも速くなるというプログラムすら存在する。たとえば、LinuxのアプリケーションにはFreeBSDのLinuxエミュレーションを使って実行するとRed Hat Linuxで実行した場合よりも速くなるものがあるという意見がある。[要出典]
逆に、似たようなシステムであっても、互換レイヤーの実装が複雑で不具合が多いこともある。好例はNetBSDにおけるIRIXバイナリ互換レイヤーである[3]。
ハードウェアには互換性があり、OSのみに互換性がない場合の互換レイヤーは、比較的簡素に作ることができ、性能上も有利であることが多い。それに対し、互換性がないハードウェアのバイナリを実行する場合は、互換レイヤーでプロセッサのエミュレーションまで行う必要があるなど、性能上も不利になることが多い。
参考文献
関連項目