cURL 于 1998 年 3 月 20 日正式发布。就在那一天,我发布了一款名叫 cURL 的工具源代码。我给这款工具取名叫做 cURL 4.0,因为我保留了以前使用过的版本号。或者更确切地说,我将版本号从 3.12(之前叫做 urlget)升级到了最新版本 4.0。

当然,cURL 并不是在那一天一蹴而就的。cURL 的诞生可以追溯到一年多以前:1996 年 11 月 11 日,一款名叫 httpget 的工具发布了,由 Rafael Sagula 开发,我找到了这个项目,并开始向其贡献代码。httpget 0.1 只有一个 C 文件,代码不足 300 行。

当初,我参加这个项目,是因为我想拥有一个小工具,定期从网站上下载货币汇率,并将下载到的数据提供给我的 IRC 机器人。

当时,这只是一个很不起眼的决定,却没想到对我接下来的生活产生了这么大的影响。从那以后,cURL 就成为了我最喜爱的业余项目之一,几年后,又成了我的全职工作。

Wget 第一版(1.4.0)也发布于 1996 年 11 月的这一天。这个项目之前发布的时候采用了另一个名称,但我当时并不知道这个工具,因此我采用了 httpget。也有可能我知道这个工具,但因为大小的问题放弃了它。Wget 1.4.0 压缩包为 171KB。

不久之后,我成为了 httpget 的维护人员,并进一步扩展了它的功能。后来,我又添加了对 Gopher 和 FTP 的支持,并将它重命名为 urlget。1998 年春天,我还添加了 FTP 上传的支持,该工具的名称再次引起了误解,因此我需要再想一个名字。

起名字太难了。我想找一个简短的、经典 Unix 风格的单词。没过多久,我就想到了一个有趣的单词,这个工具适用于 URL,并且是互联网客户端的工具,“ c ”代表客户端,再加上“ URL ”,所以就组成了“ cURL ”,这个名字看起来很贴切,很有意思,而且简短,非常 Unix 风。

后来,我想让 cURL 遵循 Unix 的传统,支持管道和 stdout 等。我希望 cURL 能够像 cat 命令一样使用,只不过处理对象是URL,因此可以默认将 URL 发送到终端中的 stdout。就像 cat 一样。然后,我们就可以查看(“ see ”)URL 的内容了。字母 C 的发音与“ see ”相同,所以“ cURL ”也就是“ see URL ”,一语双关。(只不过发音还是“ kurl ”!)

我打包好了 cURL 4.0,并发布到了全世界。当时代码为 2200 行。几个月后,我完成了 cURL 4.8 版,这要感谢另外 7 位开发人员做出的贡献。后来,又经过了将近 7 年的时间,cURL 的开发人员终于到了 100 位。如今,我们的开发人员已经超过了 2300 名,而且每年都有数百名新增人数。cURL 并不是一个单人项目!

没有大起大落

cURL 没有经历过大起大落。在第一版发布 14 天后,我上传了 4.1 版,其中包含一些错误修复程序,之后便延续了数十年的传统:继续发布新功能和错误修复程序。“快速频繁的发布”是我们一直坚持的口号。

1998 年晚些时候,我们已经完成了 15 次发布,并在网站上发表了以下声明:

300 次下载!

我从来没幻想过这个项目和工具能够征服全世界。我只希望它能够快速可靠地完成互联网传输,而这也是我努力实现的目标。

为了向全世界提供更好的互联网传输,我们引入了 libcurl 库,该库于 2000 年夏季首次交付使用,而这也让我们的项目达到了更高的水平。如今,libcurl 已发展成为互联网传输的标准 API 。

现在 cURL 已经 23 岁了,cURL 的工作重点以及我的主要任务始终没有变。我相信,随着时间一天天过去,如果 cURL 能取得一定的成功,那一定是因为 cURL 的一个特殊的品质,用一个词概括就是:坚持!

我们一直在坚持。我们坚忍不拔,一直在努力。经过了两年的时间,cURL 才获得了 300 次下载。又经过了 10年 的时间,才真正得到了广泛使用。

2008 年,cURL 网站每月提供的下载数据量大约为 100 GB,而本月它的下载服务数据已经超过了 15,600GB,在过去的 156 个月中,cURL 的数据量增加了156 倍!但是实际上,大多数用户都不会从我们的网站下载任何内容,他们的url 是从发行版或操作系统提供商那里获得的。

1998 年末,cURL 被红帽 Linux 采用,1999 年 5 月发展成为了 Debian 软件包,并于 2001 年 8 月在 Mac OS X 10.1 中发布。如今,Windows 10、iOS 和 Android 设备中也默认采用了 cURL。还有各种游戏机,任天堂的Switch、Xbox 和索尼的 PS5 等等。

有趣的是,尽管两大主流移动操作系统都使用了libcurl,但是它们并没有提供API,因此许多应用(包括许多超大容量应用)都捆绑了自己的 libcurl 构建:YouTube、Skype、Instagram、Spotify、Google Photos、Netflix 等。这意味着大多数智能手机用户的手机中都单独安装了很多次curl。

此外,一些热门的计算机游戏也使用了 libcurl:侠盗猎车手 V 、堡垒之夜、绝地求生、荒野大镖客 2 等等。

libcurl 还为十亿五千万台电视的媒体播放器和机顶盒(如 Roku,苹果 TV )提供了支持。

几乎每一台互联网服务器中都用到了 curl 和 libcurl,而且 PHP 的默认传输引擎也是 cURL和 cURL。全世界有将近 20 亿个网站,其中 80% 都可以找到 cURL 和 libcurl 的身影。

如今,汽车也进入了互联网时代,而几乎每辆现代汽车都使用 libcurl 在车辆之间来回传输数据。

除此之外,还有媒体播放器、家电、医疗设备、打印机和智能手表等许许多多的“智能”物联网设备。凡是通过互联网传输数据的设备都运行了 curl。

我没有夸大其词,全球 cURL的安装次数超过了一百亿。

孤独而坚强

多年以来,我曾尝试过几次让 cURL 加入某个上层组织,但是没有人接受我们,也许这就是最好的安排。我们完全独立,不依赖于任何组织或公司。我们可以按照自己的意愿行事,不必遵循任何规则。在过去的几年中,我们拿到的赞助和捐赠大幅增加,因此能够支付大额的漏洞赏金等。

我和 wolfSSL 提供了 cURL 的商业支持,为的只是让 cURL 更加强大,我相信:我可以花费更多时间来开发 cURL ,随着 cURL 的发展壮大,越来越多的公司都会感觉越来越安全,最终 cURL 可以让我们每个人都变得更好。

截止到 2021 年 3 月,当年的那 300 行代码已经增长到了 172,000 行。

未来

对我们来说,最重要的工作是确保稳定性。我希望打造最可靠的互联网传输库,同时支持更多平台。

但是,为了保持吸引力,我们还需要与时俱进,适应新的协议和习惯。支持新的协议版本,提供更好的处理方式,在启用一些功能的时候,本着为用户负责的心态,谨慎为之,避免伤害用户。

短期内,我认为我们需要努力确保 HTTP/3 正常工作,打造出色的 Hyper 后端,并决定 rustls 后端的去向。

经过了 23 年的发展,我们仍然没有宏伟的目标可以为我们提供指导。我们会紧跟互联网和用户的脚步,勇往直前!

23 个 curl 的统计数字

在 23 周年之际,我统计出了如下 23 个有关 curl 的数字:

1998 年 3 月,cURL 只有 2200 行代码,但到了 2021 年,经过了 23 年的发展,cURL 的代码行数已经增长到了 170,000 行。

经过了 23 年的发展,cURL 支持的 TSL 库多达 14 种。

在这 23 年间,共计 2,348 位贡献者为 cURL 提供了帮助。

在这 23 年间,cURL 一共经历了 197 次发布。

在这 23 年间,cURL 一共修复了 6,787 个 bug。

23 岁的 cURL 在全球范围内的安装次数超过了一百亿。

在 cURL 项目发展的 23 年间,我们一共收到了来自 871 位贡献者提交的代码。

在这 23 年间,cURL 的官方 docker 镜像一共收到了 9.35 亿次拉取(每秒 83 次拉取)。

在这 23 年间,至少 22 个汽车品牌使用了 cURL 。

在这 23 年间,cURL 项目每次收到提交和请求都将运行 100 个 CI 作业。

在这 23 年间,我在 cURL 项目上总共付出了 15,000 多个小时。

经过了 23 年的发展,两大主流移动操作系统及其设备都采用了 cURL。

在这 23 年间,已知已有 86 种不同的操作系统运行了 cURL。

在这 23 年间,共计 2.5 亿台电视机运行了 cURL。

23 岁的 cURL 可以支持 26 种传输协议。

在使用 cURL 的时候,有 36 个不同的第三方库可供选择安装。

在这 23 年间,已有 22 种不同 CPU 架构运行了 cURL 。

在这 23 年间,我们为漏洞赏金共支付了 4400 美元。

23 岁的 cURL 共有 240 个命令行选项。

经过了 23 年的发展,如今 cURL 网站每月下载量高达 15,600 GB。

经过了 23 年的发展,如今的 libcurl 一共有 60 个绑定,程序员可以通过任何语言轻松地传输数据。

在这 23 年间,cURL 的操作所涉及的相关 RFC 协议的总字数为 1,327,449 字。

在 23 周年之际,cURL 拥有一名创始人兼首席开发。

推荐内容