編輯 | 言征
出品 | 51CTO技術棧(微信號:blog51cto)
為了消除基于 C++ 的 Android 應用中的內存錯誤,Google 希望讓開發人員能夠輕松地用 Rust 編寫代碼。
本周一,谷歌承諾向Rust 基金會捐贈100 萬美元,以改善C++和Rust編程語言之間的互操作性。
圖片
根據公告,雖然該項目被稱為“互操作倡議(Interop Initiative)”。谷歌Android 平臺工具和庫總監兼 Rust 基金會董事會主席 Lars Bergstrom 宣布了這筆撥款,并表示這筆資金將“提高 Rust 代碼與現有遺留 C++ 代碼庫互操作的能力”。其目標本質上更加單向,即讓“組織逐漸將當前的 C++ 遷移到 Rust”。
Rust基金會董事會主席兼谷歌成員總監Lars Bergstrom表示:“谷歌相信Rust等內存安全語言發揮的關鍵作用,以及解決各種領域內存安全問題的迫切需要。”
“我們支持Rust基金會的互操作計劃,因為與C++的更大互操作性將是Rust采用的關鍵,并使更多組織和社區從內存安全系統中受益。”
1、C++內存安全壓力空前
由于對安全性的擔憂,C++ 作為流行的通用編程語言,不少企業認為它已經過時了。比如,內存安全錯誤是 Google 和 Microsoft 的大多數漏洞的根源,這導致了內存安全 Rust 的普及和 使用C/C++ 的紅字警告。
谷歌工程、Android 安全和隱私副總裁 Dave Kleidermacher 在一份聲明中表示:“根據歷史漏洞密度統計數據,Rust 已主動阻止了數百個漏洞影響 Android 生態系統。” “這項投資旨在擴大 Rust 在平臺各個組件中的采用。”
由于 Microsoft Azure 首席技術官Mark Russinovich等行業人士以及 CISA 總監Jen Easterly等公共部門人士的認可,更不用說 ISRG 的Prossimo等行業人士的努力,軟件開發人員面臨著壓力,需要在合適的情況下考慮 Rust 和其他內存安全語言。
去年12月,美國網絡安全和基礎設施局(CISA)再次敦促:商業和技術領導人應準備在軟件開發中關注內存安全,應該摒棄C++,選擇Rust等內容安全的語言。
2、C++轉向Rust的最大障礙:互操作性
然而,鑒于 C++ 往往用于大型、性能密集型程序,例如現代游戲和操作系統,遷移到Rust,這絕非易事。
盡管 Rust 是這樣的更好的安全性和更高的開發生產力的“假定好處”,但無論是營利性的,還是其他形式的軟件構建組織,在人才、工具和代碼生成方面對 C++ 進行了大量投資,可能并不會那么急于轉向另一種(并且有些具有挑戰性的)語言來學習。
關于這一點,Rust 基金會執行董事兼首席執行官 Rebecca Rumbul 在一份聲明中坦承,“盡管Rust具有很多至關重要的優勢,并且越來越受歡迎和得到采用,但即使是最先進的技術組織也很難輕易轉向Rust并放棄現有代碼庫的架構,很不現實。”
Bergstrom表示與 C++ 的互操作性是 Google 和其他組織更廣泛采用 Rust 的最大障礙之一。
“這是所有組織為了加強 Rust 的實施而必須克服的最常見的障礙,”“許多現有的遺留代碼庫以及核心庫和服務要么是用 C++ 編寫的,要么只有 C++、Java、Go 或 Python 中可用的 API。如今,在有后備 C API 的情況下集成 Rust 是可能的,但對于高性能和高保真互操作性,提高直接使用 C++ 代碼的能力是進一步提高采用 Rust 能力的最大舉措。”
3、為了解決這一問題,都在做哪些努力?
據 MSPowerUser 報道,微軟最近組建了一個團隊,將更多 Rust 引入其 Office365 應用程序底層。此外,微軟也宣布還要在 Windows 內核中使用更多 Rust,理由是 C++ 持續存在的安全問題。
同樣,Linux 負責人 Linus Torvalds對將Rust用于主要用 C 編寫的Linux 的一些核心組件持開放態度。Rust 支持甚至被寫入 GNU C 編譯器 (GCC) 中。
4、為什么谷歌對 Rust 如此感興趣?
就 Google 而言,該公司似乎對使用 Rust 實現內存安全非常感興趣。C++的天然設計,會無意中導致程序員在內存分配中犯錯誤,為惡意行為者侵入這些程序提供了空間(當然,C++語言本身也在思考如何解決這個問題:C++之父做決定了:內部自救!)。
“雖然 Rust 可能并不適合所有產品應用程序,但優先考慮與 C++ 的無縫互操作性將加速更廣泛的社區采用,從而與提高內存安全性的行業目標保持一致,”谷歌 Android 平臺工具總監Lars Bergstrom寫道。
據該公司估計,Rust 的使用已經使谷歌的Android OS移動操作系統受益匪淺,它可以防止內存較少的安全語言可能出現的數百個漏洞。
5、Rust 代碼應該能夠輕松調用 C++ 函數
為了將 Rust 融入到以 C++ 為主的代碼庫中,您需要通過包裝器庫、直接工具和構建系統支持以及對應用程序二進制接口 (ABI) 的修改,為用 Rust 編寫的功能提供與現有 C++ 庫交互的簡單方法。
許多工作已經完成。軟件咨詢公司KDAB創建了一組 Rust crate,稱為cxx-qt is,這將有助于通過Qt跨平臺開發框架使用 C++ 的CMake構建系統將 Rust 集成到 C++ 應用程序中。
Google 本身已經投資了Android 操作系統和 iChromium的互操作工具,包括autocxx、 bindgen、 cbindgen、 Diplomat和 crubit,
為了進一步推動 Rust 的發展,Google 還匯總并發布了 對Google 項目中使用的 Rust 箱的審核。
圖片
根據 Google 的說法,Rust 已經可以通過現有的 C++ 綁定(例如 bindgen)使用許多 C++ 庫。
6、Rust 開發者對 C++ 感興趣
根據 JetBrains 的《2023 年開發者生態系統狀況》,11% 的 Rust 開發者在使用 Rust 的同時使用 C++。
圖片
事實上,23% 的 Rust 開發人員已經將應用程序從 C++ 遷移到 Rust,占所有從其他語言遷移應用程序而不是從新手開始的 Rust 開發人員的 35%。
圖片
7、下一步計劃
隨著Rust基金會開始制定其互操作計劃,Rust項目的許多成員已經為Rust互操作性做出了有意義的貢獻,以及其他組織在這一領域所做的工作,如Rust Foundation Silver Member、KDAB與Qt的雙向Rust和C++綁定。
該倡議計劃由Rust 項目領導委員會起草了工作提案范圍,并聽取 Rust 項目領導者和“相關”Rust 基金會成員組織及其董事會的意見。
當然,計劃的完成少不了人員的支持。該計劃將希望聘請一些工程師來構建更多集成點,并為現有項目提供資金以繼續進行。值得注意的是,該項目甚至可能會研究使用人工智能來加快進程。
具體而言,“建議可能包括雇傭一名或多名Interop Initiative工程師,并可能包括提供資源以擴大現有的互操作性工作、構建系統集成、使用人工智能進行C++到Rust的轉換,或所有這些的某種組合。”
參考鏈接:
https://thenewstack.io/google-spends-1-million-to-make-rust-c-interoperable/
https://www.theregister.com/2023/12/07/memory_correction_five_eyes/
https://www.theregister.com/2024/02/05/google_rust_donation/