天天看點

華為也為Rust“狂”:揭秘國内唯一Rust基金會創始成員背後的人與事

作者 | 蔡芳芳

前不久,Rust 程式設計語言的審查團隊(Moderation Team)通過 GitHub 宣布集體辭職,在技術圈引發了一場關于開源治理的熱烈讨論。Rust 社群的關注度也随之飙升,相關報道在朋友圈持續刷屏。一位圈内人士對此調侃道:“知道 Rust 火,沒想到能這麼火。”上一次 Rust 獲得這麼高的關注度,還是 2021 年初 Rust 基金會官宣成立的時候。

2021 年 2 月 9 日,Rust 基金會成立,Mozilla、Amazon、華為、谷歌、微軟作為創始白金成員,五家企業承諾在兩年時間裡,每年投入不少于 100 萬美元的預算,用于 Rust 項目的開發、維護和推廣。

對于 Rust 基金會創始成員裡出現華為的身影,不少人感到驚訝,因為大家此前并沒有太多聽說華為在 Rust 項目上的投資(其他四個創始成員公司都有大量的 Rust 項目組成員)。實際上,華為内部有不少用 Rust 寫的産品,比如 StratoVirt,這是華為開源的作業系統 openEuler 旗下基于 Rust 的下一代虛拟化平台,從 2019 年就開始開發。而如果追溯華為最初與 Rust 結緣的契機,甚至早在 2017 年。

近日 InfoQ 有幸對華為開源首席專家、Rust 基金會董事侯培新和多位在華為從事 Rust 開發工作的技術專家進行了獨家專訪,探尋華為大力投入 Rust 社群背後的人和事,進一步了解華為正在開展的 Rust 工作,以及對 Rust 重點技術方向和未來發展的思考。

采訪嘉賓:

PEIXIN HOU(侯培新)博士, 華為開源首席專家,Rust 基金會董事、Linux 基金會董事

Yijun Yu(俞一峻)教授,華為可信程式設計首席專家

Guillaume Gomez,華為 Rust 技術專家,Rust 官方 dev-tools(開發工具團隊)Member,rustdoc 團隊 leader

Amanieu d'Antras 博士,華為 Rust 技術專家,Rust 官方 library team(庫團隊)Member

李原,華為 Rust 工程師,Rust ARM SIMD roadmap 特性主要貢獻者

Rust 邁向新征程

Rust 作為一門通用系統級程式設計語言,由于其出色的記憶體安全機制、不亞于 C 語言的性能優勢等特點,近年來吸引了大量開發人員關注。從正式釋出 1.0 版本之後的 2016 年至今,Rust 已經連續六年在 Stack Overflow 開發者年度調查報告中被評為“最受歡迎”程式設計語言。

除了在開發者群體中頗受歡迎,Rust 也獲得了國内外多家頭部大廠的公開支援。各大廠商紛紛使用 Rust 語言支援從網站到開發者工具、再到電子遊戲的多種應用場景。Facebook 一直在使用 Rust 語言建構 Diem 币(即原 Libra 币);Amazon 則使用 Rust 為其無伺服器平台 Lambda(此平台允許開發者在無需管理底層伺服器的前提下,輕松運作并擴充開發代碼)等産品編寫代碼;微軟公開表示将探索使用 Rust 程式設計語言作為 C、C++ 和其他語言的替代方案,以此來改善應用程式的安全狀況,并展開了一些使用 Rust 重寫 Windows 系統元件的實驗;谷歌也已經開始在那些對記憶體安全和性能要求極高的設定中使用 Rust,包括将其用在關鍵的 Chrome 浏覽器和 Android 系統中。

雖然 Rust 語言本身一直保持良好的發展勢頭,但 Rust 團隊卻在 2020 年經曆了一波動蕩。Rust 初創于 Mozilla,早期非常重要的應用場景就是火狐浏覽器的開發。2020 年 8 月,Mozilla 宣布由于疫情壓力進行組織調整,裁員約 250 人,其中就包括不少 Rust 項目和 Rust 社群的活躍開發人員。這次裁員給 Rust 項目帶來了很多不确定性,也讓社群對 Rust 的未來命運産生了擔憂。

結束這波動蕩的,正是 Rust 基金會的成立,這被許多人視為 Rust 語言未來看漲的信号。

Rust 社群其實早就有推進開放治理、吸引更多玩家參與的想法,2020 年 8 月 Mozilla 因疫情裁員這件事恰好成為一個契機,讓 Rust 社群的成員們加速了這一過程。2020 年下半年,華為在與 Rust 社群成員交流的過程中得知了這一消息。出于對 Rust 語言未來發展的看好以及對 Rust 社群的支援,華為主動加入了這一程序,并将之前參與 Linux 基金會、CNCF 等基金會治理或建立的經驗應用其中。最終 Rust 社群成員們一同促成了 Rust 基金會的成立,華為也成為了創始白金會員。

華為很長時間以來一直都在進行程式設計語言方面的探索,同時也一直在關注 Rust 的發展,在華為的知識共享平台上,關于 Rust 的介紹和分析文章最早可以追溯到 2013 年。早在 2017 年,華為微核心作業系統的原型開發就嘗試過使用 Rust。

據侯培新介紹,華為的業務形态中有大量需要高網絡安全、高性能的場景,網絡安全中由不正确的記憶體通路引起的問題占有相當突出的比例,而 Rust 就是一款以解決程式設計時引入記憶體通路問題、同時保持高性能的系統程式設計語言,這和華為的目标場景高度比對。這兩年業界對記憶體安全問題的重視程度日益提高,再加上 Rust 語言本身逐漸成熟,華為已經有越來越多的産品和平台開始使用 Rust 開發。

Rust 基金會成立前後,矽谷同步掀起了一場 Rust 人才争奪大戰。不少原 Rust 團隊的活躍開發人員紛紛轉而加入谷歌、微軟、Amazon、Facebook 等科技巨頭,華為也招募了部分 Rust 官方團隊的人才。而 Rust 人才的動向,實際上标志着該語言社群在發展程序中迎來了新的轉折點。

侯培新認為,Rust 語言的迅猛發展得益于大量個人貢獻者,這使得 Rust 社群具有相當高的開放性及多元化的特點。同時,一項開源技術的長遠發展也離不開大量商業公司的使用和持續投資,是以一些 Rust 開發者被商業公司招聘并繼續在社群專職投入,是對社群與技術可持續發展非常好的保證。而這些開發者在解決商業公司遇到的技術問題的同時,也會将其落入社群的版本與技術路标中,更能增加 Rust 在大規模商用場景下的效率與技術韌性,結果将是雙赢的。在他看來,Rust 基金會的成立就是為了保證 Rust 技術與社群能夠不斷獲得資金、開發者拓展、品牌等方面的支援,同時 Rust 基金會開放治理的章程與架構也會盡量避免某一家機構對社群的壟斷與掌控,確定 Rust 的開放性與多元化。

為了讓 Rust 社群中衆多來自全球各地、擁有不同文化背景和個性的個人開發者能得到更好的支援,Rust 基金會一方面于近期推出了社群資助計劃,為社群及相關生态系統的維護者們提供資金支援(華為也是這一計劃的首批贊助者之一);另一方面也在協助社群的團隊成員們梳理、調整社群的治理架構,確定 Rust 的長遠發展。

作為 Rust 基金會創始成員中唯一一家中國技術公司,接下來華為會積極承擔 Rust 在中國大規模推廣與生态建構的職責,包括發掘、賦能更多國内開發者及應用場景,并推動中國從使用者向貢獻者轉變。

華為圍繞 Rust 的技術探索

目前在華為内部,Rust 主要用于嵌入式系統開發、系統驅動、雲計算、虛拟存儲、網絡傳輸協定、并發程式設計架構基礎庫等産品中。同時,華為的可信理論、技術與工程實驗室正在基于 Rust 進行軟體工程能力的建構,并展開公司内部能力提升相關工作,包括探索先進的代碼解析、安全分析等工具,用于解決已有嵌入式系統的記憶體安全性問題。

華為對 Rust 的探索不止于使用,在 Rust 社群的幾大主要技術方向上,包括語言特性、核心庫、标準庫、基礎庫、文檔和建構工具鍊等方面,華為也規劃和主導了一些很重要的工作。其中包括 C 到 Rust 轉換、内聯彙編、交叉編譯、Parking Lot 并發庫、SIMD 基礎庫、文檔導航、代碼多态化、熱更新檔、AOP、建構優化、克隆檢測、深度學習安全算法識别等等,這裡面有多項特性是 Rust 社群路标圖和 RFC 中标記的重要工作,也正在由華為的 Rust 技術專家主持開發。

這其中既有像李原這樣的萌新,也有像 Amanieu d’Antras 這樣的資深 Rust 專家。

98 年生的李原從開始參與 Rust 社群貢獻至今剛滿一年,但他現在已經是 Rust 社群官方 Roadmap 級特性 ARM SIMD 主要貢獻者。他非常看好 Rust 的發展潛力,并認為 Rust 未來彙成為新一代記憶體安全系統程式設計語言,它可以更好地解決傳統系統語言(如 C 語言)無法解決的記憶體洩漏、緩沖區溢出等安全問題。

李原在 Rust 社群的工作重點是 Rust SIMD 特性開發,在參與 Rust 社群這一年多時間裡,李原解決了諸多 SIMD 特性相關問題,包括 Rust 編譯器 IR 生成機制導緻的部分 SIMD 接口無法實作的問題。單指令多資料流(SIMD)特性之是以重要,是因為它是一種能顯著提升程式效率的計算加速技術,而運作效率又是評價程式和程式設計語言的重要考量。據李原透露,目前 x86 架構上的 SIMD 特性已經可以在 stable 版本編譯器下通過标準庫直接使用,ARM 架構上的 SIMD 特性也即将穩定化。

Amanieu d’Antras 接觸 Rust 的時間要早得多,大概在 2014 年左右,當時他在工作中重度使用 C++,但後來因為 C++ 的複雜性轉而投奔了 Rust 陣營。在他看來,Rust 既保留了 C++ 零成本抽象的核心思想,同時在語言設計上又做了顯著改進,而這些改進對于 C++ 來說是完全不可能做到的。

Amanieu d’Antras 目前的重點工作是提高 Rust 編寫低級代碼(low level code)的可用性,他負責上司一個 Rust 工作組,為 Rust 添加對内聯彙編(inline assembly)的支援。據介紹,目前工作組進展順利,計劃今年年底前在 Rust 穩定版本中提供内聯彙編功能。此外,Amanieu d’Antras 也是 Rust 庫團隊(library team)的成員,負責 Rust 标準庫和一些相關 crate 的維護工作。

Amanieu d’Antras 對 InfoQ 表示,Rust 開發工作中最大的挑戰之一是維護 Rust 的穩定性保證。Rust 提供了非常強大的 API 穩定性保證,確定即使是 2015 年(Rust 1.0 釋出時)編寫的 Rust 代碼也能繼續用最新版本編譯器進行編譯。這意味着一旦庫團隊向标準庫中添加了一個 API,就不得不永遠支援它并且無法更改。“這給庫團隊帶來了很大壓力,因為團隊成員在審查 API 時需要非常小心:我們犯的任何錯誤都可能變成永久性的!”

今年年初華為為 Rust 編譯器送出了一系列代碼,使得 Rust 編譯目标可以支援 ARM AArch64 32 位大端變體 ILP32 晶片組, 使包括華為在内的通信廠商可以在常用網絡硬體架構上執行 Rust 原生程式。這些代碼就是通過 Amanieu d’Antras 送出給 LLVM 編譯器、libc 庫以及 Rust 編譯器等開源項目的。

華為也為Rust“狂”:揭秘國内唯一Rust基金會創始成員背後的人與事

華為員工所做的Rust 開源貢獻(已有工作)

Rust 太難學,有解嗎?

在包括華為在内的所有 Rust 社群成員努力下,Rust 語言正變得越來越成熟和完備,這是 Rust 發展好的一面,但從另一面來看,Rust 的實際使用者增長資料并沒有其他資料看上去那麼美好。

根據 11 月份最新釋出的 TIOBE 程式設計語言排行榜資料,Rust 的占比僅為 0.54%,排名第 29 位。雖然相比今年年初,這個占比資料和排名已經略有提升,但距離排在第 18 位的 Go 語言(相比去年 11 月下降五位,占比 1.21%),還有不小的差距。

華為也為Rust“狂”:揭秘國内唯一Rust基金會創始成員背後的人與事

在去年的 Stack Overflow 開發者年度調查報告中,雖然受訪者們一如既往地将 Rust 評為最喜愛的程式設計語言,但同時有 93% 的受訪者表示并未使用過 Rust,他們對 Rust 語言的喜愛,仍停留在“想學習”的階段。造成這一情況的原因,很大程度上歸咎于 Rust 長期被诟病的學習難度問題。

在 2020 年的 Rust 官方調查中,當受訪者被問及對于提升 Rust 的采用率有何建議時,許多人提到的一個方案是降低 Rust 的學習難度,讓 Rust 更容易學習。其中 15.8% 的受訪者表示,如果 Rust “不那麼令人生畏、更容易學習或不那麼複雜”,他們會更多地使用 Rust。

是以,除了前文提到的圍繞 Rust 核心技術方向展開的工作,華為内部也在圍繞提高 Rust 可學習性做一些技術準備。

首先是針對已有軟體項目的跨語言代碼轉換遷移,華為自研了一套 TXL 代碼轉換工具,實作了從 C 項目到 Rust 項目遷移的能力,并基于模式提升了 C 代碼的安全代碼比例;其次是通過深度代碼學習,讓機器替人學習一些簡單的任務,比如華為自研的深度代碼學習 Corder 工具已經能夠實作 unsafe Rust 代碼自動分類,準确率能夠達到 93% 以上;還有 Rust 文檔方面的優化工作,比如通過生成可互聯的變量類型文檔,使得 rustdoc 更容易導航。Guillaume Gomez 目前在 Rust 社群重點負責的就是 rustdoc 優化工作,進而讓 Rust 文檔更快、更輕量、更具互動性。他既是 rustdoc 團隊負責人,也是 Rust 官方 dev-tools(開發工具團隊)成員。

另外,為了更好地推廣 Rust 最佳實踐,制定 Rust 編碼規範的工作也在穩步推進中。據俞一峻介紹,Rust 編碼規範是由 Rust 專家張漢東和華為内部 Rust 開發者在産品開發過程中協作産生的。去年已經完成了一版,今年在原基礎上又做了重新整理和強化。團隊比照華為内部主流程式設計語言合規要求,以及業界大廠的 Rust 規範,對規範做了擴充和改進,對 unsafe Rust 代碼編碼也做了針對性地規範。

期間,團隊還引入了 Clippy 等規範檢查工具,確定這些編碼規範不僅能指導程式員手工編碼,也能自動挑出違反規範的細節,提升 Rust 開發效率和品質。團隊計劃明年推出 1.0 版本在公司内進一步推廣。

作為 Rust 基金會的一員,華為希望未來也能将這一編碼規範貢獻給社群,與社群共建。華為内部使用的版本将與社群版本同源,不過華為内部使用的規範會更嚴格,會有一些強制不允許違反的規則,以滿足系統軟體開發的品質要求。

根據華為在項目實踐中的統計資料,在上述可學習性優化工作的基礎之上,現有 C/C++ 團隊隻需要 2~4 周時間,就可以貢獻産品化的 Rust 代碼。從編碼、測試、釋出、維護全周期角度看,研發生産率能得到提升,而且記憶體安全可靠的代碼也可以為客戶帶來更高的價值。

俞一峻表示:“很快,學習曲線的問題應該更多會是不想嘗試新事物的借口了。”

“沒有一個語言能夠解決所有問題”

參照 Gartner 的技術成熟度曲線,俞一峻認為,目前 Rust 語言所處的發展階段應該已經過了炒作巅峰的頂點。主要展現在幾個方面:Rust 編譯器的版本已經推出第三個大版本(Rust 2021)對應穩定版 1.56.1,Bug 已經很少了;Rust 庫的數量在開源社群名列最受歡迎的精品,前 100 名的庫的 GitHub Star 至少超過 3000, 前 20 名的庫下載下傳量至少超過千萬;Rust 工具鍊的技術支援很強,大部分 Issue 能夠及時得到解決;跟其他系統程式設計語言相比,Rust 編譯器始終如一,沒有那麼多不同的實作,保證新的語言特性能夠很快讓最多的開發者使用,這一點是在體驗過嵌入式開發五花八門的 C/C++ 編譯軟體版本後才能體會到的優點。而這些都意味着 Rust 已經相對比較成熟。

俞一峻表示還有一個值得一提的趨勢,就是 Linux Kernel 和 Andriod、Fuchsia 等作業系統的部分驅動代碼正在轉向 Rust,在他看來,如果統計使用 Rust 機器的數量,Rust 可能很快就會名列前茅。

雖然對于 Rust 未來的發展非常樂觀,但俞一峻也坦言,作為一個語言,Rust 可改進的技術問題還有很多。比如,如何借鑒一些其他程式設計語言的優點,取長補短?如何確定語言 Unsafe 代碼的安全使用,并證明 Rust 工具鍊本身的安全性?這些都是 Rust 社群需要更多考慮的問題。

此外,Rust 想要被更廣泛地采用,程式設計語言遷移成本是必須面對的一道難關。

Rust 的學習曲線不應該成為阻礙它在已有項目中使用的障礙。但是,任何程式設計語言的遷移都是有成本的,目前華為正在探索的可信代碼平滑遷移工作,目标就是把這個成本降低下來,讓遷移的工作變得不那麼難。俞一峻表示,華為多年積累的 C/C++ 代碼和其他程式設計語言代碼是海量的,讓各個産品線能夠遷移部分安全攸關的代碼到 Rust 是一個巨大的工程,意義重大。

目前團隊主要采取使能的方式,通過開發更好用的遷移工具和更完善的工具支援,使得遷移成本降低到收益以下,這樣才能促使大量的開發者自發遷移。目前華為已經在三個産品中試點了這個遷移工具,并取得了預期的效果,函數接口的 API 安全性已經提升到 95% 以上,同時,轉化後的 Rust 項目功能正确,也能在嵌入式産品上闆運作。對轉化後的 Rust 代碼做進一步重構和優化,以及滿足産品線對 Rust 代碼的定制化要求,是團隊下一階段的工作重點。

俞一峻強調,“沒有一個語言能夠解決所有的問題。在進一步推廣 Rust 應用的同時,我們也應該看到,有些場景不用 Rust 更好,甚至不用代碼更好。”在他看來,這些跨語言解決問題的能力,甚至程式分析、生成到合成方面,如果 Rust 能夠做得比其他程式設計語言更好、跟應用領域相關的定制更容易,那麼它的發展前景就會更好。

目前華為跟國内外高校正在聯合展開技術探索,同時嘗試多條路徑,希望把學術界的最新成果以最快的速度應用到語言中來。而這其中最大的挑戰之一是如何從社群需求出發,找到适合 Rust 發展的語言特性,把能夠解決具體問題的方法或者偏學術的原型工具和技術變得更為通用和實用,讓關于 Rust 的知識圖譜更為人所知所用。

繼續閱讀