ARTICLE · 软件编程
被 C 语言折磨多年,curl 花 4 年用 Rust 重构,进度推到 95%,为何突然放弃?
一语总结本文分析开源网络工具 curl 因 C 语言安全漏洞问题启动的 Rust 重构实验,历时 4 年完成度达 95% 但最终因维护成本高、用户需求错配而终止,尽管失败但为未来 Rust 后端集成积累经验。
curl 作为全球广泛使用的网络传输工具,因 C 语言缺乏内存安全机制导致安全漏洞频发(51/98 个漏洞由 C 错误引起)。尽管 Rust 重构在安全性上有优势,但全量重写成本过高,项目维护者 Daniel Stenberg 选择通过替换底层后端组件的方式引入 Rust。2017-2024 年间尝试将 HTTP/1.1 和 HTTP/2 后端替换为 Rust 实现的 Hyper 库,进度达 95% 但因 C-Rust 粘合层复杂、测试用例无法完全通过、维护人力不足等问题,最终在 2024 年底宣布终止该实验。尽管 Hyper 被移除,curl 仍保留 rustls 和 quiche 等其他 Rust 后端组件,并表示未来将继续接纳 Rust 生态库作为后端选项。
- curl 的安全漏洞主要源于 C 语言缺乏内存安全机制
curl 共有 98 个公开安全漏洞,其中 51 个由 C 语言编码错误引起,包括缓冲区溢出、空指针解引用等典型问题。
- 全量 Rust 重构因成本过高而不可行
curl 包含 18 万行 C 代码,相当于《战争与和平》篇幅的 1.14 倍。全量重写需要巨大投入且引入新 bug,维护成本远高于优化现有代码。
- 通过后端替换引入 Rust 技术,但最终失败
尝试用 Rust 实现的 Hyper 替换 HTTP 后端,进度达 95% 但因 C-Rust 调用复杂、测试用例无法完全通过、维护人力不足等问题,2024 年底宣布终止项目。
- 失败原因在于维护成本与收益失衡
Hyper 后端需要同时维护 C 和 Rust 代码,维护成本翻倍;且 Rust 生态用户与 curl 用户需求错配,缺乏持续维护动力。
- 未来的 Rust 集成路径仍然开放
curl 保留 rustls(TLS 协议)和 quiche(HTTP/3 协议)等 Rust 后端组件,并表态未来将继续接纳 Rust 生态库作为后端选项。
被 C 语言折磨多年,curl 花 4 年用 Rust 重构,进度推到 95%,为何突然放弃?
curl 作为全球广泛使用的网络传输工具,因 C 语言缺乏内存安全机制导致安全漏洞频发(51/98 个漏洞由 C 错误引起)。尽管 Rust 重构在安全性上有优势,但全量重写成本过高,项目维护者 Daniel Stenberg 选择通过替换底层后端组件的方式引入 Rust。2017-2024 年间尝试将 HTTP/1.1 和 HTTP/2 后端替换为 Rust 实现的 Hyper 库,进度达 95% 但因 C-Rust 粘合层复杂、测试用例无法完全通过、维护人力不足等问题,最终在 2024 年底宣布终止该实验。尽管 Hyper 被移除,curl 仍保留 rustls 和 quiche 等其他 Rust 后端组件,并表示未来将继续接纳 Rust 生态库作为后端选项。
文章金句
"curl 一半的漏洞都是 C 语言错误造成的,但用 Rust 重构并不现实
"维护成本几乎翻倍,而收益却微乎其微
"我们移除 Hyper,不代表我们后悔尝试过。实验的价值在于,即使失败了,我们也学到了东西。