不管软件公司在工具和培训开发人员上面投入了多少资金,C++就其核心而言不是一种安全的语言, 微软的云开发者代言人Ryan Levick在上个月的AllThingsOpen 虚拟会议上表示,当时他解释了为何微软正逐渐从C/C++改用Rust来构建其基础设施软件。 微软还鼓励其他软件行业巨头考虑采取同样的做法。
他说:我们使用的语言很古老,来自不同的年代,无法为我们提供防范种种漏洞的能力。C++不是一种内存安全的语言,没人会真的假装它是内存安全的语言。
实际上,微软认为C++不再适合编写关键任务软件。业界迫切需要改用一种高性能的、内存安全的语言来完成底层系统工作。Levick表示,而如今市面上的最佳选择就是 Rust。
C/C++无法被修复
如今,C和C++是编写核心系统软件的首选语言。优点是速度快,代码与机器本身之间只隔一层汇编。
但是业界正被这些语言引起的各种内存相关的缺陷(许多缺陷是安全问题)搞得焦头烂额。Levick表示,现在,来自微软的通用漏洞披露(CVE)中70%是内存安全问题。他说:几乎一直是这种情况,并没有减少的趋势。尽管我们付出了巨大的努力来解决这个问题,但这仍似乎司空见惯。
鉴于修复这些没完没了的内存相关错误面临不断上升的成本,从财务角度来看,这(注:继续使用C和C++)不无道理。Levick表示,早在 2004 年,每个内存相关错误让业界花费250000美元,微软估计这个数字可能偏低。
当然,许多公司和开发人员在努力提升C++的安全性,虽然各自在某个方面很有效,但没有一个从整体上解决这个问题。
一种长期被奉行的做法是加强针对程序员的培训,以便编写更安全的代码。但是,没有证据表明,对C和C++开发人员进行全面的培训实际上能卓有成效地解决这个问题,Levick 说,他提到微软本身很注重培训内部开发人员的工作。
静态分析是被提到的另一种可能的解决方案。但是静态分析带来了太大的开销:它需要被连入到构建系统。Levick说:所以存在不使用静态分析的诸多动因。如果静态分析默认情况下不启用,就毫无帮助。
运行时检查也是如此:想知道什么时候使用了运行时检查合约、什么时候没使用,这不可能或至少极其困难,他说,而且它们也会带来操作上的开销。
业界的最大希望
为了应对这个内存相关错误问题,微软安全响应中心发起了安全系统编程语言倡议。该中心做了一些工作,专门用来提升C/C++的安全性。该中心还开发了Verona,这种新的编程语言是为安全低级编程开发的。但是这个项目策略的第三个部分(也是微软最寄予厚望的部分)旨在支持业界最有希望直面处理这个问题。
他说:而我们认为那第三个部分就是Rust。
从性能上看,Rust与C/C++不相上下,甚至可能更快一点。Rust 给开发人员带来了工作效率,拥有软件包管理和现代测试框架等功能。广大程序员因此而喜爱 Rust。
但是微软如此钟情Rust 的主要原因是,它是一种内存安全语言,只有极少的运行时检查。Rust 擅长构建正确的程序。大致说来,正确性是指编译器检查程序有无不安全操作,因而减少了运行时错误。不安全的关键字是个选项,但并不是默认的。不安全的 Rust 代码几乎总是一段更庞大的安全代码的子集。不安全的代码对于内存分配型任务(比如编写设备驱动程序)必不可少。但即使在这种情况下,内存中不安全的部分也在API后面被封装起来。
Levick表示,安全编程的这种能力不应该被轻视。实际上,它可以带来逾10倍的提升,因此值得投入心血。这主要是由于几乎所有的C/C++代码都需要接受安全审计、查找有无不安全行为,而用Rust编写的需要接受检查的不安全代码只是大多数代码库的一小部分。
虽然微软看好Rust,但Levick 承认微软核心开发人员短时间内不会停止使用C/C++。
他说:我们微软有很多的C++代码,这些代码不会被抛弃。实际上,微软在继续用C++编写代码,会继续用它编写一段时间的代码。
许多工具是围绕C/C++构建的。尤其是,微软的二进制代码现在几乎完全是在Microsoft Visual C++编译器(可生成 MSVC二进制代码)上构建的,而 Rust 依赖 LLVM。
不过可能最大的挑战在于文化层面的。Levick承认:总有一些人就希望用他们熟悉的语言来完成工作。
不过,业界似乎正在追捧Rust。AWS使用Rust,除了用于EC2的一些部分外,一方面还用于部署 Lambda Serverless 运行时环境。Facebook 已开始使用 Rust,苹果、谷歌、Dropbox 和 Cloudflare 也已开始使用它。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容