写点什么

都推进到 95% 了,为什么 curl 还是放弃基于 Rust 开发了四年的 HTTP 后端替代

  • 2024-12-25
    北京
  • 本文字数:1925 字

    阅读完需:约 6 分钟

都推进到95%了,为什么curl还是放弃基于Rust开发了四年的HTTP后端替代

“实验结束了。我们努力了,但还是失败了。”


近日,知名开源项目 curl 的创始人 Daniel Stenberg 正式发文宣布,将放弃对基于 Rust 编写的 Hyper HTTP 后端的支持,并彻底移除相关代码


“四年前,我们开始在 curl 中添加对另一种 HTTP 后端的支持。它将使用一个基于 Rust 编写的库,名为 Hyper。我们的想法是引入一种替代的 HTTP 内部实现,让 curl/libcurl 使用它来代替本地实现。”Stenberg 在博客中写道。然而,这场实验在历经四年的努力后,以失败告终。

完成 95% 的工作只是开始?


这一尝试始于 2020 年,由 ISRG(Let’s Encrypt 背后组织)资助。当时的目标是通过 Rust 的内存安全特性,为 curl 用户提供一个更安全的 HTTP 后端实现。Stenberg 在早期的博客中写道。“通过 Hyper,我们能够让更多代码运行在内存安全语言中,而非完全依赖 C。”


尽管实验已经推进了一大半,甚至让 Hyper 后端通过了几乎所有测试用例,但如同 Stenberg 在最新的博文中所述,“我们完成了 95% 的开发工作,然而,最后那‘百分之几’的挑战,还是让我们不得不认输,放弃这个实验。”


目前来看,实验失败的两大关键原因如下:

  • 几乎没人有这需求:curl 的用户对 Hyper 没有兴趣;Hyper 的用户也不太关心让它兼容 curl。

  • 缺乏同时精通 C 和 Rust 的开发者来推进:Hyper 是用 Rust 写的,而 libcurl 库(curl 背后的“引擎”)是用 C 写的,需要一个“胶水层”来把它们连接起来。这需要开发者不仅对两种语言精通,还要深入理解它们的架构和协议,但目前没有合适的人去做这件事。


此外,早在 2020 年开始这个实验时,Stenberg 就提到过“Hyper 没有 C API”是一个棘手的挑战。

停滞与反思:Hyper 成为“负担”


在今年 4 月的另一篇推文中,Stenberg 就预示过这次实验的结局,他提出了发人深省的问题:“Hyper 支持是否值得继续?”——当时,Hyper 后端的开发工作已陷入停滞,过去半年内几乎没有人主动对其进行功能改进或优化。与此同时,用户对 Hyper 的需求仍然冷淡。


技术上,Hyper 后端的开发过程中还出现了多次反向调整。例如,例如,由于对 Hyper API 集成方式的理解偏差,而不得不移除对 HTTP/2 的支持,这直接导致无法正确实现 HTTP/2 的功能。


更大的问题在于,社区用户的需求和兴趣严重失衡:当下 Rust 用户更愿意直接使用 Hyper,而不是帮助让它支持 C 项目;而 curl 的现有用户对 Hyper 几乎没有兴趣。


社区中这两类用户的交集太小,已经无法为 Hyper 后端的持续开发提供足够的支撑。


面对多重困难,Stenberg 开始反思:“Hyper 的支持是否已经从一种探索创新的尝试,变成了拖累改进的负担?”显然,继续维护这一功能的成本已经超过了它的实际价值。


既然在短、中期内都看不到完成的希望,与其继续耗费资源,不如果断放弃——移除这部分代码,不仅可以大幅简化项目结构,还能提高整体的灵活性,为 curl 的未来发展留出更多空间。

用其他语言重写 curl?也几乎不可能


或许会有人提问,当初为什么不直接用 Rust 重写 curl 呢?Stenberg 早就明确表示,这从来不在他们的计划之中。


一方面,curl 是一个老牌开源软件,已经运行了 25 年。对于 libcurl 用户来说,稳定的接口(API)、应用二进制接口(ABI)、一致的行为,以及文档中定义的所有功能选项,都是不可动摇的基础。重写代码不仅意味着要重新开发所有功能,还需要确保新版本完全兼容旧版,这对任何项目来说都是一项巨大而复杂的挑战。即使是那些考虑过这样做的大型企业,最终也都放弃了这个想法。


与此同时,Stenberg 等人也深知,curl 必须不断引入新功能,才能跟上技术的发展步伐。于是,Hyper 后端支持方案成为他们探索的方向。


虽然 Hyper 实验以失败告终,但它对 curl 和 Hyper 项目都带来了积极影响。Stenberg 表示,curl 在与 Hyper 集成的过程中,改进了自身对 HTTP 的严格性,并优化了代码结构,而 Hyper 则通过与 curl 的合作获得了宝贵的反馈,进一步提升了自身的稳定性和性能。


他强调:“虽然 Hyper 已被移除,但我们依然对未来引入 Rust 或其他语言的安全后端持开放态度。与 2020 年那会相比,我们现在已经拥有了更好的内部架构可供借鉴。只要用户需求足够明确,并且有足够的资源支持,我们还可能会重新尝试类似的整合。”


尽管 Hyper 被放弃,curl 仍然在推进对两个 Rust 编写的后端的支持::rustls(用于 TLS)和 quiche(用于 QUIC 和 HTTP/3),它们被认为比 Hyper 更易于维护。


据悉,Hyper 的相关代码已于 2024 年 12 月 21 日从 curl 的代码库中删除,并将在 2025 年 2 月发布的 curl 8.12.0 版本中完全失效。


参考链接:

https://daniel.haxx.se/blog/2024/12/21/dropping-hyper/

https://daniel.haxx.se/blog/2020/10/09/rust-in-curl-with-hyper/

https://curl.se/mail/lib-2024-04/0021.html

2024-12-25 17:1111359

评论 2 条评论

发布
用户头像
行百里者半九十的经典案例。

尽管实验已经推进了一大半,甚至让 Hyper 后端通过了几乎所有测试用例,但如同 Stenberg 在最新的博文中所述,“我们完成了 95% 的开发工作,然而,最后那‘百分之几’的挑战,还是让我们不得不认输,放弃这个实验。”

2024-12-26 18:46 · 北京
回复
用户头像
用其它语言来实现curl,不是不可能,而是没有必要。
2024-12-26 17:42 · 陕西
回复
没有更多了

技术干货 | Linkis1.0.2安装及使用指南

康月牙

开源社区 微众银行 WeDataSphere Linkis 使用实践

低代码分析盘点:银行业低代码应用需要规避两大误区

易观分析

代码 银行

资深OpenStacker - 彭博、Vexxhost升级为OpenInfra基金会黄金成员

极客天地

SphereEx 正式开源面向 Database Mesh 的解决方案 Pisanix

SphereEx

开源 SphereEx 云上数据库 Database Mesh Pisanix

InfoQ 极客传媒 15 周年庆征文|手把手教你使用Python实现一键抠图,照片换背景|so easy!

迷彩

Python AI 前端 6月月更 InfoQ极客传媒15周年庆

君可归烈士寻亲系统开发实战

乌龟哥哥

6月月更

数据产品学习-实时计算平台

第519区

实时计算 数据产品 数据开发 大数据平台

618 大促来袭,浅谈如何做好大促备战

阿里巴巴云原生

阿里云 微服务 高可用 云原生

直播预告 | 社交新纪元,共探元宇宙社交新体验

ZEGO即构

flutter系列之:Material主题的基础-MaterialApp

程序那些事

flutter 程序那些事 6月月更 widget

5年“研究”3年“实战” 之后的满分答卷

青藤云安全

网络安全 容器安全 安全服务 云原生安全

秒云云原生信创全兼容解决方案,推动信创产业加速落地

MIAOYUN

云原生 信创 信创云

后端适用,Apifox接口文档设计和调试教程【工具篇】

Liam

Java 后端 Postman 后端开发 API文档

数据安全刻不容缓,国产智能化厂商首获SOC 2鉴证报告有何意义?

王吉伟频道

RPA 数据安全 机器人流程自动化 智能自动化 SOC 2

八连冠!浪潮云连续8年蝉联中国政务云市场第一位

云计算

小程序启动性能优化实践

百度Geek说

跟我学Python图像处理丨5种图像阈值化处理及算法对比

华为云开发者联盟

Python 人工智能 华为云

快来极狐GitLab SaaS 学习全球顶级的开源项目吧

极狐GitLab

开源

CREMB Pro 后台子管理员 403 问题分析

CRMEB

从 0 到 1,探究百亿流量验证下的 MVVM 框架设计

图灵教育

百度 MVVM 全栈设计

大数据生态安全框架的实现原理与最佳实践(上篇)

明哥的IT随笔

大数据 hadoop hive 数据安全

华为云零代码开发图片压缩工具

乌龟哥哥

6月月更

亚马逊云科技向你发出召唤——游戏开发者,集合!

亚马逊云科技 (Amazon Web Services)

react.js edge postcss

跨平台多媒体渲染引擎OPR简介

阿里巴巴文娱技术

音视频 弹幕 渲染

音频 3A 处理实践,让你的应用更「动听」

融云 RongCloud

企业数字化转型该如何做?三个融合、三个转换

小炮

defi存币生息理财dapp系统开发逻辑

开发微hkkf5566

InfoQ 极客传媒 15 周年庆征文|在Flutter中自定义应用程序内键盘

坚果

InfoQ极客传媒15周年庆

谁说Redis不能存大key

华为云开发者联盟

数据库 华为云

基于模板配置的数据可视化平台

百度Geek说

中原银行统一日志平台

中原银行

海量数据 中原银行 日志平台

都推进到95%了,为什么curl还是放弃基于Rust开发了四年的HTTP后端替代_后端_罗燕珊_InfoQ精选文章