C和C++不安全?谷歌宣布Android加入對Rust語言支持
Android 系統(tǒng)涉及很多組件,開發(fā)者會根據(jù)正在開發(fā)的 Android 部分而選擇不同的編程語言。對于應(yīng)用開發(fā)者來說,Java 和 Kotlin 是比較流行的選擇;而對于從事操作系統(tǒng)以及內(nèi)部底層的開發(fā)人員來說,C 和 C++ 是比較好的選擇。
近日,谷歌為操作系統(tǒng)開發(fā)者增加了第 3 個選擇 Rust。谷歌發(fā)布博客稱 AOSP (Android Open Source Project) 現(xiàn)已支持使用 Rust 開發(fā) Android 操作系統(tǒng)。
內(nèi)存安全 bug
C 和 C++ 中的內(nèi)存安全 bug 是最難解決的錯誤源。谷歌已經(jīng)投入了大量的精力和資源來檢測、修復(fù)和緩解這類 bug,并有效地防止了大量 bug 進入 Android 版本。然而,盡管做出了這些努力,內(nèi)存安全 bug 仍然是穩(wěn)定性問題的主要原因,它在 Android 嚴重安全漏洞中長期占據(jù)大約 70% 的比例。
對于這些內(nèi)存安全問題,谷歌表示除了優(yōu)化內(nèi)存錯誤檢測機制外,最有效的解決辦法是采用內(nèi)存安全語言。Java 和 Kotlin 等托管語言是 Android 應(yīng)用開發(fā)的最佳選擇。這些語言專為易于使用、可移植性和安全性而設(shè)計,它們是開發(fā) Android 應(yīng)用的最佳選擇。Android OS 廣泛使用 Java 語言,從而有效地保護了大部分 Android 平臺不受內(nèi)存 bug 的影響。但對于操作系統(tǒng)的底層而言,不能選擇 Kotlin 和 Java。
較低層級的 OS 需要系統(tǒng)編程語言,如 C、C++ 和 Rust。這些語言設(shè)計時考慮到了可控和可預(yù)測性的目標(biāo)。它們提供對低級系統(tǒng)資源和硬件的訪問,資源較少,并具有更可預(yù)測的性能特征。
對于 C 和 C++,開發(fā)人員負責(zé)管理內(nèi)存生存期。遺憾的是,這樣做很容易出錯,特別是在復(fù)雜的多線程代碼庫中。
Rust 使用編譯時檢查(強制執(zhí)行對象生命周期 / 所有權(quán))和運行時檢查(確保內(nèi)存訪問有效)的組合來提供內(nèi)存安全保證。提供這種安全性的同時,Rust 的性能表現(xiàn)足以媲美 C 和 C++。
大約 50% 的錯誤發(fā)生在一年之內(nèi)
谷歌表示,用 Rust 重寫數(shù)千萬行的 C 和 c++ Android 代碼根本不可行,而重寫舊的 Android 不會有太大影響,因為到目前為止舊代碼已經(jīng)清除了大部分 bug。由于 Android 源代碼是一個擁有數(shù)十億用戶的開源項目,很多人都在關(guān)注它。大部分內(nèi)存 bug 都發(fā)生在新的或最近修改過的代碼中,大約 50% 的錯誤發(fā)生在不到一年的時間里。必要時,Rust 將用于新組件,這將有助于減少谷歌可能引入的新內(nèi)存 bug。
Android 內(nèi)存 bug 圖表。舊代碼有很多 bug,現(xiàn)在已經(jīng)修復(fù)了。
比較罕見的舊內(nèi)存 bug 可能會讓人感到驚訝,但谷歌表示舊代碼并不是最迫切需要改進的地方。隨著時間的推移,軟件 bug 會被逐漸發(fā)現(xiàn)和修復(fù),因此我們可以預(yù)期還在維護但未處于活躍開發(fā)狀態(tài)的代碼中的錯誤量會逐漸減少。
無論如何,向 Android 平臺添加新的開發(fā)語言支持是一項大工程。谷歌表示:「在過去的 18 個月里,我們一直在為 Android 開源項目添加 Rust 支持,在接下來的幾個月里,我們將分享一些早期采用 Rust 的項目。將 Rust 擴展到更多的 OS 是一個長期項目。」
參考鏈接:
- https://arstechnica.com/gadgets/2021/04/google-is-now-writing-low-level-android-code-in-rust/
- https://security.googleblog.com/2021/04/rust-in-android-platform.html
- https://www.oschina.net/news/136467/rust-in-android-platform
- https://www.cnbeta.com/articles/tech/1111455.htm
【本文是51CTO專欄機構(gòu)“機器之心”的原創(chuàng)譯文,微信公眾號“機器之心( id: almosthuman2014)”】