cURL:无处不在的全球基础设施
cURL 是一个仅占用几百 KB 内存的命令行网络数据传输工具,却静静地运行在全球超过 两百亿台设备上。这个数字的概念是地球人口约八十多亿的数倍,意味着人均拥有两三台运行 cURL 的设备。从 iPhone、Android 手机到 Windows、Linux、macOS,再到任天堂 Switch、Xbox、PS5 等游戏机,以及智能手表、汽车、打印机甚至医疗设备,几乎所有带网络功能的设备中都有它的身影。更令人惊叹的是,2021 年 cURL 随毅力号火星车登陆了火星,成为运行在地球和两个星球上的软件。这个工具由瑞典程序员丹尼尔·斯滕伯格(Daniel Stenberg)开发,他用接近三十年的时间将最初一百行代码打磨成了十八万行的全球流行软件。期间有一千四百名作者贡献,三千五百人出现在致谢名单中。
“从你手里的iPhone、安卓手机到Windows、Linux、macOS这些操作系统……甚至智能厨房、医疗设备、机器人,你能想到的几乎所有带网络功能的设备里面都有它的身影。”
尽管 cURL 无处不在,但其作者丹尼尔并未因此过上“人生赢家”的生活,反而曾收到过死亡威胁。在 FOSDEM 大会上,丹尼尔讲述了这段故事以及开源项目在 AI 时代面临的新挑战。FOSDEM 是欧洲最大的开源开发者大会,丹尼尔已第十六次在此演讲。这体现了他长期的坚持与对开源社区的深度参与。理解 cURL 的故事,需从最初的需求说起。
诞生与早期孤独:从小需求到全球工具
cURL 的诞生源于一个普通的小需求:丹尼尔想写个自动脚本从网站下载汇率数据。上世纪九十年代,瑞典金融行业对实时获取汇率有实际需求。丹尼尔没有从零造轮子,而是基于一个名为 httpget 的开源项目(用于 HTTP 获取数据),陆续增加了对 Gopher 和 FTP 协议的支持。Gopher 是早于万维网的信息检索协议,FTP 则是文件传输协议。这些扩展让工具能力大幅提升。1998年,丹尼尔接管项目并正式更名为 cURL(Client URL),意为客户端统一资源定位符工具。当时仅有 三百次下载,丹尼尔却觉得“酷毙了”,因为用户数远超他的朋友数量。
“我只是投入了更多的时间。这句话听起来简单,但背后的代价不是每个人都能承受的。”
cURL 的成功并非源于天赋异禀,而是日复一日的投入。丹尼尔牺牲了娱乐时间(如不玩电脑游戏),将闲暇全砸在 cURL 上。早期项目只有他一人开发,那种孤独感如同黑夜中独自漫长行走。无人评论、无反馈的沉默让他甚至曾假装其他用户提交 PR 以期待互动,最终只能自己合并请求。这种孤独是许多伟大项目在起点上的常态。然而,当软件运行在两百亿台设备上时,责任性质完全改变。任何微小漏洞都可能引发全球基础设施危机。
安全焦虑与严苛的质量保障体系
cURL 的安全团队有七人,每次收到安全报告丹尼尔都会感到焦虑。因为全球银行、医疗、汽车导航等关键领域都依赖 cURL,一个漏洞影响数以亿计设备。为降低风险,丹尼尔建立了极其严苛的品质保障体系:编写极具可读性的代码、撰写完善文档确保行为有据可查、进行浩瀚的单元测试覆盖边界条件、使用静态分析工具扫描缺陷,以及引入高强度 Fuzzing 测试。他还设立了漏洞赏金计划:严重漏洞奖励一万美元,低危五百美元,以真金白银鼓励安全人员找茬。
“为了把风险降到最低,丹尼尔建立了一套极其严苛的品质保障体系……设立漏洞赏金计划严重漏洞奖励一万美元低危漏洞奖励五百美元。”
然而,2026年丹尼尔宣布关闭赏金计划。原因并非没钱,而是 AI 工具让提交漏洞报告的门槛降至几乎为零。过去报告一个漏洞需数小时研究、复现和编写,形成天然筛选门槛;现在只需对 AI 说“找漏洞”,几秒即可生成看似专业的报告。这导致垃圾信息泛滥,丹尼尔称之为“恐怖式报告”(terror reporting)。以前六份报告中一份为真,现在二十到三十份才有一份准确。2025年底至2026年初,AI生成报告一度占所有提交的30%到70%。
AI 时代的“恐怖式报告”与识别特征
cURL 维护者面临严重的过载。2026年1月某周一,丹尼尔花一整天处理七份 AI 生成的报告,导致团队无法做其他工作。这种过载不仅浪费时间,更影响项目进度和心理健康。丹尼尔展示了一个典型案例:2025年5月一份关于 HTTP/3 流依赖循环的严重报告,长达五百多行,包含环境搭建、利用代码、GDB 调试截图等。但仔细检查发现函数不存在,整个 GDB 会话完全虚构。提交者未验证 AI 生成内容。丹尼尔因此养成习惯:收到长报告先反问几个问题,若对方无法用十行内解释清楚,则暴露 AI 生成痕迹。
“以前六份报告里大概有一份是真的,现在二十份到三十份里才有一份是准确的。2025年底到2026年初,AI生成的报告一度占到所有提交的30%到70%。”
丹尼尔总结 AI 生成报告的特征:真正的研究员态度强硬带怨气,AI 开头总是道歉式;人类有拼写错误,AI 英语完美无缺;AI 喜欢混用大小写、代码中出现 emoji、每段后跟三个要点。更荒唐的是,有人报告 cURL Git 仓库可见源代码为严重漏洞(AI 误判 file 协议访问本地文件)。丹尼尔指出问题不在 AI,而在人决定不加验证地提交垃圾报告。只要门槛低,这种行为就不会停止。关闭赏金计划是试图切断金钱激励以缓解洪水。
AI 的双刃剑:辅助审查与基础设施负担
cURL 并非完全受困于 AI。丹尼尔使用 AI 驱动的代码分析工具后,修复了超过一百个其他工具未发现的漏洞。AI 能跨协议规范检查一致性,如指出 Telnet 中使用了无效的八进制值。AI 还能发现代码与注释不一致、写法不统一等问题。凌晨两点提交代码时,AI 审查机器人能像热情的初级工程师提供建议。但丹尼尔强调:不认为 AI 生成的修复补丁好用,发现问题是强项,修复仍应由人类完成。测试用例比 AI 审查更重要,CI 可过滤垃圾代码。
“AI工具能做到一些传统工具做不到的事……这种跨规范的一致性检查几乎像魔法一样。没有人从2012年以后再翻过Telnet规范了,但AI知道。”
此外,cURL 每月承受七十五 TB 的 AI 爬虫流量。幸好有 CDN 赞助商承担成本,但许多无赞助的小型开源项目可能因此被拖垮。丹尼尔清醒认识到基础设施负担的不平等。AI 爬虫流量分布可见,但因无日志追踪,无法知晓具体用途。这凸显了开源维护者在技术之外面临的巨大资源压力。
人际挑战:从误解到死亡威胁
cURL 拥有两百亿次安装,但仅一千四百名作者。大部分贡献者只提交过拼写错误补丁。偶尔有高质量补丁出现会让丹尼尔兴奋许久。然而,与人打交道比写代码更难。有人指责选 C 语言太老或该换语言,无论怎么选都会被骂。用户因私人问题未解决而愤怒指责。丹尼尔练就情绪管理法则:回复前深呼吸,若被冒犯则放下不立刻回应。
“开源就是这样,只要一切正常运行绝不会有人夸你一句,可一旦出现一个小漏洞马上就会有无数人疯狂抱怨。”
最荒诞的是因版权声明页留下个人邮箱引发的连锁反应。用户将 cURL 视为万能客服,发送无关问题。更可怕的是黑客攻击事件与死亡威胁。一名用户系统被黑损失数百万美元,在日志中看到 cURL 踪迹误以为是丹尼尔开发的攻击软件。cURL 只是工具,如锤子出现在犯罪现场不代表制造商是罪犯。受害者将怒火撒向丹尼尔并发出死亡威胁。丹尼尔果断报警,数月后受害者才意识到愚蠢并道歉。开发全球受益工具却因误读日志险些招来杀身之祸,凸显了维护者的脆弱性。
结论
cURL 的故事揭示了开源维护者长达三十年的坚守与牺牲。从最初下载汇率数据的小工具到运行在两百亿台设备及火星上的基础设施,丹尼尔·斯滕伯格通过日复一日的投入和牺牲个人娱乐时间实现了这一成就。然而,成功伴随着巨大的责任与风险:全球关键基础设施的依赖使得任何漏洞都可能引发危机,导致维护者长期处于焦虑状态。AI 时代的到来带来了双重影响:一方面,“恐怖式报告”泛滥导致维护者面临严重过载和心理压力;另一方面,AI 工具在代码审查和漏洞发现上提供了独特价值。尽管面临误解、指责甚至死亡威胁,丹尼尔始终强调“Have Fun”(享受乐趣),认为做自己觉得有意思的事情本身就是回报。天赋决定起点,但乐趣和坚持决定了能走多远。这一案例为技术行业提供了启示:在追求技术创新的同时,必须关注维护者的心理健康、社区生态的可持续性以及对 AI 工具带来的新挑战进行有效管理。