网站首页 > 技术文章 正文
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亿。
猜你喜欢
- 2024-10-23 微软发布6月Win11累积更新KB5039212/KB5039213
- 2024-10-23 快速体验之《gor+diffy实现线上流量复制到测试环境》
- 2024-10-23 Colbie Caillat: Try(colbiecaillattry歌词)
- 2024-10-23 基于阿里云 ASK 的 Istio 微服务应用部署初探
- 2024-10-23 浅谈ElasticSearch 集群部署(elastic集群配置)
- 2024-10-23 Python项目中跟踪系统导入Zipkin(基于python的目标跟踪算法)
- 2024-10-23 JVM参数及调优(jvm调优常用参数)
- 2024-10-23 Elasticsearch的路由routing的应用技巧
- 2024-10-23 如何将Elasticsearch的快照备份至OSS
- 2024-10-23 利用工具curl来查看http请求和https请求
- 11-27echarts图形报表的入门案例
- 11-27Echarts仿电梯运行图
- 11-27微信小程序开发之wepy 引入echarts统计图方法 亲测可用
- 11-27yarn安装echarts教程
- 11-27微信小程序使用 ECharts
- 11-274、echarts 如何画图?(必会)
- 11-27JavaScript 前端数据可视化——ECharts.js
- 11-27vue+echarts使用
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)