Linus 妥協?30 年 Linux 核心語言標準將更新

語言: CN / TW / HK

作者|辛曉亮

近日,據 Linux 核心郵件訊息,Linux 核心有望在近期採用最新 C 語言標準。Linux 核心一直在快速發展,但由於仍然有著許多老的依賴項,其核心程式碼仍是 1989 年的 C 語言標準,距今已有 30 餘年。不過,這一情況有望在近期的 5.18 版本中發生改變。

1 修復補丁引發核心升級討論,Linus 被說服

問題起源來自 Linux 的一次社群討論,一位名叫 Jakob Koschel 的博士生,在研究阻止與核心連結串列 primitive 相關的預測執行漏洞時,發現了一個問題。Linux 核心廣泛使用由 struct list_head 定義的雙向連結串列,這個情況最終就導致了 USB 子系統中的一個 bug:傳遞給該巨集的迭代器在退出巨集後還能被使用。發現這個問題後,Koschel 隨即提交了一個修復補丁,在迴圈停止後使用迭代器修復了 bug。

起初,Linus Torvalds 並不喜歡這個修復補丁,他認為這只是一個普通的 bug。不久之後,Linus 發現了問題的根源:傳遞給連結串列遍歷巨集的迭代器,必須在迴圈本身之外的範圍內宣告。而導致這個問題出現的原因就是核心在 C89 標準上無法在迴圈中宣告變數。

於是 Linus 寫信給 Linux 核心郵件列表(LKML),他認為是時候轉向 C99 標準了,雖然 C99 也有 20 多年的歷史,但至少是較近的,足以解決這個問題。而對於為什麼一直沿用 C89,Linus 解釋是因為一些老的 GCC 編譯器版本有奇怪的問題,因此不敢升級。

Linux 核心開發人員 Arnd Bergmann 同意升級 Linus 核心標準的看法,他也希望在這方面取得進展。不過他認為應該升級到 2011 年的 C11 標準,因為 C99 並沒有流行特別廣泛,而 C11 引入了標準化的多執行緒支援並使 C 語言更加安全。同時他表示,Linux 核心的最低 C 編譯器 GCC 5.1 版本已經支援 C11,這讓升級標準實行起來也不會很難。

最終,Linus 被說服,表示贊同這個想法,決定在下個版本早期嘗試一下。如果順利的話,C 語言標準有望在下一個核心版本也就是 Linux 5.18 中遷移到 C11。不過 Linux 核心開發人員兼記者 Jonathan Corbet 警告稱,“語言標準的升級可能在核心中某些不為人知的角落引發 bug,所以必須儘早發現問題才能及時進行版本還原,但如果一切進展順利,下一個 Linux 核心版本將正式轉向 C11。”

2 Rust 成 Linux 第二官方語言

一直以來,Linux 都是 C 語言的代言人,但是 Rust 的興起贏得了越來越多人的支援。年前,Linux 核心增加對 Rust 作為第二語言的支援,Rust 憑藉優秀的效能與安全等特性贏得了 Linus 和其他社群核心維護者的支援。

Linus 鼓勵採用緩慢穩定的方法將 Rust 引入 Linux,他也表示將 Rust 介面用於驅動程式和其他非核心核心程式是有道理的:“我相信這會發生。它可能不是 Rust,但我們將會有不同的模型來編寫這些型別的東西,而且 C 不會是唯一的模型。”

Linux 核心維護者 Miguel Ojeda 也曾表示,“該專案尚未完成,大多數工作還沒有完成。但如果高階維護人員接受當前的更改並希望我們在核心中工作,我們就準備好進入主線。”

關聯閱讀:

2022 年,Rust 將成為 Linux 核心第二官方語言?

3 另一重大更新:軟體定義晶片

除了核心的相關更新,英特爾的軟體定義晶片也將在 Linux 5.18 中首次亮相。據外媒 Phoronix 報道,一位來自紅帽的 Linux 開發員工 Hans de Goede 透露,如果無意外,英特爾為 Xeon CPU 新增的軟體定義晶片(SDSi)機制將在 Linux 5.18 核心中得到正式支援。

晶片已內建許多強大的功能,但都以軟體鎖住,使用者必須付費購買授權來解鎖功能,使用者購買的功能是結合晶片驅動程式控制的啟動功能來解鎖。SDSi 特點是能夠通過軟體啟用被鎖定的晶片功能,能夠給在 CPU 上執行的 Linux 系統帶來較大優化。

參考連結:

https://lwn.net/SubscriberLink/885941/01fdc39df2ecc25f/

今日文章推薦:

馬斯克:我是Rust粉絲,但選擇C;被侮辱,Swift之父退出;2021 JavaScript調查釋出;市值狂跌,扎克伯格出大招