查看原文
其他

Google宣布支持使用Rust开发Chromium

21CTO 2023-06-18

Google Chrome 安全团队昨天宣布,Chromium 将支持在项目中使用来自 C++ 的第三方 Rust 库。
目前Chrome团队正在积极寻求将可用于生产环境的 Rust 工具链添加到 Chromium 构建系统中,以实现在明年将 Rust 代码引入到 Chrome 二进制文件中。

Google 根据 Chromium 的项目体量和自身需求,暂时只支持使用第三方 Rust 库,因为第三方库是作为独立组件编写的,它们不需要考虑有关 Chromium 实现的潜在需求。这意味着他们拥有更简单且专注于他们单一任务的 API。
根据 Google 的介绍,他们将 Rust 引入 Chromium 的目标是提供一种更简单(无 IPC)和更安全(整体复杂性比 C++ 低,沙箱中也没有内存安全错误)的方式来满足两个规则,以加快开发速度(更少的代码编写,更少的设计文档,更少的安全审查),并提高 Chrome 的安全性(增加没有内存安全错误的代码行数,降低代码的错误密度)。他们认为可以使用第三方 Rust 库来实现这一目标。
他们还说,Rust 是由 Mozilla 开发的编程语言,在提供安全性的同时还具有高性能,最初专门被用于编写浏览器,因此 Chromium 依赖这项技术也非常合适。

这一决定将使谷歌能够在明年内将 Rust 代码包含在 Chrome 二进制文件中。“我们起步缓慢,并且对我们准备好后将考虑的图书馆设定了明确的期望。”

满足“二人法则”


“我们将 Rust 引入 Chromium 的目标是提供一种更简单(无 IPC)和更安全(整体 C++ 复杂度较低,沙箱中也没有内存安全漏洞)的方式来满足二元法则”,Jansens 解释道。


二人法则规定,在编写代码来解析、评估或以其他方式处理来自互联网的不可信输入时,应在以下三个风险因素中选择不超过两个:


(1) 不可信输入;

(2) 不安全的实现语言;

(3) 高特权。


Jansens 补充说,此举还有望加快 Chromium 的开发,因为要编写的代码和设计文档都变得更少。添加 Rust 也将提高安全性,Jansens 说,因为它增加了没有内存安全漏洞的代码行数,同时降低了漏洞密度。


“我们相信我们可以使用第三方 Rust 库来实现这一目标”,Jansens 宣称。“我们知道 C++ 和 Rust 可以很好地协同工作。” 但是,有一些限制。“我们可以预期这些限制的形式会通过新的或改进的工具及时改变,但这里的决定和描述是基于当前的技术状态。”


在 Chromium 项目中加入 Rust 应该不足为奇。自 2019 年以来,谷歌一直在用 Rust 编写 Android 代码。


众人的看法


一些人对这种转变持怀疑态度,例如引入了新的Bug和运行错误。


一位工程师 Lolinder在 Hacker News 上写道:


“对于任何给定的项目,用 Rust 重写都不一定是个好主意,而且几乎可以肯定,谷歌不会像 Mozilla 那样主动用 Rust 重写大量 Chrome。


原因是错误主要存在于新代码中,而不是长期未触及的代码中。虽然可以通过在 Rust 中重写来解决一些潜在的内存问题,但也可能会引入新的Bug回归,这可能会更糟。专注于用安全的语言编写独特的代码更有意义,并且只有在它们需要大量重写时才逐渐迁移。”


一位谷歌资深人士Jansen说道:“这是一件非常好的事情,并且在其他谷歌项目中经历过这一点,真诚地祝贺那些表现出坚韧不拔的人,尽管他们遇到了很多真正的难题,但我敢肯定被问到,还会有很多废话。从长远来看,这一结果对用户是一定有利的。”


Jansen 写道,从 C++ 到 Rust,目前只会在一个方向上支持互操作。有意思的是,谷歌已经投资了Crubit,这是一种“非常”实验性的 C++/Rust 双向操作工具,而贡献最大的是谷歌工程师。


Rust 是由 Mozilla 主导开发的通用、编译型编程语言。设计准则为“安全、并发、实用”,支持函数式、并发式、过程式以及面向对象的编程风格。Rust 语言原本是 Mozilla 员工 Graydon Hoare 的私人计划,而 Mozilla 于 2009 年开始赞助这个计划,并且在 2010 年首次公开。

作者:场长

相关链接:https://security.googleblog.com/2023/01/supporting-use-of-rust-in-chromium.html


相关阅读:

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存