01 开源的本质是什么?
刘天栋: 近期举办的中国开源年会,大会主题叫“开源向善”, 开源代表向善的力量 。在座很多开发者可能会疑问:开源和向善有什么关系呢?大家常常说贡献开源成就自身,这是开源社的合作伙伴所共享的理念,因为它能透过贡献帮助到自己,这对所有的程序员来说也是关键。
曾与很多业界朋友,包括企业家和开发者沟通开源本质,有四个点最关键:向善心是核心。
一、开源是开放的,要有开放的心态来做这件事,公开透明是良好协作的基石。
二、是分享,乐于分享也是一切善举的开端,而不是闭门造车。举个例子,最近疫苗的研发中、许多机构加入了全球疫苗分配的组织,大家把好的疫苗第一时间分享到了疫情最严重的国家和地区,这是人类最伟大的情怀,这种精神在开源里面是最重要的。
三、是平等,大家都有平等的追求,这是开源社区健康的基础。
四、是协作,透过开放式的协作能逐步形成凝聚共识,是开源社区繁荣的秘诀。
一个好的开源的人要加入开源的行列里,首先要了解 开源基本的四条本质,就是刚刚讲的:开放、分享、平等、协作 。像阿帕奇基金会的治理是拥有原则的,他们的原则是阿帕奇之道,一个好的开源社区也要有完善的原则,开源社的原则是共识、共享、平等共治、协作共治。
谭中意: 我从更简单的方面介绍一下,平常用的开源软件就是源码开放再加上国际认可的开源的License,这就是开源软件。而开源的本质是:它不是商业模式也不是软件,它就是一个多人协作的模式,只不过多人协作是在源码开放基础之上的。
开源本质就是源码开放基础设施上的多人协作模式,为了让这种协作能够长期健康的进行,产生了各种各样的附加层面。
比如能够让代码协同长期进行下去就会有知识产权的层面,就产生了各种许可证;为了让代码上下游可以工作得更好,就产生了开源社区;如何支持开源社区又产生各种各样基金会,基金会后面有各种各样商业公司支持,所以有各种各样商业模式。
但是这些都是围绕开源所衍生出来的一系列的方面,回到本质上说,它还是比较简单,就是大家坐在一起在开放的源码上一起来写代码。
王永和: 两位在从文化哲学到代码再到开源软件项目关联的社区、法律等等都展开了精彩的讲述,如果纯粹从英文翻译的角度来看,很多人觉得开放源代码的项目就是开源软件。我早期接触的很多人或公司,他们都会认为开放了源代码本身就是开源软件,其实这样理解还是不够充分。
其实开源不仅仅是代码开源,项目的背后还有社区、委员会、以及相关的法律 。我们在使用一款开源软件之前,如果对该项目的整个体系和组成部分能够有更深刻和全面的了解,会避免很多的坑,比如避免不小心踩到法律的陷井或是引起一些纠纷,毕竟这可能会涉及到公司的数字资产,历史上也发生过多次这样的教训。
所以,开发者在使用软件前首先要识别开源软件,那么要基于什么样的原则选择好的开源软件呢?或者说如何才称得上是一个好的开源软件?这个话题我们请中意老师来分享一下。
谭中意: 首先开源软件是一定要用的,它像空气和水一样,只要是做开发就不可能不用开源软件。按照Linux基金会的统计,现在软件中只有10%不到的代码是工程师自己写的,90%以上的代码是各种开源软件组合在一起。
但开源软件需要谨慎使用,开源软件用起来后有各种各样的风险,有法律的风险、有安全漏洞、还有bug,这些使用不当都可能导致业务受损,它跟商业软件一样都是软件供应链的一部分,软件供应链需要有足够的质量保证。
用的时候也要考虑用途,如果是商业用途,尽量选择一个高质量的、有长期生命力的、多个公司在后面支持的开源软件,这样用起来更放心,这就是我的一点小看法。
02 如何选择开源软件?
王永和: 最近我在跟身边朋友聊,其中有一个观点比较有意思:就是选择开源软件,最好选有组织的(及捐献给了基金会或项目背后有管理委员会之类)。
因为组织都会希望项目的社区能更活跃,项目更健康的发展,会确保能持续维护和完善开源软件,解决了开发者使用该开源软件的后顾之忧,毕竟大部分的开源软件都难以避免不出现Bug或有新功能的需求。
我想大部分开发者都希望了解开源社区和基金会在这方面对开源软件的帮助是什么?为什么说一个有基金托管、社区活跃度高的开源软件项目会更靠谱呢?
刘天栋: 开源界的大拿 Henrik Ingo 曾在 2010 年做了一个调查,全世界最大以及最好的项目是由世界前九大基金会来支持的,它的代码开发的质量和平均程序员贡献的代码数,和单一公司或社区支撑的项目相比较,两者的生产力或者是代码贡献数目有五到十倍的差距。(详情可参考: https://www. openlife.cc/blogs/2010/ november/how-grow-your-open-source-project-10x-and-revenues-5x )
所以 大家如果选择好的开源项目,可以看看它的后面是否有健康的社区在支持,它的许可证是不是很多健康社区正在使用等 。
国外和国内不同,他们所谓的社区是有很多公司投入进来,甚至这些公司是彼此竞争关系。一个大的、好的社区,离不开这些公司的支持。国外公司支持公司内程序员做投入开源的,占85%以上,这些公司的程序员都会加入到社区中。
如果一个社区里面百分之八九十是一家公司或者是少数一两个公司的人在其中,即使这个社区看起来很壮大,我也会非常小心。因为单个的公司有可能会撤出或者是改变,但是如果一个社区里面有很多公司、社区、个人开发者投入进来,这样的社区会很多元化,这种状态就是很健康的。
王永和: 开源基金会对好的项目会进行孵化,并且有严格的标准流程,做出来的也是非常靠谱的软件, 开源软件项目被基金会托管后会对其生态负责,并且能在License的选择和法律方面提供帮助 。
这是开发者愿意把项目捐赠给基金会最大的原因,这方面能解决很多项目的发展问题。从而避免了开源软件项目是由一个公司或者个人控制所带来的后续一系列风险和问题。
我的问题是:虽然各大基金会旗下的托管和孵化的项目不少,但与整个开源软件世界里面的项目比起来,基金会托管孵化的是冰山一角,这个冰山下面还有无数的开源软件项目没有露出水面,这些项目中很多是由个人开发者开源出来的软件,没有捐赠给基金会。
如果我们的观点是“基金会托管的、社区比较活跃的、多家公司共同参与的开源软件是比较好的开源软件”的话,那么会不会导致开发者在选择这些开源软件的时候都谨慎了起来,这样会不会造成个人开发者开源的动力不足?这是开放性的问题,我也想听听两位会如何看待这个问题,有没有解决之道?
谭中意: 首先看某个工程师选择开源软件的时候,他的目的是什么。 如果是要给客户提供服务或者是做线上服务,是要做长期维护的,并且用其产生持续价值,这是很严肃的事情,这种情况下需要优先选择质量更高、有更多活跃社区支持的项目 。
但这只是一种优先情况,并不排斥个人贡献的优秀项目,比如一些出名的项目,像国内工程师主创的Vue,虽然是个人开源项目,却不妨碍大家选择他。
个人开发者也不一定要重复造轮子,项目不爽就重新再造一个,其实个人参与开源时候完全可以选择一个市面上已经有的开源项目,你加入进来不需要从头来造一个新的轮子出来,这世界上轮子已经太多了。
刘天栋: 我讲一个实际数字,在开源社里面有四五千万的开发者、上千万的项目中,长尾中 92% 以上是少数一两个人在玩,也不更新、关注也比较少。个人开发者变成独角兽,或者是变成像 Vue.js 这样的项目被多人使用的情况是少数中的少数。
国内的开源个人项目中,SkyWalking 是我知道的目前唯一源自中国贡献到基金会的个人项目,其他的大部分是国内大公司、中型或者是小型公司各自的开源项目。个人比较适合对某一些组织里面特定的场景或特定需求做开发,做一个大而全的项目其实完全没有必要。
国外进入基金会的门槛比较高,国内很多人想进基金会,其实也有一定门槛,现在即使是草根基金会 (如 Apache) 的门槛也比较高。 对于个人开发者来说,自己的能力和时间有限,不建议全职拓展个人项目,建议从具体项目做起,去进行优化或者是做创新而不只是重复造轮子 。开放原子基金会应运而生,是个人项目很好的起点。
王永和: 感谢两位的解答,自从有了分布式代码托管和协作平台(比如 github 和 gitee),可以让全球各地的人一起参与开源项目。
以前一直争论的话题是:中国人在开源软件方面参与度很低,只会索取不会贡献,这个说法我是不太赞同的,中国其实有不少优秀的开源软件项目,同时一直有很多开发者为顶级的开源项目贡献了代码。最近深有感触的是 开源技术和开源软件在中国越来越多被提及,大家对它的认同也远比五年前多很多,这是一个很好的趋势 。
我们之前确实没有太多机会可以在舞台上表演。如今国内的开源基金会成立了,阿帕奇基金会,Linux 基金会也接受很多国内优秀开源项目的捐赠,这种大环境已经起来了。
03 如何看待开源的发展?
刘天栋: 我们在2014年成立开源社,2015年举办了第一次阿帕奇中国路演,每五年一次,2020年10月24日就是开源社办的第二次阿帕奇中国路演,在这五年内发生了什么呢?
2015年办 Apache 中国路演的时候,看到了很多本土的开源项目,也认识了很多人,当时 Apache 董事会的主席和高级官员也引入了中国,那天的会议很多人和他们面对面沟通。2015年的时候只要三个源自中国的项目,而到了 2020 年已经有 12 个从 ASF 毕业的源自中国的项目,另外还有 8 个项目正在孵化过程中。
如何才能够加入孵化器成为顶级项目?中间非常重要的理念就是: ASF 相信社区大于代码 。中国技术不弱,各种技术大牛非常多,基数也比国外大很多,但为什么没有成功的基金会社区呢?
关键还是在治理理念层面,就是社区大于代码的理念不够深入人心,我们之所以五年内从三个项目变成现在的二十个,就是经过 Apache 之道的洗礼,建立了社区大于代码理念,所以才能够成长这么快。
所以国内的程序员要打破思维,不要只相信技术,而是透过社区把自己的项目越做越好。自己是英雄的单个项目不会成功,只有帮助别人成为英雄,你的项目才会变成英雄,这就是社区大于代码的理解。
王永和: 说得特别好,尤其是中国其实不缺顶级项目,缺的是好的开源治理理念和开源组织,以及社区环境。谭中意老师作为“开放原子开源基金会” TOC 副主席是不是有任重道远的感觉?从开放原子开源基金会的角度,如何为开发者、开源生态服务出一份力?
谭中意: 10月24号,中国开源年会有一个话题叫:“终于来了,中国第一个开源基金会”。现在中国的开源风生水起,应该结合历史的大潮来看。随着中国国力的提升,尤其是IT行业开始接近国际一流水平,甚至是在同一个水平线上竞争,国人的信心开始大增。
也感谢阿帕奇基金会给我们提供非常好的指引,非常好的开源协同的理念教育,将社区大于代码的思想带到国内。 现在随着经济社会科学的发展,加上政策法规的好转,国内开源的发展速度只会越来越快 ,而且以中国人的聪明才智和辛勤努力就没有处理不好的事情。
现在 Apache 软件基金会最大的用户社区已经是中国了,越来越多的人成为其 PMC、甚至成为它的 VP,我觉得小米的张铎就是很好的例子。
王永和: 我们开源中国(OSCHINA) 服务过很多技术公司,在最近的三年里,国内很多公司开始陆续开源一些项目出来,这几年给我最大的感受就是:大家想明白了为什么要开源,以前有很多公司是为了开源而开源,这是最大的转变。
另外以前我们做开源,特别是对于大公司来说会比较忌讳开发者吐槽带有商业意图,而从我个人的看法, 恰恰是因为有比较好的商业模式把这个项目的生态拉动起来后,才能成为开源软件更加繁华的动力 。
我们看到一些好的开源软件项目,会通过该项目把整个上下游生态带起来,所有围绕该项目的主体都可以获得商业价值和收益,这是开源软件往前走很好的思路,也是特别好的转变。
很多开源软件成就了技术创业公司,还做得风生水起,比如 Kyligence ,PingCap 等,他们的开源项目都加入了开源基金会的组织。未来我们会看到的是,有更多的基础软件项目开源出来,比如数据库、存储、计算等等一系列基础的、一般个人用户比较难去玩的,需要大公司投入的领域软件。我比较乐观,相信会有更美好的未来。
04 开发者如何参与开源?
王永和: 开发者可以通过什么样的方式参与到开源项目?开发者参与开源项目得到收益或者是回报都有哪些?我们先从贡献的角度出发,定义如何才算是贡献开源?是不是只有贡献代码才是贡献?
刘天栋: 要怎么样做好开源,参与贡献,成就自身的重点:一是该做什么、二是不该做什么。
该做什么,做开源有一个经典的名词叫 JFDI,做就对了!那么做什么呢?不一定只是处理问题,也可以是看到问题并提出来,帮助解答问题等。
参与开源能得到了什么、如何成就自身?如果只是贡献而没有任何回报,对国内的开发者来说可能会觉得不值得,但事实上贡献开源可以得到更多。
举个简单的例子,国外几个晚辈找工作的时候,他们大学的时候就开始参与开源了,将来提出简历的时候就能看到真正的境界,面试官看到提交的 GitHub 数据,人家会相信你真的有经验,而不是大学一毕业什么都不懂的状态,只凭一张履历表而已。硅谷被一批善于造假履历的人都骗怕了,而 你到底在开源项目中做了什么贡献,包括写文档还是提交代码,或是做了什么社区工作,这些都是你最好的简历 。
国内有一个特别的现象:开源是大人物做的事,怎么轮得到我呢,我只是一名小小的程序员。这个观念是错的,我们要从自己开始做起,现在就可以找个项目从最基础工作做起。
王永和:开放原子开源基金的口号是:“一切为了开发者,一切为了全世界”。开源中国(OSCHINA) 也有着同样的愿景,我们的愿景是:“解放天下序员,为开发者服务” 。谭中意老师在开源贡献这方面有什么补充的吗?
谭中意: 首先给社区做贡献不一定只局限于代码,很多人认为给社区做贡献要读懂代码,贡献一个代码,这很难得,但没有必要非得这样。
老实说,你看文档挑出错误,或者把英文文档翻译成中文提交上去,这都是对项目非常大的贡献。甚至看到好的项目,向别人推荐也是对开源项目很大的贡献。
Apache 软件基金会有一句话是这样说的:只要是你对社区有贡献,包括代码、文档、宣传这些都是开源社区认可的东西,并不局限于程序员。即使我是一个美工,觉得这个 LOGO 太难看了换个 LOGO,文档配图丑换个图这都是贡献,贡献不要局限于只是代码。
再现实一点,如果这是很牛的项目,能够成为其一员,让自己的能力得到增长,有时候会帮助我们获得更多的工作机会。还有一点理由,我参与一个项目用来解决自己遇到的问题,然后再贡献回来,同时又解决了其他人的问题,这就是一个很朴实的“人人为我、我为人人”的故事了。
在软件行业里一直强调要促进复用、减少浪费、提高效率。我们特别痛恨重复浪费,开源就是最大最好的被验证过的重用的方式,这是符合工程师的天性的,我也希望我给这个社会做了贡献,能够造福更多人,这有点自我价值实现的味道了。
开源社区里做贡献很容易找到跟你臭味相投的朋友,然后发展成为终生的朋友。如果一点也不做,他们就跟你谈不到一起,因为具有奉献精神的人可以聚集在一起,可以终生在一起,激励你这个路上一起走下去,这是很好的交友方式。
刘天栋: 开源年会和 Apache 路演,连续三四年都有女性半边天会场,所以也千万不要忽略优秀女性参与开源的力量,可以多留意看看她们是如何做的。
曾经国内一位开源项目的大神做过调查:现在国内成功的开源项目,不管到哪个基金会,大部分都是做自己的项目。而很多人不想再重复造轮子,于是会对其进行优化,将这些项目优化得非常好。但是他认为我们缺乏的是创新。
我们会发现女性的创新创意很厉害,当然男性也不错,而在女性半边天会场,一是鼓励更多的女性程序员、女性参与者能够加入开源;二是希望优秀的人才要多参与创新而不是重新造轮子。
王永和: 我从另一个角度来解读,社区很多人强调贡献开源,好像就是在做一件高大上的事情,会自然而然从道德的角度去强调奉献的精神,这其实是很难持续的。
我们开源一个软件或者参与到一个软件项目,我的个人观点,要先想到的是“获得”。首先我们在使用开源软件的时候,我们是得益者,这个开源软件项目帮我们解决了问题。
其次我们在读它的代码的时候可以学习和了解这个开源软件的架构、以及一些很好的实现方式,然后指正其bug等等,在这个过程中我们学会了里面的逻辑。
另外,正如二位讲的贡献了代码成为其中一员,在社区里更容易受到他人的肯定,继而可以得到更多社会上的资源或者影响力。
王永和: 时间过得很快,有很多话题没来得及交流,希望以后有机会再和各位交流,衷心的祝福阿帕奇基金会能够在中国有更好的发展,帮助中国更多的项目。也祝贺开放原子开源基金会的成立,希望在开源原子开源基金会的治理下,能够有更多的顶级项目不断的涌现,为中国的开源环境打造做出很好的贡献。最后祝云+社区越办越好。
05 Q&A
Q:老师们如何评价现在 Github上高 star 大多是国内的面经和demo?
王永和: 判断一个东西的好坏,要看它的用户,毕竟用户多、它才有更多的应用,但很多靠刷的高也不一定是好东西。今天聊的第一个环节里面就说,各种类型的项目在参考的时候,可以从比较下载率、比较资源这里选择,而许多的用户的评价在无形中能帮助需要这个软件的人进行排雷与选择。如果说高 star 就是好的开源软件就要另说了,因为好的开源项目不光要考虑代码,它还有贡献值、成份、社区是否活跃、License是否适合业务等,需要从多方位进行考虑。
Q:想问一下,我们是创业型公司,怎么能将自己的项目加入到开源?
刘天栋: 创业型公司和其他的公司一样,现在中国的开源分两端,一是大公司带头,二是创业公司带头,中间部分(中小型公司)缺失了。个人觉得想把自己的项目加入到开源中,首先要雇一些开源高手,判断开源水平,优先看它能有多大的开源贡献,然后看看能帮程序员解决哪些棘手问题。同时也请多关注开源社、开源中国很多介绍开源项目如何从零开始,如何参与开源的文章,也欢迎你订阅开源社和开源中国的公众号,里面有很多深入浅出的回答。
另外创业公司如何加入开源?做就是了。不要等到投资人问的时候再来做,那太晚了。以前会觉得开源是头脑不清醒,为什么要把解决方案免费的供应给人家?现在投资人看的是你是否以开源开发模式和走向市场的方式,是不是走上新的道路,用开源的方式来做等。所以如果是创业公司,那么赶快开始开源吧,最简单的启动方式,就是找一个开源高手加入其中,提供较高的薪水哦!
Q:开源社区如何维持用户群的稳定不流失呢?
刘天栋: 明后天中国开源年会和 Apache 中国路演,特别请到了全球运营开源社社区的大师 Jono Bacon,他写了一本书《社区运营的艺术》,有一句话说:每一个加入社区的实际有贡献的成员,每加入一位,社区就壮大一份,运营一个社区很简单,就是一个一个的争取成员加入社区中来,而不是一片片的透过网络营销。社区是一点一滴打造出来的,没有捷径可走。
Q:平时的工作基本是写业务代码,如何在找到值得开源的点?
谭中意: 写业务代码的同学不一定要把业务代码开源,这是不现实的。开源是写业务代码的时候肯定会用到各种各样的开源组件,用到开源组件时,有时间可以看一看源码,看看它的原理、架构和流程。一是熟悉它的流程、二是学习高手的代码功力,如果觉得有想法就贡献出来了,不用为了写开源代码而写开源代码,那样做起来会事倍功半。
Q:如何选取项目贡献代码,感觉自己写的代码水平不够,怎么办?
谭中意: 开源社区没有人会嘲笑你的代码水平低,如果对某一个开源项目感兴趣,可以先看看它的代码,如果觉得它有一些问题,你可以尝试去解决,然后大胆的提交出来就好了,不要怕被嘲笑,先去贡献了,社区会教你怎么怎么把它写得更好。
我在 2001 年给 mozilla 社区贡献第一个 patch 的时候,就出现了各种各样的问题。提交上去后第一个人说:你的代码格式不太好,于是我就改,第二个人说这个代码没有符合 mozilla 项目的组件调用模式,于是我再改,之后又有人说这个不应该在这个对象里面,应该在另外一个地方,就这样提交了三次以后,发觉自己对项目的理解加深了,自己的工程能力和工程意识也提升了。所以说不要怕,大胆去尝试,开源社区里面没人嘲笑你。
Q:什么代码才是合格开源代码?
谭中意: 只要有人用,就说明项目是有价值的,不要想一开始就写得很漂亮很完美,通过别人提的意见慢慢迭代就可以了。写代码最怕的就是:不能解决问题。要让别人也能做贡献,持续发展不断地把代码写得更好,所谓的好是可读性增强、更容易维护、更容易拓展,但没有什么代码一开始就特别特别好,做不到也没有必要。
Q:参与开源的动力如何持续下去?
谭中意: 想持续做一件事其实比较简单,就是从中得到好处、有成就感、有归属感。开源社区里面你所贡献的可以得到回馈,那么就有动力做下去,在一个社区里面能够找到归属感、找到朋友,可以找到价值就可以不断持续。
Q:如何让自己的代码质量能参与贡献?
刘天栋: 朱凯写了一本名为《ClickHouse 原理解析与实践应用》的书,源自于他当时在网上和开源社区里面问了很多“愚蠢”的问题,但很多人回答了,慢慢的别人提问他也会帮忙回答,于是总结这些问题写了这样的一本书,而他现在已经是大神级人物了。今年的中国开源年会里他也会有相关的演讲。
还有一个是李辉,他是 Flask 的专家,他讲到参与开源有三个忠告,首先不要交女朋友、第二不要工作、第三是提前宣布你想做的事情。不交女朋友是骗人的(他已经有女朋友了),其次不找工作,他是真的不找工作就为了参与开源,最后全职投入进去了,参与过程中也问了很多愚蠢的问题,最后把问题整理之后,解答了开发者的很多问题,想着这些问题如此有趣,写一本书吧,他立刻宣布要写一本,后来真写出来了。
所以不要怀疑自己写代码的质量,想到就开始做,先问傻的问题,然后参与文档和代码的贡献,慢慢就会变化为大神了。
Q:一个人如何开源?
王永和: 我总结起来,思路应该是:第一,为什么要开源?你对这件事感兴趣吗?想清楚开源是想获得什么,目的要搞清楚,不要到最后很辛苦又没有回报导致落差很大。
目标想清楚了以后再思考如何参与开源,不仅仅是参与别的项目中,也可以把自己的软件开源出来。至于怎么参与,可以参与早期的项目、参与日常使用中的开源项目,从代码开始研究,提 bug、修复代码等等。以我们的能力做一个笼子,让更多的优秀项目参与其中,项目成长起来你也跟着成长,一个人怎么开源,想清楚怎么开源、想好开源的方式、然后做就可以了。
Q:国内有哪些比较好的开源社区?
王永和: 开源社、开源中国都可以关注,很多开发者社区都不错,我们也投了一些,开源中国是正儿八经做了很多开源方面的工作。Gitee 现在应该是全球第二大的代码托管平台,首先它的网络要快一些;第二,因为它一开始就是设计给国内用户使用的,所以在语言、功能上针对很多中国开发者做了专门的定制。我们的原则是:具体的代码协作是自带了规范,不要破坏这样的规范,包括其指令和合作习惯都保持一致,大家再去使用就可以了。