C++死了:美国正式官宣
一场从编程语言根源上重构软件安全的运动,正在从学术界和工程师的讨论,升级为国家层面的战略行动。美国网络安全与基础设施安全局(CISA)与联邦调查局(FBI)等机构明确敦促软件开发商,在 2026 年 1 月 1 日前为使用非内存安全语言的现有产品制定清晰的内存安全迁移路线图。这不仅是一份建议,更是对关键基础设施软件开发商发出的明确风险警示。
为什么是 C/C++?内存安全的“原罪”
C 和 C++ 被誉为“万能工具”,赋予开发者对内存的绝对控制权,但这份自由也带来了巨大的责任和风险。当开发者犯错时,后果往往是灾难性的。
“70%”的漏洞根源:业内普遍估计,约 60%-70% 的浏览器、内核及各类软件漏洞,其根源都来自 C/C++ 中的内存安全问题。缓冲区溢出、释放后使用、未初始化内存等经典漏洞,至今仍是攻击者最常用的突破口。
用“语言”替代“规则”:内存安全语言(如 Rust、Go、Java、Python)通过内置机制(如借用检查器、垃圾回收)自动管理内存,将安全负担从开发者身上转移给了编译器或运行时。相比之下,C/C++ 的防护更多依赖于开发者的经验和外部工具。


量化风险:关键项目中的惊人数据
为了直观展示风险,CISA 等机构分析 172 个关键开源项目,数据触目惊心:
- 52% 的项目和 55% 的代码行由内存不安全语言编写。
- 在大型项目中,这一比例更高。Linux 内核中高达 95% 的代码是“内存不安全”的,MySQL Server 为 84%,Chromium 为 51%。
- 即使是内存安全语言编写的项目,其依赖链中也可能引入不安全的组件。
2026 年截止日:并非“立即删除”,而是“规划路线图”
澄清一个关键误解:要求并非要在 2026 年前用新语言重写所有 C/C++ 代码,这不切实际。
核心要求是“路线图”:到 2026 年 1 月 1 日,使用非内存安全语言的现有产品必须发布一份清晰的路线图,阐明如何、以及何时消除关键组件中的内存安全漏洞。若届时仍无明确计划,将被视为高风险。
“安全设计”承诺:CISA 已获得超过 230 家软件厂商的自愿承诺,加入“安全设计”计划,从源头优先考虑安全。这些厂商包括微软、Google、亚马逊等科技巨头,承诺在产品设计和开发全生命周期中系统地减少内存安全漏洞。这意味着,安全不再是开发完成后添加的“外挂”,而成了从需求阶段就必须融入的“核心需求”。
迁移的浪潮:巨头们的选择与效率证明
政策引导之外,头部科技公司已率先行动,证明了迁移的可行性:
-
Google:将 C++ 项目迁移到 Rust 的团队,其工作效率提升约两倍。更惊人的是,Google 在 Android 中广泛使用 Rust 后,内存安全漏洞从 2019 年的 223 个降至 2025 年的 0 个。这一成功源于三点:Rust 的借用检查器在编译期就能拦截内存错误;Android 的兼容性设计允许新旧代码共存;同时,Google 投资打造了全面的教育支持体系,帮助开发者降低学习曲线。
-
微软:正用 Rust 重写核心 Windows 库,并扩展 Azure 云服务中对 Rust 的使用。他们将此视为提升系统可靠性和安全性的长期战略,以降低 Windows 中内存安全漏洞的绝对数量。
-
Linux 内核:也开始接纳 Rust,并成为其核心组成部分。虽然 Rust for Linux 项目后续的稳定性引发了一些讨论,但这一举动本身已表明,即使在最保守、最底层的系统软件领域,内存安全语言的价值也获得了认可。
挑战与未来:两条腿走路
彻底替换庞大、尤其是嵌入式领域的遗留代码库极其困难且昂贵。因此,过渡期需要“两条腿走路”:
-
新项目优先:新开发,特别是高风险组件(网络服务、解析器),优先选择 Rust、Go 等内存安全语言。美国网络安全与基础设施安全局(CISA)明确指出,新开发项目没有理由继续使用 C/C++,除非能证明其不可替代性。对于必须使用 C/C++ 的新组件,必须提供严谨的安全分析和缓解措施。
-
加固遗留系统:对无法重写的 C/C++ 代码,通过静态分析、动态分析、模糊测试等持续测试,以及采用能局部缓解内存风险的硬件/软件技术来降低风险。例如,向 C/C++ 程序中引入更轻量的沙箱机制,或利用硬件特性实现细粒度的内存隔离。
软件工程“安全债”的必然清算
这场由美国发起的运动,本质上是在清算软件开发中累积了数十年的“安全债”。它将内存安全这个曾经的技术议题,提升到了国家经济安全与公共安全的战略高度。这对于整个行业是一次深刻的警示:系统性的安全风险,不能仅靠程序员的个人能力来抵御。
C/C++ 不会在短期内消失,但它们的角色将逐渐收缩。未来,我们将看到更清晰的边界:操作系统内核、嵌入式底层等少数极致性能和硬件控制场景,仍将是 C/C++ 的保留地;而绝大多数应用层、网络服务及关键基础设施的新开发,将大规模向 Rust 等内存安全语言迁移。
这艘由 C/C++ 驱动的软件巨轮不会立刻转向,但航向已经永远地改变了。对于每一位软件开发者而言,掌握至少一门内存安全语言,不再是可选项,而是职业发展的必修课。拥抱 Rust 或 Go,不仅是在投资自己的技术栈,也是在积极响应这个时代对更可靠、更安全软件系统的根本需求。
更多推荐
所有评论(0)