毛德操:寫於龍井1.0釋出之際

發表於2014-01-09

幾經考慮,我們決定趕在進入2014年之前釋出龍井—即Linux相容核心的1.0版,要不然就要跟2.0版的釋出擠在一起了,因為我們在龍井2.0的研發方面也已經取得了不錯的進展。 

這裡所說的龍井1.0,是指把Wineserver移到Linux核心中,以提高Wine的執行效率。這幾年來,Wine已經有了長足的進步,對於在Linux核心上支援Windows應用的相容性和穩定性都有了不少提高。但是,Wine通過一個使用者空間的服務程式、即Wineserver、來提供虛擬的Windows系統呼叫介面,將其嫁接到Linux系統呼叫,終究是一個瓶頸。所以將Wineserver移入Linux核心,跟核心密切結合,是可以提高執行效率的。不過,如果只是簡單地把Wineserver從使用者空間程式變成一個核心執行緒,那麼效率的提高是很有限的,因為那樣Windows應用在執行過程中仍需頻繁進行執行緒排程。所以,把Wineserver移入核心,實際上意味著去掉Wineserver,把它所進行的處理拆散到各個使用者程式的上下文中。在這一方面,我們現在已經到了可以釋出1.0版的時候。我們現在也許還不能說凡是在Wine上可以跑的Windows應用都能在龍井1.0上跑得一樣穩定,但是就我們所測試的許多軟體來看確實都跑得很好。另外,龍井1.0不要求對核心打補丁,而可以單純作為一個可安裝模組裝載,這使龍井的部署安裝得到簡化,朋友們想要試試龍井就很簡單了。

不過龍井1.0與以前釋出的幾個版本有個顯著的不同。以前我們把對Windows裝置驅動的相容看得很重,所以竭力要在Linux核心中打造一個讓Windows裝置驅動看著很像Windows核心的環境。這在幾年前是很有道理的。比方說,那時候Intel曾有口號“決戰在客廳”,似乎Wintel陣營將在智慧家居方面大有作為,而這很可能意味著Windows裝置驅動的多樣化,因為要與各種各樣的裝置相接。但是,幾年來的實際情況卻是,“決戰在客廳”大概不會發生了,因為AA (ARM + Android)架構早已成為主流,而Android是執行在Linux核心上的。在這樣的情況下,考慮對Windows裝置驅動的相容就成為多餘了。所以,龍井1.0已經拋棄了力圖在核心中相容Windows裝置驅動的做法,那已經不再是我們的目標。就這一方面而言,龍井1.0在某種程度上可以說是在向Wine迴歸。

但是,能不能在AA架構的機器上既跨CPU架構又跨作業系統地直接執行Windows應用?進一步,能不能在其它非x86架構的機器上、並且在Linux上、也直接執行Windows應用?這比在x86架構的Linux核心中相容Windows裝置驅動有意思得多。試想,如果能在AA架構的平板電腦上裝上包括辦公軟體在內的各種Windows應用,那不是很好嗎?誠然現在Android上也已有了許多很好的軟體,但是對於一些“重量級”的應用人們還是習慣於Windows的那些軟體。這,就是龍井2.0要達到的目標。

要在ARM架構上直接執行Windows應用的x86架構二進位制映像,顯然得要模擬(Emulation)。有趣的是,Wine是“Wine is not an Emulator(Wine不是模擬器)”的縮寫,而以Wine為基礎的龍井2.0,卻就是要模擬。不過這模擬也並非簡單的模擬。大家知道QEMU是Linux上的一個開源的模擬器,在QEMU上是可以執行Wine的,但是試一下就可以知道慢得不能接受。事實上,QEMU解釋執行(即模擬)使用者空間的x86指令(包括Wine中的指令),只是一遇系統呼叫就轉入Linux核心,在那裡是以“原生態”全速執行的。一般的應用軟體都是在使用者空間執行的時間多,進入核心執行的時間少,所以就很慢。但是,如果我們能把這分界線往上推到Win API,要是能讓Windows應用的執行一進入Win API、即由Wine提供的那些DLL、就以“原生態”全速執行,那麼執行的速度應該可以顯著提高,因為大多數應用在執行時其實老是在DLL中打轉,而Wine那些DLL是可以編譯成ARM模式的。這樣,我們可以把Wine和QEMU結合起來,並把Wineserver移入核心,這樣應該就可以實現我們的目標,這就是我們龍井2.0的思路。為此我們在2012年起就做了大量的實驗。實驗表明,至少在時脈頻率可達1GHz的現代ARM處理器上,這是可行的。現在,龍井2.0的研發已經取得了很不錯的進展,像Excel、PPT這樣的軟體已經可以在ARM開發板上轉起來,速度當然要慢一些,但是可以接受。這個成果,我們以為,無論對於平板電腦和手機上的實際應用,還是對於CPU和作業系統的國產化,都是很有意義的。

以後我們將暫時維持龍井的兩個分支。一個是1.0分支,這是針對x86架構上的跨作業系統相容。另一個是2.0分支,這是針對既跨作業系統又跨CPU架構的相容。不過這只是一種過渡,一段時期之後還是都要整合在2.0分支中。這是因為,就我們的目標而言,都是在Linux上(不管是x86架構還是非x86架構)相容x86架構的Windows,支援Windows應用的直接執行,所以本質上是一致的。就所用的技術而言,則前者只是後者的一個子集,以後1.0分支的進展(例如來自Wine的進展)理應也體現在2.0分支中。

所以,請朋友們先玩玩龍井1.0,同時期待龍井2.0的釋出。當然,我們更希望朋友們能參與進來,和我們一起努力。

via : http://www.longene.org/techdoc/0644167001388447880.html 

相關文章