Linux 內核為什麼沒有第三方的版本或分支?

補充:謝謝各位答主,各位答主都指出了諸如android內核等第三方內核,但是這些內核都是自用的修改版,不公開發布,為什麼沒有公開發布的第三方內核砸林納斯·托瓦茲的場?

linux內核為什麼沒有像linux發行版一樣有眾多的版本?
同樣是開源軟體linux內核的開發為什麼如此統一?
難道是跟開源許可證有關?

我不是覺得linux內核沒有分裂不好,只是看到最近有個新聞「內核開發者 Sarah Sharp 宣布退出」想到,為什麼那些離開的內核開發者不自立門戶就像沒有systemd的debian分支一樣。


任何包括了 substantial amount of patches 的 kernel 都可以當作是第三方 fork 了,尤其是那些被 kernel community 明確拒絕不會進入 mainline 的 patch 。

  • Android kernel 是, wakelock 等功能應該還不在 mainline 。
  • 很多桌面用戶喜歡的 linux-ck 、 linux-pf 之類的東西也可以算是,包含一些上游沒有的電源策略(尤其休眠)、 (IO) scheduler 。
  • 開發板 BeagleBone 的官方推薦 kernel 也是, capemgr 應該也是不在主線里的。

往廣了說,你也可以認為 Red Hat 、 Canonical 這樣的大廠也自己維護了一個 kernel branch ,他們會有選擇地 backport 新版本中的 patch 或者提早 merge 尚未進入主線的 patch 。我之前在 Arista 的 Kernel team 實習,做的工作其實也是維護了一個自己的 kernel branch 。

不過較少有第三方 fork 願意去修改 kernel 的 API 、 ABI ,絕大多數情況下 userspace 的程序都可以直接二進位兼容,甚至 kernel module 也都不需要修改代碼(重新編譯即可)兼容。為什麼呢?因為這麼做沒什麼好處而且成本很高……反倒是,大部分情況下第三方廠商都希望減小自己的分支和上游的差異,有可能的話盡量把 custom patch merge up 上去。原因還是一樣, kernel 太龐大、更新很頻繁、維護成本太高了, custom patch 越多越是地獄,除非你下決心產品發布一次以後就再也不更新了(一些嵌入式設備就是這樣的……)。另一方面,往 mainline 里交 patch 也是一個很有面子的事情 :-)


更新:這些 kernel fork 全都是公開發布的,這是 GPL 的要求。我想題主的意思是為什麼沒有人不出來「自立門戶」,換一個商標,比如叫 Nonus Kernel ,然後展開相關的 campaign 吸引別人來用來開發。但我想說,這才不是和 Linus 一人叫板,而是和整個 kernel 社區,尤其是那些貢獻了大量代碼的大公司叫板。 Linus 雖然是個(仁慈的)獨裁者,但這其實也是建立在整個社區的大部分人(包括各大公司、個人)對他的支持基礎上的。雖然偶有爭執,但大多數時候社區還是很認同 Linus 的領導以及目前的英明獨裁模式,沒有什麼明顯的分裂勢力。所以這麼一個 Nonus 項目想來是得不到什麼支持的。沒有支持的話,正如我之前反覆提到的,維護 kernel 的工作量太大了,甚至遠比維護一個發行版大得多。

最後,讓我們來看看最近幾個單純(或者主要)為了政治目的獨立出來的 fork : ffmpeg v.s. libav , node.js v.s. io.js ,這兩個算是聲勢比較浩大的。 libav 很多方面開始落後,當初很多支持 libav 的發行版也切換回了 ffmpeg ; io.js 則是合併回去了,算是有個善終,社區管理問題也得到了解決。至於 Debian with no systemd ……看不出這個項目能有多大前景。


因為有。很多發行版使用的內核都是有一些補丁的。還有一些項目比如 grsecurity(https://en.wikipedia.org/wiki/Grsecurity)。
自立門戶說起來簡單,但是你去猜猜 grsecurity 的支持者怎麼說?


謝謝@火雲邪神邀請。

其實,linux內核還是有一些第三方版本的,最著名的應該就是安卓內核。曾經有段時間安卓的linux內核是google自己獨立維護的,不知道現在是不是還這樣。而其他一些不出名的,用於特定場合的精簡版內核應該是非常多的。

這方面我沒什麼太深入的了解,隨便說說我的看法吧。我覺得linux內核沒有像發行版那樣百花齊放,很大的原因還是用戶需求&<&<成本。

成本方面。如今的linux內核已經是個龐然大物,連linus本人也早已無法對內核的每一個方面瞭若指掌。所以,有財力、能力和魄力去維護一個完整定製版的公司或團隊應該是不多的。

需求方面。由於發行版眾多,大部分用戶需求都可以通過選擇發行版,或者定製發行版來解決,沒必要直接對內核下手。如果真覺得linux內核不滿足需求的,也還有一些其他內核的操作系統可以考慮的。

所以,如果沒有什麼特殊原因,試圖去搞一個能跟目前內核競爭的版本是吃力不討好的。


Android 內核怎麼說?

回答問題補充,Android 內核怎麼沒公開發布了?開源不算公開發布嗎?


很多啊:
https://github.com/mjg59/linux


補充一點,安卓內核是公開的,如果哪個廠商不公開,你可以讓他公開,這個是版權問題


這裡面應該有歷史的原因。起初大家都在興奮有這樣一個優秀的操作系統可以免費使用,並且很滿意,誰會去自己另搞一個呢?而且Linus 也說過,如果當時的BSD 能自由使用,那麼他一定會是一BSD 程序員而不會搞Linux了。這可能是Linux出現之後多多數有能力的黑客的想法吧。


一些linux內核的修改版(patchset),列舉如下:
1.linux-ck
由Con Kolivas開發和維護, 網站是http://users.tpg.com.au/ckolivas/kernel/
該內核強調改進linux desktop/laptop的體驗。
2.linux-grsec
網站是https://grsecurity.net/
基於grsecurity/PaX的patch,強調安全的linux內核,官網列出的特性如下:

  • Highest performance and most secure ROP defense
  • Industry-leading ASLR
  • Bounds checks on kernel copies to/from userland
  • Prevents direct userland access by kernel
  • Prevents kernel stack overflows on 64-bit architectures
  • Hardened userland memory permissions
  • Random padding between thread stacks
  • Hardened BPF JIT against spray attacks
  • Automatically responds to exploit bruteforcing

不喜歡linux安全模塊(如SELinux、AppArmor),因為LSM導出了它的全部符號,這在方便插入安全模塊的同時也方便了惡意模塊(Rootkit),參考https://www.grsecurity.net/lsm.php
3.linux-zen

項目主頁https://github.com/zen-kernel/zen-kernel
使用一些尚未包含在主線內核的代碼,試圖支持最新的硬體,提供最新的特性、安全補丁和性能優化(他還聲稱這不同於其他的是一個補丁集,而是一個內核,參見https://wiki.ubuntu.com/ZenKernel)
4.linux-lqx(Liquorix)
項目主頁https://liquorix.net/
基於linux-zen內核源碼和傾向於Debian的設置,致力於改進桌面、多媒體和遊戲體驗。
網站上列出的特性:

  • Zen Interactive Tuning
  • MuQSS Process Scheduler
  • Preemptible tree-based hierarchical RCU
  • Hard Kernel Preemption
  • Budget Fair Queue
  • Westwood TCP Congestion Control
  • Smaller TX Net Queues
  • Ubuntu ureadahead Support
  • Binary Compatibility Cross Distro
  • Distribution Kernel Drop-in Replacement
  • Minimal Debugging

5.linux-mptcp(MultiPath TCP)
項目主頁Main - Home Page browse
The Linux Kernel and modules with Multipath TCP support.
6.linux-pf
項目主頁https://pf.natalenko.name/
名字與BSD Packet Filter無關,是作者的昵稱post-factum。
該內核提供一些未加入主線內核的特性集。
Included patches:

  • mainline update
  • -ck patchset with MuQSS
  • BFQ I/O scheduler
  • buffered writeback throttling patchset
  • graysky"s kernel GCC patch

7.linux-rt(RTLinux)
網站https://rt.wiki.kernel.org/index.php/Main_Page
提供realtime支持
8.linux-vfio
出自Alex Williamson之手,項目主頁https://github.com/awilliam/linux-vfio
enable the ability to do PCI Passthrough with KVM on some machines
9.linux-bld
項目主頁https://code.google.com/archive/p/bld/
an alternate CPU load distribution technique for Linux kernel scheduler.
10.linux-libre
項目主頁https://www.fsfla.org/ikiwiki/selibre/linux-libre/
The Linux Kernels without "binary blobs"

部分參考:

  • https://wiki.archlinux.org/index.php/Kernels
  • https://liquorix.net/#features
  • https://grsecurity.net/features.php
  • https://www.grsecurity.net/lsm.php
  • https://en.wikipedia.org/wiki/Grsecurity
  • https://en.wikipedia.org/wiki/Linux_Security_Modules
  • https://www.fsfla.org/ikiwiki/selibre/linux-libre/
  • https://wiki.archlinux.org/index.php/Linux-ck

PS:
個人認為這些修改版相互間正如不同的linux發行版。一些修改版的作者曾經參與到linux內核的開發,但不認同一些功能或想要添加一些未被主線內核採用的特性,進而開發修改版。
許多發行版在使用linux kernel 時會加入一些patch,便於用戶使用。


談談我的理解:
因為沒有哪個公司或機構hold的住目前Linux所應用的所有領域與行業。

Linux 的應用場景是非常廣,除了耳熟能詳的 redhat, debian 等發行版應用在 PC 和伺服器上的,嵌入式領域的通用處理器製造商和嵌入式操作系統軟體公司,Android內核,甚至 ps 遊戲機。沒有哪個商業巨頭能通吃所有應用場景,所以,完整的 fork 一份,涵蓋所有場景顯然是不符合公司商業利益的。

那麼是否可以 fork 出來一個版本,然後專註於某一領域呢? 這個確實是可以的,但某種程度上不能叫 fork,而是體現成一堆patch, 甚至patch套patch..

比如說,大家一直詬病 Android 卡頓,於是 Android 自己加了一個調整,用空間換時間的思路,提升了中斷的性能(我瞎編的),假設說 Google 的某工程師最初在 2.6.a 的版本做的修改,不出意外的,托瓦斯大神拒絕了這個 patch 進 mainline(空間換時間,有些設備可經不起這麼折騰)。於是這位忿忿不平的工程師決定自己維護個 fork,過不多久,Linux升級到了 2.6.b 這其中包含了幾百個修改,其中60個是設備製造商可能用到的,嗯,坑吃坑吃的merge ... 再過段時間,2.6.c, 繼續坑吃坑吃,還沒填完坑,Linux 3.0了...又過兩天,我Cao,4.0...

於是他換了個思路,每次 Linux 新 release,就把自己做的修改再在這個 release 上修改一遍,然後把 patch 發出來,從此生活又回到了簡單美好的軌跡上。


大多數程序猿都知道一旦Linux內核分裂,以後就只好去搞Windows了。

你知道市面上有一千種版本的噁心之處嗎?


推薦閱讀:

不懂彙編可以學 Linux 內核嗎?

TAG:Linux | Linux內核 | 操作系統內核 | Linux發行版 |