複製鏈接
請複製以下鏈接發送給好友

兼容內核

鎖定
兼容內核(Linux Unified Kernel,簡稱Longene),是一個二進制兼容Windows和Linux應用軟件設備驅動程序的計算機操作系統內核。它試圖在Linux內核的基礎上利用Linux內核材料構建MS Windows內核功能模塊從而擴充Linux內核的支持能力使之同時支持Linux和Windows的應用程序和設備驅動。兼容內核主要以C語言編寫,以GNU通用公共許可證授權使用。雖然兼容內核還處在初期開發階段,但許多Windows程序已經可以在其上運行。
中文名
兼容內核
外文名
Linux Unified Kernel
簡    稱
Longene
性    質
計算機操作系統內核

兼容內核特性

兼容內核項目在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項目提供。

兼容內核開發

兼容內核是由中國的浙大網新有限公司在2005年9月發起的自由軟件項目。作為項目負責人,毛德操先生提出了項目的設想和和開發路線。他寫了一系列闡述具體實現兼容內核的文章,這些文章的彙編為兼容內核白皮書。根據的兼容內核白皮書,兼容內核開發的主要工作是在Linux內核中實現"一個框架和兩個界面":
一個符合Windows設備驅動程序的特徵和要求的框架,即Windows設備驅動框架,使得可以把多個Windows設備驅動模塊裝入內核,並使這些模塊間的關係和運行條件跟它們在Windows內核中時相同。
一組由Windows內核導出(Export)函數界面(見Windows DDK)定義的導出函數。對於設備驅動程序而言,這些函數就相當於由內核提供的庫函數。
Windows的系統調用界面。微軟並沒有公開它的系統調用界面,但是在"Windows NT/2000 Native API Reference"和其他資料中已經揭開了這個秘密。在Linux內核中實現Windows的系統調用界面,就相當於用匯編語言來實現另一種高級語言。這是因為,在內核裏面,可以使用的"磚塊"就不再是宏觀的Linux系統調用,而是Linux的許多微觀的內核函數了。
兼容內核項目的成果為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內核材料加以實現。
歷史版本
版本
發行時間
新增特性
可運行的軟件
0.1.0
2006.4.30
基於軟中斷“int 2e”的Windows系統調用(syscalls)機制
測試軟件
0.2.0
2006.12.31
Windows線程/進程機制
Windows APC機制
單線程應用軟件
0.2.1
2008.2.4
進程/線程管理
虛擬內存管理
同步
對象管理
內置的。exe應用軟件裝入功能
多線程應用軟件
0.2.2
2008.10.31
安全機制
圖形界面(GUI)的安裝程序
-
0.2.2-1
2008.12.17
修正上一版本的錯誤
-
0.2.3
2009.2.12
Windows註冊表機制
-
0.2.4
2009.?
文件系統整合
-
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設備驅動框架---基本的設備驅動框架對應着Win2k內核中的I/O管理,以及電源管理、即插即用等機制,也涉及部分對象管理、系統配置、和安全管理方面的功能。。這個框架上面與有關文件操作的系統調用(open(),close(),read(),write(),ioctl()等)相銜接,中間實現基於"IO請求包"IRP(IO Request Packet)的設備驅動機制,下面則融入Linux內核的中斷響應/服務機制、包括"軟中斷"即bh函數的執行機制。主要包括設備驅動程序的動態裝入和連接的開發和實現、IRP的生成和傳遞、以及設備驅動程序的啓動、同步、和終結開發和實現、 將設備驅動程序的中斷服務登記嫁接到Linux的中斷機制上,將設備驅動程序所關心的Windows內核運行狀態映射到Linux內核的運行狀態上、 將設備驅動程序的DPC請求嫁接到Linux的bh函數機制上。
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能在其上運行。