软件正在慢条斯理地吞噬世界,开源正在慢条斯理地吞噬软件业。
软件正在吞噬世界?是的,对于购物、吃饭、健身、交停车费都需要使用软件的年代,对于平均每人每天都要花费5到6个小时使用手机软件的年代,有什么理由不相信软件正在吞噬整个世界呢。
开源正在吞噬软件业?是的,因为在软件越来越富裕的年代(也即软件不再稀缺),不开源的软件,最终是没法和开源软件竞争的。举个简单例子,如果有人要在很多个文件加密软件中选择一个使用,在功能和价格都差不多的情况下,选择开源的还是闭源的?当然要选择开源的,因为谁知道闭源的软件中,会不会有后门?
前言
开源的成功程度,或者说开源的***程度,从中国银行业的广泛采用就可以看出来,银行作为一个在IT方面相当谨慎和保守的行业,在2012年(一个大约的年限)之前对开源基本上不屑一顾,使用的基本上全是商业软件(这里是指专有软件),他们认为商业软件更专业、质量更高、更可信赖、更有保障,他们中不少人视开源软件为异类,对其功能、性能、安全性表示担忧,最重要的是,他们担心开源软件出问题后找不到“原厂”解决问题和“承担责任”。
然而就在2012年以后,银行业逐渐增加了开源的使用比例,这里面有很多原因,最重要的一个原因是,在Linux面世20年后,很多开源软件已经成为比商业软件更好的存在,以至于咨询商、集成商、开发商们在为银行提供解决方案时,所拿出的最佳方案已经是基于开源的方案,银行(作为甲方)已经无力拒绝。比如,如今当一个银行要建设其自用的云平台时,在咨询和调研一大圈下来,他几乎一定会选择基于openstack的方案,如果想使用容器技术,就几乎一定会选择容器编排软件kubernetes,这时,已经顾不上有没有“原厂”了(事实上还是有服务商兜底),因为没有太多更好的选择了。
银行虽然还在使用Vmware、Oracle、Websphere、Weblogic,但是KVM、Mysql、Apache、nginx的***已经越来越严重,多数银行的Linux主机数量早已超过了Windows服务器,因为Linux早已成为整个世界的主流的服务器操作系统,而且还有像Redhat这样的商业支持,为什么不使用呢。
如果有条件,你可以实地调查一下,各家银行的IT部门,在最近5年内,已经不得不正面开源这种“新事物”给他们带来的“问题”,因为对开源的引入、使用和运维,显然和以往闭源软件有明显不同,他们开始写出开源软件使用管理办法,并指定专门处室来负责管理。
而那些有先见之明的企业(尤其是互联网企业),早已组建了开源办公室,早已把自己的整个系统建立在开源软件之上,并且早已在开源世界投入了大量的资金和人员,毫无疑问,他们也早已从开源中获得了巨大的收益。
那么,开源到底依靠什么,让自己大获成功?
本文分析了开源的7大理念,有助于读者更好理解开源的本质要素,这些理念为“完全自主”、“高度开放”、“自发自治”、“自下而上”、“自由竞争”、“赢在声誉”、“社区赋能”。
注:在读这篇文章的时候,你会发现,这些理念事实上是交织在一起的,很多事例同时命中多个理念。因为开源本身就是一件事,我只是从不同侧面对其进行了描绘。
注:本文所称的“”采用的是(hacker)的原始含义,也即是热衷于计算机软硬件的技术高手,而不是媒体上所说的计算机犯罪分子。在一定程度上,本文不再区分“”、“程序员”这两个概念,你可以认为他们是一回事,也可以把看作是技术高超的程序员,总之,是一个正面概念。另外,本文也不再区分“企业”和“公司”,不再区分“开源项目”和“开源软件”,而认为它们是一回事。
1、完全自主
开源之所以能够大行其道,是因为所有程序员都喜欢源码。
这就是开源的原生动力。
希望自己有完全自主和完全可控的世界,这和其他人没有两样,但有可能在计算机软件领域实现这一点。
没有源代码就无法掌控世界吗?是的,如果一个操作系统是闭源的,***在使用操作系统时遇到bug而无法修改,遇到需求而不被采纳,试图研究而无从下手,遇到垄断、高价、霸王条款而无可奈何,哪里还谈得上掌控世界。
再如,写程序,他希望有一个自己能够控制或者是能让自己放心的编辑器,不仅仅需要这个编辑器足够好用,而且最好不会有后续的麻烦,比如不会有license的麻烦,不会有厂商停止服务的麻烦。希望这个编辑器能尽在掌握之中,遇到bug,自己或者有人能将其修复,一些想要的功能,自己或者有人能将其实现,而且最好是,自己怎么折腾这个软件,也不会陷入法律方面的麻烦。
也就是说,***喜欢在一个无拘无束的、自由自在的环境下,干自己喜欢做的事,这是多么美妙!
想要开源的操作系统,想要开源的编辑器,还想要开源的编译器、开源的浏览器、开源的数据库、开源的web server、开源的云环境、开源的虚拟机软件、开源的大数据工具、开源的人工智能软件。。。总之,如果一切都开源了,这就是感觉最自由和最自主的环境,这就是***的理想。
如果很多人都有这样的需求,而又有人能把它实现,那这件事就必然会发生。
人类社会是很有意思的,一些人的需求,会成为另一些人的动力,当程序员们渴望源码的时候,自然就会有***奉上自己精心打造的源码,不管他们是否意识到,在所有的需求满足背后,都暗藏着丰厚的回报。
当***们想要开源操作系统的时候,Tanenbaum带着MINIX出现了,当人们希望它有更多的特性时,Linus拿出了Linux,当人们需要web server时,NCSA拿出了Apache,作者一开始开源自己的代码时,并没有想太多,可能仅仅就是想说:“兄弟们,看看我写的这个东西怎么样?你们试试用一下?有啥问题,或者有什么新想法,欢迎给我发邮件!”
时至今日,在企业越来越多主导开源的年代里,这种原始的动机仍然存在,前段时间开源的TDengine,其主要作者陶建辉在文章(1)中写道:
“要是有程序员仔细研究我们源码,看我们是怎么做到的,我会特别的开心。要是有程序员能把我这套方法借鉴过去,把他现在臃肿的系统大幅裁剪,把性能大幅提升,那我更会心花怒放。昨天有人在微信群里告诉我,说RPC模块写的高效简洁,准备采纳,真让我有点得意忘形。”
“两年多的时间,近二十万行代码,放在了GitHub上。好多朋友关切的问我,开源怎么赢利?抛开开源的商业模式不提,我想,只要我们开源的代码真正创造了价值,有人用,那我和团队就是最大的赢家。如果30年后,还有人在用TDengine,哪怕只是其中一个模块,其中一个函数,那就是对我们两年多日夜奋战的最大肯定,就是给我这个程序员的最大回报。”
“如果你发现什么问题,我只会高兴,不睡觉都想尽快去解决它。如果喜欢,更欢迎参与到我们这个项目中来。五年之内,世界上90%以上的数据都将是物联网采集的数据,如果我们一起开发出一个极为高效的数据处理引擎来处理这些数据,而且为全球开发者所使用,你是贡献者之一,那是一个多么自豪的事情。”
就这样,在需求和供应的动力下,开源从底层的操作系统开始,充满了整个开发环境和中间件,一直到最上层应用,只要是人们想要的东西,就会把它们实现,如果有一样东西还没有开源,那一定还不是很想要的东西,或者是,他们认为这个东西没有必要开源(比如赖以赚钱和生存的东西,比如比较客户化的东西)。
所以,我们看到,操作系统Linux、Android;编辑器Vim、Emacs、Atom、Brackets、VS code,版本管理系统SVN、Git;数据库MySQL、MongoDB、Redis、Postgres;大数据平台Hadoop、Elasticsearch、Hbase、Spark;Web服务器Apache、Nginx、Node.js、Tomcat;DevOps工具Jenkins、Maven、Ansible、Chef;虚拟化软件KVM、Xen、Docker、Kubernetes,如雨后春笋般应运而生,这些列出的和没有列出的开源软件,形成了一个完整的软件生态环境,***们已经生活在一个很幸福的时代,他几乎是想要什么就有什么,而几乎在所有的IT企业和大型非IT企业里,你都能看到这些开源软件的身影。
看到这里,你可能会有所明白,开源,其实是程序员送给程序员的礼物。
因为真正需要源码的人,是程序员,真正能写出源码的人,也是程序员。
2、高度开放
对软件而言,源码都开放了,还有什么不能开放?
这要看情况,软件开放到什么程度,完全取决于其许可证(license)。(关于许可证的基本知识,建议看一下阮一峰的文章《开源许可证基础知识扫盲》(2)
最开放的情况莫过于“任何人能干任何事”(anyone can hack anything),也即没有任何事情可以阻止人们运行该产品,获取其源码、复制其源码、修改其源码,推进其向不同方向演进,并声称是该产品。
这可是太过开放了,以至于拿到他人源码后,“克隆”或者“山寨”出一个产品将没有任何法律层面的压力,为什么开源会开放到如此地步?
一方面,在源码已经开放的前提下,你事实上很难阻止别人克隆、修改你的代码并换个名字发布。虽然程序员通常不会这么做,但他们不愿意有限制,在一个普遍宽松的环境下,如果你限制太多,程序员就不太会参与你的项目。
另一方面,这是一个鼓励充分竞争的世界,如果***们就项目的方向产生分歧,而又无法达成一致,异见者就可以分叉出来自立门户。比如,EGCS分叉自GCC,OpenSSH脱胎于走向商业化前的SSH,Veracrypt派生自Truecrypt,再如近年来比较著名的事件:一些人不认可BTC的方向,分叉出来BCH,然后又有人不认可BCH,分叉出来BSV,虽然这个过程中有很多争吵,但没有人可以阻止这些。
为了更好地理解开源所给予用户的高度开放,下面我们看看自由软件是如何定义它所赋予用户的自由(3):(虽然开源软件和自由软件并不是一回事,但只有很少的开源软件不是自由软件,而几乎所有自由软件都是开源软件(4) ,所以这里我们不去纠结自由软件和开源软件的种种区别,而是统一思考为FOSS(Free and Open Source Software),并去理解其背后的初衷。)
如果一个软件是自由软件,那么它必须为用户提供以下四项基本自由:
自由度0:用户可以按照自己的意愿,自由地运行该软件,而不论出自何种目的。
自由度1:用户可以自由地学习该软件,可以按照自己的意愿修改该软件,所以,用户首先要能得到源码。
自由度2:用户可以自由地分发该软件的拷贝,这样就可以帮助他人。
自由度3:用户可以自由地分发该软件修改后的拷贝,借此,用户可以将其修改分享给整个社区,令他人也从中受益。
“自由软件”不等于“非商业软件”。一个自由软件必须允许商业用户、商业开发和商业发布。商业开发自由软件早就司空见惯了,这样的自由软件非常重要。你可能需要花钱购买自由软件,也可能免费拿到。但是无论你如何获得你的拷贝,作为用户,你的四大自由都会被保证,你可以自由地运行、修改、发布,甚至出shou自由软件。
你(即,软件用户)可以把软件原版或修改版再发布给其他用户。你可以免费发布,也可以收取费用(注:市场经济下,别人免费发布,你收费发布,你要考虑提供如何好处才能让人买单)。软件可以发布给任何地方的任何人。所谓“自由”,意味着你的这些行为不必事先征得任何人的许可,也不必为此额外支付任何费用。
从以上对自由度的定义可以看出,FOSS的初心是让人们能够更好地学习他人代码、复用他人代码,完善他人代码、并可以将软件分发给需要的人,从而尽可能让更多的人从软件和源码中受益。
但开源的这种自由开放精神,会不会受到国家的限制?比如受到美国出口管理条例(Export Administration Regulation, EAR)的管制?这个问题曾经成为今年(2019年5月)的关注焦点,参考有关专家解读(5),这里汇总解释如下。
依EAR,美国人、美国公司将软件出口至美国境外,或在美国境内提供给外国人作为出口的预备行为,必须申请取得许可。
但符合“公开可获取(Publicly available)”定义的软件,不在 EAR 管制范围(EAR 734.7 (a)),也就是说,多数开源软件,出口上不需要申请许可。
但 EAR 734.7 (b) 同时说明,公开可获取软件虽不需许可,但若涉及加解密技术,仍然必须申请许可,除非是这个加解密技术本身也是公开可获取的,那就可以采用EAR 742.15(b) 款提供源代码或揭露源代码来源的方式,来登录备查。
Apache基金会(ASF)在2019年5月22日通过官博发表声明(6),称:
经美国商务部工业和安全局(BIS)重新分类(于2016年9月20日生效),开源公开可获取的加密软件源代码,因已是“公开可获取”和“已发布”,不再受 EAR 约束。
涉及加密软件源代码的开源项目,仍然需要向 BIS 和 NSA 发送项目 URL 的通知(notice),以满足 EAR 742.15(b) 中的“公开可获取”通知要求。
ASF 继续与 Apache 项目及其社区合作,以确保他们的通知是最新的,并在未来得到维护。
所以,开源软件是否会被美国出口管制,这个问题基本上不用多虑,源码已经在你的手里,许可证又给予了你如此高度的自由,你还担心什么呢,你最需要担心的问题可能只是:能否读懂源码?
3、自发自治
所谓开源社区,指的是所有关心、参与、支持、帮助某个开源项目的人的集合。
社区里的人,是自发组织在一起的。“其中90%是用户,他们只是搭顺风车或是凑凑热闹,9%的人积极参与、提交bug、回答问题,这是‘贡献者’,1% 的人指导并控制项目的走向,委派任务和做决策,这是‘维护者’,或者简单的说,他们是领导者。” (7)
Eric Raymond在著名的《大教堂与集市》(8)一文中说:“谁能想到,几千名散布在全球各地的程序员,利用业余时间,仅仅通过Internet,就鬼斧神工般地造就一个世界级的操作系统?”
他接着说:“多年以来。。。我相信大多数重要软件(操作系统和真正大型工具如Emacs编辑器)需要像建造大教堂那样,在与世隔绝的环境下,由天才式专家或几个行家里手精心打造,。。。而Linus Torvalds委托所有能委托的事、开放到几乎混乱的程度,这实在令人惊讶不已,在Linux社区,没有建筑大教堂那样的安静和虔诚,倒更像是一个乱糟糟的大集市,充满了各种不同的计划和方法。”
Eric提出的问题是,一个大的项目里,大家平时连面都见不上,那么,如何把社区里的人们组织起来,尤其是把编写代码的***们组织起来?一个“乱糟糟的大集市”,真的能搭建起一个宏大而精妙的软件吗?书中并没有给出明确答案。
在一个传统的软件公司里,“组织”并不是问题:确定立项,设立项目组,明确角色和分工,明确需求、目标和计划,给程序员们分配任务,想方设法调动他们的积极性,分配资源、保障进度,检查质量。在一个理性的公司里面,有大把的流程和制度在做这些事情,即便在开发中采取了敏捷方法,也是在命令体系下按照既定方法开展的。
但是,在一个完全基于兴趣而结合的开源社区里(这里先不考虑公司雇佣人全职做开源的情况),你所面对的都是自由人,你只能通过他(她)的自愿来获取合作,如果他(她)愿意,他(她)就可以贡献代码,不愿意,完全可以不写任何代码(使用就好了),如果他(她)有能力,他(她)的代码就可以被采纳,如果能力不足,他(她)的代码大约就不会采纳。
这完全基于个人的意愿和能力,一个开源项目的领导者,他所需要组织的,就是发现有能力的志愿者,并予以相应的代码提交权力。
在一个大型的社区,通常会有以下几种不同的角色9:
1、领导者(Leader):比如 Linus Torvalds,作为内核的创始人,毫无疑问是该项目的最高领导者,在理论上,对Linux内核的任何事务都拥有最终话语权。在另外的一些项目中,可能有一个或多个人共同负责,如 Node.js 项目采用的是核心技术委员会机制(the Core Technical Committee)。
2、维护者(Maintainer):领导者会将一些决策和模块直接委托给维护者,维护者还可以将其中部分工作再委托给下一个层级的维护者。例如,Linus Torvalds 手下就有若干位内核的维护者,负责不同的模块。
3、提交者(committer):有些开源项目会设置一组可以直接提交代码到主干的人,他们已经证明了自己可以胜任工作并且靠谱,而且不再需要提交维护者去进行审核。但提交者对代码没有最终的决定权,维护者或项目的领导者如果发现了什么,可以将提交的内容打回去。
4、贡献者(Developer或Contributor):贡献者可以做很多事,比如帮助解答用户的问题,贡献代码或文档,在邮件列表中参与讨论,也可以提交代码committer。与前面的角色相比,贡献者对于代码的权力要小一些。
5、使用者(User):用户为项目提供了目标,并帮助项目持续进化,作为社区成员,他们最有价值的部分是提出需求、报告缺陷、提出建议。
虽然Eric用“集市”一词来描述开源模式,但社区里的程序员可绝不是乌合之众,***可绝不会让自己的代码失控,代码永远要清晰、干净、简洁、优美。只有能做到这些的程序员才可以被赋予维护代码的权限,所以,这是一个典型的能力带来权力的社会,或者说的更直白一些,这是一个精英引领的社会。
那么,集市模式和大教堂模式有相通之处?
是的,这二者并不是截然对立的。
Linux内核在第一次发布之前,必然凝结着Linus的精心设计(大教堂模式),虽然它是自下而上写出来的,虽然它只是一个大学生的暑期作品,虽然它只有大约10000 行代码(Linux 0.01 版本)。
然后,Linux走向了开源并吸引了大量程序员参与,开发进入了集市模式。如今,参与Linux内核开发的已经有100多家企业和接近4000名开发人员,内核源文件达到5.3万个、源代码达到2100万行,Linux每天会新增1万行代码,删除5000行代码,修改1800行代码,Linux每一小时就会发生8次变化10。在外人看来,这的确像是一个乱糟糟的集市,但这并不代表项目失控。
Linus对接十余名核心维护者,每个人都有自己负责的具体领域和项目内容(例如网络、无线、USB驱动、ext2或vfat文件系统都有相应的最高负责人),每次有新的开发任务时,Linus会将它分配给对应的人,而这十余位核心贡献者又有各自的熟知并信赖的高手小团队。
Linus不会也不可能亲自审核每个设计和变更,而是按照这样层级化的结构(大教堂模式?),最终由数百名维护人员负责代码审查和整合。在Linus看来,一切都在有条不紊的控制之中(为了更好控制代码,Linus还专门开发了代码管理工具git)。
这很像是一大群能工巧匠(包括一些建筑公司的团队),不管出自何种利益考虑,为了一个共同的目标,从世界各地自发参加一个大教堂群的设计和建设,Linux内核就是这样一个大教堂群,每个子系统都是一个大教堂,每个大教堂都有着负责设计和建造的领导人,其下有有着数百名建造高手,他们在共识和规则之下,使用着像git、gcc、邮件列表这样的设计、建造和协同工具,利用集体的力量(他们会讨论,也会投票),把这些美轮美奂的大教堂建造出来。Linus作为最高领导人,不会强制他们,更不会发薪水,一切都是这些高手自发自愿自带干粮,不管是个人还是公司。
集市模式和大教堂模式的本质区别只是在于:前者是自发的,也是自治的。
4、自下而上
自下而上是大自然最普遍的法则,开源作为一个从草根社会发展起来的事物,必然会遵循这个法则。
在开源世界里,至少可以从技术、生态、成就三个层面来观察这一现象。
从技术上看,纵观开源历史,那些非常富有创意的软件,一开始都是作者脑海中一个不太清晰、朦朦胧胧的想法,然后在作者能力和经验的基础上,通过代码一步步明晰起来的,中间经过了若干次大大小小的架构调整,经历过两三次重写,然后才终于成型。开源项目在第一次露面时,大多数情况下只是初步可以运行,然后通过其富有创意的特性和前景,吸引更多的程序员关注和贡献。
一开始,Linus只是在Minix上编写一个阅读学校网络上Usenet新闻组的终端仿真器,他把自己之前写的用于测试任务切换能力的两个进程加以修改,一个进程从键盘读入信息并发给调制解调器,另一个进程从调制解调器读取数据,然后发送到屏幕上;为了实现这些功能,他又写下了键盘和显示器的驱动程序;为了从学校网络下载文件,他写出了磁盘驱动程序,然后又在Minix文件系统的基础上写了一个自己的新的文件系统;也就是说,他使用Minix作为脚手架,逐步构建了自己的Linux。芬兰学校的暑假有点长,1991年的暑假更是从5月中旬放到了10月中旬,Linus完全将时间投入到了编程之中,一周7天,一天10个小时,全都在写代码。1991年9月,Linux的0.01版就这么一点一点地做出来了11。
从生态上看,开源软件之间形成的关系,也是自下而上的,先有了语言、编译器、操作系统,然后在操作系统提供的各种功能的基础上(比如文件系统、内存系统、硬件驱动等),做出了实用工具(binutils),做出外壳(Shell),做出了代码管理工具、集成开发环境,做出了数据库、Webserver、浏览器,做出了虚拟机,做出了javascript,做出了包管理工具,做出各种应用开发框架和组件,做出了大数据、云技术,做出了各种面向最终用户的应用。总是先做出底层的东西,然后才做出上层的东西,而且总是先有实践,才有了理论,总是先有代码,才有了设计模式、架构体系、软件工程这些东西。
从成就上看,绝大多数***,一开始都是小打小闹,从简陋的程序开始起家,并没有什么宏大的想法,Linus一开始也只是自己玩玩看(《Just For Fun》),并没有想着要怎么改变世界,说自己“如果当时真的知道从头建立一个操作系统的难度,肯定是不会有勇气去做的”12。而到了1999年,Linus在"The Linux Edge"一文中提到:“Linux现在有数百万用户、数千名开发者和正在增长的市场,Linux被用在嵌入式系统中,用在机器人系统中,用在航天飞机上,我想说我知道这些都会发生,这些都是统领世界计划的一部分(that it's all part of the plan for world domination.)”,虽然,这也许只是一种诙谐的表达。
扎克伯格一开始做的仅仅是一个让学生们可以在一堆照片中选择最佳外貌的程序(Facemash),他做这个也只是因为好玩,后来才开始做了一个用于哈佛大学学生交流的网站:Facebook,随着Facebook的壮大,在收购WhatsApp、Instagram之后,扎克伯格的成就和抱负也逐渐升级,2017年2月,扎克伯格在一篇宣言中称“过去10年中,Facebook一直专注于帮用户连接家人和朋友。下一步我们要成为新的社会基础设施,保证社群安全、提升每个人在社会事务中的参与度并提高社会的包容性。”,2019年6月,Facebook提出Libra计划,要“重新创造货币,重塑全球经济,让世界各地的人们过上更美好的生活”。谁能想象,一个程序员,居然就这样自下而上,做出如此的成就。
顺便提一下,开源软件进入财富500强的方式,并不是Eric所倡导的自顶而下方式(《***的反击》一文),开源并不是因为CEO和CTO的倡导和命令而进入企业,开源仍然以其一贯的方式,以其不慌不忙的态度,以其不可抵挡的实力,自下而上地推入了财富500强。
5、自由竞争
开源,是一个靠实力说话的世界。
开源软件在竞争什么?竞争的是谁的软件好使,谁的评价更高,以及,最终,是谁获得了更多的市场份额。
“Talk is cheap, show me the code”,大约是这一点的经典诠释。1992年1月,有一场著名的论战,Tanenbaum作为Minix的作者,发帖批评Linux是一个庞大而一体化(monolithic)的操作系统,而非早已被证明更先进的微内核设计,并称“Linux简直像是大踏步回到了20世纪70年代,就像拿来一个C语言的程序,再用Basic重写一遍,在1991年还写monolithic式的操作系统,真是太糟糕了。”,Linus则回怼“Linux在绝大多数方面都完胜Minix。。。如果微内核是判断操作系统内核的唯一标准,那你可能是对的,但你为什么不提Minix并没有把微内核做的很好,并且在真正的多任务(内核层面)方面还有很多问题呢!”。
Linus怎么会有底气向一个多年研究操作系统的计算机系教授开火?那是因为他真的做出了比MINIX要好用更实用的内核,而且真的得到了更多的欢迎,所以他才可以这么说,在理论上,Tanenbaum大约是对的,但在实践中,Linus胜出了。
竞争比比皆是。
2004年,在Apache占据最大Web server份额的年代,俄罗斯人Igor Sysoev开源发布了Nginx(和Engine X谐音)。Nginx的一个明确目标就是超越Apache Web服务器的性能,它使用异步技术,成功解决了C10K(Concurrency 10K,1万并发)问题,以其占用内存少、并发能力强、配置灵活简单等惊人性能,很快得到了广泛采用。截止2019年6月,在全球流量最大的前100万个网站中,Nginx占有率已经从10年前的3%上升到如今的27%,而Apache的市场份额从66%下滑至32%,微软的IIS则从19%下滑到9%13。在流量最大的前1万个网站中,Nginx的使用率已经超过了Apache(30% vs 29%)14。
2015年,Google开源了Kubernetes,它基于Google自2003年起就在内部使用的集群管理工具Borg,很快,微软,红帽,IBM和Docker加入,Google更是与Linux基金会合作组建了CNCF基金会(Cloud Native Computing Foundation ),将Kubernetes作为种子技术来提供。现在,Kubernetes有380家企业和2500多名开发者参与开发,在和同类项目Swarm以及Mesos的竞争中,Kubernetes很快占领了容器调度编排领域的绝对领先地位15。
软件在竞争,个人也在竞争。
个人竞争的法则很简单,如果你的贡献——当然主要是指代码的贡献——得到了同侪认可,你就会获得声誉和权力。
2019年6月,ASF官方博客宣布全球新增 40 位 Apache Member,阿里的张乎兴有幸成为其中一位,此时,全球共有771位 ASF Member,中国仅13位(member有权利选举board、成为board候选人、推选其他member,提议将某项目纳入ASF孵化器)。他是怎么做到的呢,张乎兴记录了这个过程16,以下是节选。
2014年我加入阿里巴巴中间件团队,开始接手阿里巴巴集团应用容器的维护工作。当时中间件团队维护了 Tomcat 的一个私有分支,最大的目标就是要统一所有集团的应用容器为Tomcat。
Tomcat 自1999年发布第一版以来,一直是开源界和 Apache 基金会的明星项目,至今仍然在应用容器领域市场占有率保持第一,历经20年发展,依旧热度不减。Tomcat历经这么多年的发展,却从未出现过一位来自中国的committer。
我从修复 bug 开始。第一个patch是修复一个Websocket 测试用例失败的问题,修复该问题涉及到了对代码的一些重构。还记得当时提交之前我非常谨慎,和 leader一起反复讨论了很多次,终于形成了一个比较满意的方案。提交给 Tomcat 社区之后,很快,社区便有了响应,并合并了我提交的补丁。看到Tomcat的release note里面出现了自己的名字,真的非常开心。
尝到了贡献的甜头后,团队的目标也有所调整。内部版本的Tomcat和开源版本的结构要保持完全一致:使得合并开源Apache Tomcat变得非常容易;内部做的增强也更加方便合并到社区。
后续向社区的贡献,主要来源于三个方面:第一:阿里内使用 Tomcat,在大规模、高并发场景下遇到的问题修复。比较典型的是当时无线网关应用采用的是Tomcat NIO+AsyncServlet的架构,作为一个入口应用,曾经因为Tomcat 在高并发下的异常出现过一个比较大的故障,后来排查这个问题花了非常多的精力,最终彻底修复了这个问题。第二,Tomcat 大面积在阿里铺开时遇到的问题修复。例如,发现了一些不符合 Servlet 规范的行为等。第三,主动参与开源社区,针对一些一直存在的问题的修复。
2016年8月23日,在一个平常工作日的上午,我打开邮箱,看到一封来自Tomcat社区核心开发、Java EE规范专家组成员、时任Apache基金会董事会成员Mark Thomas的来信,邀请我成为Tomcat Committer。打开邮件的那一刻,感觉自己的心都在颤抖,激动之情有点不能自已。
2017年,阿里重启了 Dubbo 的开源维护工作,并决定把 Dubbo 捐献给 Apache 软件基金会。已经有过几年 Apache 社区参与经验的我,自然地承担起帮助Dubbo进入Apache 基金会孵化的工作,从联系导师到修改提案,终于,Dubbo通过了Apache孵化器的社区投票,正式开始孵化。
第一次的 release,是孵化过程中很重要的一个里程碑。在我看来,release的意义远大于代码层面的工作,还包括了准确的 License 和版权声明、符合规范的代码及依赖、准确一致的签名等。Dubbo 花了很多的时间去准备,也把整个过程完全的文档化,孵化过程中,由7位不同的 Release Manger 轮流负责,确保不同的人都可以完成发布。
在 Dubbo 即将毕业的前夕,突然有一天,我按惯例打开邮箱,突然发现躺了一封 Invitation to join The Apache Software Foundation Membership。我心中一阵惊喜,点开之后,发现是邀请我成为ASF Member的邮件,这让我非常的出乎意料。
在ASF基金会里,一名新的member,是现有其他member提名和选举出来的,张乎兴获取如此地位,依靠的是他的能力、贡献以及同侪对他的认可。
6、赢在声誉
***将自己的代码贡献出来,能得到什么?
除了项目发展、能力增长、回馈社会、自我实现之外,最大的好处莫过于声誉。
这也是很多***贡献代码的初衷,TDengine的作者陶建辉很直接地说出这一点:
“钱再多,也难让人在历史上留下痕迹,但一幅好的作品却可以传承,让后人好好的品味。愿我领头开发的TDengine成为传世之作,Leave a dent in the world!”
声誉会带来直接的好处:一旦某人在开源社区建立起自己的声誉,基本上他就不再会为职业生涯发愁,他们会非常抢手,尽管他们往往是分布在全球各地,但这不妨碍企业争着雇佣他们。
正如Autodesk 开放总监Guy Martin所言:“如果你打算雇佣一名维护者,或是想雇一名厉害的贡献者,请时刻牢记,这些人被很多公司盯着,而且他们是这个世界做着足够灵活的工作的人,这也就意味着,他们虽然从一家公司换到另外一家公司,但是却在同一个项目中工作,唯一改变的是签署薪水的公司名称。”7
声誉带来的更多是无形的好处:你说的话会有人听,你要做的事会有人支持,会有人更多的人愿意和你合作。
现在,开源贡献的主流力量已经转变为公司,各类大型企业尤其是互联网企业,开始以各种方式发布自己的开源项目,企业为什么要把自己项目开源出来?
道理是一样的,如果得法,企业不仅可以获得声誉,还会获得更多好处。
37signals是一家非常小的公司,员工很少,但在业内却非常出名。它的出名,很大程度上得益于员工大卫·海纳梅尔·韩森在工作的时候,用Ruby写了一个划时代的web快速开发框架——Ruby on Rails,其革命性的设计理念,大大的提升了WEB网站的开发效率。37signals选择了将此项目以开源的方式发布,在业内引发了轰动效应。在37signals出版的畅销书《Rework》里,有一段这样的文字:最好的大厨都乐于在公共频道上教授自己的厨艺,这不仅无损大厨的商业利益,反而大大增加了大厨的知名度,对大厨来说这是非常棒的举措。
具体会有些什么好处?
首先,项目会因开源而获得成长。
Google对其人工智能系统TensorFlow的开源决定就是基于这种考虑做出的,Google首席科学家杰夫·迪恩(Jeff Dean)指出,传统的软件研发实在是太慢了,通常是一个程序员花上几个月写完代码,然后上会讨论,再根据其他人的意见进行相应的修改。相比之下,如果采用开源的协作开发形式,Google开发人员能够实时与外界进行协作,Google之外的人也能参与TensorFlow的编写和完善,TensorFlow的开发进度就大大加快了。
涛思公司在将TDengine的核心部分开源之前,也经历了反复的讨论和思考,最终在深思熟虑之后,决定开源,其官网上写道:“涛思数据将尽最大努力打造开发者社区,维护这个开源的商业模式,相信不将最核心的代码开源,任何软件都将无法赢得市场。涛思数据希望通过开源,快速获得市场反馈,完善产品,完善生态,而且吸引更多的开发者加入到这个项目中。”,如果你去github上看一下,就会发现,开源仅仅两周内,TDengine就收到十多个修改建议(PR),其中不乏一些修复内存泄漏、防范段错误之类的高质量patch。
其次,开源产品可能会获得大量用户使用,占据份额优势,然后再通过其他方式赚钱。
2007 年,Google开源了花几亿美金买来的Android,希望直接和 Apple、Nokia、BlackBerry 展开竞争。在此之前,塞班系统曾一度占据了手机操作系统的榜首,而苹果的iOS系统也风头正劲。然而,在安卓出现之后,只用了很短时间就夺下了手机操作系统市场第一的位置。根据Gartner发布的数据,2018年安卓在智能手机系统中占有的份额高达85.9%,位居第二的iOS系统占据份额14%,其他各种系统的市场份额加在一起只占0.1%。Google并不对andriod收取任何费用,但对于系统搭载的Google搜索、Google地图等各类应用,却可以收费获利,这和互联网企业通过免费赢得用户然后通过会员收费有异曲同工之妙。
Kafka由LinkedIn公司于2011年开源,并在2012年底从ASF孵化器毕业,正式成为ASF的顶级项目。2014年,Kafka的三个主要开发人员从LinkedIn出来创业,开了一家叫作Confluent的公司。Confluent的产品基于Kafka,其中Conflunt open source是Kafka的增强版本,仍然开源免费,但企业版Confluent Enterprise则是收费的,主要是里面增加了一个非开源的Confluent Control Center,实现对整个产品的管理和控制,可以对Kafka里面各个生产者和消费者的性能进行监控。
由于开源,Kafka已经在很多企业里被作为关键组件部署,但社区版kafaka自身并不自带性能监控平台,虽然也有公司自己开发了这样的系统,但无疑Confluent开发的东西应该是最可靠的,毕竟没有人比Kafka的开发者更了解自己的产品。如今,Confluent公司的年预订量已超过1亿美元17,之所以可以大卖,其基础就在于Kafka已经得到了广泛使用。
这是自Redhat创立以来,许多开源创业公司(如Cloudera、Elastic等)采用的商业盈利模式:将“社区版”开源,然后售卖该产品的“企业版”( 企业版内含更多的功能,或者和社区版完全一样,仅仅是从GPL许可转为非GPL许可,如MiniGUI的做法18),售卖云服务版,售卖对产品的支持和服务。所以说,企业开源自己的项目,并非不能赚钱,只要能积累起大量用户,就可以通过更诱人的功能,吸引用户花钱购买更高级的产品,而且,开源创业公司还可以“原厂”的身份,为企业提供技术服务,为企业解决后顾之忧。
还会有什么好处呢,吸引人才。
将产品开源,如果能建立良好的声誉,会让开源开发者对公司产生兴趣,而公司则可以从开源贡献者中选取人才,这提供了一种互相发现对方的机会,招聘到这种人才是非常划算的,因为该程序员的能力早已在项目的贡献中得到检验,而且入职后无需磨合就能够直接上手工作。
现在再回头看,公司能从开源获得什么?至少有这么几点:获得声誉,获得合作,获得用户,获得客户,获得员工。当然,公司不会同时获得这么多,公司也未必想要这么多。
虽然有这么多好处,企业在开源项目前仍须三思,要综合权衡利弊再做决定。微软近年来以实际行动大力拥抱开源,也开源了不少项目,但显然还不会把最新版的Windows和Office开源。
7、社区赋能
Apache有一句格言叫”社区重于代码",它强调的是:一个健康的社区远比良好的代码重要。如果代码消失, 一个强大的社区可以重写它;但是, 如果一个社区不健康, 代码最终也会失败。
背后的逻辑是明显的,与代码相比,人是最重要的。开源软件的生命来自于人,一个软件还活着,体现为它还在被运行,还在被维护,如果没有人关注和维护,这个软件也就走到了尽头。
“众人拾柴火焰高”,社区越强大,项目繁荣的可能性就越大。近年来,公司作为一股强大的社区力量(根据25周年版的Linux Kernel开发报告,个人志愿者贡献的代码比例降低到了7.7%,大部分代码都是企业贡献的),不仅把自己的项目开源出来,还会在使用他人开源项目的同时,对上游(也即这个开源项目)社区作贡献。
有人会问,如果说公司将自己的项目开源会有利可图,那么,雇佣全职员工参与上游开发这件事,会有什么好处呢?为什么一定要给上游做贡献,fork代码过来直接自己搞难道不行吗?
这句话值得好好思考一下:“如果某个开源项目对你公司的产品起着非常致命的作用,而你的公司又只有一人在为上游做贡献,你就处于单点故障风险之中,你必须要有连续性计划,你需要有一打以上的人做这件事。”7
公司将开源代码下载然后自己搞,当然可以,但这是一种远离社区的做法,随着时间推移,想要从社区的下一个版本中引入修复bug或新的功能,付出的代价就会越大。所以,最简单的方式就是让自己的员工花时间甚至是全职的时间参与到开源项目中,花这个钱是值得的。前面所述的阿里对Tomcat做贡献的例子中,就很明白地说明了这个问题。
阿里、腾讯、百度、华为、中国移动、招商银行等国内企业近年来已经将开源作为战略行为,不断将自己的项目开源,并积极参与上游项目,通过其贡献,已分别被Apache 基金会、Linux 基金会、 OpenStack 社区、MariaDB 基金会等接受为白金、黄金或白银会员,这意味着中国公司在开源社区开始有更多的话语权和影响力。
最后,有必要略微介绍一下基金会,它为什么会存在,它主要起什么作用?
首先看看由纯粹程序员组成的社区,可能会有什么问题。
1、可能缺乏管理。一个健康的社区需要及时处理issue和PR,需要有健康的讨论,需要有正常的发布频率,这样才会聚拢人气,才会吸引更多的关注和贡献。而***几乎完全是由兴趣驱动的,他们有时候也会犯懒,项目有时会沉睡,一些取悦用户的功能会迟迟不被实现,项目会失去其所需的活跃度。
2、可能缺乏运营。想促进项目更好发展,有些非编码性质的工作是必要的,比如品牌建立、推广、运营、捐赠获取、法律诉讼、培训、认证等等,但对于醉心于技术的***,他们即便认识到重要性,即便有能力,可能也缺乏主动性去做这些,这些事情需要有专门的人士来做,也需要专门的经费。Linus曾说:“如果你是一名工程师,很有可能你只想处理自己感兴趣的技术问题,其他一切事情你都想移交给别人来处理。。。很庆幸自己不需要担心商业和管理的问题,只要能领到工资不担心养孩子上学的问题就很好”19。
3、可能缺乏治理。开源项目大到一定程度,在多个公司捐赠和参与贡献之后,企业之间、企业和社区之间的冲突如何处理和调和?这属于治理层面的问题,也是颇让人费脑筋的问题,***可不一定喜欢这个。
所以,基金会应运而生,在非盈利和良好愿望的前提下,搞定这些在***看来略显无趣的事。
Apache软件基金会(ASF)成立于1999年,是全球目前最大的开源软件基金会。20年来,它发展和孵化了350多个开源项目,像Apache HTTP server、Ant、Hadoop、Kafka、Maven、Struts、Tomcat、Zookeeper等,都是它的项目。ASF依美国非营利慈善组织条例 501(c)(3) 设立,其成立宗旨是:“为公众利益创造免费的软件”。基金会由董事会(Board) 来管理,董事会目前由九名成员组成,每年由所有ASF member投票选出。
Linux 基金会也是非营利组织,其宗旨为:“促进、保护和规范Linux,围绕开源项目创建可持续的开源生态系统,促进技术发展和商业采用”。像Linux、Hyperledger、Jenkins、Let’s Encrypt、Node.js、Kubernetes、Opendaylight、Xen这些都是Linux基金会旗下的项目,和ASF不同,通常是顶级企业会员有机会进入董事会或是各种技术决策委员会(TSC),其董事席位主要是由企业会员选出的。Linux基金会明确指出,基金会所获资金,主要用于基础设施和从事开源开发的人,包括Linus Torvalds。
后记
七大理念就说到这里了,如果要细究的话,其实还可以再整出几条的,比如什么“乐于共享”、“重在用户”、“共识驱动”,“高度透明”、“精英引领”、“协作增效”之类的,但是我觉得有这七条也就基本能说明问题了,而且所有这些理念都是相互关联的,关键是理解开源背后的动力结构和其所不可抵挡的优势。
总的来说,从需求上讲,人们需要源码实现高度自主和安全可控,从供应上讲,提供源码有利于赢取更多的关注、声誉、用户和市场;开源的高度开放和自由使人类智慧得到更好的共享和发展,降低了学习成本、复用成本、改进成本,打破了技术封锁;开源提供了更自由的竞争机会,使那些能力强的人和软件脱颖而出;开源,最终造福整个软件业和整个社会。
时至今日,80%以上的智能手机使用开源,90%的公有云负载使用开源,60%的嵌入式系统使用开源20,连微软都在windows 10中内嵌Linux,那么,有什么理由不相信,开源正在慢条斯理地吞噬整个世界?
转载自:
https://www.enmotech.com/web/detail/1/844/1.html
https://www.enmotech.com/web/detail/1/844/2.html
来源:51CTO
作者:xjsunjie
链接:https://blog.51cto.com/xjsunjie/2457187