2016年5月28日,华为开发者汇南京站在安德门黑马路演中心圆满落幕。本次沙龙议题增加到六个,时间安排上也从之前的半天扩展到全天。讲师有来自华为、苏宁、途牛的多位好手,议题涵盖”通讯即服务“、”内源开发“、”探索性测试“、”容器技术”、“电商平台迁移”、“订单架构优化”。第二个演讲的是华为内源项目最早参与者之一的章志国,他做了题为《华为DigitalWare内源项目经营实践分享》的演讲。
现场实录如下:
大家上午好,我是来自于华为的章志国,这边是我的邮箱和姓名。大家如果关于内源有什么需要交流的,可以会后给我发邮件。我现在请教大家一个问题,大家有没有用过github的举手。举的很少,在github上做过贡献的人有没有。有几个做过贡献的,非常了不起的。我们从一个封闭的企业,或者封闭的个人,怎样开放,对每个人来说都有心理的过程。我在华为从事研发15年,主要是从事开发。但是从内源或者外源开发来讲我们还是一个小学生,因为我是从2012年开始做内源的,从3月份开始我们项目组也会孵化一个LM框架,大概在4月份已经在github上发布,我们希望也有一些贡献。
今天为什么要给大家讲内源呢,从华为公司内源项目运作来看,我觉得这是一种更好的开发方式,把这种开发方式分享给大家,大家在今后工作中,或者在企业中能把这种方式用到开发过程中,促进我们生产效率的提升,促进我们编码效率的提升,这是分享这个议题的初衷。
看一下什么内源,开展开源大家都比较清楚,所谓内源就是把开源的技术在企业或者组织里面进行实现,就叫内源。我上面列了一些公司,这些公司除了在开源做的比较好之外,在公司内部内源也做的比较好。
典型企业开放与分享对比的分析汇总,我觉得从思科一直到三星,主要是五个典型企业,他们在内源所开发的诉求是什么。最简单的一个例,大家知道谷歌的前董事长埃里克·施密特曾经写了一本书叫《重新定义公司》,可能有的人看过。他曾经在里面看,他们的联合创始人拉里对他们的广告系统进行吐槽,他写了一个便签,贴在那个白板上就走了。那天正好有一个员工加班,但是他也不是管广告系统的,他发现这个吐槽了,就把这个便签带回去了。大概花了一周到两周的时间,用自己剩下的时间开发了一个广告系统,这就是后来谷歌最著名的广告系统。他为什么短时间能开发广告系统,这是因为谷歌内部有一个社交化的平台,大家基于这个平台不断的去创新。另外谷歌会有20%的时间让大家去创新,让大家发挥创意,前提是要借助这个内源平台。
不同的公司有不同的诉求,但是统一汇总起来,就是大家要通过内源平台提升我们的效率,提升我们的写作,提升我们的质量。一般有几种方式,一种方式是大家把代码都放在一个内源设计上,我今天想开发一个加解密的程序,比如MD5,我看一下我们公司其他人写过的类似算法,我在内源上面一搜,搜到一个MD5的算法,我把这个代码拿下来,嵌入到我的代码里面,这是内源的一种应用方式。还有我现在做前端开发,用到一个(04:24),我没有类型,我到内源上面搜索,搜到一个直接使用。这是一种用法。第三种用法是我使用别人的平台,别人的平台由于各种原因,这方面能力是比较欠缺的,我基于我自己的想法,给它贡献一些组件上去,把这个组件由内源平台集成,最后去孵化,最后形成一个比较结实的软件产品出来。基本上整个公司使用内源的一些初衷。
从内源来看的话,带给我们的价值有几方面,我这边总结的一是贡献可视、社区互动、团队协作更高效。贡献可视,大家会在内源平台中看到每个人贡献了多少行代码,你提交了多少bug,你提交了多少次代码,你参加了多少次讨论,有一个排名出来。就像大家用过github一样,在github能看到你的贡献量,感觉是不一样的。社区的互动,在内源平台上,或者在github上大家互动交流的比较多,无论你在天涯海北,大家都通过内源平台,这样就拉近大家交流的距离。无论你是在公司内还是公司外,大家都通过内源平台进行探讨交流。团队的合作更高效,以前我们一个小团队,现在可能是一个大的团队,泛化的一个团队,所有感兴趣的人都可以参与到内源平台当中去。在华为也是一样,我在华为内源项目,虽然我们部门大概有两百多人,但是参加内源平台的有一千多人,我就发到内源平台上,别人感兴趣的就可以给我提问题,提bug,或者下载我的代码,孵化他自己的项目。
在座的也用到很多开源的软件,还包括安卓系统,所有这些东西都是从单营现在形成快速集成的产品的过程。比如外部开发框架有这么多,肯定不是一个人开发出来的,肯定是靠群众的智慧,集体的力量。内源平台,内源设计就给大家提供了这个机会,大家在里面可以发挥智慧,最后开发出高质量的产品。
第三个就是通过内源平台我们构建研发能力,服务简化开发。在内源平台上我们会提供一些能力,比如持续集成的能力,持续构建的能力,包括我们会自动部署环境,自动给你分配机器,包括你的资源分配、调度等等都在内源平台。以前我们要搭建一个系统大家觉得很困难,我要搞数据库,我要搞部署,我要搞环境,这个都在内源平台给你搞定了。包括里面的构建,每个构建,包括管理,包括代码分支的合并等等,这些都是内源平台给我们提供的各种各样的工具和能力。
华为目前内源开发模式已经进入2.0阶段,我们主要是聚焦在复用、智能、激发和快速这几个方面。这个版本是一个主干版本,主干版本我们是迭代开发,持续构建,按照VRC版本去演进。在我们内源开发阶段,每个开发人员会拉一个开发分支,按照开发特性,然后会提交合并,等到代码稳定之后,会逐步合到我这个分支,这个就是将来要分布的分支,最后合成我们主干大的版本。华为以前的印象是挺慢的,以前我们做CT领域的时候,基本上最快的是六个月一个版本,我以前做光网络的时候,应该是一年一个版本。如果按照这样速度的话,肯定是被今天这个快速的时代抛弃了。而现在我们能做到按月版本进行发布,靠的什么,就要靠我们快速迭代,快速响应。内源上面就提供这些机制,保证我们能够快速迭代,快速响应。下面基于(10:16)分支,提供的内源代码开放平台,刚才第一个问题我问有没有用过github,github是内源托管平台,往前面再找我们会有get lip,也是一个内源托管平台。包括内源构建系统,内源CRE的系统,这些都是构建在我们整个内源平台上的。
基于整个内源设计的开发,我们华为2.0,这么多年是在这八个方面在探索。一个是特性开发,任务自领取,一会我会讲我们任务怎么领取,可视化贡献,自动化存运,构建验证服务,包括流程发布,高效协同。