从1995年至今,从美国到中国,从自由软件到开源软件,小米首席架构师崔宝秋一直在参与开源软件的开发等工作,亲历中美两国开源的变迁与发展。如今,开源是互联网的大势所趋,个人与企业都纷纷拥抱开源。
回顾过去,开源这些年,有哪些值得铭记的瞬间、有哪些影响深远的事件、有哪些极具代表的人物?放眼未来,开源到底该怎么玩,怎样的思路与打法是值得国内互联网公司借鉴的?在3月27日举行的技术社群大会上,崔宝秋与大家分享了这些年的一点感触。本文根据崔宝秋在大会上的演讲整理而成,关注『聊聊架构』微信号(搜索archtime),回复关键字『开源』,获取演讲PPT。
大家好,我是小米首席架构师、小米云平台负责人崔宝秋,今天我分享的主题是《我看开源这些年》。本次分享中,我会介绍下过去二十多年我对开源的一些看法和理解,重点是在国内我们应该怎么玩开源。
首先,我先简单介绍下我和开源的缘分,我是什么时候、怎么和开源结缘的。我是1995年出国的,那会儿国内还停留在DOS和Windows编程。1995年去美国读书,在那里我可以说是大开眼界。我看到了GNU、Linux、FreeBSD,还有Emacs,被GNU和Linux庞大的功能、后面所有的软件、能力、水平所震撼,当时真有惊艳的感觉。我所在学校的几个教授也在开源上对我有很大的启发作用。之后我的四年博士研究项目,五年博士中的四年,都在做XSB。XSB简单来讲就是增强版的Prolog语言,当时我们基于GPL把它开源,到后来很多学术界和工业界机构也在用这个系统。从1995年开始到2010年,这中间我参与了很多Emacs社区讨论,也直接贡献了一些代码。在LinkedIn我们也开源了一个分布式实时搜索系统SenseiDB,后来小米也把它用到了搜索技术里。
2012年回到中国加入小米,我就开始推进小米的开源战略,比如在有限的人力的情况下,如何站在开源巨人肩膀上快速推出一些云存储、云计算和大数据处理能力。
在这个过程中大家可以看到,我是从早期的一个自由软件的信仰者,慢慢地转化到了一个开源的倡导者,中间也经历过学校、公司,从个人的爱好到公司的推动,从项目贡献者到项目管理者。
说到开源,讲开源过去的这些年,我觉得应该讲一下重要的开源人物。在我看来,在开源史上、在开源界这三个人是至关重要的:第一个是Richard Stallman,他创建了GNU,创建了自由软件基金会,为后来的Linux萌芽等等奠定了扎实的基础。第二个,Linus Torvalds,Linux的创造者,这个不用多讲,大家都很了解了。最后一个是Eric Raymond,他创造了Open Source这个词,并发起了开源运动。我觉得如果没有Eric,只凭着自由软件,开源做不到今天。这三个人在开源史上未来都很难有人取代的。
下面是开源历史上一些重要的里程碑事件和重要基金会,以及重要的开源软件时间表。
讲开源,就离不开源代码,离不开版本控制系统。三十多年来,版本控制从早期的RCS,到CVS、SVN,一步步发展到了今天最流行的Git。一个好的版本控制对提升团队的开发效率至关重要。
对于开源来说,代码管理平台也非常重要。我记得在我读博士的时候,我们的系统刚开始都是在系里自己维护的,整体来看,并不安全,版本管理也不方便,不利于与外界的合作。开源软件,势必要有很多人参与,所以最重要的代码一定要放在易于合作、安全可靠的地方,所以后来我们就决定把XSB放到SourceForge上面。SourceForge是当时最流行的代码管理平台,在GitHub出现之前,它管理了很多开源软件的源代码,项目数基本上是随着时间线性增长的。相对来讲,2008年有了GitHub出现后,Git所管理的开源项目数量就不是线性增长,早期可能有点线性,但是后来的曲线非常陡峭,有点指数级的味道。
自由软件我觉得过于理想主义,过于强调人的自由。开源软件更加实用一些,较少涉及政治和道德,强调“使⽤和提供开源软件对你和你的⽣意有好处” 。确实,早期GPL推动了自由软件的萌芽或者早期发展,但是后期开源也一定程度上限制了自由软件的发展。所以我觉得开源软件属于工业界,我这两年参加了国内一些开源社区活动,大家对开源的热情都很高。虽然早期我对Eric有些有负面的认识,但是他对开源的贡献是不可替代的。
开源有三种力量,这是我总结的。第一种力量是个人爱好者。这些人是狂热的技术爱好者。我很早以前就有一个目标,就是等我财务自由或者退休以后,就去写自由软件,享受那个每天commit代码,为大家创造价值的成就感。这第一类力量就代表了一大帮技术爱好者。其中我合作过的一个作者,他是一位天文学的教授,叫Carsten Dominik,是一个非常好的文本管理器Emacs Org Mode的作者,可以帮你管理时间、记事、写作等。他编写Org Mode的工作几乎都是在上下班两个小时的地铁上或者轻轨上完成的。刚开始我看他的有些代码写的不太优雅,算法性能不够好,让我有些吃惊,因为我一直以为他是一个计算机编程高手,后来我发现他是学天文学的,也就理解了。虽然他的一些算法不是特别美妙,但是他对Org Mode这个项目的推进还是有非常大的贡献的。
第二种力量我叫无开源商业模式组织,这里包括公司和学校,这些组织是以互联网服务或者以某种产品来盈利的,它不是直接通过开源的软件或者搭建于开源软件之上的解决方案来赚钱的。
第三种力量是有开源商业模式组织,包括IBM,也有中国的华为,它们有一种商业模式在后面,利用网络硬件,设备,开源,有一整套的解决方案,对大的企业,通过整套的服务来盈利。
这三种开源的力量,对开源看法不同,贡献不同,投入也不同。
中国的Linux在过去的二十年发展的非常迅猛,但在座的可能很多人不知道这件事情:这是我在1999年10月份的一天早上在LWN网站上看到的Eric写的一篇文章,我当时看了觉得不对。他就是表达了对Linux进入中国的反对或者不相信的态度。
他说Linux被中国政府采购是不可能的,不应该,也不被欢迎。这表达了他的一些政治偏见。我后来跟Eric和RMS也进行了电子邮件交流。那次交流让我认识到RMS确实把自由软件当成了一个政治的东西来看待的,它不是资本主义或社会主义那方面的政治,而是另一个政治观点,也就是关于自由的。
国内开源我认为有这么几个阶段:第一,我认为1995年之前是与世隔绝的,这是加了引号的,我们确实落后了,因为国外已经玩了很久了,而国内还没有互联网。后来十年是初级阶段,2005-2010年初步成熟了,现在有了Git,开始了快速发展。
开源的玩法我简单介绍下,重点可以看演讲稿,个人的就是热爱,就像刚才讲的天文学家一样,个人玩开源的也有盈利的,成为暴发户的都有可能的,因为你可以接受赞助等等的。像大公司,有商业模式的公司的开源是另外一种玩儿法,我没有直接参与,就不讲了。我讲的是中间这个无开源商业模式的公司或组织的一些玩法,以小米为代表。大家可以看一下小米大数据做了都用了哪些开源软件,这是一个简单的全貌。为什么拥抱开源?我们首先要站在巨人肩膀上,快速推出产品,快速占领市场,快速为公司创造价值。
所以对很多创业公司,甚至对很多大公司而言,不拥抱开源就一下子输在了起跑线上。当然吸引人才,吸引贡献,提升内部软件质量,我认为也是开源非常重要的几个好处,所以拥抱开源已经是大家公认的。
在小米我一直推行这几个原则:一,快。快速选型,快速定位,快速掌握,快速推出产品。二,绝不重造轮子。宁愿学习掌握,化为己有而不要自己重写,这个投入远远大与前者。三,不用则已,要用则精。四,永远抱着开放与共享的态度。如果讲自由、讲政治上的一些东西、讲道德层面,应该就是一块。五,与其他公司所不同的,小米在重要开源项目上会尽力推出自己的Committer。
这里,尽力推出自己的committer的目的就是想解决国内很多公司所犯的一个很粗浅的错误,造成这个错误的最根本的原因就是它们拿了开源社区中的一个版本,创建了自己的分支后就把这个分支和社区主干的联系给割断了,然后自己用起来很爽,围绕自己的业务进行改进,改动后又不回报到社区,不管是自己不愿回报也好,还是自己的改动不被社区接受也好,这个本地版本就被这个公司维护得越来越重,和社区主干分得越来越远,差别越来越大,最终这个版本实际上就没用了,成了无源之水,无本之木。开源社区是开源项目后面一个庞大的力量,相对而言甚至BAT的力量我认为都是小的,比不过社区后面力量的推动。如此下去公司最终会被本地分支的维护成本所拖垮,达不到持久享受开源的好处。
所以,开源5大原则的最后一点很重要,在座的各位如果在公司想推开源的话,这点一定要注意。
怎么有效回报社区?参与交流,这个主要是针对国内开源爱好者或者参与者、贡献者。第一,要勇于参与;第二,清楚地描述想法和算法;第三,还有就是自信,坚定自己的观点,不要被社区中某些貌似大牛的人所吓到,没必要的;第四,一定要负责任,不要打一枪换一个地方,就是写了代码一定要维护,要做QA,要做测试,要做自己的用户,要做客服,关于你的代码有人提问要及时回答。小米为什么这么快让社区接受了我们,就是我给他们展示了,小米为什么会在某些领域大力投入等等的,所以这个时候社区愿意跟你合作。
我想总结一点结束今天的分享,一句话,我认为开源是软件的未来。
感谢郭蕾对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们。