HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

全世界下载量超 100 亿,curl 怎样成为影响世界的开源项目?

  • 2021-04-08
  • 本文字数:3313 字

    阅读完需:约 11 分钟

全世界下载量超100亿,curl怎样成为影响世界的开源项目?

本文最初发布于 DANIEL STENBERG 的个人博客,遵循CC BY-SA 4.0许可,由 InfoQ 中文站翻译并分享。


作为当今用途最广的开源项目之一,curl 在全世界有超过 100 亿的安装。从红帽 Linux、Debian 再到 Mac OS、Windows 10、iOS 和 Android,甚至包括任天堂 Switch、Xbox 和索尼 PS5 以及电脑游戏、媒体播放器和机顶盒等,都不乏 curl 的身影。本文作者回顾了 curl 过去 23 年的发展历程,揭示了一个小型开源项目怎样保持生命力,发展成一个影响世界的存在。


curl 的官方生日是 1998 年 3 月 20 日,这一天,第一个可构建出工具名为 curl 的 tar 包发布。之所以将其命名为 curl 4.0,因为我保留了之前那个名字的版本号。准确的说,它是从 3.12 的基础上过来的,而 3.12 是是旧名 urlget 的最后一个版本。



当然,curl 并非那天凭空产生的。其历史可追溯到一年多以前:1996 年 11 月 11 日发布的名为 httpget 的工具。它由 Rafael Sagula 开发,我发现这个项目并开始做贡献。httpget 0.1 是一个不到 300 行代码的 C 文件。(对于这个项目,我现在拥有最早的源代码是 httpget 1.3,可以在这里找到)


之所以关注这个项目,是因为我想有一个小工具可以定期从网站上下载货币汇率,这样我就能在我的 IRC bot 货币兑换中提供它们。


当时迅速做出的那些小决定,后来在很大程度上影响和塑造了我的生活。从那以后,curl 一直是我的主要爱好之一——当然,从几年前开始,它成了我的全职工作。


就在 1996 年 11 月的同一天,Wget的第一个版本发布(1.4.0)。在发布前,这个项目也以另一个名字存在——回想起来,我都不知道它,我使用 httpget 来完成任务。也可能我发现它了,然后因为它太小又忽略了它。Wget 1.4.0 的 tar 包只有 171 KB。


不久后,我承担起 httpget 维护者一职,并进一步扩展它的功能。后来,我添加了 Gopher 和 FTP 支持,并将其重命名为 urlget(这是由于我发现货币汇率也托管在这些服务器上)。1998 年春天,我还添加了对 FTP 上传的支持,这个工具的名称又一次产生误导性,我需要重新给它命名。


起名真的很难。我想要一个经典 Unix 风格的简短名字。我没有花太多时间,因为我很快就想到了一个有趣的词。该工具作用在 URL 上,而且是一个互联网客户端工具。' c '(客户端)和 URL 使' cURL '看起来非常贴切有趣,而且简短,还非常“unixy”。


那时,我就已经希望 curl 成为 Unix 中使用管道和标准输出这一传统的一部分。我希望 curl 的工作方式像 cat 命令,但是针对 URL,在默认情况下,它会将 URL 发送到终端的 stdout。就像 cat 一样。然后,我们就可以“看到”该 URL 的内容。字母 C 的发音是 see,所以可以读作“see URL”。我喜欢双关语,这样就很好了。(但我还是会把它读成“kurl”!)



这是最初的 Logo,由 Henrik Hellerstedt 在 1998 年创建


我打包了 curl 4.0,并在那个周五进行发布。那时,它有 2200 行代码。在我几个月后发布的 curl 4.8 版本中,感谢文件中提到 7 位贡献者。我们花了将近 7 年的时间才将贡献者发展到 100 位。现如今,该文件列出了超过 2300 个名字,每年还要增加几百个。这不是一个人的项目!

没有什么特别的事情发生

curl 并没有取得巨大的成功。一些人发现了它,在第一个版本发布 14 天后,我上传了 4.1 版本,其中有一些 Bug 修复,一个延续几十年的传统开始了:不断发布更新,修复 Bug。“尽早且经常发布”是我们一直坚持的口号。


1998 年年底,当发布超过 15 个版本时,我们在网站上发布了这样一段精彩的声明:



curl 网站 1998 年 12 月的截图

下载量 300!

对于这个项目和工具,我从来没有任何征服世界的想法或宏大愿景。我只是希望它能有效、快速、可靠地进行互联网传输,这就是我正在努力实现的。


为了更好地向世人提供良好的互联网传输体验,我们引入了 libcurl 库,它在 2000 年夏天首次发布,使项目跃升了一个层次。随着时间的推移,libcurl 已经发展成为事实上的互联网传输 API。


今天,在它 23 岁生日之际,这仍然是 curl 的重点,也是我在这里所做的。我相信,如果 curl 取得了一定程度的成功,那主要是因为一个特殊的品质。一个词:


坚持


我们坚持、忍耐,不断打磨。我们在这里是为了长远利益。我花了 2 年时间,它才达到 300 次下载量。又过了 10 年左右,它才真正被广泛使用。


2008 年,curl 网站每月的下载数据量约为 100GB。这个月,它的下载数据量为 15600GB——有趣的是,156 个月的时间里数据量增加了 156 倍!当然,大多数用户不会从我们的网站上下载任何东西,他们是从他们的发行版或操作系统提供商那里获得 curl。


curl 在 1998 年底被红帽 Linux 采用,在 1999 年 5 月成为 Debian 的一个软件包,2001 年 8 月,Mac OS X 10.1 也提供了这个工具。如今,Windows 10、iOS 和 Android 设备也默认安装了这款软件。不用说还有游戏机,包括任天堂 Switch、Xbox 和索尼 PS5。


有趣的是,两大主流的移动操作系统都在使用 libcurl,但它们并没有提供 API,所以很多应用程序,包括很多非常大的应用程序都捆绑了自己的 libcurl 构建,包括 YouTube、Skype、Instagram、Spotif、谷歌 Photos、Netflix 等。这意味着,如今大多数智能手机用户的手机中都有许多不同的 curl 安装。


此外,libcurl 还被许多电脑游戏所使用:《侠盗飞车 5》、《堡垒之夜》、《绝地求生》、《荒野大镖客:救赎 2》等等。


libcurl 还被用在了媒体播放器和机顶盒中,如 Roku、Apple TV。


curl 和 libcurl 在几乎所有的互联网服务器上都可以使用,并且是 PHP 默认的传输引擎,而在全球近 20 亿个网站中,有近 80%使用了 PHP。


汽车现在已经联网了。如今,libcurl 几乎被用于每一辆现代汽车之间的数据传输。


然后还有媒体播放器、厨房和医疗设备、打印机、智能手表和许多“智能”的物联网的东西。实际上,几乎所有的连接互联网的设备都在运行 curl。


如果我说,curl 在全世界超过 100 亿个装置中存在时,我并没有夸大其词。


孤独的强者

在过去几年里,我尝试了几次,看看 curl 是否可以加入一个管理组织,但没有一个人接受我们,我认为这是最好的结果。我们是完全独立的,独立于任何组织和公司。我们想怎么做就怎么做,不用按别人的规矩来。在过去的几年里,赞助和捐赠的速度确实加快了,我们的状况很好,可以为 Bug Bounty 计划提供丰厚的奖励。


我相信,我和 wolfSSL 合作提供的curl商业支持只会让 curl 变得更强大:它让我可以花更多的时间在 curl 上,让更多的公司觉得使用 curl 更有保障,最终让我们所有人都受益。


1996 年底的 300 行代码到 2021 年 3 月已经增长到 17.2 万行。

未来展望

我们最重要的工作是“不要惹是生非”。在尽可能多的平台上提供你能找到的最好、最可靠的互联网传输库。


但为了保持吸引力,我们也需要与时俱进,适应新出现的协议和使用习惯。支持新的协议版本,支持更好的做事方式,并随着时间的推移,以负责任的方式弃用不好的东西,同时避免对用户造成伤害。


我认为,在短期内,我们希望确保HTTP/3能够正常工作,让Hyper后端变得非常出色,看看rustls后端会如何发展。


23 年过去了,我们还是没有任何宏大的愿景或路线图作为指导。我们以互联网和用户为引领。不断向前,不断攀登!


curl 路线图

关于 23 岁的 curl,有这样 23 个数值

在这个生日的前几天,我用#curl23标签发布了该项目的 23 个“curl 数值”。以下是这 23 个数字和事实:


  1. 代码从 1998 年 3 月的 2200 行增长到 2021 年的 17 万行;

  2. 14 个不同的 TLS 库获得了 curl 的支持;

  3. 2348 名贡献者让 curl 成了今天的样子;

  4. 至今已经发布了 197 个版本;

  5. 有 6787 项 Bug 修复记录在案;

  6. 全世界 100 亿安装,让 curl 成为全世界使用最广泛的分发;

  7. 有 871 名提交者提供过代码;

  8. curl docker 官方镜像拉取数为 9.35 亿(每秒 83 次拉取);

  9. 至少有 22 个汽车品牌在它们的车辆中运行 curl;

  10. 每次提交和拉取请求都要运行 100 个 CI 作业;

  11. Daniel 已经在这个项目上花了 15000 个小时的业务时间;

  12. 前 2 大移动操作系统都在它们设备的操作系统中使用了 curl;

  13. 已知有 86 种不同的操作系统在运行 curl;

  14. 2.5 亿台电视在运行 curl;

  15. curl 支持 26 种不同的传输协议;

  16. 有 36 种不同的第三方库可以根据需要构建,供 curl 使用;

  17. 有 22 种不同的 CPU 体系结构运行 curl;

  18. 已为 Bug Bounty 支付了 4400 美元;

  19. curl 有 240 个命令行选项;

  20. curl 网站每月有 15600GB 的数据下载量;

  21. 有 60 种 libcurl 绑定,让程序员可以使用任何语言轻松地传输数据;

  22. 与 curl 操作相关的 RFC 总计有 1327449 个单词;

  23. 一位创始人兼首席开发者一直留在这个项目中。


原文链接:


https://daniel.haxx.se/blog/2021/03/20/curl-is-23-years-old-today/?fileGuid=VTYjN8XNNQsJxEFc

2021-04-08 15:543057
用户头像

发布了 733 篇内容, 共 468.6 次阅读, 收获喜欢 1544 次。

关注

评论

发布
暂无评论
发现更多内容

早起实操手册

超超不会飞

效率 生活 自律

从2009到2020,世界编程语言排行榜分析

C语言技术网-码农有道

编程语言

中年危机,我们如何面对?

石云升

死磕Java并发编程(8):CurrentHashMap如何实现高效地线程安全?在Java8中有哪些设计实现的演进?

Seven七哥

Java Java并发 ConcurrentHashMap

聊聊我对开源的理解

zygfengyuwuzu

开源

IT培训机构那些不得不说的事儿

C语言技术网-码农有道

IT培训机构

LeetCode 153. Find Minimum in Rotated Sorted Array

隔壁小王

算法

产品周刊 | 第 13 期(20200503)

八味阁

产品 设计 产品经理 产品设计

终端Terminal:程序员是如何查询天气预报的?

lmymirror

GitHub 工具 命令行 terminal 终端工具

我们迫切需要块状时间

Neco.W

效率 时间分配 时间管理 工作效率 提升效率

零基础、非计算机相关专业的如何转型程序员

C语言技术网-码农有道

程序员 转型

断章取义,不一样的C/C++语言的学习策略

C语言技术网-码农有道

C/C++

面试考试可用,十大排序算法

我不自豪谁志豪

学习 面试 算法

Python 中怎样合并数据

张利东

Python

部署Hexo博客到VPS

ini

如何消除写作过程中的痛苦,让写作变成一种享受

董一凡

写作

原创 | 类应该是匀称和均匀的

编程道与术

新人怎么寻求解决问题的方法

波波

编程 职场 新人

LeetCode 565: Array Nesting

隔壁小王

算法

NIO 看破也说破(二)—— Java 中的两种BIO

小眼睛聊技术

Java 学习 程序员 架构 编程语言

Centos的初步配置

玉龙BB

Docker Linux Docker-compose Centos 7

DataGrip常用快捷键

fliter

职场发展的思考

子不语

生涯规划 职业规划

Netty 源码解析(六): Channel 的 register 操作

猿灯塔

Linux初学-01

Flychen

企业招聘的需求决定了C/C++程序员的学习方向

C语言技术网-码农有道

C/C++

1分钟理解M2M和IoT概念

老任物联网杂谈

物联网 M2M IoT

生活不奖赏心血来潮

池建强

个人成长 写作

SpringIOC源码篇-Bean实例化-Spring如何选择类构造器(1)

申屠鹏会

Java Spring Boot

从草根到百万年薪C/C++程序员的二十年风雨之路

C语言技术网-码农有道

c++ 编程语言 C语言

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (一)什么是单元测试

编程道与术

全世界下载量超100亿,curl怎样成为影响世界的开源项目?_开源_DANIEL STENBERG_InfoQ精选文章