微软为什么从 C/C++ 转向了 Rust?

微软因C/C++内存安全问题转向Rust,Rust成为安全系统编程的最佳选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者 | JOAB JACKSON

译者 | 弯月,责编 | 屠敏

头图 | 优快云 下载自东方 IC

出品 | 优快云(ID:优快云news)

以下为译文:

在上个月的AllThingsOpen虚拟会议上,微软云开发推广部的Ryan Levick解释了为什么微软在构建基础设施软件中逐渐从C/C++转向了Rust。他表示:“无论软件公司在工具和人员的培训上投入多少精力也不能解决问题,因为C++本质上就不是安全的语言。”并鼓励其他软件行业巨头也应该思考这个问题。

他说:“我们使用的语言由于年代久远、来自不同时代,无法为我们提供保护,让我们免受此类漏洞攻击。C++不是一种内存安全的语言,相信这一点无人有异议。

实际上,微软认为C++无法胜任编写关键任务的软件。业界非常需要高性能、内存安全的编程语言来开发底层系统。Levick表示,当今市场上最好的选择是Rust。


C/C++的问题无法解决

 

目前,C和C++是编写核心系统软件的默认语言。这种语言速度快,而且源代码可以直接汇编成机器语言。

但是,这些语言引发的与内存相关的bug(其中很多是安全隐患)让整个行业苦不堪言。Levick表示,如今源自微软的CVE中有70%是内存安全问题。他说:“前途未卜,情况没有任何改变。尽管我们为解决这个问题付出了巨大的努力,但这个问题依然普遍存在。”

从财务的角度来看,换成Rust很有道理,因为修补这类与内存相关的没完没了的bug需要付出昂贵的成本。Levick说,早在2004年,每个与内存相关的bug都会给业界造成大约25万美元的损失,而且微软的估计可能还比较保守。

当然,为了提高C++的安全性,软件业界已经付出了大量努力,尽管种种努力都有效,但并不能完全解决这个问题。

长期以来,我们最常使用的一种方法是,就如何编写更安全的代码对程序员展开更多培训。但是,“没有证据表明,对C和C++开发人员进行整体培训可以显著改善这个问题。”Levick根据微软大量的开发人员内部培训结果说。

静态分析是另一种解决方案。但是静态分析会带来太多开销,必须将静态分析紧密结合到构建系统中。Levick说:“因此,人们有很多借口不使用静态分析。如果静态分析不是默认就启用的,那么就起不到任何作用。”

运行时检查也是如此:“了解何时使用运行时检查、何时没有使用是非常困难的,有时甚至不可能。”他还补充说,这也带来了运维开销。


业界最佳机会

 

为了解决与内存有关的bug,微软安全响应中心发起了“安全系统编程语言”计划。他们投入了一些开发人员专门支持C/C ++。同时,他们还创建了一门新编程语言Verona,来开发安全的底层系统。但是,这个项目策略中第三个主要的部分,也是他们最有信心的部分,就是支持“直接解决这个问题的业界最佳机会”。

他说:“我们相信这个重任落到了Rust肩上。”

就性能而言,Rust与C/C++旗鼓相当,甚至更快。Rust通过软件包管理、现代测试框架等提高了开发人员的生产力。因为这个原因程序员非常喜欢Rust。

但是,微软如此着迷于Rust的主要原因是它是一种内存安全的语言,而且只需要最少量的运行时检查。Rust擅长创建正确的程序。简单来说,正确性就是编译器会检查程序是否存在不安全的操作,从而减少运行时错误。不安全的关键字也可以使用,但并不是默认推荐。在安全的Rust代码中,不安全的代码永远只是一小部分。不安全模式对于需要内存分配的任务(例如编写设备驱动程序)是必须的。但在Rust中,即便内存的不安全部分也封装在API的后面。

Levick表示,这种安全编程的能力不容忽视。实际上,它带来的提升远远不止十倍,因此值得进行投资。这主要是因为几乎所有的C/C++代码都需要进行安全性审核以检查不安全行为,而用Rust编写的代码中,需要检查的不安全代码只是大多数代码库的一小部分。

虽然微软看好Rust,但Levick承认近期内微软核心开发人员不会停止使用C/C++。

他说:“微软有很多C++代码,而且这些代码无处不在。实际上,微软将继续使用C++来编写程序,而且还要使用很长一段时间。”

许多工具都是围绕C/C++构建的。特别是,目前微软的二进制文件几乎完全建立在Visual C ++编译器上,它会生成MSVC二进制文件,而Rust则依赖LLVM。

不过,也许最大的挑战是文化。Levick表示:“有些人想用他们熟知的语言来完成工作。”

尽管如此,整个软件行业似乎都在向着Rust迈进。AWS使用Rust来部署Lambda无服务器运行时,以及EC2的某些部分。Facebook已开始使用Rust,此外还有苹果、Google、Dropbox和Cloudflare也在使用。

原文:https://thenewstack.io/microsoft-rust-is-the-industrys-best-chance-at-safe-systems-programming/

本文为 优快云 翻译,转载请注明来源出处。


更多精彩推荐
☞成都一名程序员跳楼,程序员眼中的成都和天府软件园
☞真香!如何用300行代码写完一个Spring基本框架?
☞微信停止服务印度用户;阿里回应“马云遭印度法院传唤”;fastjson 1.2.73 发布 | 极客头条
☞残差网络的前世今生与原理 | 赠书
☞观点 | ETH 2.0 经济模型分析报告简述
☞推特惊爆史诗级漏洞,App 恶意窃取用户隐私,云端安全路向何方?
点分享点点赞点在看
<think>嗯,用户现在问的是Rust在嵌入式Linux中的应用。我需要先回顾一下之前的问题,用户之前问的是如何在微信中使用DeepSeek,现在转向了技术问题,可能用户是开发者或者对编程有兴趣的人。 首先,我要确定用户的需求是什么。他们可能正在考虑在嵌入式Linux项目中采用Rust,想了解其优势和应用场景。需要明确Rust在嵌入式领域的优势,比如内存安全、并发处理、性能等。 接下来,我需要考虑用户可能的背景。如果用户是嵌入式开发者,他们可能熟悉C/C++,所以需要比较Rust与这些传统语言的优缺点。同时,用户可能关心实际应用案例、工具链支持、社区资源等。 用户可能没有直接问,但潜在的问题可能包括:Rust在嵌入式系统中的学习曲线如何?现有的库和框架支持是否足够?是否有成功的项目案例? 还要注意用户可能对安全性特别关注,尤其是嵌入式系统常常用于关键领域,如医疗、汽车等,Rust的内存安全特性可能是一个重要卖点。需要提到零成本抽象和所有权系统如何防止内存错误。 另外,需要提到Rust在嵌入式Linux中的具体应用,比如驱动开发、系统服务、实时应用等。可能还要介绍相关的工具,如cross-compilation支持,嵌入式库如embedded-hal,以及社区项目如Tokio是否适用于嵌入式异步编程。 需要注意的是,用户可能对如何开始使用Rust在嵌入式Linux上感兴趣,所以需要简要提到开发环境的搭建,比如使用Yocto或Buildroot集成Rust,或者使用特定的框架如Tock OS。 最后,要确保信息准确,特别是关于Rust在嵌入式Linux中的实际应用案例,比如是否有大公司采用,或者开源项目的情况。避免提供过时的信息,比如旧版本的Rust特性或不再维护的库。 总结起来,回答需要结构清晰,分点说明优势、应用场景、工具链和实际案例,同时对比传统语言,帮助用户全面了解Rust在嵌入式Linux中的潜力和挑战。</think>Rust 在嵌入式 Linux 中的应用近年来逐渐增多,其独特的内存安全、高性能和现代语言特性使其成为传统 C/C++ 的有力补充。以下是 Rust 在嵌入式 Linux 中的关键应用方向及优势: --- ### 一、**核心优势** 1. **内存安全** - 通过所有权(Ownership)、借用检查(Borrow Checker)和生命周期(Lifetime)机制,**避免空指针、缓冲区溢出等常见内存错误**,这对可靠性要求高的嵌入式系统至关重要。 2. **零成本抽象** - 高性能代码生成能力接近 C/C++,适合资源受限的嵌入式场景(如低内存 MCU 或实时任务)。 3. **并发安全** - 编译时检查数据竞争问题,适合多核嵌入式设备(如树莓派、工业控制器等)。 4. **与现代工具链整合** - 支持交叉编译、Cargo 包管理,可集成到 Yocto/Buildroot 等嵌入式 Linux 构建系统。 --- ### 二、**典型应用场景** #### 1. **设备驱动开发** - **替代部分内核模块**:通过 Rust for Linux 项目(Linux 内核官方支持),可开发更安全的字符设备驱动、GPIO 控制等。 - **案例**:微软 Azure Sphere 使用 Rust 开发安全外设驱动。 #### 2. **用户态系统服务** - 编写守护进程或中间件(如网络协议栈、数据采集服务),利用 Rust 的 `async/await` 实现高并发低延迟。 - **工具链**:`tokio`(异步运行时)、`serde`(数据序列化)。 #### 3. **安全关键组件** - 加密通信(TLS 实现如 `rustls`)、固件更新等对安全性要求高的模块,减少漏洞风险。 #### 4. **边缘计算与物联网** - 结合嵌入式 Linux 单板(如 Raspberry Pi、NVIDIA Jetson),开发 AI 推理、图像处理等高性能应用,例如: - 使用 `tch-rs`(PyTorch 绑定)部署轻量级模型。 - 通过 `embedded-svc` 框架实现 IoT 设备通信。 --- ### 三、**技术栈与工具** 1. **开发环境** -unknown-linux-gnueabihf`)。 - 调试:`gdbstub` 或与 OpenOCD 配合使用。 2. **嵌入式生态库** - 硬件抽象:`embedded-hal`(硬件抽象层)、`linux-embedded-hal`(针对 Linux 的 GPIO/I2C 控制)。 - 通信协议:`embedded-io`(异步 I/O)、`smoltcp`(轻量 TCP/IP 协议栈)。 3. **与 C/C++ 互操作** - 通过 `bindgen` 调用现有 C 库,或导出 Rust 函数供 C 代码调用(`extern "C"`)。 --- ### 四、**挑战与注意事项** 1. **实时性限制** - Rust 的运行时(如 `panic` 处理)可能引入延迟,需谨慎用于硬实时系统(需结合 RTOS 或实时 Linux 补丁)。 2. **内存占用** - 默认标准库(`std`)可能较大,可启用 `#![no_std]` 模式剥离依赖,或使用 `heapless` 等无堆库。 3. **社区成熟度** - 嵌入式相关库仍处于快速发展期,部分场景需自行封装底层驱动。 --- ### 五、**入门实践步骤** 1. **环境搭建** ```bash # 安装 Rust 目标平台支持(示例:ARMv7) rustup target add armv7-unknown-linux-gnueabihf ``` 2. **示例:控制 GPIO** ```rust // 使用 linux-embedded-hal 库 use linux_embedded_hal::SysfsPin; fn main() { let mut led = SysfsPin::new(17).unwrap(); led.set_high().unwrap(); // 设置 GPIO17 为高电平 } ``` --- ### 六、**未来趋势** - **内核级支持**:Linux 内核计划逐步合并 Rust 驱动支持(6.x 版本已开始实验性集成)。 - **AI 边缘化**:Rust 的高性能特性将推动其在嵌入式 AI(如 TinyML)中的应用。 - **安全认证**:随着 ISO 26262(汽车)和 IEC 61508(工业)对 Rust 的认可,其在安全敏感领域的应用将加速。 --- 若需深入特定方向(如实时控制、驱动开发),可进一步探讨具体实现方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值