CSDN首页>

【OSTC 2015现场】朱照远:阿里开源经验分享

发表于2015-04-07 15:49| 次阅读| 来源CSDN| 0 条评论| 作者CSDN CODE

摘要:阿里开源小组成员朱照远(叔度)在大会上做了《阿里开源经验分享》的分论坛演讲。

2015年3月28日,由全球最大的中文IT社区 CSDN 主办的“开源技术大会·2015” (Open Source Technology Conference 2015,简称OSTC 2015)在北京丽亭华苑酒店召开。本次大会以“社区胜于代码”(Community Over Code)为主题,邀请到了来自全国各地30多位开源业界资深人士发表主题演讲,数十个开源社区现场互动,到场的开源软件开发者、贡献者和开源爱好者总计近1000人。


主持人:各位大家好,欢迎来到今天下午我们这边的专场。今天下午我们几场专场都是在讲开源的一些比如说讲师在项目开源的经验,或者是社区里的运营,或者是代码管理的一些分享,所以今天我们第一场节请到阿里很有名的朱照远,他是Tengine项目的发起人,他今天为我们带来阿里的分享,阿里是国内大公司,大家学习之外,我们时间允许会开放三到五分钟给大家提问,如果不允许,我待会儿会显示一个微信群,让大家可以直接加入这个微信群来问问题,大家可以在群中可以和其他的讲师来交流。首先我们掌声欢迎朱照远来为我们带来阿里开源经验分享。

朱照远:

大家好,我是叔度,我是2009年加入淘宝,现在负责阿里的Web服务器和CDN.我是一个开源爱好者,是Tengine项目的发起人。同时我也是阿里巴巴开源委员会委员,有幸见证了整个阿里巴巴开源的历程。接下来我就从我个人的开源经验,就是比如说从Tengine的经验,以及阿里巴巴企业开源的过程,从两个维度来分享个人开源和企业开源方面的一些经验。我先从个人开源开始谈起。为什么要开源?因为在座的我相信很多人都是工程师,其实开源对工程师有很大的意义。很简单一点,东西做好了就自然有回报,也就是说开源是有回报的,比方说很多开发者可以给你提供帮助,不断提升你的能力,你的能力越强越有利于你的职业发展。通过开源也可以让自己的代码有更长的生命周期。还有就是自己的软件的用途会超出你的想象。一开始你没有自己的开源项目,可以从参与别人的开源项目做起。做开源很容易,你可以做翻译,就像上午嘉宾分享的环节里面说的,程序里面没有Bug几乎是不可能的,所以你遇到Bug的时候,你最好能够给他提问题报告,或者提Patch。然后慢慢你就可以获得这个项目的信任,甚至慢慢变成这个项目的主要贡献者。如果不被接受你也别气馁,特别是当你是一个代码新手的时候。

我留意到,越来越多的同学喜欢自己做个人开源项目。既然做开源项目,你首先要解决的是你如果你的开源软件流行起来。要流行的一个前提就是必须要很好地解决某一个领域的一个问题。比如拿Memcached 和 Redis 来讲,Memcached 之前几乎没有开源的内存 Cache 软件,Memcached 出现了,很好的解决了这个需求。随着大家用 Memcached 越来越多,发现需要结构化的内存 Cache,这时候Redis就应运而生了。一个开源软件的流行是因为它满足了需求。假如说你的软件没有给别人带来价值,那么它就不会流行。你自己做的开源项目,要容易上手。比如说你要有很好的文档,别人下载了你的原代码可以很快的部署起来,使用起来。我看到有的项目,极端的有依赖的10来个库的,很多编译依赖,这给用户一个非常高的门槛,不利于软件的推广。你项目的代码架构要良好,容易扩展,这样的话会有更多的人参与到你的项目,一起来改进和贡献。文档要齐全,如果你的文档不完善,除非你的项目非常非常好,要不别人根本不会花时间去研究它。

随着开源的项目越做越大,就会慢慢形成自己的开源社区。那么开源社区如何运营?首先要制定规则,社区的规则像一个国家有法律一样。要有一些规则和流程,比如什么情况下Patch可以被接受,什么情况下不可以接受。最好能打造一个金字塔型社区。这里面用户是最底层的,中间有一些开发者,贡献者,最上面是核心团队。开源社区也要做少量的宣传,当然软件好用,宣传就不需要花太多的力气。用户口碑是最最核心也是最最重要的传播手段。你可以写一些文章介绍,或者参加会议,去推广介绍你的开源项目。只要你的软件和项目有价值,别人就会使用。

做开源软件最重要的一点就是贵在坚持。有很多开源项目,开源了之后,这个项目就不怎么更新了,这很不好。开放源代码只是项目开源的第一步,要持续更新,包括修复问题,增加功能等。假如说你看到一个开源软件,这个开源软件有 Bug,但是过了很多年也不更新,这个软件你敢用吗?肯定不敢用。要保持比较快速的发布节奏,让人看到你的项目在努力。比如一年发12个版本还是一个月发一次?你想一下子憋一个大招出来,可是很可能没憋出来你的项目就死掉了。这跟软件发布的原理一样,如果你快速迭代,用户就可以很快的用到你的软件的新功能,你可以和用户互动,这个对软件项目的发展很好。

接下来我以自己所做的 Tengine 项目来讲一下个人开源方面的一些经验和体会。

Tengine 是什么?它是阿里巴巴基于 Nginx 开发的一个开源Web服务器,我们在 Nginx 的基础上添加了很多高级的功能。这个项目是从2011年12月开始开源的,根据 W3Techs 统计,现在 Tengine 全球用户量在所有Web服务器里排名第9,使用量0.2%,即每一千个网站里有两个在使用 Tengine。Tengine 详细介绍我就不说了,动态模块加载 DSO 支持,支持 SO_RESUEPORT 选项,动态脚本语言 Lua 支持,流式上传,更多负载均衡算法支持等等。我没有列的很全,大家可以看看 Tengine网站。Tengine 除了阿里巴巴自己在用外,也有一些外部的用户在用。包括 InternetArchive,腾讯,土豆,京东,PPTV,国美,凤凰网,开源中国等等都在用,还有很多我自己也不知道,我知道的一些还是网站报错的或者是别人告诉我才知道。

大家可以看 Tengine 现在是这个位置,排在它前面是 Lighttpd。Lighttpd 就是一个例子,它更新的非常不频繁,功能又没有 Nginx 强,虽然几乎同时和 Nginx 出现,但是现在已经被远远甩在后面了。

Tengine 社区,网站有中英文版本,还有对应的邮件列表。Tengine 是放在阿里巴巴的 GitHub 上开发,整个社区是通过 Pull Request 方式驱动,做代码 Review。代码 Review 通过了就相当于做一个签字认可,会把这个代码给合并进来。

Tengine 开源之后发布了21个版本,从2011年12月到现在一直保持着更新,2011年12月到现在是3年多时间,大家可以看看这个表,我们几乎每周都有代码提交。Tengine 现在的核心开发者有8人,国内外的代码贡献人有37人,其中有中国、美国、荷兰,匈牙利和葡萄牙,好像最近还有俄罗斯。

刚才从我个人角度讲了一下我的开源经验,以及 Tengine 这个项目,接下来我讲企业的开源,也是我今天着重要讲的。企业要开源我觉得首先要思考一下为什么要开源。因为商业公司的目的是盈利,这无可厚非。如果一个商业公司不盈利,这个公司存活不下去。在做开源之前,你一定要知道什么功能可以开源什么不能开源。因为你要知道什么是你的底线,你的核心竞争力是什么,核心机密是什么,不能把这些暴露出去。如果明确了底线,比如对于阿里来说,最核心的机密是数据而不是软件,所以我们才会把软件开源出来。如果开源企业的软件,不伤害到自身的利益,又有利于他人,何乐而不为呢?这是我们为什么要呼吁像腾讯、百度这样的公司和阿里一起做开源,因为这些公司做开源对业界好处很大,自身又几乎没有损失。

做开源其实很容易,无论大公司还是小公司。最近我也注意到,微软搞了个开源社,也做开源了,大家没有想到微软也会做开源对吧?

开源与否都要遵守游戏规则。开源有两种,一种是把自主研发的软件开源出来,另外一种是用第三方的开源软件,比如说 Linux。用了开源软件就要尊重该软件的游戏规则。这个游戏规则就是开源协议。比如 BSD、MIT,Apache 等等,当然还有很严格的 GPL。其实国内有不少公司没有遵守 GPL协议。像 BSD 协议,MIT 协议,非常宽松,修改了不开源出来也可以。但是修改了 GPL 协议的软件就必须得开源,如果你一点都不开源,那就是毫无诚意。

开源对于企业很有好处——既做了社会公益,又提高了影响力,工程师文化也可以得以发扬。企业既可以通过开源把优秀的人才吸引进来,也可以提高开源出去的软件的质量。

开源对于很多公司来说,也可以是一种商业模式,开源和商业并不矛盾。开源可以成为小企业对抗大企业的一种杠杆。比如说在小企业在财力不够,影响力不够的时候,可以通过开源来对抗大企业。开源软件本身可以免费,增值服务收费,这是一个开源企业存活下去的一个方法。比如 Red Hat。或者可以围绕着开源项目形成一个开源生态。比如最近比较火的 Docker,还有 OpenStack,有了生态就可以活得很好。

如何在企业内部弘扬开源文化,我觉得很简单,不要制止工程师开源的冲动就可以了,但可以制定流程规范。对于工程师来讲,本身开源的成就感就是对他最大的奖励。你让我把这个分享出来,比如软件很好用,写的代码很酷,做的算法很棒,我希望更多人喜欢和使用我的代码,这就是对我最大的鼓励。公司内部在形成开源组织和开源文化的时候,可以在内部开源项目做一些交流,当然对工程师进行实质的物质奖励也未尝不可,但其实工程师是一个比较容易满足的群体。

目前中国是处在开源的初级阶段,开源大大地减少了中国的IT界跟国外的技术差距,因为开源技术可以直接使用。工程师可以通过对开源软件学习迅速提高自身水平。其实IT界和其他行业是非常不同的,因为有开源技术。对于中国来说,我们在很多方面,比如说基础工业,比如说汽车,很多都是比最先进的国家落后可能10年甚至50年,这么大的差距。但是因为开源技术的存在,中国IT界的水平,可能和世界上最先进的水平差距不到5年。开源技术有利于中国技术的发展。中国的开源是处在初级阶段,道路很崎岖,但是前景很光明,因为中国的巨大技术需求会加速创新,推动开源软件的发展。关于创新和技术爆炸,马云曾经在前几年说过,他预估中国未来十年将会成为世界的创新技术发源地之一。我觉得这个是比较贴合实际的。大家可以看,现在中国在全球前十的网站中中国有三家,分别是百度,阿里和腾讯。世界前10的网站中国已经占了30%,前20里也有30%。因为中国有这么多人。在欧洲,国家小且语种多,一个国家就那么点人,不会产生多大访问量。中国人多,像淘宝天猫双十一,12306,一堆人全涌入进来,对技术的挑战很大。很多时候技术的牛逼是被业务逼出来的,每年都是几倍的增长,技术必须不断的创新,不断地做一些新的东西出来。所以中国一定会涌现出优秀的开源企业和优秀的个人及项目,中国的开源力量最终一定会非常大,我对这点是非常有信心的。

接下来就以实际案例来讲阿里开源的情况。阿里现在共开源的基础软件大概有100多个,包括前端,后端,数据库,文件系统,内核,硬件等等多方面。除了自主研发的,我们还对阿里使用的若干项目贡献代码,比如说 Hadoop、Linux Kernel,这是去年有组织统计的各公司对 Linux Kernel 的贡献排名,其中淘宝是第115位。榜单上有两家中国公司贡献比较大,一家是阿里,另一家是华为。除了这些,还有 HBase,MySQL,JVM,LVS,Tengine。典型的自主研发则有 TFS,Tair,OceanBase,RocketMQ 等等。阿里开源的目的首先是为了回馈社区。因为阿里用了很多的开源软件,也想为开源软件做一些贡献。中国有一句古话叫“来而不往非礼也”。其实阿里是把这些改进和反馈提交上去,让开源软件良性的发展。还有一个目的是建立起阿里的影响力,汇聚更多的人才,迎接更大的技术挑战。

接下来讲一下阿里的开源的历史。说到阿里开源不得不提 LVS 的作者章文嵩博士,他加入阿里是一个很重要的里程碑事件,因为章文嵩博士是中国最早一批做开源软件的人,LVS 现在包含在 Linux 内核里面。章文嵩博士带来开源的种子,阿里则有开放的文化土壤,所以开源就开始茁壮成长。2010年我们建立了一个叫淘蝌蚪的开源平台,2010年6月份阿里巴巴开放的第一个大型软件 Tair,这是一个分布式的 KV 存储软件,2011年成立了阿里开源委员会,完善了开源的政策和流程,从此走上了正规化。阿里开源委员会隶属于阿里的技术委员会,章文嵩博士是技术委员会的主席。

阿里开源的大部分项目选择使用了 GPL 协议,一些开源的库用 BSD 或 Apache 等,阿里集团是版权持有人。阿里为了促进开源做了一个叫淘蝌蚪这样的平台,当时的出发点是像 SourceForge/Google Code/GitHub 等平台本身不是开源的,阿里就想做一个开源平台本身就是开源项目,所以就有了淘蝌蚪,它本身就是开源的。另外它在国内访问也比较方便,无障碍。现在淘蝌蚪开放的项目有1万多个,成熟项目以阿里的为主,非阿里的项目也成熟了很多。另外阿里除了在淘蝌蚪平台上,还在GitHub 的阿里巴巴帐号上 host 了很多开源项目。因为 GitHub 有利于国际合作。GitHub 影响力非常大的原因是开源作者的贡献可以被突出现实出来,比如对一个项目的贡献,每日的活跃情况,有一个绿色的格子矩阵,活跃程度在格上就可以看出来。现在阿里在 GitHub 上面有74个项目,涉及到100多个工程师。

阿里做开源有收获,我们觉得促进了开源软件本身的质量提高。用户有意见反馈,比如用户会提Bug报告,还有甚至给我们提供解决方法。阿里的技术能力和开放精神也获得业界的肯定,使得阿里的技术工程师有强烈的认同感,当然也会吸引更多有能力的工程师加入。因为工程师希望一个开放的环境,不希望被束缚。

最后对阿里开源做一下总结,阿里是开源系统的受益者,我们在积极地参与开源生态系统的建设。阿里希望以更开放的方式与业界一起进行技术创新。阿里采用开源软件与自主开发相结合的方式有更好的可控性。阿里希望和国内同行一起做开源,打造一个开放共赢的互联网。打个小广告,阿里在招人,欢迎大家加入。

主持人:现在大家有没有什么问题想请问的?

提问:我就想问一下阿里开源出来的项目与你们公司内部使用的是一样的吗?第二个就是在 GitHub上面的代码与淘蝌蚪上面的代码是不是同步的,是不是最新的?

朱照远:每个项目具体情况不一样,有的是在外面开源项目最新,比如一些项目是把开发直接放在GitHub 上,Tengine 就是这个情况。有的项目则是在阿里经过验证代码稳定了,才把成熟的代码放出来。Tengine 项目一开始是放在淘蝌蚪上,后来因为方便更多人使用,就放到了 GitHub 上。项目放哪里的选择权在项目负责人那里。

提问:问一个小问题,如果你在 Nginx 上面看到你的代码怎么想?

朱照远:我看到很多 Tengine 的功能陆续出现了在 Nginx 上面。这不奇怪,说明了大家对产品发展的判断是一致的。我们和 Nginx 有某种程度的合作,我们提交的 bug fix,很快就会被接受,但是我们提的比较大的 feature,他不接受。因为 Nginx 现在是一个商业公司,他们有自己的商业考虑在里头。

提问:我问一下,刚刚看到淘蝌蚪下面有一万多个项目,之前我也研究过你们在 GitHub上面的团队,上面的活跃度基本上也只有一些人比较活跃,大部分都是比较沉默的。我就想问一下,阿里这么大的一个公司,基本上有很多的工程师,他们自己可能会使用以前开源的一些项目,然后他这些自发的使用开源项目的这些行为,会不会要求要馈到淘蝌蚪上面,或者是馈到你们自己的开源项目里面?

朱照远:你说很多项目到 GitHub 上不活跃,这很正常。我前面讲了,开源是需要坚持的,需要一个团队的努力去保持更新。开源项目是工程师自己生的孩子,不要只管生不管养。工程师对自己的项目要有爱,要有火辣辣的爱。

如果是阿里开源出来的项目,基本上会要求大家放在 GitHub 上或者淘蝌蚪上,当然如果有一些漏网的可能有,但是我们规定是说放在这两个平台。

主持人:我们会后还可以再继续交流,我们谢谢朱照远演讲。

0
0