今天小編分享的科技經驗:取代C++!3.6萬行Rust代碼改寫Windows内核,這門語言最早竟用來修電梯,歡迎閲讀。
取代 C++,Rust 真的要重寫萬物了!
在得到 Linux、谷歌、亞馬遜雲等大廠青睐後,最近的爆炸消息——
微軟已經用 3.6 萬行 Rust 代碼改寫了 Windows 内核。
而且推進速度相當快,4 月劇透消息,過了兩周,Windows 11 内部預覽版已經用上了。
微軟雲 Azure CTO 在推特上激動喊話:
如果你加入了 Windows 11 Insider Preview 内測,你将首次體驗到 Rust 支持的 Windows 内核!
重寫的内核中,主要包括 DWriteCore 以及 Win32 GDI 兩個項目,并通過了 Windows 開機所有測試。
其中,Win32 GDI 寫于上世紀 80 年代末 90 年代初,是年資 30 多年的老代碼了。
如今之所以被 Rust 取代,微軟給的理由簡單粗暴:
Rust 語言有着極高的内存安全性,原來内核中大量的不安全的子例程也在改寫後消失不見。同時,Rust 語言更簡潔高效。
公開資料還表示,随着時間的推移,Windows 内核對 Rust 的采用将被大幅擴展。
不光是大廠喜愛,Rust 還連續多年成為 Stack Overflow 開發者調查中 " 最受歡迎的編程語言 "。最近 Unix 系統的基礎工具 sudo 和 su 也要用 Rust 重寫了。
不過有點意外的是,Rust 最初被發明出來,竟然是為了修電梯???
怒爬 21 層樓後決定開發新語言
萬事起源只在于 2006 年的某天,一位名叫格雷頓老哥(Graydon Hoare)住的那棟公寓,電梯又壞了。
第 n 次,他一邊罵罵咧咧一邊努力爬向自己位于 21 樓的家。他想不通,電梯系統咋就這麼容易崩潰呢?不應該呀!
作為一名大廠碼農,格雷頓老哥覺得,這事兒不是不能解決。
當時他 29 歲,正在開源網頁浏覽器 Mozilla 公司(火狐背後的公司)打工。作為業内人士,他深知大多數的電梯故障,都是編寫程式的語言很容易意外引入内存錯誤,從而引發軟體崩潰。
而當時電梯軟體往往是用 C 或 C++ 語言編寫。
它們的優點是緊湊、快速,但問題是非常容易引發内存錯誤,導致系統崩潰,甚至是安全問題。
所以一不做二不休,格雷頓老哥為了不再爬樓,幹脆決定搞個新編程語言出來。
目标就是不容易内存錯誤的語言,最好更短、更快。
于是,Rust 語言誕生了。
而且 Rust 的取名,也很有意思。
Rust 和一種真菌同名,中文學名植物鏽病,格雷頓評價其 " 為了生存而過度設計 "。
這種真菌生物結構完全是分布式的,空間上無單點失敗,也就是説單獨去掉哪部分都不影響它的存活,魯棒性賊強。
在全生命周期中,Rust 真菌共有 5 種生命形态,其中 3 種形态還能倒退回上一形态,幾乎等同于蝴蝶還能變回毛毛蟲重新生長。
而且,Rust 真菌可以多宿主寄生,恰能映射 Rust 語言對語言間互操作性的重視。
△患有 Rust 的植物(密恐患者們對不起了!)
在單槍匹馬個人開發幾年後,2009 年,Rust 得到 Mozilla 公司研究院的支助;2010 年項目對外公布。
研發過程中,Rust 已經建立了一個活躍度極高的社區,任何開發者都可以直接給這個項目提 bug,或者直接貢獻源碼。
2015 年 5 月,Rust 的 1.0 版正式發布。
僅僅一年光景,Rust 就吸納了無數的擁趸。2016 年起,它連續 7 年被 Stack Overflow 開發者調查評為" 最受歡迎的編程語言 "。
連續榮登榜首所依仗的優點,一是運行速度快,二是内存利用率高,三是防止段錯誤。
簡而言之,是在某些部分可以取代 C/C++ 的利器。
所以代碼江湖流傳着一種説法,把 Rust 比作跑酷,可以做高危險動作,但是不太容易傷害到自己。
相比之下,C++ 可以看作是在玩帶火的電鋸。
而憑借着開發 Rust,格雷頓老哥也一戰成名。
之後幾年内,他還參與了 Swift 的開發。
説來這也是一段有意思的故事。相比于當團隊 leader,老哥似乎更喜歡做一線開發。
他曾在回應 " 為什麼離開 Rust 團隊 " 中表示,2013 年前後那段時間個人情感生活遭受重創(離婚),導致他沒有太多精力負責 Rust 團隊,後面他還在 Mozilla 總做了些低調且不着急上線的項目,然後就離職了。
直到 2016 年初,他接到了蘋果團隊的一個電話,表示正在找幫忙開發 Swift 的程式員," 是一個非領導職位,我更喜歡 "。
靠着安全性成為大廠寵兒
但到這裏,Rust 的傳奇故事才説了一半。
憑借着 " 安全性高 " 的初衷,近幾年它在大廠中的受歡迎度也越來越高。
不僅是 Windows,Linux、Android 這些主流系統也都先後擁抱 Rust。亞馬遜雲、微軟、谷歌和 Rust 的關系也一直不錯。
之所以會如此,主要原因或許還是 C/C++ 在内存安全方面,真的不太行。
比如微軟幾年前就對 Rust 很感興趣了,他們将其認定為產品交付前消除内存安全漏洞的好辦法。
2019 年,微軟承認其產品被 CVE 披露的漏洞中,有 70% 是因為使用 C/C++ 後導致的内存安全漏洞。
而 Rust 工具鏈關注揪出代碼中的潛在漏洞,這在理想情況下能減少代碼被黑客攻擊的可能。
另一邊,Linux 内核也已引入 Rust。
去年,由 Linux 基金會主辦的 2022 開源峰會上,Linus 老爺子突然官宣,也許下一個版本就要把 Rust 加入進來了!
這意味着官方将把 Rust for Linux 的 PR 合并到 Linux 内核的主線裏。
(Rust for Linux 是一個呼籲 Linux 和 Rust 結合的組織)
要知道,此前光是 Rust 的支持補丁就已發布到第七版了。
當時現場聽到這一消息,立刻掌聲雷動,以至于 Linus 花了好一會兒才讓大家平靜下來。
幾個月過後,Linux 6.1 版本發布,内核增加了 Rust 支持,成為了 C 語言之外的第二種官方語言。
谷歌這邊的動作其實更早。
2021 年 Android 12 發布,即宣布支持 Rust。從這以後,他們就一直在 Android 開源項目中擴大 Rust 的使用。
不過谷歌的做法不是立刻讓 Rust 來替代 C/C++,而是新代碼用 Rust 來寫。
從官方發布的數據裏可以看到,C 和 C++ 還是占主導地位,Rust 的比例在逐步提升。
而截止去年年底,谷歌表示,Android 中用 Rust 寫的部分,還沒有發現任何安全漏洞。
這個結果非常重要,因為它意味着 Rust 能有效防止 Android 中最常見的漏洞——也就是内存安全漏洞。谷歌 22 年的數據顯示,内存安全漏洞在各類漏洞中的占比都非常高。
在許多 C/C++ 寫的組件中(如藍牙、NFC 等),每一千行代碼中就會有 1 個漏洞。按照這個比例來換算,Rust 很可能已經阻止了數百個漏洞。
以及基于它高并發的優點,在 Android 中使用 Rust,還能進一步平衡系統安全和延遲,一般來説一些安全措施會導致編程語言變慢。
比如使用新的 UWB 堆棧,可以節省幾兆内存,并通過現有進程運行來避免一些 IPC 延遲。
亞馬遜雲對 Rust 也格外喜歡,因為它在節省能源上同樣表現很 nice。
一項研究測試了 27 種編程語言,結果發現 C 和 Rust 在能源利用方面,比 Java 高效 50%,比 Python 高效 98%。
但 C 的問題已經説了很多遍了,内存安全漏洞多,所以綜合這麼一看,Rust 又赢了。
實際上,大廠們對 Rust 已經不只是青睐,甚至是寵愛了。
2020 年,Rust 背後公司 Mozilla 宣布大規模裁員,Rust 團隊被裁掉,Rust 的命運陷入巨大的不确定中。
為了規避掉這種隐憂,亞馬遜、微軟、谷歌、華為等大廠,直接共同發起了一個 Rust 非盈利基金會。承諾兩年内投入約 100 萬美元預算,支持 Rust 項目維護。
而在業内,Rust 的事迹更是數不勝數。
最近,兩個類 Unix 的核心實用程式 sudo 和 su 正在用 Rust 重寫中;此前,GitHub 痛改自家搜索引擎基于 Rust;Discord 一個 Go 服務也用 Rust 重寫了……
(歪樓一下,Rust 在加密貨币領網域也很受歡迎)
不過,Rust 也存在缺點,比如學到後面會比較難,剛上手的開發速度也比 Go、Java 慢很多。
所以 Rust 好評度高,但是 " 賣座率 " 還比較一般,甚至會被打上 " 冷門語言 " 的标籤。
尤其是國内對 Rust 招聘,簡直可以用 " 少得可憐 " 來形容。
有網友抱着悲觀态度:
為此,Rust 也在進一步優化自身。
根據其發布的 Rust 2024 路線中,官方團隊将在降低學習門檻、壯大生态連接等方面加大努力。
所以,後面 Rust 會怎麼走下去,也還是值得期待了 ~
參考鏈接:
[ 1 ] https://www.thurrott.com/windows/windows-11/282995/first-rust-code-shows-up-in-the-windows-11-kernel
[ 2 ] https://www.technologyreview.com/2023/02/14/1067869/rust-worlds-fastest-growing-programming-language
[ 3 ] https://www.reddit.com/r/rust/comments/7qels2/i_wonder_why_graydon_hoare_the_author_of_rust/
[ 4 ] https://arstechnica.com/information-technology/2023/05/two-core-unix-like-utilities-sudo-and-su-are-getting-rewrites-in-rust/
[ 5 ] https://security.googleblog.com/2022/12/memory-safe-languages-in-android-13.html?m=1
[ 6 ] https://aws.amazon.com/cn/blogs/opensource/sustainability-with-rust/