【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

从 160 行代码到 200 亿安装量:Curl 的传奇故事

  • 2024-03-21
    北京
  • 本文字数:3881 字

    阅读完需:约 13 分钟

大小:1.83M时长:10:38
从 160 行代码到 200 亿安装量:Curl 的传奇故事

导读:本文介绍了 curl 的创始人 Daniel Stenberg 在 FOSDEM 2024 大会上的演讲内容。Stenberg 分享了他从事开源项目的经历和见解,强调了成功的开源项目背后并没有天才或魔法,只是长期的努力和对创意的持续追求。他还提到了 curl 项目的起源和发展历程,以及在开发过程中所遇到的挑战和教训。尽管 curl 已经成为一项广泛应用的数据传输工具,但 Stenberg 强调了团队合作的重要性,并分享了他对开源社区的感悟和建议。如果你对开源项目、软件开发以及 Daniel Stenberg 的个人故事感兴趣,那么本文将为你提供深入了解和启发。

 

FOSDEM 2024 的大会上,一位低调而充满智慧的人物引起了广泛关注。他就是 Daniel Stenberg,那位创造了广受欢迎的 curl 数据传输实用工具的开发者与维护者。他向在场的观众分享了自己的成功秘诀:“成功的开源项目并非源于天才或魔法技巧。”

 

curl,这个看似简单的命令工具,已经深入到全球约 200 亿台设备中,成为了互联网下载文件的必备利器。然而,对于 Stenberg 来说,curl 的诞生却始于 1996 年的那 160 行代码 ——“仅仅是几屏幕的内容”。

 

“你开始试着使用它…… 你开始摆弄它…… 从小事做起。做你想做的任何事情。给予足够的时间,享受其中的乐趣。”Stenberg 的话语中透露出一种从容与坚定,仿佛在告诉我们:成功并非遥不可及,而是源于对梦想的执着追求和对过程的享受。

 

“对吧?这就是开始一个开源项目的方式。你有一种渴望,于是你开始行动。只要趣味在,何乐而不为呢?” 这句话仿佛是一盏明灯,照亮了许多对开源项目充满热情却犹豫不决的人的道路。

 


在 curl 的 28 年发展历程中,Stenberg 究竟学到了哪些宝贵的经验?在最近的一次演讲中,他分享了自己的洞察与收获,为开源力量在维持开发项目中的重要作用提供了有力的见证。

 

Stenberg 也表达了对早期启发他的所有人的感激之情。他承认,没有这些人的支持与帮助,curl 不可能取得如今的成就。此外,他还特别提到了 curl 庞大的用户群体和那些至今仍在支持 curl 的专注贡献者团队。正是这些用户的反馈和贡献者的努力,使得 curl 能够不断完善和进步。

 

开源的魅力

 

在 curl 项目的头两年开发中,Daniel Stenberg 见证了一个令人瞩目的里程碑 —— 惊人的 300 次下载。回忆起这段经历,他幽默地预测,“按照这个速度,再过 20 年,我们可能会有 3000 次下载!”

 

一本免费在线电子书中,Stenberg 坦诚地承认,curl 最初只是一个 “玩具项目”。然而,正是开源社区的灵感和力量,让这个 “玩具” 逐渐蜕变为一个全球知名的工具。他钦佩开源作者的才华,并渴望成为其中的一员。因此,即使在 “开源” 这个术语被正式采用之前,Stenberg 就已经开始将他的代码开源。

 

在 FOSDEM 的演讲中,Stenberg 向听众们分享了他的见解:“如今,开源已经变得容易得多。回到 1998 年或 1996 年,几乎没有人了解开源,它只是少数怪人的小圈子。” 他回忆起,1998 年互联网的总人口约为 4 千万人,“这基本上就是今天开源开发者的数量。”

 


此外,正如 Stenberg 在他的书中所说,“如今的基础设施、工具、资金等资源比以往任何时候都更加完善、更加免费,这为开源项目的发展提供了前所未有的机遇。” 向听众们分享了他的这一观点:“我认为未来会更容易、更美好,因为所有这一切都将得到改善。” 他强调,今天的开源开发者们拥有更多的资源和支持,这使得他们能够更轻松地参与到开源项目中来。

 

Stenberg 也给听众提到了这一点:吸引和留住贡献者是开源项目成功的关键之一。他分享了一个有趣的统计数据:curl 项目拥有 1240 名贡献者,但其中超过 65% 的人只贡献过一次,之后就没有再参与。然而,当一个新的、有经验的贡献者带着令人惊叹的补丁出现时,他们所带来的影响是巨大的。

 

面对这种情况,Stenberg 给出了他的建议:“让别人帮助你变得容易。” 他鼓励开源项目的维护者们要减少贡献者的阻力,让他们能够更轻松地参与到项目中来。同时,他也强调了开源项目要保持乐趣和活力的重要性,因为这也是吸引和留住贡献者的重要因素之一。

 

在 Stenberg 的眼中,开源项目是一个充满惊喜和乐趣的世界。他相信,只要我们有足够的资源和支持,就能够迎接各种方向的惊喜,创造出更加美好的未来。

 

200 亿台设备上的 Bug

 

随着 curl 被安装在约 200 亿台设备上,其影响力和重要性不言而喻。然而,正如 Stenberg 所指出的,这也存在一个缺点:“如果你的代码在很多地方运行,你真的能确定,当你发布一个版本时,它不会导致半个互联网崩溃吗?”

 

“承认自己的错误。学习、适应、增加更多测试。” 这是 Stenberg 给出的答案。

 

他向听众说,每个人都会犯错,但关键在于如何处理这些错误。他认为,真正重要的是对待错误的态度和方法,而不是错误的数量或严重程度。

 

他进一步解释道:“在我们的案例中,在几乎所有人的案例中 —— 我们只能做我们所能做的。” 他强调了通过易读的代码、文档、测试、代码分析器、模糊测试和漏洞赏金等方式来提高代码质量和安全性。这些都是他们为应对挑战而采取的措施。

 

Stenberg 也讲到,面对挑战可能会让人心力交瘁。但他坚信,从错误中学习并持续改进是通往成功的关键。他鼓励大家要从中吸取教训,并不断努力提高自己。

 

最后,他强调了乐趣在开源工作中的重要性:“而且要继续享受乐趣,因为如果不是有趣的,你不会花那么多时间在上面。其他人也不会这么做。” 他相信,只有保持对开源工作的热爱和乐趣,才能持续激发创造力和创新精神。

 

人比代码更难对付

 

Stenberg 坦言了也许是最棘手的问题:“人比代码更难对付。”

 

Stenberg 凭借多年的经验,揭示了开发者每天所面临的问题。他指出,与来自不同领域、文化和语言背景的人进行有效沟通是一项艰巨的任务。更令人惊讶的是,他警告说,只有 “极小部分” 的反馈是积极的。开发者经常听到关于 bug 和缺陷的反馈,其中既有真实的,也有因为误解而产生的。当系统正常工作时,人们往往保持沉默,但一旦出现问题,负面声音便会此起彼伏。

 

在演讲中,Stenberg 进一步指出,当一个看似简单的 bug 长时间未得到修复时,人们会感到惊讶。

 

当被问及现在与一个更大的代码库有什么不同时,Stenberg 坦率地表示:“实际上没有什么不同。” 他解释说,无论是在大型还是小型代码库中,开发者都会面临类似的沟通挑战和问题。今天的开源世界仍然充满了 bug、抱怨和困惑,但这也为开发者提供了不断学习和进步的机会。

 

开源之光

 

Stenberg 的书中,我们得以窥见一个开源开发者鲜为人知的日常生活。他不仅仅是一个代码编写者,更是成千上万绝望用户的最后希望。这些用户因为各种原因无法从原始供应商那里得到帮助,只能转而向 Stenberg 求助。

 

这些求助邮件的背后,是用户们的痛苦、困惑和绝望。他们 “尝试了一切,翻遍了每一块石头”,但问题仍未得到解决。

 

正是这些邮件让 Stenberg 有了深入了解人们生活的机会。他收到了关于汽车、GPS 系统、视频游戏等各种问题的求助邮件。有时候,他甚至需要 Google 来理解问题的具体内容。这些邮件让他看到了开源软件在人们生活中的实际应用,以及它如何影响他们的日常生活。

 

其中也不乏一些令人啼笑皆非的情况。有用户因为自己的游戏账户被封禁而向他求助,还有用户警告他可能是某个黑客组织的一部分。但更多的,是那些充满绝望和期待的邮件,让 Stenberg 深感责任重大。

 

面对这些邮件,Stenberg 也曾经感到困扰和无奈。他承认,有时候他会选择停止回复,因为这似乎只会让用户更加生气。但他也意识到,这种做法并不正确。尽管他不能解决所有问题,但他仍然尽力提供帮助和建议。

 

尽管有时会收到一些充满敌意和误解的邮件,但 Stenberg 从不轻易放弃。他深知,在这些邮件背后,是用户们的真实需求和痛苦。因此,即使面对敏感和复杂的情况,他仍会花时间撰写回复,尤其是当用户似乎是诈骗的受害者或处于真正脆弱的情况下。

 


这种坚持和付出并没有白费。几个月后,一位曾经向 Stenberg 求助的用户再次给他发来邮件道歉。这封邮件不仅代表了用户对 Stenberg 工作的认可,更是对他无私奉献和坚持精神的肯定。

 

集体智慧与个人奉献

 

上个月,Stenberg 宣布自己为 curl 项目贡献了高达 18001 次的提交,其中最后的 1000 次提交仅用了 422 天时间。

 

在二月初的一篇博客文章中,Stenberg 明确指出,curl 的成功并非他个人的单打独斗。事实上,该项目已经汇聚了超过 1200 名提交作者,他们来自不同的背景,拥有不同的专长,但都为 curl 的成长和发展做出了巨大的贡献。更令人惊讶的是,每个月平均有 25 位新的提交作者加入这个大家庭,而每个月大约有 10 位新的提交者开始为项目贡献代码。在这样一个庞大的团队中,Stenberg 的所有提交所占的比例在过去多年里持续缩小,但他对此并不介怀。

 

在他的最后一张幻灯片中,Stenberg 更是用简洁明了的方式传达了这个信息:curl 和所有伟大的开源项目都始于简单的东西。

 


他向听众表示,他并不特别,也没有做出什么天才之举。他只是长时间地致力于这个项目,因为有一个想法让他觉得很有趣,于是他就去做了。

 

Stenberg 说,成功并没有捷径,只有不断打磨和付出。他相信,只要你花足够的时间在某件事情上,它最终会变得相当不错。

 

“就是这么简单。我认为你也能做到。”

 

作者简介

David Cassel,居住在旧金山湾区的科技新闻人。拥有超过二十年的科技新闻报道经验,他的文字曾在 CNN、MSNBC、华尔街日报互动版、Salon、Wired News、Suck.com 等知名媒体上亮相。

 

原文链接

 

https://thenewstack.io/you-too-could-have-made-curl-daniel-stenberg-at-fosdem/

 

声明:本文为 InfoQ 翻译整理,未经许可禁止转载。

2024-03-21 18:487105

评论

发布
暂无评论

Qt|自定义Widget实现互斥效果问题

中国好公民st

qt QWidget 9月月更

ChaosBlade Java 场景性能优化,那些你不知道的事

Java快了!

java;

Java 多线程:基础

Java快了!

java;

2022-09-08:以下go语言代码输出什么?A:5 66;B:5 88;C:7 88;D:以上都不对。 package main func main() { var x = []int{4:

福大大架构师每日一题

golang 福大大 选择题

mysql基本类型

急需上岸的小谢

9月月更

【JavaWeb】Servlet系列——使用纯Servlet做一个单表的CRUD操作

胖虎不秃头

Web java; 9月月更

数据治理(十一):数据安全管理Ranger初步认识

Lansonli

数据治理 9月月更

JavaScript 基础知识

喜羊羊

9月月更

调用 sap.ui.base.ManagedObject 的构造函数时,如何传递绑定路径进去

Jerry Wang

JavaScript SAP SAP UI5 ui5 9月月更

数据科学家、数据工程师和数据分析师三个角色的区别是什么

雨果

数据分析师 数据科学 数据工程师

转转商业化OCPC产品的护航之旅

转转技术团队

人工智能 计算广告 PID OCPC

Java终极学习路线-共计9大模块/6大框架/13个中间件

小明Java问道之路

Java 架构 JVM 中间件 9月月更

库调多了,都忘了最基础的概念 <锁与线程篇1>

知识浅谈

线程 9月月更

每日一R「23」回顾基本概念

Samson

学习笔记 ​Rust 9月月更

Linux系统安装Redis

Centos 7 redis 底层原理 9月月更

javaweb-JSP

喜羊羊

9月月更

云数据库技术|“重磅升级”后再测TDSQL-C

数据库 polarDB 玖章算术 TDSQL-C

融云 x KUPU:印尼蓝领用工的「直聘」样板

融云 RongCloud

互联网

【JavaWeb】Servlet系列——HttpServletRequest接口详解

胖虎不秃头

Web java; 9月月更

VUE 项目本地没有问题,部署到服务器上提示错误

HoneyMoose

nft系统开发

开源直播系统源码

区块链 NFT 数字藏品 数字藏品软件开发

讲究卡路里多少的美食出圈了!维小饭被评为“2022中国轻食十大品牌”

联营汇聚

Sprint Review能不能做成Demo演示?

LigaAI

Scrum 敏捷开发 迭代增量开发 高效办公 企业号九月金秋榜

【C语言深度剖析】详解strlen与sizeof的区别及用法

Albert Edison

C语言 sizeof 9月月更 strlen

C++学习------cmath头文件的源码学习01

桑榆

c++ 源码阅读 9月月更

SpringBoot源码 | prepareContext方法解析

六月的雨在InfoQ

springboot 源码阅读 9月月更 prepareContext

计网复习二,网络应用

前端小刘不怕牛牛

计算机网络 HTTP 9月月更

Zilliz 论文入选数据库顶会 VLDB'22

Zilliz

数据库 分布式 云原生 VLDB'22

网络IO是如何一步一步走向零拷贝的

C++后台开发

cpu 零拷贝 C++后台开发 网络io C++开发

JavaWeb -JavaBean MVC Filter 监听器 过滤器

喜羊羊

9月月更

[Go WebSocket] 多房间的聊天室(一)思考篇

HullQin

Go golang 后端 websocket 9月月更

从 160 行代码到 200 亿安装量:Curl 的传奇故事_开源_David Cassel_InfoQ精选文章