互換レイヤー
互換レイヤー(ごかんレイヤー、英: compatibility layer)とは、プログラムバイナリに互換性がないOSやコンピュータ・アーキテクチャ上において、エミュレーションやシステムコールの読み替え等の技法で互換性を提供するレイヤーである。
例
[編集]ソフトウェア
[編集]以下のような場合がある。
- 新しいハードウェアにおいて古いプログラムバイナリを動かす
- 古いハードウェアにおいて新しいプログラムバイナリを動かす
- 異なったアーキテクチャ用のプログラムバイナリを動かす(例:ARMマシンでx86用プログラムバイナリを動かす)
互換性がないOSのプログラムバイナリをエミュレーション実行する場合、エミュレーション実行されているシステムのシステムコールから、動かしているシステムのシステムコールに変換することでエミュレーションを行う。多くの場合、ライブラリについてのサポートを要する。実行されるバイナリの本来のシステム側のライブラリを必要とする場合が多いが、ホスト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のLinuxエミュレーションを使って実行するとRed Hat Linuxで実行した場合よりも速くなるものがあるという意見がある。[要出典]
逆に、似たようなシステムであっても、互換レイヤーの実装が複雑で不具合が多いこともある。好例はNetBSDにおけるIRIXバイナリ互換レイヤーである[3]。
ハードウェアには互換性があり、OSのみに互換性がない場合の互換レイヤーは、比較的簡素に作ることができ、性能上も有利であることが多い。それに対し、互換性がないハードウェアのバイナリを実行する場合は、互換レイヤーでプロセッサのエミュレーションまで行う必要があるなど、性能上も不利になることが多い。
参考文献
[編集]- ^ “Linux バイナリ互換機能 (FreeBSD ハンドブック)”. 2012年10月8日閲覧。
- ^ Charlie Russel, Microsoft MVP for Windows Server and Tablet PC (2002年2月18日). “Application Compatibility in Windows XP”. 2006年12月6日時点のオリジナルよりアーカイブ。2008年5月12日閲覧。
- ^ Emmanuel Dreyfus, ONLamp. “IRIX Binary Compatibility”. 2008年5月12日閲覧。