< 返回版块

Mike Tang 发表于 2020-06-14 17:18

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

--

不管软件公司在工具和训练他们的开发者上面花多少投资,“C++,在核心上,不是一个安全的语言”, Ryan Levick(https://github.com/rylev,微软 cloud developer advocate) ,在上个月的 AllThingsOpen 虚拟会议的一个讲座中,解释到,为何微软正在逐渐从C/C++切换到用 Rust 来构建它的基础设施软件。并且(微软)还正在鼓励其它软件工业巨头也考虑同样的方案。

他说,“我们正在使用的语言(它们非常古老,来自一个不同的纪元),没有给我们提供保护我们远离各种漏洞的能力”。他说,“C++不是一个内存安全的语言,没人会真的假装它是(内存安全的语言)”。

实际上,微软认为 C++ 对于关键任务软件来说,已经不再是可接受的了。业界非常需要迁移到一个高性能的、内存安全的语言来完成底层系统工作。然后,当前市面上的最佳选择就是 Rust,Levick 说。

C/C++ 不能被修复

当今,C 和 C++是写核心系统软件的首选。它速度快,与机器码之间只隔一层汇编。

但是业界正在被各种内存相关的缺陷搞残——其中有许多危害到安全性——而这些都是由语言造成的。现在,来自微软的 70% 的 CVE 是内存安全漏洞,Levick 说。“这个(比例)一直保持这样,甚至没有趋势变化”,他说。“尽管我们付出了巨大的努力来修复这些问题,但它看起来是一个普遍的东西(通过我们的努力无法消除或减少)”。

从财政视角来看更是如此,为了修复这些没完没了的内存相关的错误,业界付出了高昂代价。早在 2004 年,每个内存相关的错误会花费业界大约 $250,000,这还是微软的保守估计,Levick 说。

当然,也存在很多努力来提升 C++ 的安全性,但是虽然它们每一个都在某一方面很有效,却没有从整体上解决这个问题。

一个长期被采纳的方法是在如何写更安全的代码上,进行更多的开发者培训。但是,“没有证据表明,对 C 和 C++ 开发者做这种全面的训练能实际地以任何显著的方式解决这个问题”,Levick 说。他引用了微软内部的开发者训练体系的情况。

静态分析是被提到的另一种可能的解决方案。但是静态分析带来了太多开销:它需要被连接进构建系统。“所以存在很多不使用静态分析的动机”,Levick 说。“如果不是默认打开的,它就起不了多大作用”。

同样的情况,还有运行时检查。“要知道什么时候使用了运行时检查合约,什么时候没使用,这个要么是不可能,要么是非常困难”,他说,并且它们也会带来操作上的开销。

业界的最佳可能性

为了应对内存相关错误问题,微软安全响应中心发起了“安全系统编程语言倡议“。在那里,有些工作用来支持(提升)C/C++ (的安全性)。同时,Verona—— 一个新的面向安全底层编程的语言,也被创建了出来。但是这个(安全系统编程语言倡议)项目策略的第三只脚,也是他们投入最多信任的一只,就是支持“能直面处理这个问题的业界最佳可能性”。

“然后我们相信那就是 Rust”,他说到。

从性能上看,Rust 与 C/C++ 平级,甚至可能还会快一点。Rust 给开发者带来了生产力,自带包管理,现代测试框架以及其它东东。并且程序员确实为此喜爱 Rust。

但是让微软爱上 Rust 的主要原因是因为它是一个带最小运行时检查的内存安全的语言。Rust 胜在创建正确的程序。正确性大致意思是,编译器会检查程序中的不安全操作,产生更少的运行时错误。unsafe 关键字是可选项,但不是默认的。不安全的 Rust 代码通常只是一个更大的安全代码体的一个子集。不安全的代码对于内存分配型的任务——比如写一个设备驱动——是必要的。但是即使在这种场景下,不安全的内存操作部分,也是被封装在一个(安全)的 API 之下的。

能安全地编程的能力不应该被轻视,Levick 说到。实际上,它可以提供 10 倍的改进,这让它值得被投资。这很大程度上是因为所有 C/C++ 代码都要被安全性审计是否有不安全行为,而由 Rust 写的代码中,需要被检查的不安全代码只是整个代码库的一个小子集。

不过尽管微软对 Rust 如此看好,Levick 承认微软核心开发者在短时间内不会停止使用 C/C++。

“我们微软有非常多的 C++ 代码,这些代码不会被抛弃”,他说。“实际上,微软会继续写 C++,会继续写相当长一段时间”。

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

然而可能最大的挑战在于文化。“有些人只希望用他们熟悉的语言完成工作”,Levick 承认。

不过,业界看起来正在向 Rust 转移。亚马逊 Web 服务用了它,作为部署 Lambda serverless runtime 的一部分,以及 EC2 的一部分。Facebook 已经开始使用 Rust了,Apple, Google, Dropbox 和 Cloudflare 也都在用。

--

翻译:Mike Tang
时间:2020-06-14
链接:https://rustcc.cn/article?id=3e761f66-4904-4222-b68b-404d55f6418a

转载请尊重原创版权。

评论区

写评论
erihsu 2020-12-04 23:01

1 共 1 条评论, 1 页