出品 | 51CTO技術棧(微信號:blog51cto)
又過去一年,Linus 的 Rust for Linux項目進展如何了?情況不太好。
試圖將 Rust 代碼添加到 Linux 內核的開發人員,仍在繼續面臨來自內核維護者的反對,這些維護者認為:使用多種語言是一種不受歡迎且風險較高的復雜情況。
去年 9 月,當微軟軟件工程師韋德森·阿爾梅達·菲略(Wedson Almeida Filho)因對“非技術性胡鬧”感到沮喪而退出 Rust for Linux 項目時,問題首次浮出水面。
內核維護者的煎熬
“別強迫我應付你當下流行的時髦語言。維護多語言項目是件痛苦的事?!?/span>
上個月,當提出一個抽象方案以允許用 Rust 編寫的設備驅動程序調用主要基于 C 的內核核心 DMA API 時,問題再次引發爭議,內核維護者克里斯托夫·赫爾維格(Christoph Hellwig)對此表示反對。
具體來說,提交了一個補丁,允許 Rust 驅動程序使用 DMA API 的 dma_alloc_coherent() C 函數來分配和映射用于直接內存訪問的大內存區域。
在給 Linux 內核郵件列表的一封信中,赫爾維格寫道:“請不要在 kernel/dma 中使用 Rust 代碼。” 值得一提的是,該補丁將代碼添加到了 Linux 源代碼樹的 rust/kernel 部分,而不是 kernel/dma,至少據我們所知是這樣。
Rust for Linux 項目的米格爾·奧赫達(Miguel Ojeda)請求赫爾維格提出替代方案。
赫爾維格回應道:“把包裝器留在你的代碼里,而不是讓別人的日子變得痛苦?!彼€接著憤憤不平地說,“DMA API 的接口應該保留在可讀的 C 代碼中,而不是用奇怪的綁定,這樣它才能保持可查找性和可維護性?!?/span>
赫爾維格似乎希望非 C 驅動程序有自己的私有 C 代碼綁定,并且這些抽象不應該單獨維護,即使在 rust/kernel 樹中也不行。
紅帽軟件工程師丹尼洛·克魯姆里奇(Danilo Krummrich)參與了 Rust for Linux 項目,他質疑赫爾維格,赫爾維格明確表示他根本不想處理 Rust 代碼。
“別強迫我應付你當下流行的時髦語言,”他寫道,“維護多語言項目是我不愿處理的痛苦。如果你想用非 C 語言,無論是匯編還是 Rust,你寫到 C 接口,并且自己處理阻抗不匹配的問題,就我而言?!?/span>
對此,克魯姆里奇解釋說,Rust for Linux 項目正在創建抽象 C API 的 Rust 代碼,供所有 Rust 驅動程序使用,并由 Rust 開發者維護。換句話說,內核的 C 端保持不變,Rust 驅動程序使用對 C 代碼的抽象,并且這些抽象由 rust/kernel 中的團隊集中維護,這可以說比驅動程序各自擁有獨立的 C 綁定要好得多。
混合C和Rust是一種癌癥
但赫爾維格似乎對單獨維護 DMA Rust 抽象層并不感興趣。他解釋說,他不想要另一個維護者:
如果你想因為跨語言代碼庫而使 Linux 難以維護,那就去做吧,這樣你必須自己處理,而不是將這種“癌癥”擴散到核心子系統。(這里的“癌癥”明確指的是跨語言代碼庫,而不是 Rust 本身,只是為了避開那些喜歡煽風點火的人)。
熟悉技術歷史的人可能會記得,2001 年,時任微軟首席執行官的史蒂夫·鮑爾默(Steve Ballmer)曾將 Linux 比作癌癥。“Linux 是一種癌癥,它從知識產權的角度附著在它接觸到的一切事物上,”鮑爾默說,那時 Linux 還沒有擴散到 Windows 子系統 for Linux。
赫爾維格接著爭辯說,讓其他人維護 DMA 內存分配器的 Rust 抽象層作為一個單獨的組件并不能改善情況,反而會阻礙內核的可維護性:
每一種額外的語言滲入,都會極大地降低內核作為一個集成項目的可維護性。Linux 能夠存活這么久的唯一原因是它沒有內部邊界,而添加另一種語言則完全打破了這一點。你可能不喜歡我的回答,但我將盡我所能阻止這種情況。這不是因為我討厭 Rust。盡管它不是我最喜歡的編程語言,但它肯定是最好的新語言之一,我鼓勵人們在適合的項目中使用它。我絕對不希望它出現在我需要維護的巨大 C 代碼庫附近。
Ashai Linux 項目負責人赫克托·馬丁(Hector Martin)表示,他認為赫爾維格的言論構成了違反行為準則的行為,但他懷疑不會采取任何紀律處分?!蹲詧蟆吩儐栺R丁是否打算提交行為準則投訴,但我們尚未收到回復。
Linus的態度決定Rust for Linux項目的存亡
馬丁認為,Rust for Linux 的開發人員應該忽視赫爾維格的擔憂,并提交他們的補丁以供內核負責人林納斯·托瓦爾茲(Linus Torvalds)批準:
“如果林納斯沒有在這個話題上給出權威性的答案,米格爾和其他 Rust 人員應該在補丁經過審查并準備好后直接合并這個系列,忽略克里斯托夫試圖破壞項目的明顯企圖。如果林納斯[接受拉取請求],克里斯托夫說什么都不重要。如果林納斯不[接受],[Rust for Linux]項目基本上就死了,除非林納斯或克里斯托夫采取行動。其他一切都是在兜圈子?!?/span>
有外媒曾詢問赫爾維格是否愿意就上面馬丁的評論發表意見,他拒絕了。
支持Rust的理由
2022 年 10 月 3 日,Linux 內核增加了對 Rust 代碼的支持,此前不久,微軟 Azure 首席技術官馬克·魯西諾維奇(Mark Russinovich)曾主張新的編程項目應該用 Rust 而不是 C 或 C++ 來編寫。
“為了安全性和可靠性,行業應該宣布這些語言已經過時,”魯西諾維奇說。
他的理由是,Rust 代碼可以編寫得避免困擾 C 和 C++ 代碼的內存安全漏洞(例如緩沖區溢出),這些漏洞是大型項目中大多數嚴重漏洞的根源。這種觀點隨后得到了世界各地政府安全機構的支持。
Linus:有些人不希望 Rust 侵入他們的領域
那些編寫 C 和 C++ 代碼的人注意到了對 Rust 日益增長的興趣,并承認需要解決內存安全問題。因此,有許多項目正在進行中,例如 TrapC、FilC、Mini - C 和 Safe C++,旨在使 C 和 C++ 更不容易受到內存漏洞的影響,此外還有像 DARPA 的 TRACTOR 這樣的努力,以自動將 C 代碼轉換為 Rust。
在菲略去年宣布退出 Rust for Linux 之后不久,Linux 領袖林納斯·托瓦爾茲(Linus)在奧地利維也納的 Linux 基金會開源峰會上,就 C 和 Rust 開發者之間的摩擦發表了看法。
“顯然,有些人就是不喜歡 Rust 的概念,也不希望 Rust 侵入他們的領域,”托瓦爾茲說,“甚至有人在談論 Rust 集成是一個失敗……我們已經做了兩年了,現在就說這個還為時過早,但我認為,即使它最終成為一個失敗——而我不認為它會——這也是學習的過程?!?/span>
到目前為止,Linux 開發者社區已經了解到 Rust 并不總是受歡迎的。
剛剛!馬丁請求辭去Linux內核維護者的職務
最新消息,本周五(2月7日發搞當天),赫克托·馬丁已請求辭去 Linux 維護者的職務。
圖片
“我對內核開發流程或社區管理方式已經沒有任何信心了,”他在給 Linux 內核郵件列表的信中寫道。
“蘋果/ARM 平臺的開發將繼續在下游進行。如果我以后自己想為任何子樹提交一些補丁到上游,我可能會,也可能不會。任何愿意自己為上游提交而戰的人都可以這么做?!?/span>
參考鏈接:https://www.theregister.com/2025/02/05/mixing_rust_and_c_linux/?td=rt-3a