微軟正在用 Rust 編程語言重寫核心 windows 庫。
在以色列特拉維夫舉辦的 BlueHat IL 2023 上,Windows 操作系統安全總監 David “dwizzle” Weston 宣布 Rust 進入操作系統內核。
“實際上,在接下來的幾周或幾個月內,你將在內核中使用 Rust 啟動 Windows,這真的很酷,”他說。“這里的基本目標是將其中一些內部 C++ 數據類型轉換為它們的 Rust 等價物。”
1、微軟:有“分寸”地擁抱 Rust
微軟的這一舉措并非一時興起,早在幾年前,微軟就表現出了擁抱 Rust 的意向。
在微軟看來,這門語言是一種在代碼落入用戶手中之前捕獲和消除內存安全漏洞的方法。簡單來說,Rust 專注于內存安全和類似的保護,這減少了結果代碼中不良錯誤的數量。
Windows 的 Rust 改造始于 2020 年,由 DWriteCore 開始。DWriteCore 是 Windows 的 DWrite 引擎的 Windows App SDK 實現,用于文本分析、布局和渲染。DWriteCore 現在由大約 152000 行 Rust 代碼和大約 96000 行 C++ 代碼組成。
隨著行業對內存安全編程的支持越來越多,微軟對 Rust 的探索變得更加熱情。
Microsoft Windows 圖形設備接口 (Win32 GDI) 正在移植到 Rust 上,到目前為止已包含 36000 行 Rust 代碼。最新版本的 Windows 11 使用 Rust 版本啟動,該版本通過了所有 GDI 測試,但 Rust 端口目前在功能標志后面被禁用。另據 Weston 透露,Windows 內核中現在有一個 SysCall,是采用 Rust 實現的。
當然,微軟對 Rust 的這種擁抱還是有限度的。正如 Weston 所說,“在 Rust 中重寫 Windows 可能不會很快發生。雖然我們喜歡 Rust,但我們需要一種策略,包括保護更多的原生代碼。”
2、社區:來自巨頭的支持不可或缺
盡管來自微軟的支持是有限的,但其代碼貢獻也將使 Rust 更有活力,這對于整個開源社區的發展是積極向上的。
Python/ target=_blank class=infotextkey>Python Web 框架 Flask 的作者 Armin Ronacher 在一封電子郵件中表示,微軟對 Rust 的承諾對這門語言來說非常棒。
“特別是,因為我希望微軟重用現有的編譯器,我希望這樣做將帶來更好的 PDB(程序數據庫)支持,”他說。“今天在 Windows 上,開發人員工具支持落后于基于 DWARF 的‘使用屬性記錄格式進行調試’平臺支持。”
Pydantic 的創始人 Samuel Colvin 則在接受外媒采訪時表示:“微軟的這種前瞻性思維給我留下了深刻的印象……如果你現在正在構建一個性能關鍵或低級別的應用程序,那么 Rust 在這一點上是不費吹灰之力的。”
同時,他認為,找到優秀的 Rust 工程師比找到優秀的 C/C++ 工程師更容易。雖然擁有豐富 Rust 經驗的人較少,但有很多工程師有興趣嘗試學習這門語言。而且編寫安全代碼的難度很大,在 Rust 中要容易一個數量級。
“對于我們這些依賴 Rust 的人來說,微軟正在使用它,并希望能夠支持它,這真的很令人興奮。”
3、名聲漸起但紛爭不斷
近年來,Rust 輿論聲量日益漸漲,在火了的同時發展也漸趨穩定。
在 Tiobe 發布的四月編程語言排行榜中,Rust 進入了前 20 名,盡管差不多是守門員的位置(位列 19),但也可以窺見其發展態勢。
圖源:TIOBE Index - TIOBE
或許可以歸因于之前 linux 內核 6.1 版正式采用了 Rust,為使用 Rust 編寫驅動程序掃清了一部分障礙。不過日前 Rust 基金會關于商標政策的迷之操作一度引發社區爭議,“平穩發展中又暗流涌動”或許可以概括 Rust 的現狀。
而且隨著 Rust 逐漸冒頭,C++ 與 Rust 之間也是硝煙彌漫。
去年微軟 Azure 的首席技術官 Mark Russinovich 公開表示,開發人員應該避免在新項目中使用 C 或 C++,而是使用 Rust,因為它具有內存安全優勢,甚至敦促業界宣布棄用這些語言。
隨后 C++ 之父 Bjarne Stroustrup 在接受采訪時隔空回懟:“新語言通常需要多年時間和重大努力才能在其廣泛的應用領域與成熟語言相匹配。愛好者很少看到這一點,并且他們的評論往往是片面的。”
值得一提的是,C++ 在年初時被 Tiobe 評為 2022 年度最佳編程語言。當時 Tiobe 首席執行官 Paul Jensen 如此評價:“C++ 流行的原因是它作為一種高級面向對象語言的出色性能。因此,可以用 C++ 開發快速而龐大的軟件系統(超過數百萬行代碼),而不大會出現‘維護噩夢’。”
雖然雙方各執一詞,但就現狀來看,Rust 還無法撼動 C++ 的地位。相較 C++ 的歷史沉淀,Rust 的流行明顯還需時日。而且 Rust 陡峭的學習曲線也限制了其快速的規模化普及。曾有開發者感慨:“試圖用 Rust 重寫公司核心組件,學習曲線是真的陡,JAVA 用了一周上手,Rust 用了一個月才玩明白。”
4、從小眾走向大眾尚需時日
除了新手不友好外,關于 Rust 在長時間內“叫好不叫座”的原因,近日,前 Deepin CTO 王勇也在推特上分享了自己的觀點:Rust 語言很有力量,但他對這個語言并不感冒。原因如下:
1、世界上有很多業務性的邏輯是需要創造力和編程心流體驗的,而 Rust 編譯器總是打斷你方向性的思考, 強制讓你關注設計階段不重要的細節,喪失了很多編程樂趣。
圖源:推特
2、Rust 社區的人似乎不懂得市場經濟和成本概念,一個好的軟件不僅僅只是內存安全和絕對性能,代碼可讀性,場景適合性,認知深刻和持續維護的軟件對用戶才有價值,重寫完一個軟件,證明 Rust 比別的語言快和自己厲害,馬上就棄坑的軟件沒有價值。
3、Rust 社區推崇內存的細膩控制,有時候就和 C++ 的開發人員一樣討厭,把指針或者生命周期控制能力當作比較的炫耀資本,Rust 更像是一種證明自己比別人厲害的工具。我不是說 Rust 不好,而是不喜歡這種認為 Rust 就是天下第一的思想,什么都要用 Rust 重寫的想法。
4、Rust 的強制內存管理,在編寫復雜邏輯的時候,編譯器打斷太生硬了,導致人無法安靜的思考最重要的架構設計。Rust 對于底層庫或者實時性這些不需要 GC 或者性能苛刻的場景很適合,為了內存安全可以忍受編譯器嚴格。但是現實大部分場景不是都是內存安全優先的,而是創造力和邏輯清晰優先的。
最后王勇強調,無論學習何種語言,掌握多少種語言,都是為了學習各種語言的設計思想和看問題角度,主要價值在于提升認知。而不是為了在編程語言之爭中踩在制高點抒發優越感。“ 語言只是工具,我們不能拿著錘子到處去攻擊別人炫耀自己,那樣其實很傻。”