我應該使用哪些穩定版內核?
本文作者 Greg Kroah-Hartman 是 Linux 穩定版內核的維護負責人。
很多人都問我這樣的問題,在他們的產品/設備/筆記本/服務器等上面應該使用什么樣的穩定版內核。一直以來,尤其是那些現在已經延長支持時間的內核,都是由我和其他人提供支持,因此,給出這個問題的答案并不是件容易的事情。在這篇文章我將嘗試去給出我在這個問題上的看法。當然,你可以任意選用任何一個你想去使用的內核版本,這里只是我的建議。
和以前一樣,在這里給出的這些看法只代表我個人的意見。
可選擇的內核有哪些
下面列出了我建議你應該去使用的內核的列表,從***的到最差的都有。我在下面將詳細介紹,但是如果你只想得到一個結論,它就是你想要的:
建議你使用的內核的分級,從***的方案到最差的方案如下:
- 你最喜歡的 Linux 發行版支持的內核
- ***的穩定版
- ***的 LTS (長期支持)版本
- 仍然處于維護狀態的老的 LTS 版本
絕對不要去使用的內核:
- 不再維護的內核版本
給上面的列表給出具體的數字,今天是 2018 年 8 月 24 日,kernel.org 頁面上可以看到是這樣:
因此,基于上面的列表,那它應該是:
- 4.18.5 是***的穩定版
- 4.14.67 是***的 LTS 版本
- 4.9.124、4.4.152、以及 3.16.57 是仍然處于維護狀態的老的 LTS 版本
- 4.17.19 和 3.18.119 是過去 60 天內有過發布的 “生命周期終止” 的內核版本,它們仍然保留在 kernel.org 站點上,是為了仍然想去使用它們的那些人。
非常容易,對嗎?
Ok,現在我給出這樣選擇的一些理由:
Linux 發行版內核
對于大多數 Linux 用戶來說,***的方案就是使用你喜歡的 Linux 發行版的內核。就我本人而言,我比較喜歡基于社區的、內核不斷滾動升級的用***內核的 Linux 發行版,并且它也是由開發者社區來支持的。這種類型的發行版有 Fedora、openSUSE、Arch、Gentoo、CoreOS,以及其它的。
所有這些發行版都使用了上游的***的穩定版內核,并且確保定期打了需要的 bug 修復補丁。當它擁有了***的修復之后(記住所有的修復都是安全修復),這就是你可以使用的最安全、***的內核之一。
有些社區的 Linux 發行版需要很長的時間才發行一個新內核版本,但是最終發行的版本和所支持的內核都是非常好的。這些也都非常好用,Debian 和 Ubuntu 就是這樣的例子。
如果我沒有在這里列出你所喜歡的發行版,并不是意味著它們的內核不夠好。查看這些發行版的網站,確保它們的內核包是不斷應用***的安全補丁進行升級過的,那么它就應該是很好的。
許多人好像喜歡舊式、“傳統” 模式的發行版,使用 RHEL、SLES、CentOS 或者 “LTS” Ubuntu 發行版。這些發行版挑選一個特定的內核版本,然后使用好幾年,甚至幾十年。他們反向移植了***的 bug 修復,有時也有一些內核的新特性,所有的只是追求堂吉訶德式的保持版本號不變而已,盡管他們已經在那個舊的內核版本上做了成千上萬的變更。這項工作是一項真正吃力不討好的工作,分配到這些任務的開發人員做了一些精彩的工作才能實現這些目標。所以如果你希望永遠不看到你的內核版本號發生過變化,那么就使用這些發行版。他們通常會為使用而付出一些錢,當發生錯誤時能夠從這些公司得到一些支持,那就是值得的。
所以,你能使用的***的內核是你可以求助于別人,而別人可以為你提供支持的內核。使用那些支持,你通常都已經為它支付過費用了(對于企業發行版),而這些公司也知道他們職責是什么。
但是,如果你不希望去依賴別人,而是希望你自己管理你的內核,或者你有發行版不支持的硬件,那么你應該去使用***的穩定版:
***的穩定版
***的穩定版內核是 Linux 內核開發者社區宣布為“穩定版”的***的一個內核。大約每三個月,社區發行一個包含了對所有新硬件支持的、新的穩定版內核,***版的內核不但改善內核性能,同時還包含內核各部分的 bug 修復。接下來的三個月之后,進入到下一個內核版本的 bug 修復將被反向移植進入這個穩定版內核中,因此,使用這個內核版本的用戶將確保立即得到這些修復。
***的穩定版內核通常也是主流社區發行版所使用的內核,因此你可以確保它是經過測試和擁有大量用戶使用的內核。另外,內核社區(全部開發者超過 4000 人)也將幫助這個發行版提供對用戶的支持,因為這是他們做的***的一個內核。
三個月之后,將發行一個新的穩定版內核,你應該去更新到它以確保你的內核始終是***的穩定版,因為當***的穩定版內核發布之后,對你的當前穩定版內核的支持通常會落后幾周時間。
如果你在上一個 LTS (長期支持)版本發布之后購買了***的硬件,為了能夠支持***的硬件,你幾乎是絕對需要去運行這個***的穩定版內核。對于臺式機或新的服務器,***的穩定版內核通常是推薦運行的內核。
***的 LTS 版本
如果你的硬件為了保證正常運行(像大多數的嵌入式設備),需要依賴供應商的源碼樹外的補丁,那么對你來說,***的內核版本是***的 LTS 版本。這個版本擁有所有進入穩定版內核的*** bug 修復,以及大量的用戶測試和使用。
請注意,這個***的 LTS 版本沒有新特性,并且也幾乎不會增加對新硬件的支持,因此,如果你需要使用一個新設備,那你的***選擇就是***的穩定版內核,而不是***的 LTS 版內核。
另外,對于這個 LTS 版本的用戶來說,他也不用擔心每三個月一次的“重大”升級。因此,他們將一直堅持使用這個 LTS 版本,并每年升級一次,這是一個很好的實踐。
使用這個 LTS 版本的不利方面是,你沒法得到在***版本內核上實現的內核性能提升,除非在未來的一年中,你升級到下一個 LTS 版內核。
另外,如果你使用的這個內核版本有問題,你所做的***件事情就是向任意一位內核開發者報告發生的問題,并向他們詢問,“***的穩定版內核中是否也存在這個問題?”并且,你需要意識到,對它的支持不會像使用***的穩定版內核那樣容易得到。
現在,如果你堅持使用一個有大量的補丁集的內核,并且不希望升級到每年一次的新 LTS 版內核上,那么,或許你應該去使用老的 LTS 版內核:
老的 LTS 版本
傳統上,這些版本都由社區提供 2 年時間的支持,有時候當一個重要的 Linux 發行版(像 Debian 或 SLES)依賴它時,這個支持時間會更長。然而在過去一年里,感謝 Google、Linaro、Linaro 成員公司、kernelci.org、以及其它公司在測試和基礎設施上的大量投入,使得這些老的 LTS 版內核得到更長時間的支持。
***的 LTS 版本以及它們將被支持多長時間,這是 2018 年 8 月 24 日顯示在 kernel.org/category/releases.html 上的信息:
Google 和其它公司希望這些內核使用的時間更長的原因是,由于現在幾乎所有的 SoC 芯片的瘋狂的(也有人說是打破常規)開發模型。這些設備在芯片發行前幾年就啟動了他們的開發周期,而那些代碼從來不會合并到上游,最終結果是新打造的芯片是基于一個 2 年以前的老內核發布的。這些 SoC 的代碼樹通常增加了超過 200 萬行的代碼,這使得它們成為我們前面稱之為“類 Linux 內核“的東西。
如果在 2 年后,這個 LTS 版本停止支持,那么來自社區的支持將立即停止,并且沒有人對它再進行 bug 修復。這導致了在全球各地數以百萬計的非常不安全的設備仍然在使用中,這對任何生態系統來說都不是什么好事情。
由于這種依賴,這些公司現在要求新設備不斷更新到***的 LTS 版本——這些為它們特定發布的版本(例如現在的每個 4.9.y 版本)。其中一個這樣的例子就是新 Android 設備對內核版本的要求,這些新設備所帶的 “Andrid O” 版本(和現在的 “Android P” 版本)指定了***允許使用的內核版本,并且 Andoird 安全更新版本也開始越來越頻繁在設備上要求使用這些 “.y” 版本。
我注意到一些生產商現在已經在做這些事情。Sony 是其中一個非常好的例子,在他們的大多數新手機上,通過他們每季度的安全更新版本,將設備更新到***的 4.4.y 發行版上。另一個很好的例子是一家小型公司 Essential,據我所知,他們持續跟蹤 4.4.y 版本的速度比其它公司都快。
當使用這種老的內核時有個重大警告。反向移植到這種內核中的安全修復不如***版本的 LTS 內核多,因為這些使用老的 LTS 內核的設備的傳統模式是一個更加簡化的用戶模式。這些內核不能用于任何“通用計算”模式中,在這里用的是不可信用戶或虛擬機,極大地削弱了對老的內核做像最近的 Spectre 這樣的修復的能力,如果在一些分支中存在這樣的 bug 的話。
因此,僅在你能夠完全控制的設備,或者限定在一個非常強大的安全模型(像 Android 一樣強制使用 SELinux 和應用程序隔離)時使用老的 LTS 版本。絕對不要在有不可信用戶/程序,或虛擬機的服務器上使用這些老的 LTS 版內核。
此外,如果社區對它有支持的話,社區對這些老的 LTS 版內核相比正常的 LTS 版內核的支持要少的多。如果你使用這些內核,那么你只能是一個人在戰斗,你需要有能力去獨自支持這些內核,或者依賴你的 SoC 供應商為你提供支持(需要注意的是,幾乎沒有供應商會為你提供支持,因此,你要特別注意 ……)。
不再維護的內核發行版
更讓人感到驚訝的事情是,許多公司只是隨便選一個內核發行版,然后將它封裝到它們的產品里,并將它毫不猶豫地承載到數十萬的部件中。其中一個這樣的糟糕例子是 Lego Mindstorm 系統,不知道是什么原因在它們的設備上隨意選取了一個 -rc 的內核發行版。-rc 的發行版是開發中的版本,根本沒有 Linux 內核開發者認為它適合任何人使用,更不用說是數百萬的用戶了。
當然,如果你愿意,你可以隨意地使用它,但是需要注意的是,可能真的就只有你一個人在使用它。社區不會為你提供支持,因為他們不可能關注所有內核版本的特定問題,因此如果出現錯誤,你只能獨自去解決它。對于一些公司和系統來說,這么做可能還行,但是如果沒有為此有所規劃,那么要當心因此而產生的“隱性”成本。
總結
基于以上原因,下面是一個針對不同類型設備的簡短列表,這些設備我推薦適用的內核如下:
- 筆記本 / 臺式機:***的穩定版內核
- 服務器:***的穩定版內核或***的 LTS 版內核
- 嵌入式設備:***的 LTS 版內核或老的 LTS 版內核(如果使用的安全模型非常強大和嚴格)
至于我,在我的機器上運行什么樣的內核?我的筆記本運行的是***的開發版內核(即 Linus 的開發樹)再加上我正在做修改的內核,我的服務器上運行的是***的穩定版內核。因此,盡管我負責 LTS 發行版的支持工作,但我自己并不使用 LTS 版內核,除了在測試系統上。我依賴于開發版和***的穩定版內核,以確保我的機器運行的是目前我們所知道的最快的也是最安全的內核版本。