摘要

机器人缺的不是汇率

数字就在网上。机器人缺的是一个能够反复从服务器拿到数字的动作。项目自己的年表记载,Stenberg 当时在为与 Amiga 有关的 IRC 频道做机器人,发现了巴西开发者 Rafael Sagula 的开源命令行工具 HttpGet。Sagula 在 1996 年 11 月 11 日发布了它;Stenberg 增补功能后,12 月 17 日出现包含这些修改的版本。把 HttpGet 的创作归给 Stenberg,会抹掉真正的起点;把 1996 年的工具直接叫作 curl,也会抹掉之后四年的工作。

HttpGet 这个名字本来很老实:通过 HTTP 获取东西。1997 年,它开始在命令行接受 HTTP 地址,并支持代理;项目记录还列出 Gopher 修复和 FTP 下载。工具已经能跨协议取数据,名字却还钉在一个协议上。于是当年 8 月的 2.0 版改称 urlget。版本表保留了连续的谱系:换招牌没有让原来的代码和作者凭空消失。

新名字也很快过期。同年晚些时候,程序加入 FTP 上传与 HTTP POST。一个自称只会「获取」的工具,已经开始把数据送出去。汇率机器人只提出了一个取数任务,代码却在实际使用中长成了双向传输工具。软件跑得比名片快,名片只好再印一次。

真正的门槛是让别的程序来调用

1998 年 3 月 20 日,curl 4 登场。版本号从四开始,正说明它接续 urlget,并非从零冒出的新品。新名称不再把自己锁死在 HTTP、FTP 或「下载」这个动词上。SSL、Cookie 等能力在 1998 年陆续加入;不能把它们统统倒灌进改名当天。每项能力都是工具与真实网络条件碰撞后的补丁和扩张。

但命令再好用,对应用开发者仍有一道门。若要在自己的程序内完成传输,启动外部命令、解析它吐出的文本,并不是舒服的接口。项目历史说,2000 年春天的代码重整就是为了做出合适的库接口。7.1 版于 8 月 7 日发布,带来 easy 接口。原始变更记录列出公开的 libcurl 符号、可安装的头文件、共享库构建和设置选项的调用。这些枯燥的工程细节决定了别人能不能把这台引擎装进自己的机器。

项目记载,2000 年 8 月就有人做出了第三方 libcurl 绑定。门已经开到维护者之外:外部开发者可以把自己的软件接在同一套传输机制上。今天的 C API 文档展示了设置选项、执行传输、清理句柄的基本形状。不能把今天的全部功能写回 2000 年;当年的突破是可调用的边界,而不是未来功能清单。

名称落后于工作,接口改变了成本

HttpGet 说的是 HTTP 下载;urlget 接受更多协议;curl 容得下上传与下载;libcurl 则把传输能力交给其他程序。每次改名都跟在已经跑起来的代码后面。真正省钱的地方也不神秘:让一个公共实现处理协议、代理和传输状态,比让每个机器人、每个应用从头写一遍便宜。小小的汇率问题,最后给重复造轮子的成本开了一张账单。