Linus將不顧反對合並Rust程式碼?!

背景
自從 2022 年 Rust 程式碼首次被合併到 Linux 核心中以來,圍繞它的爭議就持續升溫。Rust 語言因其在記憶體安全方面的優勢而備受推崇,並被各國政府和安全專家認為能夠有效減少由於記憶體安全漏洞導致的高危安全問題。在大型程式碼庫中,大多數嚴重的錯誤和漏洞都源於記憶體安全問題,而使用記憶體安全的語言和工具可以避免這些問題。
上週,據 Linux 核心關鍵維護者 Hellwig 透露:Linus Torvalds 私下表示,他絕對會不顧維護者的反對,合併 Rust 程式碼這讓 Linux 核心中引入 Rust 語言的討論變得愈演愈烈。參考上一篇文章《Rust 補丁兩年零透過,34年開發者煽動網友逼Linus表態,維護者激烈反擊:Rust 就是 Linux 的“癌症”!
爭議焦點
多語言混編的擔憂
Linux 核心維護者 Christoph Hellwig 多次表達了對在同一個程式碼庫中混合使用 Rust 和 C 語言的擔憂。他警告說,如果在沒有明確策略和廣泛討論的前提下,就把 Rust 程式碼大規模合併到核心的各個子系統裡,會讓後續維護者疲於奔命。
Hellwig 將維護多語言程式碼庫比作“癌症”,強調自己不願承擔維護 Rust 裝置驅動程式碼的負擔。他認為,C 語言和 Rust 語言之間存在巨大的語義鴻溝,給核心基礎元件做互操作需要大量的“膠水”或繫結層。
Hellwig 擔心,一旦這些繫結分散到各個子系統,就像“癌症”一樣隨處擴散,最終造成對核心基礎設施的重複改寫與無法預期的複雜度。他曾表示,自己曾在混合語言的程式碼庫上工作過,那簡直是他的噩夢,因為各種原因,會把部分程式碼從語言 A 重寫成語言 B,然後又因為原因 Z 再轉回 A,這種折騰不斷.
Hellwig 還警告說,這種“多語言混編”也會影響對舊程式碼的全域性性改進。
Linus Torvalds 的態度
Hellwig 在郵件列表中透露,Linus Torvalds 私下表示,他絕對會不顧維護者的反對,合併 Rust 程式碼。這使得 Hellwig 感到無奈,認為 Linux 開發者或維護者必須接受 Rust.
儘管如此,Linus 並沒有對補丁的去留做出明確裁定,而是批評 Asahi Linux 專案的負責人 Hector Martin 在社交媒體上就此事“作秀”,併為 Linux 社群的治理模式辯護。
Linus 禮貌地回應了 Hellwig 對為 DMA API 新增到核心的 Rust 繫結的反對,並指出提議的 Rust 程式碼甚至不在 Hellwig 維護的基於 C 的核心元件中——這些繫結充當了未更改的 C API 和 Rust 驅動程式之間的單獨介面.
Linus 強調,如果維護者認為自己可以控制誰或什麼可以使用其程式碼,那是錯誤的。維護者沒有被迫接受任何 Rust 程式碼,或者關心 DMA 程式碼中的任何 Rust 程式碼,可以忽略它。但是 "忽略 Rust 方面" 自動也意味著對 Rust 方面沒有任何發言權。
Rust 核心策略
Rust for Linux 專案負責人 Miguel Ojeda 釋出了“Rust 核心策略”:Rust kernel policy:https://rust-for-linux.com/rust-kernel-policy,試圖緩解核心開發社群的擔憂。該策略闡明瞭將 Rust 程式碼整合到主要為 C 語言編寫的開源核心中的工作狀態.
但 Hellwig 質疑該文件只發布在網上,而並非放入核心程式碼樹中,認為其沒有實際價值。他認為,如果想讓它有效,就必須放在核心樹中並得到廣泛認可。
維護者倦怠
Asahi Linux 專案的負責人 Hector Martin 因對 DMA 補丁的爭議處理不滿,辭去了 Linux 維護者一職。此前,Rust for Linux 維護者 Wedson Almeida Filho 也曾因與 C 語言維護者存在分歧而辭職。
開源社群的“維護者倦怠”問題日益凸顯,高強度的義務勞動、激烈的人身攻擊、缺乏對志願者工作的認可,以及超負荷的工作量等都是導致倦怠的原因。
Martin 稱,他之所以決定離開 Asahi Linux 和 Linux 核心社群,部分原因是感到自己被“背叛”,一些核心和相關 Linux 圈子裡的人一直在對他玩弄兩面派手段。
支援 Rust 的觀點
記憶體安全優勢
Linux 核心開發者 Greg Kroah-Hartman 再次呼籲社群接納那些願意貢獻 Rust 程式碼以改進核心的開發者。他認為,C 語言中存在許多愚蠢的小角落,容易導致記憶體安全問題,而這些問題在 Rust 中完全不存在。
Greg K-H 指出,C 語言中常見的記憶體錯誤包括簡單的記憶體覆蓋、錯誤路徑清理、忘記檢查錯誤值,以及使用已釋放的資源等。透過引入 Rust,可以減少這些型別的錯誤,讓開發者和維護者能夠把更多時間投入到真正的錯誤上。
提高 API 的安全性
Greg K-H 進一步表示,Rust 可以定義核心 API,使其幾乎不可能被錯誤使用。這有助於清理 API,使其對所有人(包括 C 使用者)都更好、更安全。Rust 還可以讓我們以某種方式定義我們的核心 API,從而讓人們幾乎不可能在使用它們時出錯。
解決實際問題
Greg K-H 認為,Rust 解決了硬體開發者在編寫程式碼時遇到的記憶體安全問題。他強調,不應忽視那些願意投入工作並幫助專案成功的人。
Rust 崛起不可避免
Nvidia 的 Linux 核心工程師 Andrea Righi 認為,核心社群對 Rust 的熱情是不可否認的,Rust 程式碼合併到上游幾乎是不可避免的。
其他觀點
Kees Cook 是 Google 的核心安全工程師,也是一位長期的核心貢獻者。他認為,不應該專注於替換現有程式碼,因為這樣做會帶來很多風險,但是用 Rust 編寫新的東西非常有效.
Greg K-H 同樣支援讓 C 程式碼變得更健壯,這方面的工作並不會停止.
未來展望
儘管存在爭議,但 Rust 似乎已成為 Linux 核心開發中不可忽視的一部分。隨著時間的推移,以及 Rust 技能變得更加普遍,對 Rust 的抵制可能會逐漸減少。同時,也需要關注多語言混編帶來的維護挑戰,並制定明確的策略來規範 Rust 程式碼的使用. Linus 已經明確表示,他將推動 Rust 的合併,因此,Linux 開發者或維護者需要對此有所準備。

相關文章