为何开发者要开源程式码?动机有四个

人们总是想做、想用、想分享、想帮助好东西,而开源的本质皆来自於此。
(前情提要:OpenAI 收购「Minecraft开源版」,GPT-5 要在虚拟世界中进化了? )
(背景补充:Tornado Cash创办人遭美司法部控洗钱,专家:「於法无理」恐破坏开源信仰 )

本文目录

本文主要回答三个问题:

  1. 人们为什麽开源?
  2. 人们为什麽以各种形式参与开源?(比如贡献开源、比如基金会)
  3. 这背後的本质动机是什麽?

这里先问个问题:

人们做事,真的一切都是为了利益吗?

出乎我的预料,超过一半的人都举起了手。

下面我们主要通过事例来说明问题。

一、Linus 怎麽说

我们先看看开源大神 Linus 是怎麽思考这个问题的:

Linus 认为,人类所有的动机可分为三种基本型别。这些型别依次是「生存」(survival)「社会生活」(social life) 和「娱乐」(entertainment)。

我觉得他说的没错,基本上和马斯洛的需求层次理论相对应,生存动机对应着生理需求和安全需求,社会生活动机对应着归属感和被尊重的需求,娱乐动机则对应着认知、审美、自我实现、自我超越等,这些比较上层的需求统统可以归入到娱乐、好玩里面。

他的自传起名是:《只是为了好玩》,注意,所有书名都是慎重考虑过的。

这本书中,有两句话引起了我的注意,一是他曾经在一个大会上说,

「Linux 的开发是一个全球性团队的体育专案。」又在一次采访中,他说:「Linux 也是娱乐,这种娱乐是金钱很难买到的。」

Linux 的自传《 Just for Fun 》

这非常契合他的世界观中的後两者,他肯定不是为了生存才去开原始码的。

Linux 的发明,在很大程度上,是他为了满足自己的一个雄心:

「我想要开发一个比 Minix 更好的 Minix。」

Minix 是於 1987 年由 Andrew S. Tanenbaum(塔尼鲍默)教授释出的,它是用来 「向学生讲解作业系统的运作方式,并且使用简单直观的例子来演示」的程式,它是一个「带有原始码的 PC 版的 Unix,对硬体的要求非常低,并且有一本书讲解它的运作原理。以前从来没有人做过这样的事情。它不是免费的,但几乎就是了 —— 只要 59~69 美元,相当於 14 张软盘的价格,这几乎就是生产的成本费了。」

当时,Tanenbaum 每天都能收到 200 多封电子邮件要求程式改进,Tanenbaum 并不愿意改太多,因为这毕竟是一个教学系统,系统庞大以後就不适合教学了,另外「这样它就不能在最低硬体配置上运行了,而这一点是我希望为学生保留的。」

Tanenbaum 只愿意做这样的改进:

「基本的标准是,如果提出要求的人特别多,并且改起来也不麻烦,同时不会把整个系统的结构搞得一团糟,我会答应,」他解释道,「如果没有那麽多人提要求,或者很麻烦,或者要对系统做大手术,我就不干。」

在 Linus 看来,Minix 的终端模拟不太方便,而且也不能进行任务控制(job-control),记忆体管理也太简化。Linus 想写一个比 Minix 更好的 Minix。

一开始,Linus 只是在 Minix 上编写一个可以更好阅读学校网路上 Usenet 新闻组的终端模拟器,他把自己之前写的用於测试任务切换能力的两个程式加以修改,一个程式从键盘读入资讯并发给调变解调器,另一个程式从调变解调器读取资料,然後传送到萤幕上。

为了实现这些功能,他又写下了键盘和显示器的驱动程式;为了从学校网路下载档案,他写出了磁碟驱动程式,为了读写档案,他又在 Minix 档案系统的基础上写了一个自己的新的档案系统。

1991 年,从 5 月到 9 月,Linus 用了 5 个月,每天 10 小时,写出了 Linux 0.01。

这本书详细记述了 Linux 诞生的过程

1991 年 9 月 17 日,他把 Linux 第一个正式版本 0.01 版上传到赫尔辛基大学助教阿瑞・莱蒙科建立的 ftp.funet.fi 伺服器上的 /pub/os/linux 目录下, 他仅上传了源程式(大约 1 万行),并且还带着一份完整的释出说明,大约 1800 字。 其中强调了「释出这个版本的主要目的是为了让大家读一下程式」。

二、Denis 的心迹

我们再看看另一位全职开源软体作者 Denis 是怎麽想的。

在全球 TOP 1000 网站上,有至少 52% 的网站都使用了 core-js 专案的程式码。

它的作者 Denis Pushkarev 在 2023 年 2 月 14 日写过一篇长文,描述他为什麽开发 core-js:

「2012 年,我把我的开发栈切换到了全栈 JavaScript。当时 JavaScript 仍然太原始 —— IE 仍然比其他任何东西都更受欢迎,ES3 时代的浏览器仍然占据了 Web 的主要部分,最新的 NodeJS 版本是 0.7 —— 它才刚刚开始。JavaScript 仍然不适用於编写严肃的应用程式,开发人员用 CoffeeScript 语言转译器,解决了 JavaScript 所缺乏的语法糖问题,用 Underscore 等解决了 Javascript 缺乏标准库的问题。 然而,他们并不是标准,随着时间的推移,这些语言和库连同使用它们的专案一起过时了。但旧 JavaScript 引擎仍然流行,使用者并不着急,还没有什麽机会放弃它们,即使新的 ECMAScript 标准有着快速和可靠的优点,想让 JavaScript 引擎支援这个新标准,也要等很多年。…… 那时,ECMAScript Transpiler 开始流行并发展迅速…… 但它们不是模组化的,并可能带来全域性名称空间污染…… 而且太多必要的基本语言功能都还没有实现。」

「为了解决这些问题,我开始研究一个後来被称为 core-js 的专案,一开始仅仅是为了我自己的需要。 为了让所有 JS 开发人员的生活更轻松,2014 年 11 月, 我开源释出了 core-js。」

他说的很明白,他想解决一个普遍存在的问题,让自己和所有 JS 开发人员的生活更轻松。

不需要更多,我们基本可以得出,个人开源的主要动机是:

仔细想想,可以知道,解决问题、雄心、分享、声誉,其实都可以落入「好玩」之中。

Linus 说:「 It’s fun being famous」

所以,对个人而言,开源就是好玩、好玩、好玩、好玩、好玩。

而且说不定还能搞出点什麽名堂。

那就更好玩了。

三、公司为什麽玩开源

个人主要是为了「好玩」,那公司为了什麽?公司的天职可是为了赚钱。

这个问题曾经困惑了我很久。

Eric Raymond 在《大教堂与集市》 中说过:

「如果你在工作过程中感到恐惧和厌恶,就应该意识到过程已经出了问题。 快乐、幽默和玩兴是真正的资产,…… 开源成功的一个最重要成果,就是告诉我们,“玩 ” 是创造性活动中最具经济效能的工作模式。」

显然,开源能够带来好玩,能够带来创造性,那麽公司能不能把自己的东西开源出来呢?

Zach Holman,GitHub 最早的员工之一,在《The New Kingmakers》这本书中,给出过这样的建议:

「以快乐、美好的事情和可爱的工作流程来囚禁您的员工。」

「imprison your employees with happiness and nice things and cuddly work processes. 」 —Zach Holman

所以,当公司有员工提议说,我们把这个专案开源吧,网际网路公司里那些比较有现代思维的领导,都会认真考虑的,只要不是很核心的东西,贡献出来有什麽不可以呢?员工能更开心一些,自己也显得更有境界一些,而且,公司从开源已经受益太多了,做点贡献能有什麽坏处呢?

Lyft 开源 Envoy 的案例,比较能够说明这个问题。

Matt Klein 是 Lyft 的软体工程师,也是 Envoy 的建立者,他在 2021 年 9 月回顾 Envoy 5 周年走过的路时说 :

「2016 年夏天,我们开始认真讨论开源 Envoy 的问题。早期的 Lyft 员工对开源和它为公司所做的事情很欣赏。很明显, Envoy 并不是 Lyft 的主要业务,那麽为什 麽不把它放在那里并给予回报呢?」

没错,这就是今天,为什麽各种公司开源了他们的非核心产品 。

在我看来,公司开源非核心产品的动机是:

四、公司开源核心产品

在 Quora 上,有一个问题是:

「为什麽Google将 Kubernetes 开源而不是商业化?」

Why did Google release Kubernetes as open source instead of monetizing it?

我觉得有两个回答是不错的。

Andrew McGregor 回答说:「如果丛集排程器是闭源的,它不会在市场上获得任何牵引力,因此 Kubernetes 必须开源。」

Levy McNary 则说:「因为开源使它成为标准。一旦成为标准,他们就可以将云服务货币化」

没错,K8S 正是通过开源和它的技术实力,获取了大量市场,打败了当年的竞争对手。

在作业系统、资料库领域,这一点表现的更明显,新进这个领域的产品,如果不开源简直就没法生存。按照我的朋友庄表伟所言,这些领域,已经卷到必须要开源了。

陶建辉创办了涛思科技,他做的是时序资料库,在其官网上,是这麽写的:

「涛思资料采用 AGPL 许可证,已经将 TDengine 的核心 (储存、计算引擎和丛集) 100% 开源。涛思资料将尽最大努力打造开发者社群,维护这个开源的商业模式,相信不将最核心的程式码开源,任何基础软体都将无法赢得市场。涛思资料希望通过开源,快速获得市场回馈,完善产品,完善生态, 而且吸引更多的开发者加入到这个专案中。」

我相信他说的是真心话。

这很典型地说明了公司开源核心产品的动机:

当然,如果你已经赢得市场了,那就不一定需要开源了。

相信微软在 10 年内都不会开源 Windows。

甲骨文在 10 年内不会开源 Oracle。

五、公司贡献开源

下面我们看看贡献者贡献开源的动机。

除了开源自己的产品,公司还以贡献的方式参与开源,这同样是很值得思索的。

阿里云专家张乎兴回忆说:

2014 年,我加入阿里巴巴中介软体团队,开始接手集团应用容器的维护工作。当时集团的应用容器绝大部分都是基於 JBoss,老旧且无人维护,另外有一小部分跑在 Jetty 和 Tomcat 之上,当时中介软体团队维护了 Tomcat 的一个私有分支,最大的目标就是要统一所有集团的应用容器为 Tomcat。而在那之前,我从未接触过 Tomcat 的开发和运维,对我来说,挑战很大。

然而,更大的挑战来自於团队大 leader 提出的,在当时看来几乎是无法实现的目标:成为 Apache Tomcat 的 committer。

要知道,作为 Apache 的核心专案之一,Tomcat 自 1999 年释出第一版以来,一直是开源界和 Apache 基金会的明星专案,至今仍然在应用容器领域市场占有率保持第一,历经 20 年发展,依旧热度不减。Tomcat 历经这麽多年的发展,却从未出现过一位来自中国的 committer。而我们小团队只有 4 个人,根本没有任何开源的经验,也完全不知道从何做起。团队 leader 问我们,谁愿意挑战一下的时候,我也没有多想,就承担了下来。

很快,我从修复 bug 开始,第一个 patch 是修复一个 Websocket 测试用例失败的问题,修复该问题涉及到了对程式码的一些重构。还记得当时提交之前我非常谨慎,和 leader 一起反覆讨论了很多次,终於形成了一个比较满意的方案。提交给 Tomcat 社群之後,很快,社群便有了响应,并合并了我提交的更新。第一次提交便获得了认可,心里很开心,紧张的情绪也缓解了。看到 Tomcat 的 release note 里面出现了自己的名字,真的非常开心。

「在嚐到了贡献的甜头後,团队的目标也有所调整:内部版本的 Tomcat 和开源版本的结构要保持完全一致。这使得合并开源 Apache Tomcat 变得非常容易;内部做的增强也更加方便合并到社群。

道理是非常直白和简单的,有贡献的一面,也有利己的一面,显然,UpStream,自己也会受益良多。

六、个人贡献开源

前面已经讲了很多别人的例子,现在讲一个我个人的例子。

在 Github 出来的时候(2008),我已经很少写程式码了,但我仍然在 2023 年贡献了一个比较有影响力的专案。这个专案就是前面提到的 core-js,它每个月有 2.5 亿次 NPM 下载,GitHub 上有 1900 万个仓库依赖它。他的作者 Denis 在 TOP 1000 网站上执行指令码,检测到 52% 的网站使用了它。

但是他本人却落入了很悲惨的境地,他曾经因为驾驶摩托车撞人导致一死一伤,因为没钱(有钱就可以受害人家属和解),在监狱里呆了 10 个月。由於他全职从事开源(也就是 core-js 的开发),他的经济来源主要靠捐赠,刚开始,他每月能收到 2500 美元,後来只能收到 400 美元每月。所以,Denis 才在 2023 年情人节写下了那篇长文,进行哭诉。

我看到後,觉得非常有利於人们理解开源的现状,就把这篇长文翻译出来了,大概 3.3 万字。然後,我想,如果这篇翻译能够放在这个专案中,能让更多使用这个专案的中国程式员帮助到他。於是就提交了这个翻译版,Denis 很乐意看到这点。

LGTM=Looks Good To Me

当然,他还是很谨慎的,在我提交後,他号召懂中文的人评审,大约过了将近一个月,这个 PR 才被接受。

(其实很少有人真的做了翻译层面的评审,他们更多只是提了点格式上的意见)

我想,我肯定帮助到他了。现在我们可以看到,不管是个人贡献开源,还是公司贡献开源,主要动机是:

七、为什麽成立基金会

在 2019 年 ASF 成立 20 周年时,有人访谈了当时 8 位创办人,其中一位是 Randy Terbush。

在问到「是什麽原因促使 Apache Group 成立为 ASF?」

他说:

「这其中有很多的原因,如果我没有记错的话,其中的一个因素是希望能够为贡献者和公司提供相应的法律保护,另外的一个原因是希望我们能够获得现金和捐赠,从而能够让我们进入更加良好的发展。总而言之,我们最终的目的是建立一个组织,从而能够支援日益增长的开源开发的参与,以及大量的被采用。」

另一位创办人 Jim 则说:

「随着网际网路和 web 技术的日益发展,也日渐稳固,我们都意识到需要较为正式法律给我们提供更多的保护。另外还有一个可能原因,当时,IBM 有意采用 Apache HTTPD 作为其 web 服务的基石,IBM 对於‘江湖’气味颇浓的 Apache Group 是有些担心的,这可说是千载难逢的机会,既有形势的需要,又有如此势力雄厚的盟友助阵,所以,我们没用多久就促成了这次成立基金会的事宜。」

创办人 Drik 说:

「这个时候,IBM 的 Domino WebServer 正在走下坡路,份额急速下降,他们正在研究开源的可行性,看能否切换到 Apache,但是随着 NCSA 退出,Apache 尚没有明确的合法所有人。USL 与 AT&T 的官司对 BSD 的影响才刚刚开始显现…… 所有的这些事情都聚到一起了,当然,对於我一个欧洲的人来说,美国的诉讼习惯实在是太具有侵略性了…… 於是,稍作商量,我们便迅速的做出了决定。」

ASF 於 1999 年 6 月 30 日成立时,在官网上有一个公开的宣告 ,里面更好地阐释了这一点:

「Apache 软体基金会将为 Apache 开源软体专案提供组织、 法律和财务支援。 基金会确保 Apache 专案在个人志愿者参与之外的连续性,在良好的基础上提供智慧财产权和财务支援, 并提供在参与开源专案时限制法律风险的工具。」

ASF 於 1999 年 6 月 30 日成立时,官网上的通告

基金会是这个目的,捐赠专案者的心态呢?

从下面的例子可以看出,完全吻合。

前面提到的 Envoy 建立者 Matt Klein 回忆:

到 2017 年秋天,有两件事是清楚的。

1.Envoy 已经超出了 Lyft 所能提供的范围。该专案需要法律、公共关系、行销、活动组织等方面的帮助。

2. 我很快就完全倦怠了,需要找出一条可持续发展的道路。 我们最终同意考虑将 Envoy 转交到 CNCF 基金会。

最现实的一点就是,个人可能会对一个专案失去兴趣,公司也一样。而在基金会,专案就有了一个独立的家,如果基金会给力,专案就会活得更久和更好。

基金会的动机很单纯,非常利他:

八、总结

总结下来,我觉得开源动机有 4 点:

  1. 做一个好东西。(解决问题,展示能力)
  2. 帮助一个好东西。(善良是灵魂间的桥梁)
  3. 送出一个好东西。(赠送礼物,获得使用者)
  4. 获得回报。(赢得声誉、获得市场)

前面 3 点是最重要的,第 4 点往往来得自然而然。

用一句话说,就是:

人们总是想做、想用、想分享、想帮助好东西。

这很人话,如果想说得高大上一点,可以是:

人们渴望创造、体验、分享、回馈优秀和卓越。

「好玩」哪里去了?

那麽,我们前面说的「好玩」跑哪里去了?

回看一下,你有没有注意到,上面四点都很好玩?

「好玩」是表面现象,「好玩」的背後是利益。

大自然在造人的时候,做了这样的安排:

凡是能带来利益的,都好玩。而所有的「好东西」,都是利益。

📍相关报导📍

马斯克:比特币开源所以没bug!未来数周公开「推特演算法」程式码

Ledger「私钥恢复」炎上!CoolWallet冷钱包放心策略:开源SE晶片程式码

AI混战!Meta结盟微软推「免费开源」语言模型Llama2!威胁OpenAI、Google

Leave a Reply

Your email address will not be published. Required fields are marked *