curl 25 岁生日快乐!
3 月 20 日是有名开源命令行工具 curl 的 25 岁生日,curl 作者 Daniel Stenberg 回顾了项目经历的二十五年,下面我们就跟随 Daniel Stenberg 的官博内容一起看看。
curl 最初非常不起眼,出身那几年险些无人知晓,仅是为 Daniel Stenberg 个人所利用。发布 curl 首个版本时,他只有 27 岁,当时是在 Frontec Tekniksystem 担当软件工程师,紧张是为瑞典产品开拓公司从事嵌入式系统的条约开拓事情。

自拥有第一台打算机开始,他就爱上了编程和开拓,当时养成了一个习气,每天晚上会熬夜花一两个小时从事个人项目的开拓。
循规蹈矩,不断改进
用户数远超 100 亿
curl 的开拓理念一贯是逐步在所有方面进行改进,增加测试案例,改进文档,日复一日,年复一年的坚持,从未停滞,也正如下面韶光轴所展示的。
curl 从来都不是一夜爆火,用户数以及盛行度都是在逐步的迭代中持续不断增长,在 1998 年的时候,用户很少,到 2010 年,发展到了数亿用户。眼下,Daniel Stenberg 表示自己也不知道到底有多少人安装了 libcurl 。基于天下上有 70 亿部智好手机和 10 亿部平板电脑的事实,估计到它的安装量远远超过了 100 亿,而且每个人都至少运行一个,但可能是安装多个 curl。
Daniel Stenberg 的 curl 之路始于 1996 年底,当时他下载了 Rafael Sagula 开拓的工具 httpget 0.1,每天自动下载货币汇率,确保他的货币兑换器能为他的 IRC 机器人事情。那时的 httpget 有些漏洞,Daniel Stenberg 便向作者递交了补丁。Rafael 认为 Daniel Stenberg 可以接手掩护该项目,以是就接手了,并把 httpget 改名为 urlget,后边开始逐步加入了对 GOPHER 的支持,改变项目名称,增加对 FTP 的支持,在 1998 年初增加了对 FTP 上传的支持...
curl 25 年的发展史
代码行数从 2000 多行到 15 万多行
下面便是 curl 的开拓发展史:
1998 年 3 月 20 日,curl 4.0 发布,彼时的 curl 已有 2200 行代码了,当时支持三种协议:HTTP、GOPHER 和 FTP,并带有 24 个命令行选项。curl 在这一年发布了 20 个版本,年底的下载量达到了 300 。
1999 年,curl 团队创建了第一个配置脚本,增加了对 cookie 的支持,并且作为软件包涌如今了 Debian Linux 中,这一年支持的协议达到了 8 个。在这一年的末了几天,curl 迁移到了 Sourceforge 做事平台,此后,curl 的代码计数也都是从这次导入开始,韶光为 1999 年 12 月 29 日。
2000 年,Daniel Stenberg 换了新事情,完成个人终生大事。curl 7.1 发布,并且引入了 libcurl 库,基于 PHP 开拓。彼时的项目代码有 17200 行。
2001 年,curl 协议改成了 MIT 和 MPL,增加了对 HTTP/1.1和 IPv6 的支持。苹果开始在 Mac OS X 10.1 中安装 curl 7.7.2。
2002 年,移除 MPL,增加了对 HTTP gzip 压缩支持……
2003 年,引入“自动构建”系统,并且增加了 HTTP 的 Digest、NTLM 和 Negotiate 认证支持,增加 FTPS 支持。这一年,Daniel Stenberg 分叉并启动了 c-res 项目,供应和掩护一个用于进行异步名称解析的库。
2004 年,可以支持大于 2GB 和 4GB 的“大文件”,实现了对 IDN、国际域名的支持。
2005 年,GnuTLS 成为第二个被支持的 TLS 库,用户可以基于自己的构建选择 TLS 库,TFTP 成为 curl 支持的第 10 个协议,并行传输 API multi_socket()实现了首个版本。
2006 年,放弃对第三方 FTP 传输支持,增加了对 HTTP/1.1 Pipelining 支持,增加了对 SCP 和 SFTP 支持。
2007 年,彼时 curl 项目代码增加到了 51500 行,支持第四个 SSL 库 NSS 的支持,支持 LDAPS ,合并到了第一个 OS/400 端口,支持 .NET。
2008 年,curl 有 126 个命令行选项,9 月,贡献者人数达到了 654 人。Daniel Stenberg 加入 httpbis 事情组邮件列表。
2009 年,8 月,Daniel Stenberg 得到 2009 年北欧自由软件奖。curl 增加了 IMAP(S)、SMTP(S) 和 POP3(S) 支持,协议支持数量达到了 19 个。
2010 年,增加对 RTSP 和 RTMP(S)支持,支持 PolarSSL 库,将版本掌握系统从 CVS 切换到 git,同时我们将主机从 Sourceforge 切换到 GitHub。
2011 年,代码超过 80000 行代码。
2012 年,命令行选项发展到了 149 个选项,支持 Schannel 和 TLS 安全传输,这一年, curl 用户数达到了 5 亿。
2013 年,支持 GSKit,是第 10 个支持 TLS 的库,合并了对 HTTP/2 支持的初步考试测验。
2014 年,增加对 SMB(S). 24 个协议支持,增加了对 libressl OpenSSL 分叉支持并删除了对 QsoSSL 的支持,仍旧有 10 个支持的 TLS 库。
2015 年,增加对 BoringSSL 和 mbedTLS 支持,对 HTTP/2 多路传输支持,首次支持 HTTP/2 做事器推送。
2016 年,curl 的默认传输协议从 HTTPS 切换到 HTTP/2,增加了对 HTTPS 代理和 TLS 1.3 的支持,命令行选项达到了 185 个,代码行数达到了 115500 行。
2017 年,curl 支持多个 TLS 进行构建,引入了新的 MIME API 和对 brotli 压缩的支持。Daniel Stenberg 在这一年也因质疑开源代码滥用拿不到美国签证,10 月,Daniel Stenberg 被付与 Polhem 工程奖
2018 年,增加了对 DNS over HTTPS 的支持,并引入了新的 URL API,许可运用程序以与 curl 完备相同的办法解析 URL。微软开始将 curl 与 Windows 捆绑在一起,增加了对 MesaLink 的支持,但放弃了对 AxTLS 的支持,代码行数达到 129,000 行,HTTP-over-QUIC 协议正式成为HTTP/3,在有 27 个 CI 事情,运行超过 1200 个测试案例。
2019 年,增加了对 Alt-Svc 的支持,删除了 HTTP/1.1 管道支持,合并了对 HTTP/3 的初步支持,在 docker 官方镜像中供应 curl。
2020 年,curl 可以输出 JSON 格式数据,支持 MQTT 协议,支持 HSTS 以及 zstd 的压缩支持。11 月,Daniel Stenberg 拿到了美国签证。
2021 年,curl 删除 MesaLink,在 13 个 TLS 中支持 rustls,支持 GOPHERS. 26 个协议,GitHub 上的 Stars 数达到了 20000 颗。
2022 年,curl 合并了对 WebSocket(和URL)的初步支持处理它的新API,增加命令行选项,libcurl 得到了一个新的 header API,这也使得命令行工具得到了新的“头部选择”功能。还添加了--json、-w、--rate 和--url-query 选项。HTTP/3 的 RFC 在 6 月发布,msh3 成为第三个支持 HTTP/3 的库。
2023 年,年初,curl 已有 155100 行代码,486 页操作手册、1560 个测试用例,2771 个贡献者,1105 个提交作者,132 个CVE,122 个 CI 作业, 29733 个提交,48580 美元的漏洞赏金,249 个命令行选项,28 种协议,13 种 TLS 库,3 种 SSH 库,3 种 HTTP/3 库。
引入对 HTTP/3 的支持,支持向旧版本回退,使其利用更加可靠。
3 月 13 日,curl 超过了 30,000 个提交。
3 月 20 日,curl 8.0.0 正式发布,间隔第一个 curl 发布已经整整 25 年了。
Daniel Stenberg 在末了表示,创造 httpget 时,他才 26 岁,如今,他已经 52 岁。curl 让其梦想成真,能够全身心地做自己感兴趣的事情,curl 是其生活的主要组成部分。他还强调,curl 能取得如今的成绩,是全体团队的功劳。
不止于 25 年,面对未来,Daniel Stenberg 坦言不喜好做预测,但他依然会一如既往地生动在 curl 项目中,连续从事互联网客户端传输事情。
末了,我们也感谢 Daniel Stenberg 对 curl 的坚守与呵护,也祝福、 curl 生日快乐!
原文链接:https://daniel.haxx.se/blog/2023/03/20/twenty-five-years-of-curl/