人们总是想做、想用、想分享、想帮助好东西
撰文:卫剑钒
本文主要回答三个问题:
这里先问个问题:
人们做事,真的一切都是为了利益吗?
出乎我的预料,超过一半的人都举起了手。
下面我们主要通过事例来说明问题。
我们先看看开源大神 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 是怎么想的。
在全球 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 周年走过的路时说 1::「2016 年夏天,我们开始认真讨论开源 Envoy 的问题。早期的 Lyft 员工对开源和它为公司所做的事情很欣赏。很明显, Envoy 并不是 Lyft 的主要业务,那么为什 么不把它放在那里并给予回报呢?」
没错,这就是今天,为什么各种公司开源了他们的非核心产品 。
在我看来,公司开源非核心产品的动机是:
让工作更好玩一些。
让外部更可见一些。
让公司更有影响力一些。
在 Quora 上,有一个问题是:
「为什么谷歌将 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 才被接受。
(其实很少有人真的做了翻译层面的评审,他们更多只是提了点格式上的意见)
我想,我肯定帮助到他了。
现在我们可以看到,不管是个人贡献开源,还是公司贡献开源,主要动机是:
1. 开源是个好东西,如果我们有能力,帮助它。
2. 我们使用它,改善它,并最好和它保持同步。
3. 如果做足够多,还会给我们带来其他好处。
在 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 日成立时,在官网上有一个公开的声明 3,里面更好地阐释了这一点:
「Apache 软件基金会将为 Apache 开源软件项目提供组织、 法律和财务支持。 基金会确保 Apache 项目在个人志愿者参与之外的连续性,在良好的基础上提供知识产权和财务支持, 并提供在参与开源项目时限制法律风险的工具。」
ASF 于 1999 年 6 月 30 日成立时,官网上的通告
基金会是这个目的,捐赠项目者的心态呢?
从下面的例子可以看出,完全吻合。
前面提到的 Envoy 创建者 Matt Klein 回忆:
到 2017 年秋天,有两件事是清楚的。
1.Envoy 已经超出了 Lyft 所能提供的范围。该项目需要法律、公共关系、营销、活动组织等方面的帮助。
2.我很快就完全倦怠了,需要找出一条可持续发展的道路。 我们最终同意考虑将 Envoy 转交到 CNCF 基金会。
最现实的一点就是,个人可能会对一个项目失去兴趣,公司也一样。而在基金会,项目就有了一个独立的家,如果基金会给力,项目就会活得更久和更好。
基金会的动机很单纯,非常利他:
帮助开源项目、提供多种支持。
让开源项目可持续发展。
总结下来,我觉得开源动机有 4 点:
前面 3 点是最重要的,第 4 点往往来得自然而然。
用一句话说,就是:
人们总是想做、想用、
想分享、想帮助好东西。
这很人话,如果想说得高大上一点,可以是:
人们渴望创造、体验、分享、回馈优秀和卓越。
「好玩」哪里去了?
那么,我们前面说的「好玩」跑哪里去了?
回看一下,你有没有注意到,上面四点都很好玩?
「好玩」是表面现象,「好玩」的背后是利益。
大自然在造人的时候,做了这样的安排:
凡是能带来利益的,都好玩。
而所有的「好东西」,都是利益。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。