
作者 |冬梅
微軟正在推動(dòng)一項(xiàng)可能重塑整個(gè)軟件工程史的長(zhǎng)期工程:在 2030 年結(jié)束前,徹底消除其核心代碼庫(kù)中的 C 和 C++ 代碼,并全面遷移至 Rust 語(yǔ)言。這一目標(biāo)不僅涉及 Windows、Azure 等關(guān)鍵基礎(chǔ)設(shè)施,也意味著對(duì)全球規(guī)模最大的商業(yè)代碼資產(chǎn)之一進(jìn)行系統(tǒng)性重構(gòu)。
1 微軟工程師發(fā)帖稱 2030 年前徹底淘汰 C/C++
這一目標(biāo)并非來(lái)自外界猜測(cè),而是微軟內(nèi)部核心工程負(fù)責(zé)人親自對(duì)外公開表達(dá)的戰(zhàn)略愿景。
近日,微軟杰出工程師(Distinguished Engineer)Galen Hunt 在 LinkedIn 上發(fā)布的一則招聘貼文,將這項(xiàng)雄心勃勃的計(jì)劃首次清晰地呈現(xiàn)在公眾視野中。
![]()
根據(jù) LinkedIn 上的個(gè)人介紹,Hunt 長(zhǎng)期從事系統(tǒng)軟件與操作系統(tǒng)方向的研究與工程實(shí)踐,目前的研究重點(diǎn)集中在將大型語(yǔ)言模型(LLM)引入系統(tǒng)軟件領(lǐng)域,以解決長(zhǎng)期存在的復(fù)雜工程難題。
在微軟期間,他創(chuàng)立并領(lǐng)導(dǎo)了Azure Sphere的開發(fā)團(tuán)隊(duì)。Azure Sphere 是微軟面向物聯(lián)網(wǎng)和嵌入式設(shè)備推出的端到端安全平臺(tái),旨在使任何設(shè)備制造商都能夠構(gòu)建高度安全的設(shè)備。該平臺(tái)系統(tǒng)性覆蓋了微軟提出的“高度安全設(shè)備的七項(xiàng)核心屬性”,成為微軟在設(shè)備安全領(lǐng)域的重要基礎(chǔ)設(shè)施之一。
在此之前,他是微軟研究院新體驗(yàn)與技術(shù)組織(MSR NExT)啟動(dòng)階段的核心領(lǐng)導(dǎo)成員之一,負(fù)責(zé)管理操作系統(tǒng)技術(shù)組。更早時(shí)期,他曾領(lǐng)導(dǎo)微軟研究院雷德蒙德實(shí)驗(yàn)室的操作系統(tǒng)與分布式系統(tǒng)研究團(tuán)隊(duì),長(zhǎng)期深度參與微軟底層系統(tǒng)技術(shù)的前瞻性研究。
其研究與工程工作中一個(gè)重要方向,是探索虛擬機(jī)監(jiān)控器與操作系統(tǒng)內(nèi)核之間的邊界與權(quán)衡。圍繞這一問(wèn)題,他主導(dǎo)了 Drawbridge 項(xiàng)目,嘗試以此構(gòu)建新型計(jì)算系統(tǒng)架構(gòu)。2012 年至 2013 年間,他曾用一年時(shí)間在 Azure 平臺(tái)中將 Drawbridge 應(yīng)用于真實(shí)服務(wù)部署,該技術(shù)隨后也被用于將 Microsoft SQL Service 移植至 Linux 平臺(tái)。
“我的目標(biāo)是在 2030 年之前,消除微軟代碼庫(kù)中的每一行 C 和 C++ 代碼。”
這句話來(lái)自 Galen Hunt 本人。
對(duì)于一家擁有數(shù)十年歷史、代碼規(guī)模以數(shù)億行計(jì)、C/C++ 深度嵌入操作系統(tǒng)、數(shù)據(jù)庫(kù)、編譯器、虛擬化、安全和云基礎(chǔ)設(shè)施的公司而言,這并非一次常規(guī)的技術(shù)升級(jí),而是一場(chǎng)系統(tǒng)級(jí)、組織級(jí)、工具鏈級(jí)的工程革命。帖子全文翻譯如下:
我的團(tuán)隊(duì)現(xiàn)有一名 IC5 首席軟件工程師職位空缺,工作地點(diǎn)位于雷德蒙德,要求現(xiàn)場(chǎng)辦公。
我的目標(biāo)是在 2030 年前消除微軟所有 C 和 C++ 代碼。我們的策略是融合人工智能與算法技術(shù),重寫微軟最龐大的代碼庫(kù)。我們的核心愿景是實(shí)現(xiàn)"1 名工程師、1 個(gè)月時(shí)間、處理 100 萬(wàn)行代碼"。
為完成這項(xiàng)前所未有的任務(wù),我們已構(gòu)建出強(qiáng)大的代碼處理基礎(chǔ)設(shè)施:算法基礎(chǔ)設(shè)施能在海量源代碼上創(chuàng)建可擴(kuò)展的圖譜,而人工智能處理設(shè)施則使我們能在算法引導(dǎo)下,運(yùn)用 AI 智能體進(jìn)行規(guī)模化代碼改造。該基礎(chǔ)設(shè)施核心已廣泛應(yīng)用于代碼理解等領(lǐng)域。
本次招聘的首席軟件工程師,將助力我們升級(jí)基礎(chǔ)設(shè)施,實(shí)現(xiàn)將微軟核心 C/C++ 系統(tǒng)遷移至 Rust 語(yǔ)言的關(guān)鍵目標(biāo)。該職位硬性要求是具備 Rust 系統(tǒng)級(jí)代碼開發(fā)經(jīng)驗(yàn)(最好有 3 年以上 Rust 系統(tǒng)編程經(jīng)驗(yàn)),擁有編譯器、數(shù)據(jù)庫(kù)或操作系統(tǒng)實(shí)現(xiàn)經(jīng)驗(yàn)者優(yōu)先。雖不強(qiáng)制要求編譯器開發(fā)經(jīng)驗(yàn),但候選人需具備在團(tuán)隊(duì)中學(xué)習(xí)該領(lǐng)域技能的意愿。
我們團(tuán)隊(duì)秉持成長(zhǎng)型思維模式,成員背景多元、技能全面、視角獨(dú)特。我們敢于承擔(dān)風(fēng)險(xiǎn),擅于協(xié)作共贏,始終致力于為內(nèi)外部客戶創(chuàng)造價(jià)值。在不斷變革的 AI 工具領(lǐng)域,我們深刻認(rèn)識(shí)到多元化和成長(zhǎng)型思維是成功的關(guān)鍵。
本團(tuán)隊(duì)隸屬于微軟 CoreAI 旗下 EngHorizons 組織的"可擴(kuò)展軟件工程未來(lái)"項(xiàng)目組,核心使命是通過(guò)構(gòu)建先進(jìn)能力,幫助微軟及客戶實(shí)現(xiàn)規(guī)模化技術(shù)債務(wù)消除。我們通過(guò)與內(nèi)部客戶及合作伙伴共同研發(fā)前沿工具與技術(shù),并協(xié)同各產(chǎn)品團(tuán)隊(duì)將這些創(chuàng)新成果推廣至微軟乃至整個(gè)行業(yè)。
從組織架構(gòu)上看,Hunt 所在團(tuán)隊(duì)隸屬于微軟 CoreAI 體系下的 Engineering Horizons 部門,項(xiàng)目名稱為“可擴(kuò)展軟件工程未來(lái)”。這一定位并非某個(gè)具體產(chǎn)品線的研發(fā)團(tuán)隊(duì),而更像是一個(gè)面向未來(lái)的軟件工程能力孵化組織,其目標(biāo)并不局限于單一系統(tǒng)的遷移,而是試圖構(gòu)建可在整個(gè)微軟內(nèi)部乃至外部客戶中推廣的通用能力。
2 為什么要遷移?
事實(shí)上,Hunt 此次公開表態(tài),也被視為微軟高層此前相關(guān)表述的延續(xù)。該訊號(hào)最早放出的時(shí)間要追溯到 2023 年。早在 2023 年,微軟就宣布將使用 Rust 重寫部分 Windows 內(nèi)核。
![]()
微軟副總裁 David Weston 在微軟 Blue Hat IL 2023 上透露,微軟將效仿 Linux,用 Rust 重寫 Windows 內(nèi)核的部分代碼。
“我們目前正處于 Rust 在 Windows 中應(yīng)用的‘爬行、行走、奔跑’階段,” Weston 在微軟 BlueHat IL 2023 大會(huì)上表示。“我們正在開發(fā)地球上最復(fù)雜的工程產(chǎn)品之一。但我們的目標(biāo)是提高安全性……因此,在接下來(lái)的幾周或幾個(gè)月內(nèi),外界很可能會(huì)看到內(nèi)核中使用 Rust 啟動(dòng) Windows,這真的很棒。我們的基本目標(biāo)是將一些內(nèi)部 C++ 數(shù)據(jù)類型轉(zhuǎn)換為相應(yīng)的 Rust 數(shù)據(jù)類型。”
當(dāng)時(shí),他展示的示例代碼說(shuō)明了要遷移編程語(yǔ)言的部分原因:Rust 代碼比當(dāng)前的 C++ 代碼更容易編寫和理解。它也更安全可靠:對(duì)于不熟悉 Rust 的人來(lái)說(shuō),它是一種現(xiàn)代的類 C 編程語(yǔ)言,深受開發(fā)者喜愛,因?yàn)樗鼜?qiáng)制創(chuàng)建安全、原生的代碼,而無(wú)需像托管語(yǔ)言那樣增加額外的開銷。
據(jù) Weston 稱,微軟已經(jīng)用 Rust 重寫了 Windows 內(nèi)核中的 36000 行代碼,此外還用 Rust 重寫了用于概念驗(yàn)證的 DirectWrite Core 庫(kù)的 15.2 萬(wàn)行代碼,并且性能非常出色,與舊的 C++ 代碼相比沒有任何退化。他還指出,“現(xiàn)在 Windows 內(nèi)核中有一個(gè)用 Rust 編寫的系統(tǒng)調(diào)用。” 系統(tǒng)調(diào)用(或稱系統(tǒng)調(diào)用)是用戶模式應(yīng)用程序與內(nèi)核內(nèi)部函數(shù)交互的方式(簡(jiǎn)單來(lái)說(shuō))。
除了 Weston 外,微軟 Azure CTO、技術(shù)院士 Mark Russinovich 也曾公開表示,要停止使用 C 和 C++ 進(jìn)行新的內(nèi)核開發(fā),他表示末來(lái)所有用于 Windows 和 Azure 的新內(nèi)核代碼都應(yīng)該用 Rust 編寫。微軟正在利用大型語(yǔ)言模型推動(dòng)更加自動(dòng)化的 C 和 C++ 到 Rust 的轉(zhuǎn)換流程,以提升系統(tǒng)安全性與工程可維護(hù)性。
從時(shí)間線上看,Russinovich 的發(fā)言更多指向方向性探索,而 Hunt 的招聘和基礎(chǔ)設(shè)施描述,則標(biāo)志著這一方向已經(jīng)進(jìn)入工程化推進(jìn)階段。
至于為何將 Rust 作為遷移目標(biāo)語(yǔ)言,微軟并未在此次帖子中展開詳細(xì)論證。但結(jié)合過(guò)去數(shù)年的技術(shù)趨勢(shì),其動(dòng)機(jī)并不難理解。
微軟在多份安全報(bào)告中反復(fù)指出,絕大多數(shù)高危安全漏洞源于內(nèi)存安全問(wèn)題,而這恰恰是 C/C++ 長(zhǎng)期存在的結(jié)構(gòu)性弱點(diǎn)。
以 2019 年為例,微軟工程師 Matt Miller 在某安全會(huì)議上披露,過(guò)去 12 年間,微軟每年通過(guò)安全更新修復(fù)的漏洞中約有 70% 屬于內(nèi)存安全問(wèn)題。
![]()
所謂“內(nèi)存安全”,是指應(yīng)用程序以正確規(guī)范的方式訪問(wèn)操作系統(tǒng)內(nèi)存;而“內(nèi)存安全漏洞”則指軟件意外或故意越界訪問(wèn)系統(tǒng)內(nèi)存的行為。
![]()
經(jīng)常查閱漏洞報(bào)告的技術(shù)人員會(huì)頻繁接觸到以下術(shù)語(yǔ):緩沖區(qū)溢出、競(jìng)態(tài)條件、頁(yè)面錯(cuò)誤、空指針、棧耗盡、堆耗盡 / 損壞、釋放后使用或雙重釋放等——這些實(shí)質(zhì)上都是內(nèi)存安全漏洞的不同表現(xiàn)形式。
如此高比例的漏洞根源在于,主要采用 C/C++ 編寫的 Windows 系統(tǒng)建立在“內(nèi)存不安全”的編程語(yǔ)言基礎(chǔ)之上。這類語(yǔ)言雖然賦予開發(fā)者精細(xì)控制內(nèi)存地址的能力,但內(nèi)存管理代碼中的任何細(xì)微疏忽都可能導(dǎo)致嚴(yán)重漏洞。攻擊者常利用此類漏洞實(shí)施遠(yuǎn)程代碼執(zhí)行、權(quán)限提升等危險(xiǎn)入侵。當(dāng)前,內(nèi)存安全漏洞已成為黑客最主要的攻擊入口,其中釋放后使用和堆損壞漏洞尤其受到攻擊者青睞,成為其開發(fā)攻擊程序時(shí)最常利用的突破口。
Rust 通過(guò)所有權(quán)模型和編譯期檢查機(jī)制,在語(yǔ)言層面系統(tǒng)性降低了內(nèi)存錯(cuò)誤和數(shù)據(jù)競(jìng)爭(zhēng)風(fēng)險(xiǎn),這對(duì)于操作系統(tǒng)、云基礎(chǔ)設(shè)施和虛擬化平臺(tái)而言,具有直接且可量化的安全收益。
更重要的是,微軟面對(duì)的是一個(gè)跨越數(shù)十年的超大型遺留系統(tǒng)集合。在這種背景下,Rust 在類型系統(tǒng)、工具鏈一致性和長(zhǎng)期維護(hù)成本方面的優(yōu)勢(shì),也被視為解決技術(shù)債務(wù)問(wèn)題的重要路徑。Hunt 所在團(tuán)隊(duì)在帖子中反復(fù)提及“規(guī)模化消除技術(shù)債務(wù)”,正是這一邏輯的直接體現(xiàn)。
當(dāng)然,這一目標(biāo)也并非沒有現(xiàn)實(shí)挑戰(zhàn)。C/C++ 在微軟核心系統(tǒng)中的滲透深度極高,涉及性能約束、ABI 兼容性以及復(fù)雜的第三方生態(tài)。自動(dòng)化改寫帶來(lái)的正確性驗(yàn)證、回歸測(cè)試和風(fēng)險(xiǎn)控制,同樣是難以回避的工程難題。
即便如此,微軟仍選擇將這一目標(biāo)公開化,并綁定明確的時(shí)間表。
在軟件工程領(lǐng)域,這種做法本身已釋放出一個(gè)強(qiáng)烈信號(hào):隨著人工智能與系統(tǒng)工程的深度融合,長(zhǎng)期被視為“不可觸碰”的遺留代碼資產(chǎn),正在被重新納入可規(guī)模化治理的范疇。如果 Galen Hunt 所描繪的愿景最終得以實(shí)現(xiàn),這不僅將成為一次語(yǔ)言遷移的成功案例,更可能成為 AI 深度介入系統(tǒng)級(jí)軟件工程的標(biāo)志性事件。
2030 年尚未到來(lái),但這場(chǎng)圍繞代碼、工具和工程范式的變革,已經(jīng)在微軟內(nèi)部悄然啟動(dòng)。
3 “內(nèi)存安全問(wèn)題”都是 C++ 的鍋?
對(duì)于微軟下如此大決心要徹底逃離 C/C++,技術(shù)社區(qū)反響強(qiáng)烈。
其實(shí)早在兩年前,微軟 Azure 首席技術(shù)官 Mark Russinovich 就曾公開呼吁“在新項(xiàng)目中停止使用 C/C++”,當(dāng)時(shí)他的言論引發(fā)了 C++ 愛好者的強(qiáng)烈抗議,其中許多人來(lái)自金融服務(wù)行業(yè)。
“C++ 本身沒問(wèn)題,只是很多使用它(以及其他語(yǔ)言)的人實(shí)際上并不懂編程,”一位愛好者說(shuō)道。
“我承認(rèn),編寫優(yōu)秀的 C++ 代碼需要優(yōu)秀的開發(fā)者,而且找到能編寫優(yōu)秀 Rust 代碼的開發(fā)者可能要容易得多。但是,編寫出極其穩(wěn)定、高度抽象、易于維護(hù)且運(yùn)行速度快的 C++ 代碼是完全可能的,”另一位愛好者說(shuō)道。“只是能寫出優(yōu)秀 C++ 代碼的人不多。”
Russinovich 的言論甚至引來(lái)了 C++“之父” Bjarne Stroustrup 的回懟。
“我們現(xiàn)在可以在 ISO C++ 中實(shí)現(xiàn)絕對(duì)的類型安全和內(nèi)存安全,”Bjarne Stroustrup 在接受媒體采訪時(shí)說(shuō)道。Stroustrup 還補(bǔ)充說(shuō):“也就是說(shuō),每個(gè)對(duì)象都按照其定義時(shí)的類型使用。這意味著我們可以消除懸空指針的使用,捕獲范圍錯(cuò)誤,并消除數(shù)據(jù)競(jìng)爭(zhēng)。”
在 Reddit 平臺(tái)上,有用戶創(chuàng)建了一篇帖子探討了 Mark Russinovich 的決定。該用戶稱,“作為一名與 C 語(yǔ)言相伴多年的開發(fā)者,此感到非常難以接受。我內(nèi)心充滿復(fù)雜情緒——既理解時(shí)代趨勢(shì)的必然,又對(duì)這段陪伴職業(yè)生涯的語(yǔ)言歷史懷有深切眷戀。”
也有 Reddit 用戶表示,C 語(yǔ)言擁有多種應(yīng)用場(chǎng)景,這是 Rust 無(wú)法取代的:
C 語(yǔ)言擁有多種應(yīng)用場(chǎng)景,這是 Rust 無(wú)法取代的。引導(dǎo)程序就是其中之一,它具有非常優(yōu)秀的編譯性能,并且對(duì)于一個(gè)不完全兼容的編譯器來(lái)說(shuō)復(fù)雜度很低(宏的復(fù)雜性和某些未定義行為非常復(fù)雜)。 添加更多功能只會(huì)讓編譯器編譯速度變慢,并且占用更多內(nèi)存。 Rust 沒有線性生命周期類型來(lái)保證不存在內(nèi)存泄漏,也沒有非仿射類型來(lái)證明對(duì)于給定的循環(huán)分配模式抽象不存在未定義行為。 這使得 Rust 僅具有更強(qiáng)大的類型系統(tǒng)優(yōu)勢(shì)(許多其他語(yǔ)言也修復(fù)了這一點(diǎn),但 C 拒絕修復(fù)語(yǔ)義錯(cuò)誤的代碼),而其他語(yǔ)言也具有這種優(yōu)勢(shì)。
如今微軟這一戰(zhàn)略轉(zhuǎn)向更是引發(fā)了廣泛討論。有 Reddit 用戶犀利反駁:“真正的安全在于嚴(yán)謹(jǐn)?shù)墓こ虒?shí)踐而非語(yǔ)言本身,難道 Java 項(xiàng)目就沒有漏洞了嗎?” 他強(qiáng)調(diào):
我并非 Rust 程序員,但認(rèn)為人們將其作用過(guò)度神化了——它并非萬(wàn)能靈藥。例如“棧耗盡”和“堆耗盡”這類問(wèn)題,在我看來(lái) Rust 并未提供新的解決方案。實(shí)際上,諸如堆耗盡及其他各類復(fù)雜漏洞,本就需由經(jīng)驗(yàn)豐富的程序員在關(guān)鍵軟件開發(fā)中專門應(yīng)對(duì)。因此,額外關(guān)注內(nèi)存漏洞并不會(huì)讓本就錯(cuò)綜復(fù)雜的故障排查工作變得更加困難。 需要說(shuō)明的是,我始終肯定靜態(tài)分析的價(jià)值。它不僅在內(nèi)存漏洞檢測(cè)方面,在所有開發(fā)場(chǎng)景中都發(fā)揮著重要作用。
一位在微軟工作了 10 年的開發(fā)者在 Hunt 的 LinkedIn 帖子下方留言稱,曾以為借助 AI 技術(shù)加上 C++ 標(biāo)準(zhǔn)的迭代無(wú)需徹底替換掉它,現(xiàn)在看來(lái)不替換不行了。他表示:
在微軟工作的十年間,我主要從事進(jìn)程內(nèi)存轉(zhuǎn)儲(chǔ)分析工作,后期還開發(fā)了用于自動(dòng)化分析的事后調(diào)試器。這段經(jīng)歷讓我深切感受到,C/C++ 開發(fā)者亟需接受事后調(diào)試相關(guān)的培訓(xùn)——這將幫助他們更清楚地理解“哪些做法應(yīng)當(dāng)避免”。
多年來(lái)我所處理的問(wèn)題類型高度相似,主要可歸結(jié)為三類:崩潰類(如釋放后使用、雙重釋放、緩沖區(qū)溢出導(dǎo)致的堆損壞)、掛起類(如線程失控、死鎖、孤立線程)以及內(nèi)存使用異常(如內(nèi)存泄漏或碎片化)。
我曾以為借助人工智能技術(shù),特別是結(jié)合 C++ 標(biāo)準(zhǔn)的最新演進(jìn),能夠在不必重寫 Rust 代碼的情況下修復(fù)這些代碼庫(kù)問(wèn)題。現(xiàn)在看來(lái)這個(gè)想法似乎過(guò)于樂(lè)觀了。
個(gè)人認(rèn)為,UMDF(用戶模式驅(qū)動(dòng)程序框架)的引入是 Windows 系統(tǒng)最后一次重大變革,它顯著降低了藍(lán)屏死機(jī)(BSOD)的發(fā)生頻率。
https://www.thurrott.com/dev/330980/microsoft-to-replace-all-c-c-code-with-rust-by-2030
https://www.thurrott.com/windows/282471/microsoft-is-rewriting-parts-of-the-windows-kernel-in-rust
https://www.zdnet.com/article/microsoft-70-percent-of-all-security-bugs-are-memory-safety-issues/
聲明:本文為 InfoQ 翻譯整理,不代表平臺(tái)觀點(diǎn),未經(jīng)許可禁止轉(zhuǎn)載。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.