谷歌對Rust的采用終于得到了回報
谷歌對rust的采用取得了巨大的回報,在這篇文章中,我們將討論谷歌是如何將Android的內(nèi)存安全漏洞減少52%的,以及他們未來對Rust的采用計劃。
自2019年以來,Android團(tuán)隊一直專注于用內(nèi)存安全語言編寫新功能。對于新的系統(tǒng)級組件,他們一直在使Rust而不是C++,因為Rust具有同樣的性能并提供內(nèi)存安全保證。
他們也一直在使用kotlin而不是java,因為它有null安全等優(yōu)勢。這一策略產(chǎn)生了重大影響,在最近一篇題為“從源頭上消除內(nèi)存安全漏洞”的文章中,谷歌的安全團(tuán)隊透露,Android的內(nèi)存安全漏洞從總漏洞的76%下降到24%,這是一個驚人的50%以上的下降,這真是太瘋狂了。
在這里,我們看到一個圖表,顯示了在代碼庫中采用內(nèi)存安全語言來實現(xiàn)新功能的情況。
圖片
多年來,使用內(nèi)存安全語言編寫的代碼行數(shù)急劇增加,而使用內(nèi)存不安全語言編寫的遺留代碼則隨著代碼庫的維護(hù)而逐漸減少。這種策略導(dǎo)致內(nèi)存安全漏洞的急劇減少,谷歌發(fā)現(xiàn)這是因為隨著代碼成熟,內(nèi)存安全漏洞在新代碼或最近更改的代碼中被壓倒性地發(fā)現(xiàn)。
它的安全性呈指數(shù)級增長,這是通過采用諸如Rust之類的內(nèi)存安全語言以及在代碼庫中使用新特性來實現(xiàn)的。
所以只要采用像Rust這樣的內(nèi)存安全語言,并在代碼庫中添加新功能,你就能大大減少內(nèi)存安全漏洞,但這只是理論,當(dāng)你把這種策略應(yīng)用到真正的代碼庫中會發(fā)生什么,這正是Android團(tuán)隊所嘗試的。
你可以從這張圖表中看到,隨著Android團(tuán)隊優(yōu)先使用Rust和kotlin構(gòu)建新功能,使用內(nèi)存安全語言編寫的代碼行數(shù)逐年增加。
例如,管理文件共享設(shè)備的系統(tǒng)是用Rust編寫的,管理加密密鑰的新密鑰存儲系統(tǒng)也是用Rust編寫的,一般來說,使用Rust來處理這些底層組件是有意義的,因為Rust是一種系統(tǒng)語言。
請注意,在這段時間內(nèi),使用內(nèi)存不安全語言編寫的代碼行數(shù)也有所增加。但盡管如此,內(nèi)存安全漏洞的數(shù)量也急劇下降,這是因為Android團(tuán)隊一直使用Rust和kotlin編寫新功能。
他們也注意到使用Rust的一些關(guān)鍵好處,他們提到Rust更改代碼后的回滾率不到C++的一半。這意味著,與更改Rust代碼相比,更改C++代碼導(dǎo)致bug的可能性是更改Rust代碼的兩倍。
現(xiàn)在,由于這個計劃的成功,谷歌對Rust進(jìn)行了加倍投資,以使用Rust編寫新功能變得更容易,并使在Rust和C++之間以及Rust和kotlin之間的互操作性方面變得更容易。
今年早些時候,谷歌向Rust基金會提供了100萬美元的資助,以改善Rust和C++之間的互操作性,并且他們正在積極開發(fā)開源工具,如Crubit,這是一種C++和Rust雙向中斷工具,或者Autocxx,這是一種以自動方式從Rust調(diào)用C++代碼的工具,這樣的工具不僅可以讓谷歌使用Rust更容易,也可以讓其他公司更輕松的使用Rust。
現(xiàn)在我們知道,在2022年,當(dāng)Android 13發(fā)布時,大約21%的Native代碼是用Rust編寫的,這相當(dāng)于向Android項目添加了大約150萬行Rust代碼。
圖片
不幸的是,我們沒有2024年的最新統(tǒng)計數(shù)據(jù),希望我們很快就能得到它們,總的來說,很高興看到Rust的采用為谷歌帶來了回報以及繼續(xù)對Rust進(jìn)行投資的承諾。
谷歌的安全團(tuán)隊證實,大多數(shù)同事現(xiàn)在都在以這樣或那樣的形式使用Rust。其他公司很可能會效仿谷歌的做法,特別是知道只要用Rust等內(nèi)存安全語言編寫新代碼,內(nèi)存安全漏洞就會大大減少。