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了。
你知道市面上有一千種版本的噁心之處嗎?
推薦閱讀: