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