互換レイヤー(ごかんレイヤー、)とは、プログラムバイナリに互換性がないオペレーティングシステム (OS) やコンピュータ・アーキテクチャ上において、エミュレーションやシステムコールの読み替え等の技法で互換性を提供するレイヤーである。
例 ソフトウェア 以下のような場合がある。
新しいハードウェアにおいて古いプログラムバイナリを動かす 古いハードウェアにおいて新しいプログラムバイナリを動かす 異なったアーキテクチャ用のプログラムバイナリを動かす(例:ARMマシンでx86用プログラムバイナリを動かす)
互換性がないOSのプログラムバイナリをエミュレーション実行する場合、エミュレーション実行されているシステムのシステムコールから、動かしているシステムのシステムコールに変換することでエミュレーションを行う。多くの場合、ライブラリについてのサポートを要する。実行されるバイナリの本来のシステム側のライブラリを必要とする場合が多いが、ホストOS側のライブラリを使用されるようなシステムもある。 *BSDにおけるLinux互換レイヤー。Linux ディストリビューションのライブラリーを用いて Linux バイナリを動かす。 Wine。WindowsのバイナリをUnix系システムで動作させる。 Windows XPの互換モード。Windows 98やMS-DOSのアプリケーションを動かせる。
Windows 10 Anniversary Update以降のWindows Subsystem for Linux。WindowsでLinuxのプログラムを動かせる。 Mac OS X(10.4以前)のClassic環境。Mac OS 9のプログラムを動かせる。 Mac OS X v10.4~Mac OS X v10.6のRosetta。Intel Mac上でPowerPC用プログラムを動かせる。 macOS Big Sur以降のRosetta 2。Appleシリコン搭載MacでIntel Mac用プログラムを動かせる。
以上のようなものでは、ハードウェアをエミュレーションするのに比べ、簡単で高速に動作するものが多い。元の環境よりも速くなるというプログラムすら存在する。
逆に、似たようなシステムであっても、互換レイヤーの実装が複雑で不具合が多いこともある。好例はNetBSDにおけるIRIXバイナリ互換レイヤーである。
ハードウェアには互換性があり、OSのみに互換性がない場合の互換レイヤーは、比較的簡素に作ることができ、性能上も有利であることが多い。それに対し、互換性がないハードウェアのバイナリを実行する場合は、互換レイヤーでプロセッサのエミュレーションまで行う必要があるなど、性能上も不利になることが多い。
参考文献
関連項目 ハイパーバイザ エミュレータ 準仮想化 グルーコード