写点什么

全世界下载量超 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:543110
用户头像

发布了 742 篇内容, 共 482.1 次阅读, 收获喜欢 1549 次。

关注

评论

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

android RoundedBitmapDrawable最简单方式实现圆角,事件分发机制流程图

android 移动开发

企业很难招到合适的员工,怎么办?

低代码小观

招聘 企业管理 企业招聘 招聘系统 招聘管理系统

读完这些“Java 技术栈”,拿下阿里 Offer 没问题

Java高级开发

java

Android Studio真机 设置 和 错误排查,安卓面试题最新2020

android 程序员 移动开发

Android RecyclerView的简单使用,我的阿里手淘面试经历分享

android 程序员 移动开发

Android Studio安装及问题解决,一文搞懂JVM架构

android 程序员 移动开发

Android Tab简介,android工程师面试题目

android 程序员 移动开发

Android OOM:内存管理分析和内存泄露原因总结,网易架构师深入讲解Android开发

android 程序员 移动开发

Flutter性能监控实践

贝壳大前端技术团队

flutter 性能 监控 优化

Android R 新特性变化,三级缓存框架问题你都了解了吗

android 程序员 移动开发

iOS开发-百度一面总结

iOSer

ios iOS面试 ios开发 百度面试

Android Studio 模拟器卡慢、占内存解决方法,35岁技术人如何转型做管理

android 程序员 移动开发

Android Studio项目用Git上传至码云(OSChina)(1),flutter面试题

android 程序员 移动开发

Android NDK之旅——图片高斯模糊,30岁以后搞Android已经没有前途

android 程序员 移动开发

耗时两个月,我终于把牛客网最火的Java面试题整理成册了,在Github标星60K

Sakura

Java 程序员 架构 面试 后端

Android Studio 4(1),Android面试超详细知识点

android 程序员 移动开发

Android Studio 4,移动开发平台

android 程序员 移动开发

Android Studio安装更新终极解决方式,android开发从入门到精通第2版

android 程序员 移动开发

Android PinnedHeaderListView 详解,flutter技术解析与实战

android 程序员 移动开发

《设计模式就该这样学》之使用策略模式重构电商折扣和支付场景

Java高级开发

程序员 设计模式 java

Android Studio上Kotlin的入门,一次关于JVM的面试经历

android 程序员 移动开发

计算机网络小知识集锦 Ⅰ(厕所读物系列)

Regan Yue

计算机网络 11月日更 厕所读物

Android NDK 开发之 CMake 必知必会,后台开发Android岗

android 程序员 移动开发

Android OKHttp 可能你从来没用过的拦截器 【实用推荐】

android 程序员 移动开发

rabbitmq的死信队列

小鲍侃java

11月日更

Android Studio项目用Git上传至码云(OSChina),android开发基础有哪些

android 程序员 移动开发

Android UI - 实现广告Banner轮播效果(1),Android进阶

android 程序员 移动开发

会声会影VS剪映?免费虽好,但花钱的快乐你想象不到!

懒得勤快

Android Retrofit 2,flutter游戏源代码

android 程序员 移动开发

Android Studio 3,android通知栏自响应事件

android 程序员 移动开发

2021年11月墨天轮国产数据库排行榜:openGauss闯入前三,Kingbase流行度与日俱增,TDengine厚积薄发

墨天轮

opengauss TiDB oceanbase 国产数据库

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