ARTICLE · 软件编程

被 C 语言折磨多年,curl 花 4 年用 Rust 重构,进度推到 95%,为何突然放弃?

作者:dbaplus社群 来源:dbaplus社群 2026-08-21 07:15 12 分钟 4 阅读 2805 字
C语言Rustcurl内存安全后端替换
一语总结

本文分析开源网络工具 curl 因 C 语言安全漏洞问题启动的 Rust 重构实验,历时 4 年完成度达 95% 但最终因维护成本高、用户需求错配而终止,尽管失败但为未来 Rust 后端集成积累经验。

AI 总结

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 生态库作为后端选项。

核心要点
  1. curl 的安全漏洞主要源于 C 语言缺乏内存安全机制

    curl 共有 98 个公开安全漏洞,其中 51 个由 C 语言编码错误引起,包括缓冲区溢出、空指针解引用等典型问题。

  2. 全量 Rust 重构因成本过高而不可行

    curl 包含 18 万行 C 代码,相当于《战争与和平》篇幅的 1.14 倍。全量重写需要巨大投入且引入新 bug,维护成本远高于优化现有代码。

  3. 通过后端替换引入 Rust 技术,但最终失败

    尝试用 Rust 实现的 Hyper 替换 HTTP 后端,进度达 95% 但因 C-Rust 调用复杂、测试用例无法完全通过、维护人力不足等问题,2024 年底宣布终止项目。

  4. 失败原因在于维护成本与收益失衡

    Hyper 后端需要同时维护 C 和 Rust 代码,维护成本翻倍;且 Rust 生态用户与 curl 用户需求错配,缺乏持续维护动力。

  5. 未来的 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,不代表我们后悔尝试过。实验的价值在于,即使失败了,我们也学到了东西。