安装量远超 100 亿,代码行数过 15 万,Daniel Stenberg发文回顾 curl 25 年蜕变史!...

d60ca63ff8642dbc2097d7e1df4c9599.gif

【CSDN 编者按】对于喜爱编程的人来说,幸福是什么?于 curl 作者 Daniel Stenberg 而言,最大的幸福莫过于能全身心做自己感兴趣的项目!

curl 25 岁生日快乐!

作者 | Daniel Stenberg       

整理 | 梦依丹

出品 | CSDN(ID:CSDNnews)

3 月 20 日是知名开源命令行工具 curl 的 25 岁生日,curl 作者 Daniel Stenberg 回顾了项目经历的二十五年,下面我们就跟随 Daniel Stenberg 的官博内容一起看看。

curl 最初非常不起眼,诞生那几年几乎无人知晓,仅是为 Daniel Stenberg 个人所使用。发布 curl 首个版本时,他只有 27 岁,当时是在 Frontec Tekniksystem 担任软件工程师,主要是为瑞典产品开发公司从事嵌入式系统的合同开发工作。

自拥有第一台计算机开始,他就爱上了编程和开发,当时养成了一个习惯,每天晚上会熬夜花一两个小时从事个人项目的开发。

5cb0529a89fd629ef8d7499296ec8e9f.jpeg

be75e6a6e4197a87bfc0e458916818bb.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 上传的支持...

bd3317cd94d653b710a1ae4532842eda.png

curl 25 年的成长史

代码行数从 2000 多行到 15 万多行

ec18484485d9ada3913205210743e5a4.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/

 

5f43ef7b3d054d52b077b60f0d864501.gif

☞李彦宏谈文心一言:市场反馈符合预期;OpenAI CEO 承认害怕 ChatGPT;Twitter 将开源推荐算法源码|极客头条
☞FSF 公布 2022 年自由软件获奖名单
☞前苹果工程师吐槽:“Siri” 代码过时且复杂,不可能变得像 ChatGPT 一样强大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28592.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一朵玫瑰花的python代码,python玫瑰花代码讲解

大家好,本文将围绕用python画玫瑰花代码 祝福生日快乐展开说明,一朵玫瑰花的python代码是一个很多人都想弄明白的事情,想搞清楚python绘制玫瑰花代码需要先了解以下几个事情。 1、怎么用python画玫瑰花,求大神贴代码,感…

chatgpt赋能python:如何在Python中连接两个字符串

如何在Python中连接两个字符串 Python作为一门著名的编程语言,已经在程序员中得到了广泛的应用。其强大的字符串处理能力是Python的一大亮点,编程开发人员可以轻松地使用Python连接两个字符串。 在本篇文章中,我们将介绍如何在Python中连接…

大模型技术+研发情报库,智慧芽要打造研发版ChatGPT

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 ChatGPT引发了一次AI发展的高潮,并一定程度上让AI实现了破圈。目前,ChatGPT的全球用户已经超过1亿,在整个社会层面都引起了广泛的讨论。但同时,落地困难这个AI的老大难的问题&…

ChatGPT技术总结和好物分享

ChatGPT技术总结和key分享 什么是ChatGPT ChatGPT是一种基于人工神经网络和自然语言处理技术的大型语言模型,由OpenAI公司开发。 ChatGPT可以用于各种应用场景,包括自动问答系统、聊天机器人、语言翻译、文本摘要等。它可以从各种来源中获取知识&…

GPSDO驯服时钟

最近再学校里面入手了一个GPSDO驯服,高稳定高精度频率校准GPS北斗双模接收 产品如图,分别是天线,10M的正弦、10M的方波、1PPS信号。 其稳定性技术指标如图, 其配套上位机软件可以查看数据

8个驯服烂代码的原则:bjdp.org第13次编程道场回顾

* 时间:2014.02.23, 2:00-5:45pm * 地点:北京直真科技技术股份有限公司 * 参加人数:24人 * 活动主题:驯服Trivia烂代码(Java版) * Java版Trivia未驯服前源代码:https://github.com/wubin28/triv…

TinyML-TVM如何驯服TinyML

TinyML-TVM如何驯服TinyML 低成本,以人工智能为动力的消费类设备的激增,导致机器学习研究人员和从业人员对“裸机”(低功耗,通常没有操作系统)设备产生了广泛的兴趣。尽管专家已经有可能在某些裸机设备上运行某些模型&…

《驯服烂代码》一书章节规划

敝人计划在2014年4月底之前完成《驯服烂代码》的写作,现在已完成第一章(试读链接:http://blog.csdn.net/wubinben28/article/details/17527505)。下面是本书的章节规划,恭请网友指点。联系我可查找我的新浪微博&#x…

GPS 驯服时钟原理

欢迎淘宝搜索 飞灵科技,我司相关新产品陆续上线 由于GPS信号受电离层延时误差,对流层延时误差,多径效应和接受机噪声等影响,GPS接收机恢复出来的pps信号存在一定的随机抖动误差,这个随机抖动误差服从正太分布。除此之外…

炫到爆炸!HuggingGPT在线演示惊艳亮相

大家好,这里是 NewBeeNLP。 最强组合HuggingFaceChatGPT「贾维斯」现在开放demo了。 前段时间,浙大&微软发布了一个大模型协作系统HuggingGPT直接爆火。 研究者提出了用ChatGPT作为控制器,连接HuggingFace社区中的各种AI模型,…

拓展python爬虫(爬取图片)

爬虫爬取图片的简单实例 这里以图片之家为例 首先分析网页 每一页与每一页之间只是list_176_后面的数字不同,所以我们可以根据不同的需求来进行翻页 图片的定位: 小编这里使用的是xpath来进行的定位,比较简单,适合新手 在谷歌…

爬虫实战 谷歌图片爬取 高清图片

目标 date:2020.5.25 author:pmy aim:爬取google图片,关键词cat,两百张高清图(非缩略图) 现阶段:能够实现目标。在之前爬取谷歌图片的基础上(缩略图),这次进行了改进&am…

爬取-搜狗图片

这里我们使用搜狗图片来进行爬取,首先打开搜狗图片网址: https://pic.sogou.com/ 接着在页面上右键–>审查,或者F12选择Network项 然后在页面搜索框输入自己感兴趣的关键字并执行搜索,这里我以中国建筑工人为例,可以…

网络爬虫(基于python的网络爬虫批量爬取图片)

1.模拟用户向指定网站发送请求 需要下载requests模块来模拟用户向网站发送请求,在终端输入如下指令: pip install requests 1> 了解网页结构 学习网页基础(一般由三部分构成,HTML(网页基本骨架)&#x…

Python爬虫抓取网页图片

本文通过python 来实现这样一个简单的爬虫功能,把我们想要的图片爬取到本地。 下面就看看如何使用python来实现这样一个功能。 # -*- coding: utf-8 -*- import urllib import re import time import os#显示下载进度 def schedule(a,b,c):a:已经下载的数据块b:数据…

Python爬取淘宝图片

爬取淘女郎模特图片与相关信息 (一) 解析淘女郎首页网站地址 打开淘女郎首页界面 https://www.taobao.com/markets/mm/mm2017,点击 查看更多,然后 F12 进入网页抓包工具,按 F5观察数据加载变化。审查元素发现&#xff…

【实例】Python爬取淘宝图片

文章目录 一、分析二、代码三、效果 一、分析 》》 第一页时 》》第二页时s48,第三页时s96(每页为48的倍数) 》》当q外套时(q为关键字) 》》用于每页图片的正则表达目标 二、代码 导入请求、报错模块&正则表达式类库 f…

Python3爬虫图片抓取

(1)实战背景 上图的网站的名字叫做Unsplash,免费高清壁纸分享网是一个坚持每天分享高清的摄影图片的站点,每天更新一张高质量的图片素材,全是生活中的景象作品,清新的生活气息图片可以作为桌面壁纸也可以应…

爬虫实战 爬取谷歌图片 Google images

目标 #date:2020.5.25 #author:pmy #aim:爬取google图片 本次爬取主要是为了练习selenium。 分析 爬取的目标如下图,爬取猫猫图片 将google图片顺利爬下来。 由于google图片界面是属于那种往下划会在本页面中加载出更多信息,但未刷新的机…

Python爬虫爬取Google图片

文章目录 urlliburllib.request.urlretrieve urllib3 in python3PoolManagerRequest BeautifulSoup安装 Installation一些函数 Some functionsget_textfind_all(name, attrs, recursive, string, limit, **kwargs)name - 通过标签名搜索kwargs - keyword arguments 关键字参数进…