互換レイヤー(ごかんレイヤー、英: compatibility layer)は、例えばコンピュータシステムの場合、本来は相互に互換性の無い、異なるOS用のバイナリを動かすとか、新しいハードウェアにおいて古いプログラムを動かす、あるいは、古いハードウェアにおいて新しいプログラムを動かすといったような場合、あるいは異なったアーキテクチャ、ARMマシンでx86用バイナリを動かす、といったような場合に、エミュレーションやシステムコールの読み替え等の技法で、差異を吸収して互換性を提供する、というレイヤーを指す語である。 他の OS のプログラムバイナリをエミュレーション実行するといったような場合、システムコールをエミュレーション実行されているシステムのものから動かしているシステムのものに変換することでエミュレーションを行う。多くの場合、ライブラリについて何らかのサポートを要する(実行されるバイナリの本来のシステム側のライブラリを必要とする場合が多いが、ホストOS側のライブラリを使用されるようなシステムもある)。 以上の例のようなものでは、ハードウェアをエミュレーションするのに比べ、簡単で高速に動作するものが多い。元の環境よりも速くなるというプログラムすら存在する。@media screen{.mw-parser-output .fix-domain{border-bottom:dashed 1px}}たとえば、LinuxのアプリケーションにはFreeBSDのLinuxエミュレーションを使って実行するとRed Hat Linuxで実行した場合よりも速くなるものがあるという意見がある。[要出典] 逆に、似たようなシステムであっても、互換レイヤーの実装が複雑で不具合が多いものになることもある。その好例はNetBSDにおけるIRIXバイナリ互換レイヤーである[3]。 以上のような、同一の(あるいは互換モードがある)ハードウェアで、中間層であるOSのみが異なる、というような場合の互換レイヤーは比較的「薄く」作ることができ、性能上も有利であることが一般的に多い。それに対し、異なるハードウェアのバイナリを実行するといったような場合は、互換レイヤーでプロセッサのエミュレーションまで行う必要があるなど、性能上も難しくなる。
例
ソフトウェア
*BSDにおけるLinux互換レイヤー。Linux ディストリビューションのライブラリーを用いて Linux バイナリを動かす[1]。
Wine。WindowsのバイナリをUnix系システムで動作させる。
Windows XPの互換モード。Windows 98やMS-DOSのアプリケーションを動かせる[2]。
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用プログラムを動かせる。
参考文献^ “ ⇒Linux バイナリ互換機能 (FreeBSD ハンドブック)”. 2012年10月8日閲覧。
^ Charlie Russel, Microsoft MVP for Windows Server and Tablet PC (2002年2月18日). “Application Compatibility in Windows XP
^ Emmanuel Dreyfus, ONLamp. “ ⇒IRIX Binary Compatibility”. 2008年5月12日閲覧。
関連項目
ハイパーバイザ
エミュレータ
準仮想化
グルーコード