

導讀:更新 Linux 核心維護者仍然不太相信將 Rust 程式碼新增到開源專案中是一個好主意,但其 VIP 管理團隊正在支援該語言的整合。
在 Linux 核心郵件列表的一個正在進行的帖子中,高階專案開發人員 Greg Kroah-Hartman 敦促其他貢獻者接納那些有興趣貢獻 Rust 程式碼來改進核心的開發人員。
“是的,混合語言程式碼庫很粗糙,難以維護,但我們是核心開發人員,該死的。我們維護和加強 Linux 的時間比任何人想象的都要長,”他在週三如此寫道。
“我們已將開發模式轉變為運轉良好的工程奇蹟,創造了其他人從未能夠完成的事情。
“新增另一種語言真的不成問題。我們過去處理過更糟糕的事情,現在不應該放棄確保我們的專案在未來 20 多年取得成功的願望。面對新的好主意時,我們必須繼續前進,並歡迎那些願意加入我們實際工作的人,以確保我們共同取得成功。”
他的帖子是上個月開始的一場爭吵中的最新一篇,當時一個提議的補丁允許 Rust 編寫的裝置驅動程式呼叫主要基於 C 語言的核心的核心DMA API,但卻遭到了核心維護者 Christoph Hellwig 的質疑。
Hellwig 將維護多語言程式碼庫比作癌症,並強調他不願意承擔維護 Rust 裝置驅動程式程式碼所帶來的負擔。隨後的爭論促使當時擔任 Asahi Linux 專案負責人的 Hector Martin 要求 Linus Torvalds 來決定是否將補丁拉入核心。
託瓦茲伯爵最終作出回應,捍衛 Linux 核心開發過程,並斥責 Hector Martin 在社交媒體上就此事上譁眾取寵。Hector Martin 後來辭去了 Linux 維護人員的職務,還辭去了Asahi Linux 專案的相關職務。
政策之鬥爭
領導 Rust for Linux 專案,併為 Linux 核心維護做出貢獻的 Miguel Ojeda透過釋出“ Rust 核心政策”試圖讓核心開發社群放心。
本週早些時候,Hellwig重申了他對在單一程式碼庫中混合使用 Rust 和 C 程式碼的擔憂,並批評了 Ojeda 的 Rust for Linux 政策檔案,理由是該檔案出現在網路上,而不是核心程式碼樹中。
他還對 Rust 在核心中的作用表示擔憂。
“我想了解 Rust 這項‘實驗’的目標是什麼:如果我們想修復記憶體安全方面現有的問題,我們需要對現有程式碼進行修復,並找到改進的方法。我們最近在這方面投入了大量工作,但還需要做更多,”他寫道。
Rust 於 2022 年被新增到 Linux 核心中,因為它比 C 具有更好的記憶體安全性。
多年來,技術專家一直指出,大型程式碼庫中的大多數嚴重錯誤和漏洞都源於記憶體安全錯誤,而這些錯誤可以或應該透過使用記憶體安全語言和工具來避免。因此,科學家與政府認為,開發人員應儘可能並酌情使用記憶體安全的程式語言,例如 Rust、Go、C#、Java、Swift、Python 和 JavaScript。
鑑於 Linux 作業系統的普及度,這是一個表面上合理的想法。
大多數錯誤都是由於 C 中愚蠢的小極端情況造成的,而這些在 Rust 中完全消失了
然而,經驗豐富的 C 和 C++ 程式設計師擔心他們的技能可能會變得不那麼重要,這是可以理解的。因此,許多人都在尋找實現或接近記憶體安全的方法,而不是盲目跟風使用 Rust。
Kroah-Hartman在回應微軟核心開發人員馮博群時直接談到了 Rust 和記憶體安全問題。
他寫道:“我們所發現的大多數 bug(數量,而非質量和嚴重性)都是由於 C 中的小極端情況造成的,而這些 bug 在 Rust 中完全消失了。”
“諸如簡單的記憶體覆蓋(Rust 目前無法捕獲所有這些問題)、錯誤路徑清理、忘記檢查錯誤值以及釋放後使用錯誤等。這就是為什麼我希望看到 Rust 進入核心,這些型別的問題就會消失,讓開發人員和維護人員有更多時間專注於實際發生的錯誤(即邏輯問題、競爭條件等)。”
Kroah-Hartman 繼續表示,他支援使 C 程式碼更加健壯,並且無論如何這項工作都不會停止。
“但對於新的程式碼和驅動程式,用 Rust 編寫它們,這些型別的錯誤就不會發生(或者發生得很少),這對我們所有人來說都是一種勝利,我們為什麼不這樣做呢?”他寫道。
“C++ 不會在短時間內給我們帶來這些,C++ 語言委員會的問題似乎指出,如果每個人都希望擁有可以長期維護的程式碼庫,那麼最好儘快放棄該語言。”
這也伴隨著一些常見的問題——正如 Kroah-Hartman 承認的那樣,Rust 也不是一顆能夠神奇地解決所有問題的靈丹妙藥。但他堅持認為,Rust 會有所幫助。
Kroah-Hartman 並不是唯一一個持這種觀點的人。例如,谷歌的核心安全工程師、長期的核心貢獻者 Kees Cook表示:“我認為沒有理由專注於替換現有程式碼——這樣做實際上會帶來很大的風險。但用 Rust 編寫新東西非常有效。”
在有關 Ojeda 的 Rust 核心政策帖子提出的問題中,Hellwig 糾正了 Ojeda 的斷言,即一些核心子系統維護者可能會決定他們根本不想要 Rust 程式碼,這是可以預料和接受的。
“Linus 私下表示說,他絕對會不顧維護者的反對,來合併 Rust 程式碼,”Hellwig 說。“所以現在,作為一名 Linux 開發人員或維護者,無論你是否願意,你都必須正視與 Rust 打交道。”
託瓦茲伯爵現在也加入進來了。

已更新並新增
託瓦茲伯爵這次禮貌地回應了 Hellwig 反對將 Rust 繫結新增到核心,以用於 DMA API 的論點,並正確地指出,提議的 Rust 程式碼甚至不在 Hellwig 維護的基於 C 的核心元件中,繫結充當未改變的 C API 和 Rust 驅動程式之間的單獨介面。
閱讀完整的電子郵件,但這裡有一些摘錄…
事實上,你反對的拉取請求根本沒有觸及 DMA 層。老實說,你所做的基本上就是說“作為 DMA 維護者,我控制 DMA 程式碼的用途”。但這並不是這一切的運作方式。
下一步是什麼?說特定的驅動程式不能執行 DMA,因為你不喜歡該裝置,並且作為 DMA 維護者,你控制誰可以使用 DMA 程式碼?
這正是你嘗試使用 Rust 程式碼所做的事情。
所以讓我明確一點:如果你作為維護者,覺得你控制著誰或什麼可以使用你的程式碼,那你就錯了。
你不必接受任何 Rust 程式碼,也不必關心 DMA 程式碼中的任何 Rust 程式碼。你可以忽略它。但“忽略 Rust 方面”也自動意味著你對 Rust 方面沒有任何發言權。
“我在技術上尊重你,我也喜歡和你一起工作,”該核心負責人這樣補充道。
作者:場長
相關閱讀: