3) “仿制”既然不能很好地解决问题,那就来“嫁接”,就是设法在Linux上直接运行Windows应用软件的二进制映像。在这方面最重要的进展是开源软件Wine的开发。Wine在Linux内核和Windows应用程序之间提供一个适配层。它的上方为Windows应用程序提供Win32 API (实际上也包括16位界面),为应用程序提供以动态连接库为主的Windows运行环境。而其下方,则把本来应该是对Windows内核的系统调用翻译/转化成对Linux内核的系统调用。这样,Windows应用程序实质上是在一个模拟/仿真的Windows内核上运行,而Wine的主要功能就是在Linux内核外面实现对Windows内核的模拟/仿真。不过Wine的设计者不愿意别人认为Wine是个仿真器。这主要是因为“仿真器”这个词容易使人误解,以为是对CPU机器指令的仿真,那是效率非常低的,而Wine的效率确实比普通意义上的仿真要高得多。在过去几年中,Wine一直在稳步地发展,过不多久就会有个较新的版本发布。有几个公司,如Linspire、Xandros等,也在推出基于Wine的产品。一般是同时有两套版本,一套是开源的,另一套则包括一些不公开源码的优化和改进。
l
一个符合Windows设备驱动程序的特征和要求的框架,即Windows设备驱动框架,使得可以把多个Windows设备驱动模块装入内核,并使这些模块间的关系和运行条件跟它们在Windows内核中时相同。
l
一组由Windows内核导出(Export)函数界面(见Windows DDK)定义的导出函数。对于设备驱动程序而言,这些函数就相当于由内核提供的库函数。
l
Windows的系统调用界面。微软并没有公开它的系统调用界面,但是在“Windows NT/2000 Native API Reference”和其他资料中已经揭开了这个秘密。在Linux内核中实现Windows的系统调用界面,就相当于用汇编语言来实现另一种高级语言。这是因为,在内核里面,可以使用的“砖块”就不再是宏观的Linux系统调用,而是Linux的许多微观的内核函数了。