语言
<< 返回文章列表

关于开源的7大理念 (下)

2019年8月14日
wei-sir
757


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,那么,有什么理由不相信,开源正在慢条斯理地吞噬整个世界?


参考资料


1.比Hadoop快至少10倍的物联网大数据平台,我把它开源了。见“taosdata”公众号文章

2.阮一峰:开源许可证基础知识扫盲(https://www.oschina.net/news/90054/opensource-license-introduction)

3.什么是自由软件(http://www.gnu.org/philosophy/free-sw.html)

4.自由与非自由软件的分类(http://www.gnu.org/philosophy/categories.en.html)

5.专家解读:开源软件项目是否会被限制出口? 见“开源社”公众号文章。

6.Apache 软件基金会对于出口管制( EAR )的正式回复与评论。见“开源社”公众号文章。

7.Building Leadership in an Open Source Community (https://www.linuxfoundation.org/resources/open-source-guides/building-leadership-in-an-open-source-community/)

8.大教堂与集市(The Cathedral and The Bazaar)

9.Participating in open source communities(https://todogroup.org/guides/participating)

10.开源从曲高和寡到妇孺皆知(http://mdsa.51cto.com/art/201706/541993.htm)

11.天才莱纳斯:Linux传奇

12.Linux at 25: Q&A With Linus Torvalds (https://spectrum.ieee.org/computing/software/linux-at-25-qa-with-linus-torvalds)

13.June 2019 Web Server Survey(https://news.netcraft.com/archives/2019/06/17/june-2019-web-server-survey.html)

14.Web Server Usage Distribution in the Top 10k Sites(https://trends.builtwith.com/web-server/traffic/Top-10k)

15.2018 中国开源年度报告:问卷篇(https://linux.cn/article-10135-1.html)

16.从开源小白到 Apache Member,我的成长之路(https://my.oschina.net/u/1464083/blog/3057646)

17.开源独角兽Confluent D轮融资1.25亿美元(https://tech.qq.com/a/20190124/009224.htm)

18.开源软件及国内发展现状(https://www.fmsoft.cn/zhcn/about/blog/185/)

19.Linux 之旅既有趣又幸运,我不敢奢望精通内核的全部(https://www.infoq.cn/article/2017/07/Linus-Torvalds-no-Linux)

20Jim Zemlin:中国是开源最重要的市场(https://blog.csdn.net/sunhf_csdn/article/details/80899921)


出处:微月人话(ID:man-mind)。