【CSDN 编者按】对于喜爱编程的人来说,幸福是什么?于 curl 作者 Daniel Stenberg 而言,最大的幸福莫过于能全身心做自己感兴趣的项目!
curl 25 岁生日快乐!
3 月 20 日是知名开源命令行工具 curl 的 25 岁生日,curl 作者 Daniel Stenberg 回顾了项目经历的二十五年,下面我们就跟随 Daniel Stenberg 的官博内容一起看看。
curl 最初非常不起眼,诞生那几年几乎无人知晓,仅是为 Daniel Stenberg 个人所使用。发布 curl 首个版本时,他只有 27 岁,当时是在 Frontec Tekniksystem 担任软件工程师,主要是为瑞典产品开发公司从事嵌入式系统的合同开发工作。
自拥有第一台计算机开始,他就爱上了编程和开发,当时养成了一个习惯,每天晚上会熬夜花一两个小时从事个人项目的开发。
![](http://image109.360doc.cn/DownloadImg/2023/03/2108/262886155_1_20230321084722834.jpeg)
![](http://image109.360doc.cn/DownloadImg/2023/03/2108/262886155_2_20230321084722944.png)
循序渐进,不断改进
用户数远超 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 上传的支持...
![](http://image109.360doc.cn/DownloadImg/2023/03/2108/262886155_3_20230321084722991.png)
curl 25 年的成长史
代码行数从 2000 多行到 15 万多行
![](http://image109.360doc.cn/DownloadImg/2023/03/2108/262886155_4_2023032108472353.jpeg)
下面就是 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/