兼容层

在软件工程领域，兼容层是一个允许面向旧或异质系统的二进制文件运行在特定主机系统上的接口。这意味着将面向异质系统的系统调用转换为面向主机系统。有些函式庫会面向异质系统，这通常是为主机系统提供运行异质二进制文件的能力。而硬件兼容层工具允许。

软件 
一些例子：
 Wine，允许在类Unix系统上使用一个程序加载器和是现在DLL中的Windows API运行部分微软Windows二进制文件。
 Windows的应用程序兼容层（Application Compatibility Toolkit）能尝试运行编写拙劣或者为早期平台编写的应用程序。
 ，在Windows、Mac OS X和类Unix系统上以原生外观和体验运行某些Linux二进制文件。
 ，在Windows 98/Me运行Windows 2000/XP程序。
 ，在Windows、Mac OS X和Linux中运行基于68k的“经典”Mac OS程序。
 ，在Android系统上运行Apple iOS程序。
 ，转换Bionic到glibc调用的函数库。
 Darling，在Linux上尝试运行Mac OS X和Darwin二进制文件的转换层。
 内核中的兼容层
 FreeBSD的Linux兼容层，允许专为Linux构建的二进制文件在FreeBSD以与原生FreeBSD API层相同的方法运行FreeBSD还有一些类Unix系统的仿真，包括NDIS、NetBSD、PECoff、SVR4和FreeBSD对不同CPU的版本。
 NetBSD有一些类Unix系统仿真。
 Mach和Darwin二进制文件兼容，为NetBSD/powerpc和NetBSD/i386 。
 Windows Subsystem for Linux提供一个Linux兼容的内核接口，微软开发它并且不包含Linux代码，Ubuntu用户模式二进制文件运行在它上面。
 PEACE项目（也称COMPAT_PECOFF）为NetBSD提供Win32兼容层。此项目目前不活跃。

一个兼容层可以避免完全硬件仿真的复杂性和速度损失，某些程序更可能比原来运行更快。例如，某些Linux应用程序运行在FreeBSD的Linux兼容层上时，有时有可能会原运行在红帽Linux上更快；运行在Wine上的性能基准偶尔也可以比拟它在Windows操作系统的运行效率。

即使在类似的系统上，实现一个兼容层的细节也可能是相当复杂和麻烦；一个好例子是在NetBSD MIPS架構版本中的IRIX二进制兼容层。

兼容层需要主机系统的CPU能（向上）兼容异质系统。举例来说，微软Windows的兼容层不可能在PowerPC硬件上运行，因为Windows需要x86的CPU；对于这种情况，只能进行完全仿真。

硬件 
硬件兼容层工具涉及到硬件模拟。部分兼容层涉及到，因为接线可以对特定计算机总线提供一些兼容性。

参见 
 Hypervisor
 
 仿真器
 
 系统平台

参考资料

外部链接 
 Windows XP应用程序兼容技术（微软公司Dave Morehouse和Todd Phillips，2001年6月1日）