作者 | JOAB JACKSON
译者 | 弯月,责编 | 屠敏
头图 | CSDN 下载自东方 IC
出品 | CSDN(ID:CSDNnews)
以下为译文:
在上个月的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/
本文为 CSDN 翻译,转载请注明来源出处。
|
请发表评论