写点什么

Azure CTO 呼吁不要使用 C/C++ 创建新项目,C++ 之父回应:你们这些高管就爱喜新厌旧

  • 2022-09-21
    北京
  • 本文字数:2654 字

    阅读完需:约 9 分钟

Azure CTO呼吁不要使用 C/C++ 创建新项目,C++之父回应:你们这些高管就爱喜新厌旧

微软 Azure CTO 向旧语言猛烈开炮,C++之父对此进行了辩护。

 

微软 Azure CTO Mark Russinovich 呼吁放弃 C 和 C++这两门久经时间考验,被广泛应用于高性能本机应用程序开发的编程语言。C++之父 Bjarne Stroustrup 回应称企业高管就是喜欢新事物,且一些人总爱发表非常片面的言论。

 

本周一,Russinovich 敦促科技行业放弃 C/C++。他强调,“说到编程语言的选择,是时候停止用 C/C++创建新项目了。Rust 才是无垃圾回收语言中的最佳选项。出于安全性和可靠性的考量,整个软件行业都该弃用这两种陈旧的语言。”

 


从 C++专家到“Rust 传播者”

 

Mark Russinovich 本人是著名的黑客和逆向工程大师,2005 年,曾运用逆向工程在索尼 DRM 产品中发现 rootkit 复制保护有害程序。该曝光事件在当时极其有名,因为 rootkit 性质恶劣,它通过修改操作系统,阻止计算复刻 CD 副本,并无法卸载,甚至无法被反病毒和反间谍程序检测到,为其他恶意软件打开了渗透 Windows PC 的大门。另外,他还曾利用闲暇时间写过三本安全相关的小说(堪称摸鱼大师)。

 

在 Reddit 上,他被人誉为“地球上最有才华的 C/C++ 程序员之一”。在加入微软之前,Russinovich 编写并发布了数十个流行的 Windows 管理和诊断实用程序。 2006 年,微软收购了他一手创办起来的企业 Winternals Software,Russinovich 也因此加入微软,成为微软技术研究员——这是它可以授予的最高荣誉之一,随后职位变更为微软 Azure 主架构师以及 CTO。

 


截图来源:https://www.linkedin.com/in/markrussinovich/

 

因其微软 Azure CTO 的身份,Mark Russinovich 的评论值得注意,因为微软的核心产品,如 Windows、Office 和 SQL Server,主要是用 C 和 C++ 编写的。而在 Azure 云平台上得到广泛应用的 Linux 也是如此,主要语言为 C 和 C++。根据报道,Linux 缔造者 Linus Torvalds 已经证实,除非出现不可预见的特殊状况,否则 Linux 6.1 版内核将使用 Rust 代码。作为向来以 C 语言编写,同时包含少量汇编及胶水脚本的传世项目,Linux 对 Rust 的接纳堪称里程碑式事件。

 

Rust 是 Graydon Hoare 出于个人爱好设计的编程语言,于 2006 年在 Mozilla 初步成型,并在 2010 年正式亮相。随着 2015 年 Rust 1.0 的发布,它也逐渐以 C/C++替代选项的姿态得到人们的广泛关注。

 

自那时起,Rust 连续七年成为 Stack Overflow 年度调查中最受欢迎的编程语言。尽管学习难度不低,但它还是被各大科技巨头先后纳入自家项目当中。

 

苹果、亚马逊、谷歌、Meta 乃至微软等等,都已经在功能开发和实际生产中使用 Rust。Cloudflare最近大肆宣传的全新HTTP代理Pingora也是用 Rust 编写而成,据称在提高性能的同时削减了 CPU 与内存用量。

 

Rust 的最大优势在于出现内存损坏 bug 的几率更低,也就让软件变得更加安全。至少自 2019 年以来,微软就一直在讨论放弃 C/C++、转用 Rust 的可能性。微软还在开发自己的云内存安全编程语言,即 Verona 项目。所以,Russinovich 这次提出放弃 C/C++的主张,可以说是早有先例。

 

另外,这也不是微软第一次公开支持 Rust。三年前,微软安全响应中心(MSRC)曾在博客上发表文章表示“ Rust 是目前 C 和 C++ 的最佳替代品”。 MSRC 团队还表示,“大多数修复的漏洞和分配的 CVE 都是由开发人员无意中将内存损坏错误插入到其 C 和 C++ 的代码中造成的。自 2006 年以来,微软修复的 CVE 中约有 70%跟内存安全问题相关。这意味着,如果该软件是用 Rust 编写的,那么这些安全问题很可能会被消除。”

 

外媒 The Register 询问了 Russinovich 的建议是否会在全公司内部推行,但微软方面拒绝置评。

当然,单靠 Rust 本身并不足以保障软件安全。它虽然提供针对内存安全漏洞的防御,但却无法消除其他威胁元素。

 

正如 Rust 说明文档所言,“Rust 是种既安全、又不那么安全的语言。”开发者有可能在某些任务中编写出不安全的 Rust 代码,这是无法单靠语言自身解决的问题。另外,Rust 也解决不了健全软件设计范畴之外的攻击向量(例如社会工程)。但必须承认,Rust 的品质相当过硬,在自己的领地内足以支撑起更强的安全信心。

 

Rust 基金会执行董事兼 CEO Rebecca Rumbul 在采访中表示,“我们希望各方的支持和肯定能推动针对 Rust 基础设施和技术社区的持续投入,确保 Rust 能够在未来的发展道路上延续安全、可靠和可持续等优势。”

 

C++之父:ISO C++已经实现了可靠的内存安全

 

对此,外媒请 C++缔造者 Bjarne Stroustrup 发表了评论。在回复中,Stroustrup 站在 C++的立场做了一番辩护。

 

人们总是迷恋那些看似能让生活更轻松的新事物,这一点在企业高管身上体现得尤其明显。

 

“另外,选择新事物也能激起人们的兴奋之情;相比之下,解决旧有知名工具中的已知问题就显得没那么‘酷’。很遗憾,新语言往往需要多年历练和完善,才能在广泛的应用领域中获得与成熟语言相比肩的水平。但大多数人看不到一点,而且总爱发表一些非常片面的评论。”

 

Stroustrup 表示,“当然,安全性在大多数开发场景下都至关重要,所以多年来我一直致力于提高 C++的安全性。”

 

“我们现在已经在 ISO C++中实现了可靠的完美类型与内存安全。也就是说,每个对象都会根据它的定义类型进行使用。具体而言,我们消除了空指针问题、能够捕捉范围错误,并消除了数据争用。请注意,包括 Rust 在内,任何一种号称‘安全’的语言都无法彻底避免风险代码。”

 

Stroustrup 还以参与编写的 C++ Core 指南为例,提出“这份指南的基本思路,就是定义一组必须遵循的安全规则,而后通过静态分析强制执行这些规则。之所以需要这些规则,是因为任意 C 或 C++代码本身无法自证安全。”

 

“这就是符合 ISO 标准的 C++代码,可以强制要求开发者通过分析器保障代码安全和更新。目前,微软 Visual Studio、Clang Tidy 等都提供类似的分析器实现选项。”

 

“C++正在积极进步,而且已经在实际应用当中发挥出良好的灵活性和性能表现。当前,各类项目中部署的 C++代码多达数十亿行。”

 

“所以无论是直接替换掉这些 C++代码,还是所谓让它们更加‘安全’,都会是一项艰巨的任务。如果没有分期分批、持之以恒的努力,大量不安全的 C 代码和陈旧 C++代码将‘永远’存在。纵观历史,在颠覆性革命出现惨烈失败之后,更温和的演进方式往往能够最终取得成功。”

 

参考链接:

https://www.theregister.com/2022/09/20/rust_microsoft_c/

https://devclass.com/2022/09/20/microsoft-azure-cto-on-c-c/

https://www.csoonline.com/article/2998952/sony-bmg-rootkit-scandal-10-years-later.html

https://news.ycombinator.com/item?id=32905885

https://www.reddit.com/r/programming/comments/xj3muf/mark_russinovich_azure_cto_its_time_to_halt/

2022-09-21 14:518496

评论 1 条评论

发布
用户头像
我们现在已经在 ISO C++中实现了可靠的完美类型与内存安全。

哪个版本的C++。
2022-09-21 19:16 · 广东
回复
没有更多了
发现更多内容

产品训练营第三章-第一节小结

skylar

产品经理训练营--第三章作业

Lucas zhou

产品经理训练营

为您收录的操作系统系列-进程管理(上篇)

鲁米

操作系统 进程

抽奖助手小程序 利益相关方排序及解决方案

Shine

产品

关注产品的利益相关者,想想他们的问题,自己设定一些前提,做个简单的排序。

mas

【作业-03】解决方案的设计与积累

西西里奇

03- 抽奖小助手的那个「谁」

学习高手song轻松

利益相关者的问题及方案

梁媛

第 3 周作业

老元宵

第二章:产品思维和产品意识(下) - 作业 - 为云 g

Weiyung

产品经理训练营 - 第二章作业 (二)

joelhy

产品经理训练营

产品经理训练营第三周作业

happy-黑皮

产品经理训练营

「产品经理训练营」作业 03

🌟

产品经理 产品经理训练营 产品经理训练

开发质量提升系列:日常重视好投产,运维拍肩也不怕

罗小龙

最佳实践 方法论 28天写作 2月春节不断更

产品训练营·第三周作业 & 总结

tiu

车载操作系统 (28天写作 Day26/28)

mtfelix

28天写作 车载操作系统 AOS QNX

产品训练营-第三次作业

Geek_娴子

即兴演讲的几种实用脚本

熊斌

读书笔记 28天写作

管理笔记[5]:“态度”决定成败,是一切组织管理的前提

L3C老司机

产品经理训练营-第三周作业

玖玖

offline app

lidaobing

28天写作 offline app

VUCA时代-不敏捷就得死

Ian哥

28天写作

如果创意也可以被设计「幻想短篇 26/28」

道伟

28天写作

利益相关者排序

Geek_a32093

机器学习笔记之:最熟悉的陌生阵

Nydia

第三次作业及总结

青葵

学习

第三周作业

BlueSky

产品经理-第二周作业(2)

LLL777

week13 数据应用(二)

杨斌

产品经理训练营第二章作业(二)

猫。

28天瞎写的第二百三十六天:emacs 党的没落

树上

28天写作

Azure CTO呼吁不要使用 C/C++ 创建新项目,C++之父回应:你们这些高管就爱喜新厌旧_语言 & 开发_Tina_InfoQ精选文章