谷歌的安卓13大幅度從C/C++遷移到Rust
從Android 12起,谷歌宣佈在Android平臺中支援Rust程式語言,作為C/C++的記憶體安全替代語言。
谷歌的目標不是將現有的C/C++轉換為Rust,而是隨著時間的推移將新程式碼的開發轉移到記憶體安全的語言。
Android 13 是第一個新增到版本中的大部分新程式碼都採用記憶體安全語言的 Android 版本。
Rust 不是Android 中唯一使用的記憶體安全語言(Java 和 Kotlin 也算在內),但它是一個主要的語言。
在Android 13中,約21%的新原生程式碼(C/C++/Rust)使用Rust。Android開源專案(AOSP)中總共有大約150萬行Rust程式碼,涉及新的功能和元件,如Keystore 2、新的超寬頻(UWB)堆疊、DNS-over-HTTP 3、Android的虛擬化框架(AVF)和各種其他元件及其開源依賴項。這些是需要系統語言的低階元件,否則這些系統語言將以C++實現。
到目前為止,Android的Rust程式碼中沒有發現記憶體安全漏洞。
我們不希望這個數字永遠為零,但考慮到兩個Android版本中新Rust程式碼的數量,以及使用它的安全敏感元件,這是一個重要的結果。它表明Rust正在實現其防止Android最常見漏洞來源的預期目的。在許多Android的C/C++元件(例如媒體、藍芽、NFC等)中,歷史漏洞密度大於1/kLOC(每千行程式碼1個漏洞)。根據這一歷史漏洞密度,使用Rust可能已經阻止了數百個漏洞進入生產環境。
從C/C++遷移是一項挑戰,但我們正在取得進展。Rust在Android平臺上的使用正在增長,但這並不是故事的結束。為了實現在Android範圍內提高安全性、穩定性和質量的目標,我們需要能夠在需要原生程式碼的程式碼庫中的任何地方使用Rust。我們正在Rust中實現使用者空間HAL。我們正在新增對受信任應用程式中Rust的支援。我們已將Android虛擬化框架中的虛擬機器韌體遷移到Rust。隨著Linux 6.1對Rust登陸的支援,我們很高興能將記憶體安全性引入核心,從核心驅動程式開始。
我們在Java中看到的漏洞型別主要是邏輯錯誤,如上所述,嚴重性通常較低。接下來,我們將探索Rust更豐富的型別系統如何幫助防止常見型別的邏輯錯誤。
隨著Android從C/C++遷移到Java/Kotlin/Rust,我們預計記憶體安全漏洞的數量將繼續下降。為Android上記憶體損壞錯誤罕見的未來乾杯!
相關文章
- 谷歌QUIC協議推動Web從TCP遷移到UDP谷歌UI協議WebTCPUDP
- 從Perforce遷移到GitGit
- 谷歌Rust生產力高於C++兩倍?谷歌RustC++
- 從 golang flag 遷移到 cmdrGolang
- 從 Nginx 遷移到 Envoy ProxyNginx
- 從Clojure/ClojureScript遷移到Rust:體積小4倍效能快50倍 - asciinemaRustASCII
- [譯]從 SQLite 逐步遷移到 RoomSQLiteOOM
- 從mpvue遷移到uni-appVueAPP
- EF Core從TPH遷移到TPT
- [譯] 從 SQLite 逐步遷移到 RoomSQLiteOOM
- Linode從Xen遷移到KVM
- 將表 從mysql 遷移到oracleMySqlOracle
- Azure VM從ASM遷移到ARM(二)ASM
- Azure VM從ASM遷移到ARM(一)ASM
- PayPal從Java遷移到Node.jsJavaNode.js
- 從SpringMVC遷移到SpringbootSpringMVCSpring Boot
- Meta/Facebook產品安全團隊將排程服務從Python遷移到Rust?PythonRust
- 從 CRUD 遷移到事件溯源的祕訣 - eventstore事件
- Oracle從Windows 11.2.0.1升級並遷移到Linux 19cOracleWindowsLinux
- 從過時的 Windows 機器遷移到 LinuxWindowsLinux
- 從單體遷移到微服務的十二種方法微服務
- 平安科技從 Oracle 遷移到 UbiSQL 的實踐OracleSQL
- 從MySQL遷移到VoltDB的一點經驗MySql
- 使用DynamoShake從dynamodb遷移到mongodbMongoDB
- 從檔案系統遷移到ASM上ASM
- oralce 從檔案系統遷移到ASMASM
- 如果需要從Oracle遷移到MS SQLServer (2)OracleSQLServer
- 如果需要從Oracle遷移到MS SQLServer (1)OracleSQLServer
- 取代不了 C/C++ 的 Rust 如何“逆襲”?C++Rust
- Rust引用自定義c/c++庫RustC++
- 遷移到ASMASM
- 從Oracle遷移到MySQL的各種坑及自救方案OracleMySql
- 從cygwin遷移到msys2的原因和步驟
- 從Log4j遷移到LogBack的理由
- Gradle指南之從Groovy遷移到KotlinGradleKotlin
- 從RabbitMQ平滑遷移到RocketMQ技術實戰MQ
- 記錄從vuecli打包庫遷移到rollup打包Vue
- 從Firebase+Redis遷移到PlanetScale+MySQLRedisMySql