写点什么

谷歌“新宠” Rust

  • 2021-04-09
  • 本文字数:2654 字

    阅读完需:约 9 分钟

谷歌“新宠” Rust

近日,谷歌宣布 Android 开源项目(AOSP)现已支持使用 Rust 编程语言来开发 OS。这一举动让正火的 Rust 语言热度再次上涨。

 

要用 Rust 解决什么问题?

 

目前,Android 项目主要用两种语言构建。Java(以及最近出现的与 jvm 兼容的语言,如 Kotlin)已被用于操作系统的上层部分,如 UI 部分;在内核、驱动程序等 OS 的基础层面,则通常用 C 编写,有时也会使用 C++。

 

为了更适合 OS 的底层编程,这些语言在设计时,考虑到了可控和可预测性等特性,可以提供对底层系统资源和硬件的访问。同时,它们的资源需求相对轻量,可预测性更强。

 

因此,C 语言,甚至 C++,都被认为非常适用于系统级编程,因为它们某种程度上提供了接近底层硬件的功能,这是一些高级语言都很难实现的。


但这种灵活性是一把双刃剑。目前,C 和 C++ 的内存安全问题仍然很难解决。由于没有可依赖的垃圾收集,看似简单的内存管理,经常导致严重的安全问题,如缓冲区溢出等。有分析指出,内存安全漏洞占 Android 开源项目中发现的所有严重安全漏洞的 70%。

 

Rust 由 Mozilla 推出,最初是被设计为 C 和 C++更安全的替代语言。尽管 Rust 并没有被广泛用于应用开发,但它已经迅速成为最受青睐的系统开发语言之一。Rust 不像 C 那样依赖手动内存管理,但也缺少带有 Java 风格的垃圾收集器。

 

谷歌方面认为,Rust 使用编译时检查(强制执行对象生命周期 / 所有权)和运行时检查(确保内存访问有效)的组合来提供内存安全保证。提供这种安全性的同时,Rust 的性能表现足以匹敌 C 和 C++。

 

除了 Rust 编程语言的安全性能外,谷歌认为使用 Rust 也可以减少成本投入。

 

据悉,目前所有 Android 进程均已沙箱化。它们通过遵循“三选二”规则(Rule of 2)来确定功能是否需要额外的隔离和特权。这种规则很简单:给定三个选项,开发人员只能选择以下三个选项中的两个。



对 Android 来说,这意味着如果代码是用 C/C++ 编写并解析了不可靠的输入,则应将其放入一个严格受限和无特权的沙箱中。

 

虽然这个规则可以有效降低安全漏洞的严重性和暴露程度,但 IPC(进程间通信) 和额外的内存占用,也会使其需要的新进程带来额外的开销并引入延迟。同时,高漏洞密度会降低其有效性,让攻击者可以将多个漏洞连接在一起。

 

像 Rust 这样的内存安全语言,可以降低代码中错误的密度,提高当前沙箱的效率,并且可以减少谷歌对沙箱的需求,从而引入更安全、更省资源的新特性。

 

Rust 的核心理念是所有权。简而言之,每个值都有一个所有者。当该所有者超出范围时,该值将被删除。这限制了基于内存的安全漏洞风险,同时也限制了为确保安全而需要编写的代码数量。

 

根据谷歌的分析,大多数内存错误出现在新的或最近修改的代码中,大约 50%的错误出现时间还不到一年。谷歌方面认为,在内存安全语言方面,最好是专注于新开发的代码,而不是重写成熟的 C/C++ 代码。


 “当然,引入一种新的编程语言并不能解决现有 C/C++ 代码中的错误问题。即便我们重新分配 Android 团队中所有软件工程师的工作,重写几千万行代码也是不可能的。”谷歌表示,旧代码并不是亟需改进的。

 

该消息宣布后,一些开发者表示希望可以做 NDK,但据 Android 开发者关系团队的一名成员透露,谷歌目前没有发布 Rust NDK 的计划,支持应用程序开发的语言将继续是 Kotlin、Java、C 和 C++。

 

Rust,谷歌“新宠”

 

在过去的 18 个月中,谷歌一直在 Android 开源项目中添加 Rust 支持,但将 Rust 扩展到更多的 OS 会是一个艰巨且耗时很久的项目。除了要维护一些工具链和依赖关系,测试基础设施和工具必须同步更新,开发人员也需要接受培训。

 

去年 7 月,Android 平台安全负责人 Sudhi Herle 表示,将继续在 Rust 上进行投资,看看哪些系统组件用 Rust 编写会更好。“我们相信,Rust 将最终从根本上让我们所有的用户都能安全地使用这个平台。”

 

目前,Android 的新蓝牙堆栈重写代码“ Gabeldorsche ”已经使用 Rust 编写。Gabeldorsche 的研发工作始于 Android 11,但至今仍未投入使用。Android 的 Keystore 2.0 模块是用 Rust 编写的,Android 的 IPC 驱动程序 binder 的用户空间部分也是如此。

 

Rust 正在成为谷歌“新宠”,不仅表现在 Android 开发上。

 

今年 2 月,Rust Core 团队宣布了新成立的 Rust 基金会,创始成员中就包括谷歌。同月,谷歌宣布与 Internet Security Research Group 合作用 Rust 语言重新实现安全组件,包括用 Rust 为 curl 开发 HTTP 和 TLS 后端,为 Apache httpd 项目开发 TLS 库。

 

谷歌有望取代 Android 的全新操作系统 Fuchsia 的新网络栈也使用了 Rust 编写。此外,ChromeOS 中使用的crosvm虚拟机监视器和驱动程序、用于支持 FIDO 安全密钥的固件等都在使用 Rust。谷歌还对 Rust 开源项目Mercurial的控制系统也作出了贡献。

 

谷歌高级软件工程师兼 Rust 核心团队成员 Manish Goregaokar 表示,谷歌选择 Rust 语言,部分原因是它能够与其他语言轻松集成。

 

过去几个月,谷歌、Amazon、Facebook、微软以及等科技巨头正疯狂吸纳人才市场上的 Rust 语言程序员,各方都在着力筹备组建 Rust 团队。

 

去年 8 月的一轮裁员之后,Mozilla 遣散了约 250 名员工,其中包括不少原 Rust 团队的活跃开发人员,谷歌聘请了此轮裁员中的 Mozilla 前员工 Lars Bergstrom 担任工程技术总监。Goregaokar 也来自 Mozilla,他目前主要任务是构建一套国际化 Rust 库,并有意继续在该语言的开源项目开发中投入精力。

 

开发者表示欢迎

 

对于谷歌的这一决定,很多开发者表示很兴奋。在Hacker News上,一位开发者留言表示:

 

我很高兴看到 Rust 在越来越多的项目中发挥作用。我在几周前开始学习,感觉与 C++相比,Rust 更加简单,快速,它有一个熟悉的注册表。它适用于嵌入式、web,、Wasm、一些快速脚本,CLIs。我的背景主要是 JavaScript、Dart 和 Java,但现在我很兴奋地尝试一些更低层次的东西,唯一的问题是我需要找到一种方法过渡到一个好的 Rust 项目。

 

另外,也有开发者提出了一个疑问:在 Java/Kotlin 应用程序中添加 Rust 代码,应用程序将不断地在 Java 和本机代码之间切换,虽然可以但对性能不是很友好。但值得庆幸的是,Chrome 和 Firefox 并没有完全编译成字节码,JIT 和渲染代码是用本机代码编写的。Mozilla 在浏览器中使用了 Rust,这意味着至少 Android 上已经有一个相当大的 Rust 运行库了。

 

Kotlin 和 Java 都很棒,在这一点上,开发者们几乎没有什么分歧,但有开发者表示“Java 太沉重了,使用 Rust 会带来新体验。”随着 Rust 的应用越来越广,已经有开发者讨论,谷歌将来会不会发布一个可以用来写 Rust 的应用程序。

 

参考链接:

 

https://security.googleblog.com/2021/04/rust-in-android-platform.html

2021-04-09 15:566227

评论

发布
暂无评论
发现更多内容

试验协同管理平台(源码+文档+部署+讲解)

深圳亥时科技

数字身份发展趋势前瞻:无密码认证

芯盾时代

数字身份 身份安全 iam 统一身份认证

日喀则等保测评机构有哪些?电话多少?

行云管家

网络安全 等保 日喀则

《使用Gin框架构建分布式应用》阅读笔记:p234-p250

codists

golang gin 编程人 codists

如何使用OPA(开放策略代理)管理您的API策略

Gingxing

kong API网关 Kong 网关 消息网关 Kong Gateway

《智能文档处理“百宝箱”:数字化时代文档处理的必备利器》

袁袁袁袁满

人工智能 AI 图像识别 大模型

F5搭载NVIDIA BlueField-3 DPU赋能加速 AI 应用交付

科技热闻

携手火山引擎,易点天下AI布局加速拓展

新消费日报

面向 Data+AI 的统一数据目录探索 | Data Infra NO.22 回顾(含资料发布)

Databend

智慧环保系统(源码+文档+部署+讲解)

深圳亥时科技

AI赋能,中国企业管理软件崛起正当时

人称T客

人工智能 | 语音识别模型

测吧(北京)科技有限公司

测试

审计考核系统(源码+文档+部署+讲解)

深圳亥时科技

鸿蒙开发案例:巧算24点

zhongcx

C#使用Socket实现分布式事件总线,不依赖第三方MQ

沙漠尽头的狼

BY林子的“软件质量与测试”赋能体系

BY林子

质量管理 软件测试 软件质量 质量赋能

实时监控商品信息api接口,加速迭代优化:助力商家产品持续精进之路

代码忍者

API 接口 pinduoduo API

如何在mac上玩使命召唤手游?苹果电脑好玩的第一人称射击游戏推荐

阿拉灯神丁

游戏 兼容性 苹果电脑 使命召唤5 CrossOver Mac下载

Pixabay API集成:免费获取图片和视频的步骤详解

幂简集成

API 图片

VictoriaMetrics 中文教程(10)集群版介绍

巴辉特

Victoriametrics VictoriaMetrics教程

谷歌“新宠” Rust_语言 & 开发_褚杏娟_InfoQ精选文章