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