C++发布革命性提案:“借鉴”Rust精华,内存安全即将成为标配?
InfoQ 2024年09月18日 14:16 辽宁
编译 | 核子可乐、Tina
想要内存安全?那就给你们内存安全!我们也有自己的借用检查器。
在被“内存安全”议题反复折磨了两年之后,C++ 社区已经发布一项提案,旨在帮助开发人员减少代码中的安全漏洞。
这项 Safe C++ Extension 安全扩展提案希望解决这种编程语言中的致命弱点,保证其就此告别内存安全漏洞。
C++ 联盟总裁兼执行董事 Vinnie Falco 上周四表示,“这是一项革命性的提案,将为 C++ 编程语言带来内存安全功能。这次合作也标志着 C++ 生态系统的一个重要里程碑,相信大家也感受到行业对于安全代码的需求从未如此迫切。”
1 内存安全的需求确实从未如此迫切
在过去两年之间,各类私营和公共部门组织一直在敦促和推动程序员们使用内存安全语言(例如 C#、Go、Java、Python 以及 Swift)编写新应用程序,同时重写旧有应用程序。其中最典型的选项当数 Rust,一款性能良好的低级系统语言。
软件工程师 Alex Gaynor 早在 2019 年就提出了这个问题,他表示大型代码库中的大多数严重漏洞都来自内存安全缺陷,例如缓冲区溢出与释放后使用。他强调称,“数据已经一再证明,当项目使用内存不安全语言(例如 C 和 C++)时,就会受到大量由此产生的安全漏洞的困扰。”
在此之后,内存安全迅速成为学术论文和技术会议中常见的讨论主题。2022 年 9 月,微软 Azure 首席技术官 Mark Russinovich 也下场静态,呼吁开发人员弃用 C 和 C++,转投 Rust 的怀抱。
几个月后,美国国安局也采取了类似的立场。到 2023 年,内存安全已然成为主流话题,Consumer Reports 消费者报告也对此进行了报道。
面对 Rust 的浩大攻势,C++ 阵营这边则警惕地组织起防守阵形。两年之前,在回应 Russinovich 对于弃用 C/C++ 的呼吁时,C++ 语言的缔造者 Bjarne Stroustrup 就在采访中坦言,“我们现在可以在 ISO C++ 中实现完美的类型与内存安全保障。”
然而这个说法遭到了一些质疑。互联网安全研究小组(ISRG)的联合创始人兼执行董事 Josh Aas 就负责监督一项名为 Prossimo 的内存安全计划,他去年曾在采访中证实,尽管理论上确实可以编写内存安全的 C++ 代码,但其在现实中其实无法实现,因为 C++ 并没有在立项之初就考虑到内存安全设计。
安全 C++ 扩展提案就是为了解决这些批评而生,同时也响应了美国国安局、其他五眼国家情报机构、美国网络安全与基础设施安全局(CISA)白宫以及国防高级研究计划局(DARPA)对于各公共部门提出的内存安全要求。
今年 8 月,Gaynor 重新讨论了内存安全问题,并指出虽然尝试让 C++ 更安全确有现实意义,但他仍对这种意义的具体程度表示怀疑。“我的态度很明确,C++ 的安全性可以得到实质性改进。更具体地讲,完全解决内存安全问题似乎也不是不可能。但相信大家也跟我一样有着同样的共识,那就是对于让 C++ 在安全性方面比肩 Swift、Go 或者 Rust 这个问题上,恐怕并不存在一个简单易行的解决方案。”
尽管如此,安全 C++ 扩展提案仍想要一试身手。C++ 联盟开发人员 Sean Gaxter(Circle 编译器的创造者)与 Christian Mazakas 承认,目前行业对于采用内存安全编程语言的呼声可谓震耳欲聋。在他们看来,虽然 Rust 只是一种流行的系统级编程语言、没有垃圾收集功能、可以提供严格的内存安全保障&#