写点什么

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:518730

评论 1 条评论

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

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

度安讲 | 第二期「安全左移·业务护航」技术沙龙成功举办

百度安全

李尔将收购西班牙自动化和智能公司WIP Industrial Automation

财见

构建Python构建自动化测试框架(原理与实践)

我再BUG界嘎嘎乱杀

Python 软件测试 自动化测试

数字化时代,API网关为何如此重要?

芯盾时代

网络安全 网关 API网关

开始报名!龙蜥社区系统安全 Meetup 硬核议程发布

OpenAnolis小助手

操作系统 系统安全 龙蜥社区 eBPF 技术

【PMP必考点】2024年PMP敏捷知识必考点

敏捷开发

项目管理 产品经理 pmp 项目经理 PMP考试

石油行业的数字化转型与智能化发展:新技术综合运用助力业务提升

天津汇柏科技有限公司

数字化转型 智能

互联互通新进展-联通支付与微信实现商户收款码互联互通!

最新动态

F5G城市光网,助力“一网通城”筑基数字中国

脑极体

AI 网络

解析 AI 时代广告素材格局:AppsFlyer 综合报告揭示行业关键数据洞察

财见

GitHub上新!14个Python项目详细教程(附完整代码)

我再BUG界嘎嘎乱杀

Python 后端 入门 开发语言 零基础

从数据库设计到性能调优,全面掌握openGemini应用开发最佳实践

华为云开发者联盟

数据库 后端 时序数据库 华为云 华为云开发者联盟

人员身份级的数据中心机房作业随工

鲸品堂

机房 数据中心 机房管理 企业号 6 月 PK 榜

Python优化、异常处理与性能提升技巧

我再BUG界嘎嘎乱杀

Python 编程 后端 开发语言

GRequests: 让 HTTP 服务人类

江湖十年

golang 后端 HTTP http client #go

展示柜透明显示屏的特点简析

Dylan

创新 视频 商品 LED display LED显示屏

Amazon Q Developer 实战:从新代码生成到遗留代码优化(下)

亚马逊云科技 (Amazon Web Services)

人工智能 生成式人工智能

昆仑万维开源2千亿稀疏大模型天工MoE,全球首创能用4090推理

新消费日报

Unix套接字进程通信初探【Java版本】

FunTester

告别内存OOM,解决MySQL内存增长问题

华为云开发者联盟

数据库 后端 华为云 华为云GaussDB 华为云开发者联盟

万界星空科技数字孪生智慧工厂

万界星空科技

数字孪生 智慧工厂 智能制造 mes 万界星空科技

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