Longene是一個源自中國的自由、開源的作業系統項目,目的是要把Linux的核心擴充成一個既支持Linux套用、也支持Windows套用,既支持Linux設備驅動、也支持Windows設備驅動的兼容核心;使用戶可以直接在Linux作業系統上高效運行Windows套用。
基本介紹
- 外文名:Longene
- 性質:作業系統項目
- 策略:核內差異核內補
- 目的:提高軟體運行的性能和效率
- 發布時間:2006年2月15日
- 所屬公司:浙大網新有限公司
簡介,特點,特性,開發,開發策略和線路,歷史版本,現在和未來的開發,可利用的資源,架構支持,
簡介
通過Longene,原來習慣於windows操作習慣的用戶可以在Linux上延續他們的操作習慣。用戶購買的第三方軟體可以變成與作業系統無關,對於用戶來說,本來是一旦購買了Windows的套用軟體,從此只能選擇Windows作業系統,而現在卻還可以有選擇,這對於Linux當然是意義重大,可以提高桌面Linux的市場競爭力。
Longene開發組是由浙大網新資助的開源項目,並遵守GPL規定公開公原始碼。
特點
Longene與Wine
Longene和Wine的目標相同,手段有差異,簡而言之,Wine的策略是“核內差異核外補”,Longene的策略是“核內差異核內補”(具體參見項目白皮書)。相比Wine,Longene的重點是提高軟體運行的性能和效率,包括解決核心驅動兼容的問題。Wine在套用層實現的Dll將一直是 Longene項目的基石,同為開源軟體,兩者將是“攜手發展,共同促進”的關係。
Longene-0.3.0是一個具有里程碑意義的版本,Longene徹底擺脫了wineserver進程的依賴,在核心實現了wine的調用申請,現在對wine的依賴只是dll和部分program,因此我們不再提供針對Wine的補丁,而是提供一份Wine For Longene的代碼。Longene-0.3.0包括3部分代碼:Linux核心補丁(Linux-2.6.30)、Longene模組代碼、Wine For Longene(wine-1.0-longene)。
Longene-0.3.0的運行效率與Wine相比有很大地提高(這正是Longene存在的意義之一),具體效率測試請見官方網站。
Longene-0.3.0已在Ret Hat Enterprise 5.1, Ubuntu 9.04, Ubuntu10.04, Fedora 12, Redflag 6, Magic Linux 2.5-1測試通過,如你的發行版不再上述列表中,請將Longene的運行情況告訴我們,我們將十分感謝!
Longene-0.3.0的發布,可以從數據上驗證了“核內差異核內補”思想的正確性,也是對項目開發初期某些對項目有質疑的愛好者最好的解釋,也是對這些年來堅持參與開發的人員,最欣慰的成果。雖然Longene-0.3.0在性能上表現優異,但是我們還是要看到在安裝、穩定性、兼容度等方面存在的問題,這些還需要我們持之以恆地加以最佳化和改進。我們歡迎廣大的作業系統愛好者關注、參與到項目開發中來,真正把這個chinese base的開源項目發展壯大,成為國際性的項目,為Linux的發展添磚加瓦。
特性
兼容核心項目在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項目提供。
在Linux核內空間實現Windows核心機制方案的優點開發快速。Linux核心已有成熟的CPU管理、記憶體管理、磁碟管理和外圍硬體管理等功能模組及其實現函式。採用擴充Linux核心,通過嫁接(重定向)或重用Linux核心相關功能函式等方法實現Windows核心功能的方案要比從零開始編碼實現Windows核心的方案要快很多。
兼容性好,效率高。在核內空間實現Windows核心機制比在核外實現能夠達到更大的兼容性。相比在核外利用宿主作業系統的API來構建Windows的API,在核內空間可以利用細小的核心材料來實現Windows的API。因核心函式顆粒度比API小,其靈活性更大仿製能力更強因而能夠達到更好的兼容性。另外,Windows進程、執行緒、系統調用等在核內運行能夠避免在核外運行帶來的用戶空間到核心切換額外的消耗,因而相比更有效率。在核內實現Windows核心機制與本地的Windows核心開發方法是一致的,能夠克服核外無法實現Windows某些功能的缺點。
能夠實現Windows驅動。
能夠使用全套MS Windows庫檔案。Linux和MS Windows庫檔案是通過軟中斷(Linux為“int 0x80”,MS Windows為“int 0x2e”)進入核內進行系統調用的。兼容核心在核心開發能夠為之設定與Linux和MS Windows中斷號相同的兩套獨立的系統調用以最大程度兼容MS Windows環境,使得MS Windows系統全套本地的用戶空間庫檔案(.dll)能夠在兼容核心上運行。這給開發調試帶來方便,也給計畫和已經轉向Linux系統的持有MS Windows使用許可證的機構和個人帶來好處。
兼容核心主要是在Linux的核心模組(LKMs)中實現的,這使它像應用程式的外掛程式一樣很容易載入和卸載。
裁剪方便。實現Windows的API和驅動機制後,可以在不影響系統正常運行的情況下裁剪去除與Windows無關的Linux部分而只保留Windows功能,縮減體積以適應某些記憶體較小的設備。
開發
兼容核心是由中國的浙大網新有限公司在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核心材料加以實現。
歷史版本
一個早期的版本,unifiedkernel-2.6.13,於2006年2月15日發布。該版本實現了Windows系統調用機制。
版本 | 發布日期 | 更新 | |
---|---|---|---|
0.1.0 | 2006年4月30日 | 移植kernel-win32 Windows系統調用機制基於"int 2e" | |
0.2.0 | 2006年12月31日 | 實現了Windows的進程/執行緒創建 運行部分Windows的APC機制 | |
0.2.1 | 2008年2月4日 | 實現了Windows的進程/執行緒管理 虛擬記憶體管理 同步管理 對象管理 載入EXE功能 | |
0.2.2 | 2008年10月31日 | Token機制 GUI安裝程式 | |
0.2.2-1 | 2008年12月17日 | 修正錯誤 | |
0.2.3 | 2009年2月12日 | 移植Wine的註冊表管理機制 | |
0.2.4 | 2009年5月22日 | 移植wine的檔案管理系統 實現了一些註冊管理的API binary packages for popular distributions provided | |
0.2.4.1 | 2009年8月31日 | 基於Linux核心2.6.30 支持新的檔案系統 (ext4及其他) | |
0.3 | 2010年5月31日 | 移植所有wineserver的功能到核心及擺脫wineserver | |
0.3.1 | 2011年2月28日 | 支持非root用戶使用 支持程式中文路徑 | |
0.3.2 | 2011年6月8日 | 支持wineconsole。Windows平台的console程式,像cmd.exe可以像這樣運行了:wineconsole cmd.exe 改進了進程的創建方式,使得windows的native-app 和 wine的一些buitin-app可以互相創建了 | |
1.0-rc1 | 2013年12月31日 | 完全修改了整個架構,Longene不再需要核心補丁 Longene終於支持了SMP 安裝更方便,兼容性更好,穩定性更強 | |
1.0-rc2 | 2014年1月16日 | 解決普通用戶重啟後無法使用的問題 解決若干檔案許可權問題 修改檔案載入方式 其他若干BUG |
現在和未來的開發
項目組正在為兼容核心加入對SMP的支持以提高兼容核心的運行速度。因為SMP比較複雜,此特性可能要較長時間才能實現。但在13年底終於支持。兼容核心開發人員已經對Windows設備驅動框架進行了討論,NidsWrapper的代碼移植到兼容核心的工作已經開展。預計不久將進行實現Windows設備驅動框架的開發工作
兼容核心項目的成果產物為Linux核心補丁。兼容核心開發組希望這些補丁最終融入Linux標準核心。為此兼容核心開發組正在削減對Linux核心主體代碼的修改,儘量把兼容核心代碼放到Linux核心模組(LKMs)中以滿足Linux標準核心的可剝離性要求。
兼容核心還將進行下面的主要工作:
修正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。
架構支持
IA-32 (支持中)
x86-64 (不支持, 計畫中)
龍芯3 (不支持, 計畫中) -- Loongson 3是一種MIPS-64 64-bit構架的通用CPU,它計畫包含二百多條指令以便硬體仿真x86 CPU指令,從而使其能夠運行Windows。