优秀的编程知识分享平台

网站首页 > 技术文章 正文

从默默无闻到安装百亿——curl四分之一世纪的历程

nanyue 2024-10-23 12:08:39 技术文章 2 ℃


3月20日是Curl的25岁生日!在此,祝愿curl以及他的创造和维护者Daniel Stenberg生日快乐!在此喜庆的日子里,让我们追随一起看看curl这四分之世纪的历程是如何发展的。从一个默默无闻的小东西到百亿人系统上的一个真正有用工具,这个历程是平凡而又充实的。

项目来源

Curl刚开始只是一个的小型URL传输工具,最初几年里,只有创始人Daniel自己用的称手小工具。当时Daniel是嫩青小伙,是瑞典一个嵌入式系统的开发工程师,当时他才27岁。

Daniel小伙在从小就是喜欢coding,十几岁时候就已经有了自己的计算机,每天的爱好就是码代码,反正他年轻力胜,也不爱睡觉,所以只有做开发打发时间了。

Curl诞生之前(1996年),Daniel任务就是使用httpget 0.1下载货币汇率以并将货币兑换转换到IRC机器人,让其正常工作。在使用中Daniel发现了httpget的一些缺陷,并提出了修复包,但是其作者(Rafael)很懒,所以干脆给Daniel权限,让他自己来弄,所以Daniel就接管了httpget。

接手httpget维护工作后,第一件事就是对其增加了GOPHER 支持,并更改了项目名称为curl,后学又添加了FT 支持。

伊始之初

上面是curl最原始的logo。

1998年3月20日,curl 4.0发布,当时curl有 2,200行代码,代码中包括了,接手维护的httpget和urlget原始代码。

支持的协议有三种:HTTP、GOPHER和FTP。

支持24个命令行选项。

这一年陆续做的开发:

添加了HTTPS和TELNET支持;

创建了第一个curl手册页。

curl 使用GPL许可,但是随后切换到了MPL。

HTTPS中的SSL使用的是SSLeay项目。后来SSLeay也在1998年底改名成了OpenSSL。

当年8月,curl在开源目录站点freshmeat.net上开设目录,并且启用了其第一个主页fts.frontec.se/~dast。其快照为:

当年11月,主页上添加了条令人兴奋的消息:curl最新版本当月300!

第一年,curl迭代了20个版本,这应该是curl开发史上迭代最快的一年。

最初十年

1999年curl创建了第一个配置脚本,添加了对cookie支持,并给Debian打了第一个deb包。

主页使用了全新域名 curl.haxx.nu。

增加了对DICT、LDAP和FILE 的支持,总共支持8种协议。

在1999年的最后几天(12月29日),curl源码开始在Sourceforge托管,从此各种统计数据也开始明晰。

2000年TLD.se 的规则改变,curl网站从其迁到自建站点curl.haxx.se.

8月,curl发布 7.1,记住这是一个具有重要意义的版本。curl 7.1中引入了底层基础库libcurl。这是curl项目代码已经扩展到了17,200行。

curl的第一个安全漏洞也被提出了CVE-2000-0973:

PHP用户首先在语言层支持了libcurl,并给出了用例文档。

libcurl的最早采用者之一,PHP使用libcurl作为其默认的 HTTP/URL传输引擎。

创建了第一个测试套件。

2001年curl许可证改成了curl许可证(MIT变体)。

添加了对HTTP/1.1和IPv6的支持。

curl代码量达到了20,000 行。

Mac OS X 10.1 中内置curl 7.7.2。

2002年 curl测试套件已包含79个测试用例。

放弃了MPL选项。

支持HTTP gzip 压缩 和SOCKS代理。

2003年 引入了curl“自动构建”系统。

32,700行代码

添加了对HTTP的摘要、NTLM 和协商身份验证的支持。

提供了40 个单独的手册页。

添加FTPS的支持,curl支持的第九个协议。

Fork ares 项目启动了c-ares 项目来支持curl异步域名解析。

2004年 curl 支持“大文件”,支持大于2GB和4GB的文件。

对IDN(国际域名)的支持。

2005年 增加GnuTLS为第二个受支持的TLS库。用户现在多个ssl底层库选择。

multi_socket() API 的第一个版本,支持并行传输。

git诞生,采用curl来进行HTTP(S)传输。

增加TFTP,curl第10个支持的协议。

2006年 放弃对“第三方 FTP传输”的支持。

第三个支持的SSL库Cyassl(已经改名wolfSSL)。

增加对HTTP/1.1 Pipelining支持。

添加了对SCP和SFTP的支持,并接手维护libssh2项目。

2007年 新增第四个SSL底层库NSS。

代码51,500 行。

添加了对LDAPS的支持,并合并了OS/400端口。

curl 7.16.1,添加了--libcurl 命令行选项。

重复命令行传输生成libcurl-using 源代码。

348个测试用例。

2008年 命令行工具选项扩展到126 个。

提交次数突破一万次。

极参IETF和HTTP协议的工作。

Solaris 提供了curl和 ibcurl。

Linux版Adob?e flash 播放器使用了libcurl。

curl贡献者总数达到654人。

2009年

Daniel辞掉了工作,自己创业公司haxx,做Linux嵌入式开发。

引入对 IMAP(S)、SMTP(S) 和 POP3(S) 的支持,支持的协议数量增加到19 个。

Daniel获得 2009 年北欧自由软件奖。

飞速成长

2010年 增加RTSP和RTMP(S)的支持。

增加第6个SSL底层库PolarSSL。

版本控制系统由CVS切换到 git,仓库托管地址由 Sourceforge 切换到 GitHub。

增加第7个SSL底层库AxTLS。

2011年 代码量超过8w行,贡献者过百。

2012年 命令行选项增加到149个。

添加了TLS的 Schannel和安全传输的支持。

curl初步用户估计为5.5亿。

全年贡献者67人。

2013年

增加第10 TLS 库GSKit(OS/400)。

贡献者人数逾千,测试用例超过800。1

合并了对HTTP/2 最初尝试支持的(nghttp2 库支持)以及对使用Happy Eyeballs方法进行连接的支持。

创建了前两个CI作业。

2014年 Daniel入职Mozilla在Firefox网络团队工作,可以在工作时间开发curl。

161个命令行选项和20个安全报告 CVE。

使用手册激增为270个手册页。

libressl支持并删除了对 QsoSSL 的支持,支持10个TLS底层库。

代码量十万五千行。

添加了对 SMB(S) 的支持。第24个支持的协议。

2015年 添加了对BoringSSL和mbedTLS的支持,支持12个TLS底层库

引入了对使用 HTTP/2 进行适当的多路复用传输的支持。

支持HTTP/2服务器推送。

完全切换到GitHub工作模型,进行问题跟踪器并进行拉取请求。

HTTP/2工作得到了Netflix 的部分赞助。

提交次数达到2万次。

开始写书,

我开始写书《关于curl的一切》。

添加了对libpsl的支持,使用公共后缀列表来更好地处理 cookie。

2016年 curl切换为默认使用HTTP/2 进行传输。

185个命令行选项。

新的logo(由Soft Dreams的Adrian Burcea设计)。

添加了对HTTPS代理和TLS 1.3的支持。

Cure 53对Curl进行安全审计。

被评为瑞典第二好的开发人员。

代码达到115,500 行。

2017年 curl支持构建和使用多个TLS库,可以在启动自由选择。

Fastly提供免费curl官网托管。

第一界线下开发者大会(curl up ),有20多位curl粉丝和开发者在德国纽伦堡度举行。

引入了新的 MIME API 和对brotli压缩的支持。

curl 项目被采用到OSS-Fuzz项目,并测试出代码中的错误。伺候对curl进行模糊测试。

获得了Polhem奖。由瑞典国王颁奖,勋章上刻作者的名字。

2018年

添加了DNS over HTTPS 的支持。

引入了新的URL API以允许应用程序以与curl完全相同的方式解析URL。

Microsoft 开始发布与Windows捆绑在一起的curl。

引入了对第二个SSH库的支持,libssh2。

添加了对MesaLink的支持,但放弃了对AxTLS 的支持。12个TLS支持库。

代码行数达到129,000。

GitHub星星达到1万。

CI 27任务。

测试用例超1200。

健壮成型

2019年 Daniel跳槽wolfSSL 工作,全职做curl开发。

添加了对Alt-Svc的支持,并删除了HTTP/1.1 Pipelining支持(问题太多)。

联合hackerone推出了第一个curl错误赏金计划。截止2023年2月已经为45个漏洞支付了近50,000 美元的奖励金。

添加了对AmiSSL 和 BearSSL支持:14个TSL支持库。

合并由quiche 库提供支持的对 HTTP/3 的初始支持 ,稍后还合并了第二个库ngtcp2。

提供curl docker镜像。

2020年 curl工具获得了并行传输能力,以JSON 格式输出数据。

curl网站迁移到 curl.se移到,《Everything curl》创建域名everything.curl.dev。

MQTT 成为第25个支持的协议。

添加了对HSTS的第一个支持,以及对zstd压缩协议的支持。

第三个支持的SSH库wolfSSH。

我们删除了对 PolarSSL 的支持。

最初支持 hyper 作为 HTTP/1 和 HTTP/2 的替代后端。

CI任务数增加到90个。

2021年 放弃对MesaLink的支持,但增加了对rustls的支持。第13个TLS底层库。

伴随火星直升机Ingenuity一起登陆火星。

GitHub 20,000星。

支持GOPHERS。26个协议。

年度187人代码提交。

2022年 合并初始支持WebSocket( WS://和 WSS:// URL) 和一个新的 API 来处理它。支持的第28个协议。

新添加--json命令行选项和给增加libcurl标头API 。-

添加了--rate和 --url-query选项。

第三个受支持的HTTP/3库msh3。

由OpenSSF Trail of Bits 进行 curl 安全审计 。

Curl 发布了第 212 次版本。

Github 问题达到1万条。

数据统计

最后统计一些数,截止今年年初:

支持协议28个。

TLS库 13 个。

SSH库3 个。

HTTP/3库3 个。

代码量155,100 行。

用户手册 486 页。

测试用例1560 个。

代码贡献者 2771位。

代码提交者1105位。

代码提交 29733 次。

命令行选项249 个。

安全漏洞(CVE)132 个。

漏洞赏金48580 美元。

CI任务 122 个。

3月13日,提交次数超过了30,000

3月20日,发布了 curl 8.0.0。 自第一个curl发布以来整整25年。

目前curl和libcurl用户或安装量准确数据不明。基于世界上有70亿部智能手机和10亿部平板电脑来推算,估计它以用户安装量超过100亿。

Tags:

最近发表
标签列表