互換レイヤー

互換レイヤー（ごかんレイヤー、）は、例えばコンピュータシステムの場合、本来は相互に互換性の無い、異なる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のプログラムを動かせる。
 macOS Big Sur以降のRosetta 2。Appleシリコン搭載MacでIntel Mac用プログラムを動かせる。

以上の例のようなものでは、ハードウェアをエミュレーションするのに比べ、簡単で高速に動作するものが多い。元の環境よりも速くなるというプログラムすら存在する。

逆に、似たようなシステムであっても、互換レイヤーの実装が複雑で不具合が多いものになることもある。その好例はNetBSDにおけるIRIXバイナリ互換レイヤーである。

以上のような、同一の（あるいは互換モードがある）ハードウェアで、中間層であるOSのみが異なる、というような場合の互換レイヤーは比較的「薄く」作ることができ、性能上も有利であることが一般的に多い。それに対し、異なるハードウェアのバイナリを実行するといったような場合は、互換レイヤーでプロセッサのエミュレーションまで行う必要があるなど、性能上も難しくなる。

参考文献

関連項目 
 ハイパーバイザ
 エミュレータ
 準仮想化
 グルーコード

システムソフトウェア
エミュレーションソフトウェア