簡介Wayland是什麼呢?它是X Window?還是要取代X Window?它的優勢在哪裏?Linux桌面/移動會因此有什麼變化?在本篇中,我將回顧歷史,展望未來,通過簡易的文字,來先回顧一下X Window,從而繼續解答Wayland。 古老的X Window和現代的桌面技術X Window在1984年由MIT研發,它的設計哲學之一是:提供機制,而非策略。舉個最簡單的例子吧:X Window提供了生成窗口(Window)的方法,但它沒規定窗口要怎麼呈現(map)或擺放(place),這個策略是由外部程序——窗口管理器 (Window Manager)所決定的。另外一個X Window的主要特點便是:Server/Client網絡模型。不論是本地、遠程的應用程序,都統一通過Server/Client模型來運作,比 如:讓遠程的應用程序跑在本地上。 X Window在推出之後快速演化,在1987年時候,其核心協議已經是第11版本了,簡稱:x11。這個版本已經將“提供機制,而非策略”這個哲學貫徹地非常徹底,以致於核心協議基本穩定,不需要特別大的改動。於是乎,你看到了,現在是2010年,整整23年了,X Window依然是X11。 你可能會詫異,23年了,X Window的核心都沒有特別大的變化,它能適應現代桌面的快速發展嗎?這就要再次提到X Window的設計優勢了,X Window在覈心層之外提供一個擴展層,開發者可以開發相應擴展,來實現自己的擴展協議,比方說:標準的Window都是矩形的,我如何用它來畫一個圓形的窗口?X Window協議並未提供,但是通過´shape¡這個擴展,X Window可以實現不規則的窗體 所以啊,這23年,X Window除了繼續完善核心協議、驅動以外,很大程度上,都是擴展使它保持“與時俱進”,比如說:
X Window的核心,基本上就是在處理Server/Client、驅動之類的,而外部的那些支持,基本上全是通過´擴展¡進行的。這沒什麼不好,X Window的結構設計精良,儘管是擴展,但它們沒有任何效能上的問題。通過擴展方便地實現了一些對新技術、新事物的支持,而且方便維護,這再好不過了。 所以你看到了儘管23年過去了,基於X Window的GNOME、KDE,還能保持與同期Windows、Mac OS X競爭甚至某些方面更好,你就不得不佩服這些前輩在最初設計時定下的設計哲學是多麼正確了。 雖然擴展的衆多沒有給X Window造成什麼問題,也跟X Window的設計哲學相符,但是其Server/Client的網絡構架,卻一直倍受質疑,這便是: X Window的效率問題經常聽到有人說,X Window的Server/Client結構嚴重影響效率,導致Linux桌面的效應速度一直不如Windows、Mac OS X。事實是不是這樣呢?讓我們還是透過原理來說話吧。 這張,便是當前X Window系統的架構圖,稍微解釋一下:
通過這些箭頭,你已經可以明白一些X Window的工作機制了,不過還從一個應用場景來解釋一下,想像一下,當你點擊了Firefox(X Client)的“刷新”按鈕,將會發生以下事情:
從這個過程,基本可以得出結論:
當然,這裏我沒有直接說明這種模式有沒有給X Window造成效率問題,因爲我們還少一個對照組。再看對照組之前,再來看看X Server的另一個趨勢: 從“什麼都做”到“做得越來越少”的X WindowX Window剛出現那會,主要提供一個在操作系統內核上的抽象層,來實現一個圖形環境。所謂圖形環境,最主要的便是:圖形+文字。當時的X Window便提供“繪圖”和“渲染文字”的機制。圖形桌面上的圖案和文字,都通過X Window合成並繪製出來。 一個典型的例子,如果你要用X來畫點,就要在你的程序中通過“XDrawPoint”來進行,X Server收到消息後,便會畫出相應的點。 現在,稍微接觸過圖形開發的人都知道了,在X Window下,一般都通過GTK+和Qt來進行了。更深一層的是,通過Cairo(Qt不是)來繪製圖形。Cairo是什麼?它是一個繪圖+渲染引擎,著名的瀏覽器Firefox,便是使用Cairo來渲染網頁和文字的。 Cairo是一個全能的、跨平臺的矢量繪圖庫,它不是簡單的包裝一下各個平臺的繪圖庫而已,儘管它最初是基於X Window開發出來的繪圖庫。現在Cairo支持各種不同的後端,來向其輸出圖形,比如X、Windows的GDI、Mac OS X的Quartz,還有各種文件格式:PNG、PDF,當然還有SVG。可以說,Cairo是一個很徹底的、全能的繪圖庫,現在無論繪製什麼圖形,都不會考慮到用XLib了。 在Cairo之上,還有文字排版庫:Pango,同樣很明顯的,處理文字排版,都不會用XFont之類的東西了,而是直接用Pango畫。當然Pango也是跨平臺的。 儘管在Linux平臺下,Cairo、Pango的發揮依然是基於X Window的,但X Window充其量僅僅是一個“backend”而已,並不是少它不行。同理,跨平臺的GTK+、Qt也只是視X爲其中所支持的後端之一,假如哪天X真的 不在了,更換一個新後端,當前的GNOME、KDE也能完整的跑起來。 再提另外一個比較典型的關於“X曾經做的,但現已不做”的例子,便是“模式設置(mode-setting)”,說通俗點,就是“分辨率的設置”,但後面會說明不僅僅如此。 大家都知道,Linux只是一個內核,它只有控制檯,通過Shell來進行交互,而控制檯默認是80×24(單位:字符)的,要進入分辨率1024×768或更高的圖形模式,就需要X進行一次“模式設置”,設置正確的分辨率等等。 儘管後來Linux也支持了各種用戶層(user-space)的模式設置,讓終端也支持標準的分辨率,但是X的模式設置與此是不相干的,所以一兩 年前,在Linux的啓動過程中,從終端進入圖形界面時,屏幕會“閃”一下,這時便在進行“模式設置”——這裏就一定要用“模式設置”這個術語了,因爲即 使終端是1024的,進入X圖形也是1024的,模式的變更還是要進行。 後來呢,嗯,2009年初期,KMS(內核模式設置)終於出現了!!!很少關心桌面圖形的Linux內核,在當時引入了“內核級”的模式設置,也就是說,在內核載入完畢、顯示驅動初始化後很短的時間內,即設置好標準的分辨率和色深,通過在X層做相應的更改,從此X的初始化就可以省去“模式設置”這一 過程了!也就是從Fedora 10開始,Linux的啓動非常平滑、漂亮,沒有任何閃爍了。現在的Ubuntu 10.10也一樣,KMS的應用已經相當成熟。 X從此又少了一樣圖形任務……“X淚奔~你們都不要我了。” 可以說,這20多年來,X從“什麼都做”已經到了“做的越來越少”。絕大多數的開發者開發圖形應用程序,已經可以完全無視X的存在了,X現在更像是一箇中間人的角色。那麼,X這個中間人會不會有一天,完全被其他事物所取代呢? 沒錯!它便是下篇要介紹的:Wayland!!! |
Wayland(1):X Window的前生今世
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.