兼容内核

更新时间:2024-02-24 00:38

兼容内核(Linux Unified Kernel,简称Longene),是一个二进制兼容Windows和Linux应用软件设备驱动程序的计算机操作系统内核。它试图在Linux内核的基础上利用Linux内核材料构建MS Windows内核功能模块从而扩充Linux内核的支持能力使之同时支持Linux和Windows的应用程序和设备驱动。兼容内核主要以C语言编写,以GNU通用公共许可证授权使用。虽然兼容内核还处在初期开发阶段,但许多Windows程序已经可以在其上运行。

特性

兼容内核项目在Linux内核的基础上利用Linux内核材料构建一个Windows内核环境(包括进程管理、线程管理、对象管理、虚拟内存管理、同步、系统调用、系统注册机制和设备驱动程序框架等Windows系统内核机制),形成一个新的内核,使Linux和Windows应用程序和设备驱动程序能够直接在其上运行。

兼容内核不是Linux内核和Windows内核的简单堆砌。为了防止兼容内核变得臃肿,如果一个功能可以用利用ReactOS(Windows的开源仿制品)代码实现,也可以利用Linux内核函数通过编程实现(ReactOS、Wine、NDISwrapper代码作为参考),兼容内核倾向采用后一种实现方法。

兼容内核有两套系统调用(syscalls)及其相应的系统调用表(syscall table):一套为Windows系统调用,另一套为Linux系统调用。Windows应用程序通过软中断“int 0x2e”访问系统调用表进行Windows系统调用。Linux应用软件则通过软中断“int 0x80”访问系统调用表进行Linux系统调用。

兼容内核项目不计划开发Windows和Linux的在用户空间运行的库文件(.dll和.o文件)。这些库文件由WINE项目(或MS Windows/ReactOS项目)和Linux项目提供。

开发

一个符合Windows设备驱动程序的特征和要求的框架,即Windows设备驱动框架,使得可以把多个Windows设备驱动模块装入内核,并使这些模块间的关系和运行条件跟它们在Windows内核中时相同。

一组由Windows内核导出(Export)函数界面(见Windows DDK)定义的导出函数。对于设备驱动程序而言,这些函数就相当于由内核提供的库函数。

兼容内核项目的成果为Linux内核补丁。兼容内核的开发者期望这些补丁最终融入Linux标准内核成为Linux内核标准的一部分。那样擅长开发Windows应用程序和设备驱动的开发者就可以很方便地为linux平台开发软件或把他们的产品移植到linux平台。对于Windows软件开发公司来说,只需要开发维护一个代码库就可以实现跨平台,这将降低软件跨平台所带来的成本,增加这些公司把产品移植到Linux平台的意愿。这些公司与Linux用户都将从兼容内核项目直接受益。

开发策略和线路

兼容内核采用渐进方式进行开发,它以已经能正常运行的Wine和NDISWrapper为开发始点,通过开发自身的Windows内核功能模块替换Wine中相应的功能模块来实现Windows系统调用相关功能;通过改造和扩充NDISWrapper来实现Windows设备驱动框架;通过利用嫁接(重定向)等方法实现Windows内核导出函数。具体开发策略和线路如下:

Windows系统调用 兼容内核以Wine为开发始点,兼容内核开发在核内运行的内核功能模块来替代Wine中在用户空间运行的功能模块,并通过对Wine打补丁使Windows应用软件转而使用兼容内核功能模块。即是:如果兼容内核已经实现了该功能,则使用兼容内核提供的功能;否则使用Wine提供的功能。每替换了一些Wine的功能模块,经调试测试稳定后就可以发行一个兼容内核版本。这个发行版本又是下一个版本的开发始点,周而复始直到把Wine的所有功能模块被兼容内核模块替代。兼容内核开发不限于替代Wine功能模块,Wine在用户空间受技术限制不能实现的功能兼容内核也要加以实现。 Windows设备驱动框架 NDISWrapper已经在Linux内核中实现了一个WDM的雏形,而ReactOS则已有一个基本可以运行的Windows设备驱动框架。兼容内核将以NdisWrapper为开发始点,借鉴ReactOS的代码对NdisWrapper进行改造和扩充以实现Windows设备驱动框架。 Windows内核导出函数 ReactOS和NdisWrapper已经有一个基本的Windows内核导出函数集合。兼容内核在这个基本集合的基础上逐步实现的自身的Windows内核导出函数。具体实现方法是如果Linux内核中有对应物的可以通过映射(重定向)/嫁接(适配)的方法连接到Linux内核中的对应物上,小部分在Linux内核中没有对应物则需要利用Linux内核材料加以实现。

历史版本

unifiedkernel-2.6.132006年2月15日兼容内核项目发布了unifiedkernel-2.6.13版本,该版本实现了Windows系统调用机制。

0.1.02006年4月30日兼容内核项目开发组发布了0.1.0版本,该版本把Kernel-win32移植到上一版本的兼容内核。通过移植(部分是重新实现)kernel-win32到兼容内核,部分win32系统调用已可用。测试这些系统调用的Windows测试程序已经能在兼容内核上运行。

0.2.02006年12月31日兼容内核项目开发组发布了0.2.0版本。该版本实现了的Windows的进程/线程创建,包括NtCreateThread( )和NtCreateProcess( )在内的Windows系统调用,某些应用程序已经能在真实的内核进程和线程中运行。这个版本提供了一个装入PE格式执行文件的模块,Windows进程能够被Linux和Windows父进程创建,而不再需要wine-preloader的支持。一些单线程应用程序已经可以在兼容内核上运行。

0.2.12008年2月4日兼容内核项目开发组发布了0.2.1版本。该版本实现了Windows系统的进程/线程管理、对象管理、虚拟内存管理以及进程间同步管理等Windows系统的基本机制。 一些原生Win32多线程应用程序 (包括Microsoft Office 2000, Securecrt 5.0, Dream Weaver 8, WinRar和Acrobat Reader 5)已经可以在兼容内核上直接运行。

0.2.22008 年10月31日兼容内核项目开发组发布了兼容内核0.2.2版本。该版本提供了一些安全机制并在0.2.1版的基础上修正了包括进程/线程管理,虚拟内存管理等方面的错误,在稳定性和兼容性上有了较大的提高。另外该版本还升级了附带的Wine的内置dll版本到1.0版,并修正了一些其中窗口管理、中文支持等的错误。

0.2.2-12008年12月8日兼容内核项目开发组发布了兼容内核0.2.2-1版本。该版本没有增加新特性,它修正了0.2.2版本部分进程/线程创建和退出的错误,解决了内存相关的一些问题。

0.2.32009年2月12日兼容内核项目开发组发布了兼容内核0.2.3版本。该版本在0.2.2-1版的基础上将Wine的注册表管理机制整体移植到内核,使得应用程序运行效率有了一定的提高。

现在和未来的开发

文件系统集成工作已经完成,兼容内核项目组正在对它进行测试。因为文件系统集成测试仍在进行当中,0.2.3版本使用了Wine的读写模块进行文件读写操作。由于Wine采用客户/服务器的方式进行文件读写因而它的文件存取效率是很低的。兼容内核项目组希望在文件系统集成工作最终完成后Windows程序在兼容内核上存取文件达到其在MS Windows上的相同效率。

兼容内核项目的成果产物为Linux内核补丁。兼容内核开发组希望这些补丁最终融入Linux标准内核。为此兼容内核开发组正在削减对Linux内核主体代码的修改,尽量把兼容内核代码放到Linux内核模块(LKMs)中以满足Linux标准内核的可剥离性要求。

兼容内核还将进行下面的主要工作:

准备兼容内核的DEB和RPM安装包。 修正pthread() TLS。 实现Windows设备驱动框架。 实现Windows DPC机制。 实现Windows DDK定义的内核导出函数。

可利用的资源

兼容内核不是从零开始编程的,它是在其他项目已有的代码基础上进行开发的。它对这些项目进行集成和再发展。兼容内核项目可利用的资源包括Linux kernel、Reactos、Wine、kernel-win32和NDISwrapper等,它们都是开源项目源代码可以自由取得。

Linux

兼容内核是基于Linux内核的。它在Linux可加载内核模块(LKMs)中实现它的功能。与ReactOS项目从零开始编码实现Windows内核不同,兼容内核是利用Linux内核中丰富的内核功能函数来实现Windows内核功能的。其实现Windows机制的主要途径如下:Windows系统调用接口的实现--一些Windows的系统调用可以通过嫁接(重定向)到适当的Linux系统调用或部分重用相应的Linux内核函数来实现,,另一些在Linux内核中没有对应物的功能则需要使用Linux低级的核内函数来实现。

Windows的设备驱动模块(.sys文件)--微软持有版权的.sys文件基本上是一些标准的、基本的、常用的外部设备,包括磁盘、USB、图形设备、网络设备等的设备驱动模块。Linux实际上已经具备相应的功能,只是需要将Linux内核(包括设备驱动模块)中的这些函数和数据结构与具体.sys的调用界面之间架起桥梁。但是也可能有一些微软的.sys模块在Linux内核中找不到对应物,那就需要仿制了。

Windows设备驱动支撑界面--多数设备驱动界面函数(以及数据结构)在Linux内核中都有对应物,需要做的就是把所需的支撑函数和数据结构通过映射(重定向)/嫁接(适配)落实到相应的Linux内核函数和数据结构上,包括一些适配的工作。也有些函数在Linux内核中没有较为接近的对应物,那就要用Linux内核中的各种素材加以搭建。

ReactOS

ReactOS是一个MS Windows内核的开源仿制品。与兼容内核利用Linux内核材料构建Windows内核的开发路线不同,它是完全从零开始编码制作Windows内核的。和兼容内核一样ReactOS只是一个内核,它依赖Wine项目的用户空间库文件使整个系统能够运行。兼容内核参考ReactOS的代码实现Windows内核的基本机制,包括进程/线程管理机制,内存管理机制,驱动系统框架等。

Wine

Wine在用户空间实现了一个把Windows程序对Windows API调用转向Linux API调用的兼容层,这个兼容层还负有Windows内核的进程/线程管理等的职能。虽然Wine和兼容内核均利用内核材料构建Windows API机制,但具体的实现方法是不同的,兼容内核是在内核空间利用Linux内核的核内函数来实现的,而Wine利用的是宿主操作系统的API来实现。另外兼容内核是在核内利用内核函数实现进程管理、线程管理、对象管理、虚拟内存管理、同步、系统调用、系统注册机制和设备驱动程序框架等Windows基本机制的,而Wine是在用户空间实现这些功能的。虽然兼容内核采取的技术线路与Wine的不相同,但Wine的实现方法还是可以能为兼容内核提供借鉴的,而Wine对Windows内核有关数据结构的研究成果则可以直接被兼容内核利用。Windows用户空间库文件(.dll文件)虽然不是内核的一部分,但它们是操作系统能够运行应用软件不可或缺的部分。Windows用户空间库文件数量众多,Wine项目花了大量的精力仿制了这些文件。兼容内核只实现Windows内核相关功能,它依赖Wine提供Windows用户空间库文件。大多数Wine的dll文件可以直接用在兼容内核上。兼容内核已经实现进程/线程管理、对象管理、虚拟内存管理等功能,但还有部分功能没有实现。在过渡时期,兼容内核利用Wine来提供它还没有实现的功能。

Kernel-win32

Kernel-Win32是一个试图把Wine的部分模块移入Linux内核以提高Wine的运行效率的项目。兼容内核利用(部分是重实现)kernel-win32项目代码实现了兼容内核的Windows系统调用机制。NDISwrapper

NDISWrapper在Linux内核中实现了Windows内核的一些部件,包括NTOSKRNL API(一个基本的WDM控制器)和一系列诸如把Wireless/NDIS/USB/PnP等的Windows系统调用转向Linux系统调用的封装。NDISWrapper不限于执行NDIS驱动,只要WDM驱动不调用它还未实现的Windows系统调用也是可以运行的。因此可以认为NDISWrapper是一个WDM的雏形。兼容内核可以参考NDISWrapper和ReactOS的WDM实现构建自己的WDM。

用户

MagicLinux - MagicLinux是一个基于Red Hat Linux的中文Linux发行版。MagicLinux 2.1之兼容内核衍生版是第一个内置兼容内核的发行版,它包含兼容内核0.2.2版本。

硬件需求

兼容内核最低的硬件需求是:

128MB RAM IDE或SATA 硬盘 VGA兼容显示卡 PS/2或USB键盘 PS/2或USB鼠标

架构支持

x86 (可用) Loongson 3 (计划) -- Loongson 3是一种MIPS-III 64-bit构架的通用CPU,它计划通过包含二百多条指令来硬件来仿真x86 CPU指令,从而使得MS Windows能在其上运行。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}