X Window從邏輯上分爲三層:X Server、X Client和X協議。最底層的X Server(X服務器)主要處理輸入/輸出信息並維護相關資源,它接受來自鍵盤、鼠標的操做並將它交給X Client(X客戶端)做出反饋,而由X Client傳來的輸出信息也由它來負責輸出;最上層的X Client則提供一個完整的GUI界面,負責與用戶的直接交互(KDE、GNOME都是一個X Client)。X協議則是銜接X Server與X Client的通信協議,它的任務是充當這二者的溝通管道。儘管UNIX廠商採用相同的X Window,但終端的X Client並不相同。linux
在X Window系統中進行圖形編程時,能夠選擇直接使用Xlib。Xlib其實是對底層X協議的封裝,可經過該函數庫進行通常的圖形輸出。對通常用戶而言,因爲Xlib的接口太原始並且複雜,所以通常的圖形程序選擇其餘高級一些的圖形庫做爲基礎。好比GTK、QT等等。這兩個函數庫同時仍是一些高級的圖形用戶界面的支持函數庫。程序員
KDE早於Gnome出現,可是KDE基於的Qt是不遵循GPL開源協議的,Qt是一個跨平臺的C++圖形用戶界面庫 ,它是挪威TrollTech公司的產品(2008年末被NOKIA收購)。 Qt具備優良的跨平臺特性(支持Windows、Linux、各類UNIX、OS390和QNX等)、面向對象機制以及豐富的API,同時也可支持2D/3D渲染和OpenGL API。在當時的同類圖形用戶界面庫產品中,Qt的功能最爲強大。但底層的基礎 Qt倒是一個不遵循GPL的商業軟件,這就給KDE上了一道無形的枷鎖並帶來可能的法律風險。一大批自由程序員對KDE項目的決定深爲不滿,它們認爲利用非自由軟件開發違背了GPL的精神。因而這些GNU的狂熱信徒兵分兩路:其中一部分人去製做Harmonny,試圖重寫出一套兼容Qt的替代品,這個項目雖然技術上相對簡單,但卻沒有得到KDE項目的支持;另外一路人馬則決定從新開發一套名爲「GNOME(GNU Network Object Environment)」的圖形環境來替代KDE。編程
GNOME選擇徹底遵循GPL的GTK圖形界面庫爲基礎,所以咱們也通常將GNOME和KDE兩大陣營稱爲GNOME/GTK和 KDE/Qt。與Qt基於C++語言不一樣,GTK採用較傳統的C語言 ,雖然C語言不支持面向對象設計,看起來比較落後,但當時熟悉C語言的開發者遠遠多於熟悉C++的開發者。加之GNOME/GTK徹底遵循GPL版權公約,吸引了更多的自由程序員參與。服務器
爲了方便開發人員編寫X-clients,就有了Xlib來封裝X協議;Xlib還不夠方便,因而就有了QT和QTK,它們提供了不少窗口控件(widgets)。爲了方便用戶 ,就出現了Gnome和KDE等桌面管理系統。通常來講,linux用戶看到的界面就是其中之一了。Gnome用的是QTK庫,KDE用的是QT庫。函數