时隔16年Jeff Barr重返10.23-25 QCon上海站,带你看透AI如何重塑软件开发! 了解详情
写点什么

谷歌“新宠” 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:566472

评论

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

PCB layout有DRC,为什么还要用CAM和DFM检查?

华秋PCB

PCB PCB设计 PCB工具

你可见过如此细致的延时任务详解

骑牛上青山

Java redis kafka 延时队列

桌面端软件的开发框架如何选型

Onegun

macos windows 桌面端 桌面应用

炎凰数据完成超亿元 A1 和 A1+ 轮融资,推出异构数据即时分析平台

晨山资本

大数据 大数据处理 大数据分析

聊聊Mybatis的数据源之PooledDataSource

急需上岸的小谢

11月月更

那些适用于跨境电商的ERP系统

SAP虾客

Centos7安装Mysql5.7(超详细版)

A-刘晨阳

MySQL Linux 运维 11月月更

云小课|云小课带您快速了解LTS可视化查看

华为云开发者联盟

云计算 后端 华为云

与时俱进「风险系统保障质量之路」非同寻常

京东科技开发者

自动化 风险识别 风险控制 预警监控 风险系统

SAP ERP系统里的那些核心主数据

SAP虾客

5种典型 API 攻击及预防建议

SEAL安全

API API安全

动手实践丨基于ModelAtrs使用A2C算法制作登月器着陆小游戏

华为云开发者联盟

人工智能 华为云 A2C算法

ERP 实施,甲方公司前期应该准备什么?

SAP虾客

学会二阶思维,你就能像巴菲特一样思考了

华为云开发者联盟

软件开发 开发 华为云 二阶思维

算法基础:区间合并算法及模板应用

timerring

11月月更 区间合并 算法学习

高并发下丢失更新的解决方案

京东科技开发者

幻读 脏读 不可重复读 更新丢失

react源码分析:babel如何解析jsx

flyzz177

React

室内高清led电子显示屏的定义

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

centos安装python3/pip3项目所需的第三方模块(在线安装&&离线安装)

A-刘晨阳

Linux 运维 Python3 11月月更 pip3

【Linux】之【CPU】相关的命令及解析[lscpu、mpstat]

A-刘晨阳

Linux 运维 cpu 命令 11月月更

主流BI软件,哪一个软件使用效果更好?

夏日星河

自动驾驶的「数据引擎」,该如何“降本”、“增效”和“精准化”?

澳鹏Appen

人工智能 自动驾驶 无人驾驶 智能驾驶 数据标注

react源码中的生命周期和事件系统

flyzz177

React

混合开发Hybrid App的优劣

Onegun

ios 混合应用开发 移动端 andiod 混合开发

安卓??传奇!!探寻世界最大操作系统的崛起之路

博文视点Broadview

Karmada跨集群优雅故障迁移特性解析

华为云开发者联盟

云原生 后端 华为云

百度架构师手写万字Spring Security实战笔记,一篇就搞懂

小小怪下士

Java spring springsecurity

ERP系统能给企业带来的那些好处

SAP虾客

开源共建 | 中国移动冯江涛:ChunJun(原FlinkX)在数据入湖中的应用

袋鼠云数栈

flink 开源

大数据分析如何进行?瓴羊Quick BI成为了很重要的工具

小偏执o

聊聊Mybatis的数据源之工厂模式

急需上岸的小谢

11月月更

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