Android全力押注Rust,Linux却在原地踏步?谷歌:用Rust重写固件太简单了!

C语言与CPP编程 2024-10-21 09:02

击上方“C语言与CPP编程”,选择“关注/置顶/星标公众号

干货福利,第一时间送达!

最近有小伙伴说没有收到当天的文章推送,这是因为微信更改了推送机制,导致没有星标公众号的小伙伴刷不到当天推送的文章,无法接收到一些比较实用的知识和资讯。所以建议大家加个星标⭐️,以后就能第一时间收到推送了。

编译 | 核子可乐、Tina | 转自 InfQ

谷歌最近使用 Rust 编程语言重写了 Android 虚拟化框架中受到保护的虚拟机固件,并且建议涉及固件处理项目的开发者也同样积极拥抱这种内存安全语言。

1 Rust 在 Linux 上遇阻,但在 Android 上受宠

在谷歌发布的博客中,Android 工程师 Ivan Lozano 和 Dominik Maier 深入研究了使用 Rust 替换旧版 C 和 C++ 代码的技术细节。

Lozano 和 Maier 介绍称,“大家可以看到,使用 Rust 代码来提高安全性其实相当简单易行,我们甚至会演示 Rust 工具链如何应对特殊的裸机目标。”

对于 Rust 这样一门以学习难度高而闻名的编程语言来说,“简单易行”的说法似乎有点超出普遍认知。

另外,让 C 和 C++ 开发人员尝试用 Rust 的视角观察世界同样困难重重。就在上周,Rust for Linux 项目的一位维护者刚刚选择辞职(此项目旨在将 Rust 代码纳入基于 C 的 Linux 内核),理由就是 Linux 内核开发人员对 Rust 的强烈抵制。

在今年早些时候,一位 Linux 内核贡献者在某场技术会议的热烈讨论中明确表示,“不会吧,你们不会强迫我们所有人都学习 Rust 吧。”

尽管受众态度并不积极,但谷歌还是对潜在支持者拿出了足够的耐心和鼓励。Lozano 和 Maier 指出,以往的固件通常使用内存不安全语言(例如 C 和 C++)编写而成,因此缺乏高级安全机制。而 Rust 提供了一种避免内存安全漏洞(包括缓冲区溢出和释放后使用)的方法,成功阻遏了这些在大规模代码库中占据多数的重大漏洞来源。

他们强调称,“Rust 提供了一种内存安全的 C 和 C++ 替代方案,有着足以与之媲美的性能表现和代码体量。”此外,Rust 还支持与 C 代码的互操作性,且不会带来任何额外开销。

就连美国政府最近也一直在强调这个议题,并在各领先科技企业及非营利项目的支持下,尝试用 Rust 语言重写关键开源项目及组件。去年,网络安全与基础设施安全局(CISA)就建议软件供应商“将有关法律并最终消除其产品线中的内存安全漏洞,作为公司的最高目标之一。”

谷歌已经接受了这一观点,今年 3 月,谷歌得出结论称,其 Rust 开发人员的生产力已经达到 C++ 工程师的两倍。

谷歌 Android 编程语言工程总监兼 Rust 基金会董事会主席 Lars Bergstrom 也表态说,“我们意识到 Rust 在构建技术栈各个层面的安全可靠软件方面,正在发挥极其关键的作用。”

“在谷歌,我们正推动在 Android、Chromium 等平台上使用 Rust 语言,借此减少内存安全漏洞。我们还致力于同 Rust 生态系统开展合作、推动语言落地,并为开发人员提供顺利迁移所必需的资源和培训支持。这波将 Rust 引入嵌入式及固件开发的尝试,解决了技术栈中又一关键安全难题。”

有网友指出,Rust 在 Android 上进展顺利的关键就在于 Lars Bergstrom 的态度:

“我们来看一下这位的头衔:谷歌 Android 编程语言工程总监,同时也是 Rust 基金会董事会主席。我认为,将 Android 系统全面采用 Rust 语言的进程可能会比 Linux 内核更顺利推进,因为他是负责人,有权解雇那些不按要求进行 Rust 改造的人。”

而在 Linux 圈子里,Alex Gaynor 和 Geoffrey Thomas 在 2019 年 Linux 安全峰会上表示,大约三分之二的 Linux 内核漏洞源于内存安全问题。而 Rust 理论上可以通过其本质上更安全的应用程序接口(API)完全避免这些问题。

Torvalds 对这一切怎么看?早几年的时候,他属于“观望派”——“我对这个项目感兴趣,但我认为它是由对 Rust 非常热衷的人推动的,我想看看它在实际中会如何运作。”

Torvalds 还表示:“个人而言,我并不在‘推动’Rust 的行列中,但考虑到它所承诺的优势和避免一些安全隐患的可能性,我对它持开放态度,不过我也清楚有时承诺未必能兑现。”

去年底,在 Linux 基金会的日本开源峰会上,Linus Torvalds 和 Dirk Hohndel(Verizon 开源部门负责人)讨论了 Rust 语言在 Linux 内核中的使用,Torvalds 表示,“Rust 的使用在不断增长,但目前我们还没有任何内核部分真正依赖 Rust。对我来说,Rust 是一个在技术上合理的东西,但对我个人而言,更重要的是,我们作为内核和开发者,不能停滞不前。”

这个表达有人解读为“Linus 个人对 Rust 不是那么赞赏,但 Linux 总需要尝试一些新的东西”。

另一方面也有人反驳说,“如果 Linus 没有从根本上相信 Rust 是一种应该在内核中占有一席之地的语言,那么 Rust 也不会获得内核支持。”

在今年的 KubeCon 上,Linus Torvalds 和 Dirk Hohndel 再次谈到了如何将 Rust 语言引入 Linux。Torvalds 对 Rust 的应用速度未能如预期般加快感到失望,“我原本指望着更新速度会更多,但问题在于不少老一代内核开发人员更习惯于使用 C 语言,而不太熟悉 Rust。他们不太愿意学习一种在某些方面与老办法截然不同的新语言。因此,Rust 的普及受到了一些阻力。”

除此之外,Torvalds 还评论道,“另一个原因在于,Rust 自身的基础也并不是十分牢靠。”可以说,相比 Lars Bergstrom,实际上 Torvalds 对 Rust 的态度一直很审慎。

2 作为 Android 的新默认语言,Rust 的推进一直很顺利

2021 年,谷歌宣布将 Rust 选定为 Android 开源项目(AOSP)代码新贡献的默认语言。

谷歌在 Android 项目中使用的其他内存安全语言还包括 Java 以及与 Java 兼容的 Kotlin。C 和 C++ 仍然是 AOSP 中的主导语言,但 Android 13 是首个大部分新代码都由内存安全语言编写的版本。在谷歌于 2021 年 4 月首次将 Rust 用于 AOSP 之后,短短一年后,这种编程语言在新代码贡献量中就占比约 21%。

在 Android 的新代码中使用 Rust,也是为了减少与内存相关的漏洞。2019 年发布的 Android 10 版本存在 223 项内存安全漏洞,而 Android 13 的已知内在安全问题已经大幅减少至 85 个。

Android 安全软件工程师 Jeffery Vander Stoep 于 2022 年指出,内存安全漏洞占 Android 总漏洞的比例从 76% 下降到了 35%。随着内存安全漏洞的减少,谷歌还发现关键及远程可利用漏洞的数量同样有所缩减。

Vander Stoep 补充说,这一变化并非源自代码贡献者的“灵光乍现”,只是人们开始使用更好的工具来完成工作。Android 团队计划加强对 Rust 的使用,但这也并不意味着要在其系统编程中彻底淘汰 C 和 C++。

他在推文中解释道,“如果一定要为此番成就找个理由,那我个人的答案就是‘谦逊’。Android 团队中的各个部门都一直在关注‘我们怎样才能做得更好’这个关键问题,同时也有毅力坚持到底并做出改变,包括系统层面的变革。”

“谦逊本身也应该是双向的。Rust 并不能解决所有问题,C/C++ 在某些领域仍将是开发实践中最实用的选择,至少在相当长的一段时间内依旧如此。这很正常。”

“我们将随时间推移努力减少这种情况,同时继续扩大我们的 Rust 使用率,并不断投资和部署对 C/C++ 代码的改进。”

Vander Stoep 还提到,相关性也并不等同于因果关系,但必须承认内存安全漏洞的百分比(即在高严重性漏洞中的比例)确实与新代码使用的语言类型有着很强的关联趋势。谷歌表示,模糊测试等安全工具也在打击内存安全漏洞方面贡献了重要力量。

Vander Stoep 表示,“我们将继续投资于工具开发以提高项目的 C/C++ 安全性。在过去几个版本当中,我们在生产 Android 设备上引入了 Scudo 强化分配器、HWASAN、GWP-ASAN 以及 KFENCE。我们还在现有代码库当中扩大了模糊测试的覆盖范围。使用这些工具发现的漏洞既有助于预防新代码中出现类似的问题,也有助于在上述评估中及时揪出旧代码中存在的漏洞。这些重要工具对我们的 C/C++ 代码至关重要。然而,单凭这些还不足以解释我们从安全漏洞中观察到的趋势性变化,其他同样部署了这些技术的项目也并未发生如此重大的结构性变化。因此我们认为,Android 从内存不安全语言向着内存安全语言的持续转变才是改善其安全态势的一大核心因素。”

他当时还指出,Android 13 中共包含 150 万行 Rust 代码,约占所有代码新贡献的 21%(Android 本身有数千万行代码)。而且谷歌也没有在 Android 的 Rust 代码中发现任何内存安全漏洞。

Vander Stoep 指出,“这表明 Rust 语言正一步步实现其预期目标,即防止 Android 中最常见的漏洞来源。在 Android 的不少 C/C++ 组件(包括媒体、蓝牙和 NFC 等)当中,过往内存漏洞的密度已经超过了 1/kLOC(即每千行代码一个漏洞)。以这样的历史水平为基准,对 Rust 语言的使用很可能已经将数百个漏洞阻挡在了生产环境之外。”

在 Android 项目之内,谷歌使用 Rust 建立用户空间硬件抽象层(HAL),并在越来越多的受信应用程序之内添加对 Rust 的支持。去年,谷歌还曾发布过公告,表示他们用 Rust 编程语言重新实现了 Linux 内核中的 Android Binder 代码,Binder 负责进程间通信(IPC)等任务。与 C 版 Binder 相比,Rust Binder 的 IPC 基准测试结果显示出良好的前景,但仍需在实际工作负载下进行进一步测试。至少在 Binder 吞吐量的基准测试中,Rust 版本与 C 版本的性能差异约为±2%

如今谷歌进一步在现有固件代码库中部署了 Rust。

根据谷歌软件工程师 Ivan Lozano 和 Dominik Maier 的文章,使用 C 和 C++ 编写的旧固件代码库可以通过“直接替换为 Rust”来受益,以保证操作系统底层敏感层的内存安全。

“我们希望证明这种方法对于固件是可行的,能够以高效且有效的方式实现内存安全,”Android 团队表示。

“固件充当硬件和高级软件之间的接口。由于缺乏高级软件中标准的软件安全机制,固件代码中的漏洞可能会被恶意攻击者危险地利用,”谷歌警告说,并指出现有的固件由用内存不安全的语言(如 C 或 C++)编写的庞大的传统代码库组成。

“简单地用 Rust 编写任何新代码都可以减少新漏洞的数量,并随着时间的推移减少现有漏洞的数量,”Android 软件工程师表示,建议开发人员通过编写一个薄的 Rust shim 来替换现有的 C 功能,该 shim 在现有 Rust API 和代码库期望的 C API 之间进行转换。

“shim 作为 Rust 库 API 的包装器,连接了现有的 C API 和 Rust API。当用 Rust 替代重写或替换现有库时,这是一种常见的做法。”

参考链接:

https://www.theregister.com/2024/09/06/google_rust_c_code_language/

https://security.googleblog.com/2024/09/deploying-rust-in-existing-firmware.html

https://www.zdnet.com/article/google-after-using-rust-we-slashed-android-memory-safety-vulnerabilities/

https://www.reddit.com/r/rust/comments/18e6qrl/linus_on_rust_in_the_linux_kernel_december_2023/

https://www.phoronix.com/news/Google-Linux-Binder-In-Rust

EOF

你好,我是飞宇。日常分享C/C++、计算机学习经验、工作体会,欢迎点击此处查看我以前的学习笔记&经验&分享的资源。

我组建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起进群交流。

欢迎你添加我的微信,我拉你进技术交流群。此外,我也会经常在微信上分享一些计算机学习经验以及工作体验,还有一些内推机会

加个微信,打开另一扇窗

经常遇到有读者后台私信想要一些编程学习资源,这里分享 1T 的编程电子书、C/C++开发手册、Github上182K+的架构路线图、LeetCode算法刷题笔记等精品学习资料,点击下方公众号会回复"编程"即可免费领取~

感谢你的分享,点赞,在看三  

C语言与CPP编程 C语言/C++开发,C语言/C++基础知识,C语言/C++学习路线,C语言/C++进阶,数据结构;算法;python;计算机基础等
评论
  • 1,微软下载免费Visual Studio Code2,安装C/C++插件,如果无法直接点击下载, 可以选择手动install from VSIX:ms-vscode.cpptools-1.23.6@win32-x64.vsix3,安装C/C++编译器MniGW (MinGW在 Windows 环境下提供类似于 Unix/Linux 环境下的开发工具,使开发者能够轻松地在 Windows 上编写和编译 C、C++ 等程序.)4,C/C++插件扩展设置中添加Include Path 5,
    黎查 2025-02-28 14:39 140浏览
  • RGB灯光无法同步?细致的动态光效设定反而成为产品客诉来源!随着科技的进步和消费者需求变化,电脑接口设备单一功能性已无法满足市场需求,因此在产品上增加「动态光效」的形式便应运而生,藉此吸引消费者目光。这种RGB灯光效果,不仅能增强电脑周边产品的视觉吸引力,还能为用户提供个性化的体验,展现独特自我风格。如今,笔记本电脑、键盘、鼠标、鼠标垫、耳机、显示器等多种电脑接口设备多数已配备动态光效。这些设备的灯光效果会随着音乐节奏、游戏情节或使用者的设置而变化。想象一个画面,当一名游戏玩家,按下电源开关,整
    百佳泰测试实验室 2025-02-27 14:15 137浏览
  • 在物联网领域中,无线射频技术作为设备间通信的核心手段,已深度渗透工业自动化、智慧城市及智能家居等多元场景。然而,随着物联网设备接入规模的不断扩大,如何降低运维成本,提升通信数据的传输速度和响应时间,实现更广泛、更稳定的覆盖已成为当前亟待解决的系统性难题。SoC无线收发模块-RFM25A12在此背景下,华普微创新推出了一款高性能、远距离与高性价比的Sub-GHz无线SoC收发模块RFM25A12,旨在提升射频性能以满足行业中日益增长与复杂的设备互联需求。值得一提的是,RFM25A12还支持Wi-S
    华普微HOPERF 2025-02-28 09:06 143浏览
  • 振动样品磁强计是一种用于测量材料磁性的精密仪器,广泛应用于科研、工业检测等领域。然而,其测量准确度会受到多种因素的影响,下面我们将逐一分析这些因素。一、温度因素温度是影响振动样品磁强计测量准确度的重要因素之一。随着温度的变化,材料的磁性也会发生变化,从而影响测量结果的准确性。因此,在进行磁性测量时,应确保恒温环境,以减少温度波动对测量结果的影响。二、样品制备样品的制备过程同样会影响振动样品磁强计的测量准确度。样品的形状、尺寸和表面处理等因素都会对测量结果产生影响。为了确保测量准确度,应严格按照规
    锦正茂科技 2025-02-28 14:05 134浏览
  •           近日受某专业机构邀请,参加了官方举办的《广东省科技创新条例》宣讲会。在与会之前,作为一名技术工作者一直认为技术的法例都是保密和侵权方面的,而潜意识中感觉法律有束缚创新工作的进行可能。通过一个上午学习新法,对广东省的科技创新有了新的认识。广东是改革的前沿阵地,是科技创新的沃土,企业是创新的主要个体。《广东省科技创新条例》是广东省为促进科技创新、推动高质量发展而制定的地方性法规,主要内容包括: 总则:明确立法目
    广州铁金刚 2025-02-28 10:14 103浏览
  • 美国加州CEC能效跟DOE能效有什么区别?CEC/DOE是什么关系?美国加州CEC能效跟DOE能效有什么区别?CEC/DOE是什么关系?‌美国加州CEC能效认证与美国DOE能效认证在多个方面存在显著差异‌。认证范围和适用地区‌CEC能效认证‌:仅适用于在加利福尼亚州销售的电器产品。CEC认证的范围包括制冷设备、房间空调、中央空调、便携式空调、加热器、热水器、游泳池加热器、卫浴配件、光源、应急灯具、交通信号模块、灯具、洗碗机、洗衣机、干衣机、烹饪器具、电机和压缩机、变压器、外置电源、消费类电子设备
    张工nx808593 2025-02-27 18:04 120浏览
  •         近日,广电计量在聚焦离子束(FIB)领域编写的专业著作《聚焦离子束:失效分析》正式出版,填补了国内聚焦离子束领域实践性专业书籍的空白,为该领域的技术发展与知识传播提供了重要助力。         随着芯片技术不断发展,芯片的集成度越来越高,结构也日益复杂。这使得传统的失效分析方法面临巨大挑战。FIB技术的出现,为芯片失效分析带来了新的解决方案。它能够在纳米尺度上对芯片进行精确加工和分析。当芯
    广电计量 2025-02-28 09:15 116浏览
  • 在2024年的科技征程中,具身智能的发展已成为全球关注的焦点。从实验室到现实应用,这一领域正以前所未有的速度推进,改写着人类与机器的互动边界。这一年,我们见证了具身智能技术的突破与变革,它不仅落地各行各业,带来新的机遇,更在深刻影响着我们的生活方式和思维方式。随着相关技术的飞速发展,具身智能不再仅仅是一个技术概念,更像是一把神奇的钥匙。身后的众多行业,无论愿意与否,都像是被卷入一场伟大变革浪潮中的船只,注定要被这股汹涌的力量重塑航向。01为什么是具身智能?为什么在中国?最近,中国具身智能行业的进
    艾迈斯欧司朗 2025-02-28 15:45 221浏览
  • 应用趋势与客户需求,AI PC的未来展望随着人工智能(AI)技术的日益成熟,AI PC(人工智能个人电脑)逐渐成为消费者和企业工作中的重要工具。这类产品集成了最新的AI处理器,如NPU、CPU和GPU,并具备许多智能化功能,为用户带来更高效且直观的操作体验。AI PC的目标是提升工作和日常生活的效率,通过深度学习与自然语言处理等技术,实现更流畅的多任务处理、实时翻译、语音助手、图像生成等功能,满足现代用户对生产力和娱乐的双重需求。随着各行各业对数字转型需求的增长,AI PC也开始在各个领域中显示
    百佳泰测试实验室 2025-02-27 14:08 252浏览
  • 一、VSM的基本原理震动样品磁强计(Vibrating Sample Magnetometer,简称VSM)是一种灵敏且高效的磁性测量仪器。其基本工作原理是利用震动样品在探测线圈中引起的变化磁场来产生感应电压,这个感应电压与样品的磁矩成正比。因此,通过测量这个感应电压,我们就能够精确地确定样品的磁矩。在VSM中,被测量的样品通常被固定在一个震动头上,并以一定的频率和振幅震动。这种震动在探测线圈中引起了变化的磁通量,从而产生了一个交流电信号。这个信号的幅度和样品的磁矩有着直接的关系。因此,通过仔细
    锦正茂科技 2025-02-28 13:30 100浏览
  • 更多生命体征指标风靡的背后都只有一个原因:更多人将健康排在人生第一顺位!“AGEs,也就是晚期糖基化终末产物,英文名Advanced Glycation End-products,是存在于我们体内的一种代谢产物” 艾迈斯欧司朗亚太区健康监测高级市场经理王亚琴说道,“相信业内的朋友都会有关注,最近该指标的热度很高,它可以用来评估人的生活方式是否健康。”据悉,AGEs是可穿戴健康监测领域的一个“萌新”指标,近来备受关注。如果站在学术角度来理解它,那么AGEs是在非酶促条件下,蛋白质、氨基酸
    艾迈斯欧司朗 2025-02-27 14:50 400浏览
我要评论
1
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦