Linux 為何不把圖形用戶界面寫入內核?


因為kernel是硬體抽象,與人機交互無關。

『系統『可以有完全不同的人機交互,但使用同一個硬體抽象。(比如巨型機和google glass)

GUI並沒有完美的解決方案的,隨著人機交互技術的發展,所謂GUI的形式會千變萬化,但kernel所提供的硬體抽象變化並不會很大,kernel開發者沒有必要管,也沒有能力管,等哪家公司開發了全息影象,還是可以用linux kernel來做硬體抽象,自己寫全息影象的子系統就行了。

其實關鍵還是解耦,正因為GUI完全從kernel中解耦出來了,所以在X Window的時代里,第三方可以在使用Linux硬體抽象的同時, 開發各自的GUI子系統,完全與kernel的開發隔離開 e.g. android的surface flinger,linux社區的wayland,ubuntu的mir.

沒有必要每一次人機交互方式升級,整個業界都跑到kernel那裡打仗;而同時kernel也可以集中精力提供更好的I/O,進程管理,文件系統等kernel該乾的事。


首先:繪圖工具實際上是在內核里的,包括 nv / ati 的開源、閉源驅動模塊,以及 directFB 等其它方案。

然後談「圖形界面」部分。UNIX 一貫有「策略與機制分離」的原則(Separation of mechanism and policy)。繪圖服務(包括內核的圖形模塊)提供繪圖的「原語」:畫點畫線、填色、紋理等 OpenGL 操作;上層 / 調用者決定用這些原語畫什麼東西。這種分離提供了足夠的穩定和靈活性:不變的部分(原語)足夠穩定;易變的部分(策略)足夠靈活可變。

操作系統的內核,提供最基礎、最穩定的服務,供不同的程序去達到自己的目的,這才是一種能夠經歷時間考驗的設計。

至於所謂「操作系統是不需要圖形界面」或者「大多數 Linux 都是遠程使用的伺服器」這種說法純屬自欺欺人。對於這樣的系統,Linux 允許你訂製內核,在編譯時排除所有不需要的內容,從而儘可能降低額外負載,提高系統效率。

------

話說回來,如果圖形系統(特指 compositing 組件)被加入到內核中,每次圖形更新需要的 syscall 可以從 3 次(app 序列化並發送更新繪圖信息到 kernel, compositing server 從內核讀取並反序列化事件和圖像信息, compositing server 把合成結果序列化提交給 kernel 繪製到 GL surface / framebuffer)降低到 1 次(後兩步通信在內核內完成,同時可以減少至少兩次的序列化、反序列化過程)。儘管 Linux 2.6 使用了 sysenter 指令進行,syscall 的速度仍然比普通函數調用慢得多。如果圖形指令非常多,syscall 帶來的 IPC 負擔還是可以被察覺的。


把圖形界面寫進內核帶來的好處遠遠沒有帶來的壞處多,相比較而言設計個好的圖形系統構架會更好,現在的xorg慘不忍睹


分離直接造成了要寫一個binary compatibile的linux GUI程序多苦逼,framework和api種類繁多,你要寫一個source compatible的GUI程序也沒容易到哪去。跟winserver一樣,要麼你可以不要啟動GUI,要麼啟動GUI就肯定是那一個,多好。

這種大多數程序都要依賴的東西就該壟斷。


你要想想Windows


因為在很多時候運行linux的環境不需要使用圖形界面


大部分liunx系統是做伺服器用途的,大部分伺服器是不需要圖形界面的;編譯到內核,浪費內存空間,浪費資源;


  • 歷史原因:Linux 的直系祖先是 Minix,這個教學用的系統沒有圖形界面。所以 Linus 開始寫 Linux 的時候也沒有考慮圖形界面。等到 Linux 發展到全面兼容 Unix 程序的時候,很自然的就將 Unix 的 Xwindow 給移植過來了。而 Xwindow 本身只是一個應用程序而已。
  • 理念原因:其實 Linux 完全可以將圖形界面寫到內核裡面。但是,有很多對 windows 深惡痛絕的程序員已經意識到 windows 不穩定的元兇因素就是其內核中的圖形界面。而這些人恰好是 Linux 的使用者和開發者,所以將圖形界面寫入內核的阻力相當大。

  • 技術原因:開發圖形界面必須詳細了解圖形硬體的細節。不過圖形硬體的細節往往是不透明的。很多圖形硬體廠商在很長的時間內不願意對開源世界公開其硬體的規格細節等。比如 nvidia 的顯卡,到目前為止其官方的驅動程序都是閉源的。
  • 授權原因:Linux 是開源操作系統,所使用的軟體基本都是 GPL 授權,BSD 授權等。如果要在內核中使用那些私有的圖形驅動程序,其授權就可能會有問題。
  • 個人原因:存在 Richard Stallman 這樣的在開源世界影響力很大但是有潔癖的大牛以及各種潔癖人士。這些人主張不使用任何封閉的軟體,硬體等。

暫時想到這麼幾點。也不一定就完全正確。僅供參考。


簡單點來說,就是開源社區對UI這東西不在行。


圖形界面只是一個軟體而已,這個寫進去了,那office呢,那內核得多大,而且大部分linux是不需要圖形界面的


沒有最好的圖形界面,每個人的審美觀都不一樣,你喜歡的不代表別人會喜歡。linus恐怕也知道這個道理,怎麼說呢,windows目前有xp,vista,win7,前代有2000,98等等,osx有雪豹,山獅等版本。這與他們的產品針對不同的客戶群息息相關。linus創建的這個操作系統,甚至是unix操作系統,從一開始,就沒有將消費者作為其受眾目標。

所以,linus不管設計,也無法做出設計,他的行為是創造,而不是創作。

同時,linux本身也不能被設計成一統的風格模式,其實,開源的都不能被設計。即使是將安卓牢牢掌控於手心的谷歌,也控制不了安卓桌面的分裂化。不同的產品,不同的範圍,肯定最終的結果是有區別的。

再談,假設linux強制控制gui,從本質上,也就是違背了開源協議,實際上,對於內核,linux也並沒有強制控制,不過,gui好設計,內核的設計更加複雜,因為涉及到操作系統本身的邏輯思維,還有一大堆無法繞過的專利。與其說gui沒有被納入內核,不如說,其實兩樣對於linux都是一樣的東西。只是內核不容易像gui那樣被改變罷了。


內核是用來存放核心組件而不是這些可有可無的花哨功能

對於圖形界面來說,作為一個應用運行就夠了

相比起來,應該內核空間的代碼量,把儘可能多的東西移到用戶空間去


圖形界面分好幾層,最內層放內核就可以了。現在wayland的設計就挺好


操作系統的內核只負責和硬體交互和管理系統資源(CPU和內存),包括內存管理、進程管理、文件管理、網路管理等。上層的UI屬於系統程序級別,和驅動程序類似,是在用戶程序和操作系統之間的。

這麼做的原因:

1. 桌面不是內核的一部分

2. linux不是給普通用戶使用的

3. 設計桌面不像coding那樣容易開源協作

這樣做有很多好處:

1. 關注內核的開發,do one thing and do it well。

2. 為桌面提供更多的可能性(KDE,GNOME等)


退知乎,刪回答,保智商。


個人認為linux的圖形界面不是很完善,放到內核裡面肯定是災難。


個人覺得,如果linux想進入個人電腦,就應該搞定圖形界面,尤其這幾年隨著windows的不斷升級,老舊的硬體越來越成為一個負擔,如果linux可以做出穩定可用的gui,就救活了一大堆老設備


增大內核,影響效率


我覺得可以寫一個圖形交互較好的給一般用戶使用,至於商用就保持乾淨不就好了


為什麼要寫進內核?linux有很多桌面軟體給你選哇,加了圖形界面耗費很多存儲空間和系統資源,很多嵌入式設備都是運行它哇,多了圖形沒必要也沒用,圖形界面只是一個軟體,可以自己替換,Gnome,Pantheon,百度一下多的是,各種風格都有


推薦閱讀:

你認為 Linux 最差的用戶體驗是什麼?
可以將一個網頁應用「打包」成一個桌面應用嗎?
C / C++,怎麼高效地刪除文件中的前100個位元組?
EE小碩在讀,求Coursera課程推薦?
為什麼說Arch Linux的pacman包管理系統更先進?相比與apt或rpm等好在哪裡呢?

TAG:Linux | 圖形用戶界面 |