导读
6月21至22日,“云+未来”峰会在深圳召开,腾讯向外界进一步展示了开放的诚意:充分开放腾讯的数据能力,包括智能推荐、数字营销等重量级服务,让行业真正感受到数据的价值。腾讯的开放是一个漫长的过程。许勇指出,腾讯曾经是一个较为封闭的环境,技术研发也不例外。
2010年的3Q大战后,腾讯开始拥抱“开放”战略,技术研发也正是在这种环境下,开始向共享、复用和开源迈进。腾讯内部的开源社区,给大家提供了从轻度到重度参与开源的途径;而从2016年开始,腾讯外部开源也开始进入了快节奏时代。
在AI方面,深度计算的基础平台能力不断迎来开放,一个是Angel的开源,作为高性能的机器学习计算平台,Angel目前应用于腾讯内部包括广告推荐,视频推荐,微信公众号等业务场景。另外一个NCNN的开源,是腾讯优图实验室前向卷积神经网络的实现,在手机QQ、手机Qzone、微信、天天P图等腾讯业务中广泛使用。
越来越多的业务团队开始拥抱开源,把自己的项目开源出来,在接下来,还有更多经过腾讯众多明星业务检验的项目开源出来。相对于google,facebook这样的科技公司,腾讯的开源,目前还是处在一个追赶者的阶段,但我们看到了腾讯的工程师们已经被开源的力量唤醒,腾讯希望和外部开发者一起,砥砺前行,创造中国开源的未来。
以下为许勇演讲实录:
Hi,大家下午好,简单介绍一下自己,我是腾讯研发管理部的许勇,目前任职腾讯的研发平台,主要致力于推动腾讯内部开源社区建设和外部开源项目的管理工作。今天,我以“腾讯开源,在路上”为题,分享腾讯内部如何打造工程师文化和外部开源的情况。
曾经的腾讯比较保守,什么事情都是关起门来自己做,内部的技术研发也是如此,各业务和产品都会重复开发很多类似的功能,比如56个不同版本的二维码扫描,78个功能类似的热补丁组件等等。2010年,随着3Q大战,变革来临,腾讯开始“开放”战略,同时前google的一批工程师加入腾讯做搜索,虽然搜索没有做起来,但他们带来的google的工程师文化却得到了很多认同,正是在这种大环境和背景下,腾讯的技术研发开始由封闭向共享,复用和开源迈进。
我们从2011年开始,在内部提倡以公共组件的形式共享和复用代码;2012年,尝试发布了腾讯第一个对外开源项目,一个构建系统BLADE;2013年,旨在鼓励和推进腾讯内、外部开源落地执行的腾讯代码文化项目启动;2014年,制定和发布了腾讯的开源策略和具体流程,并发布第一批的6个官方开源项目;2015年,在腾讯技术管理委员会下成立腾讯开源联盟(TOSA),整体指导和管理腾讯开源工作;截止到2016年底,腾讯正式发布的开源项目共计36个。这是腾讯开源6年的发展历程。
然而腾讯开源的起步还是比较艰难的,即使是先从内部开源做起也是如此。公司是希望通过开源,减少内部消耗,更多的复用同事的工作成果,这样不仅能提高代码质量和效率,还可以为外部开源积累经验;然而腾讯的研发模式是业务和产品驱动,这里会存在三个方面的问题。第一,工程师会先去考虑能更快的满足业务需求,因此代码的实现与业务耦合性很强,这样好处就是对业务和产品侧的反应会很快,很到位,但很难复用到别的类似业务和场景中去,而解耦的难度更大。第二,就是每个大公司都会遇到的KPI问题,做开源不是KPI的内容,那么时间投入和对工程师的重要性方面就会弱很多。第三,就是部门墙,有些业务甚至存在内部竞争的问题,比如最初做类似微信类产品的团队就有3~4个,竞争很激烈,这样去开源代码的阻力更大。
因此腾讯内部开源的工作主要是围绕着如何解决这三个问题展开的。
现有代码开源比较困难,但是如果从分享一段代码片段开始呢?微码这种低门槛的代码分享方式应运而生了,这让工程师很快感受到了用代码交流的魅力,吸引和培养了内部开源社区的第一批用户,至今,微码分享的活跃度还是非常可观。
突破KPI的难题,如果把开源当做是一个好玩,很酷或者是情感诉求的事儿,那么是不是能够吸引到工程师去积极参与和贡献呢?我们内部开源社区的定位和运营上,在这方面做了许多尝试,比如腾讯员工最关注和期待的每年的圣诞晚会,有圣诞大奖的抽奖环节,在每次遗憾自己与大奖失之交臂的同时,工程师都会很关心算法是否真正体现公平,自己的名字是否在随机算法的盲区等技术问题,由此,腾讯内部最长寿,参与工程师最多的开源项目-圣诞抽奖项目诞生了,也成为腾讯内部开源的样板;还有乐高EV3机器人编程大赛,基于AI预测2016年欧洲杯等等活动,让工程师以码会友,同场PK,感受到了技术社区可以很酷,很好玩;每年的代码统计报告,不是冰冷的数据统计,而是试图描绘工程师在代码世界中的生活,感受到技术社区是有温度的,是温暖的。
对于部门墙的问题,当工程师对于分享和开源有了认识和实践以后,追求更高的技术价值和成就感驱动大家,突破部门业务的局限性去开源项目,从给与中获得满足。技术社区必须靠开源项目和贡献说话,而非Title或者资历,因此我们保持了社区草根化的特质,比如区别于公司内部官方的优秀评选,社区的优秀项目的评选完全取决于项目的客观数据,工程师的票选和一部分专家评选三者结合的总成绩,这获得了工程师的极大认可。
因此,腾讯内部的开源社区,给大家提供了从轻度到重度参与开源的途径,你可以仅仅只是轻量化的分享代码片段,或者是贡献公共组件,或者开源项目去实现技术价值的最大化和建立技术影响力,截止2016年,内部的组件和开源项目数达到了1600+,内部开源社区的DAU在3000+。技术研发由最初的封闭,到现在工程师普遍认可开源,并积极参与其中。
有了一定的内部开源基础,我们开始尝试外部开源,然而发现,同样不简单。由于公司性质的对外开源,所以需要把控的方面特别多。55这个数字,是我们开源一个项目之前,需要对项目做的检查项的数量,包括安全,商标,专利,协议等等各方面;8是我们做一个开源项目所涉及的部门和业务领域的数量;3是一个开源项目从发起到最终正式开源的周期-3个月。因此可以看到,开源一个项目的投入是巨大的,还不包括开源之后,项目团队投入的维护资源。所以腾讯开源的节奏开始很慢,至今开源的数量仅仅是36个项目,但我们看到,从2016年开始,这个节奏快了起来。同时腾讯也在以其他三种方式参与开源,积极参与知名开源社区、运营自己开源项目的社区以及为开源项目贡献。
腾讯云在今年5月份,宣布加入CNCF和Linux基金会,腾讯云是国内最大的基于Kubernetes提供容器服务的公有云服务商,也是拥有国内最大规模KVM集群的企业,将在容器服务、KVM虚拟化等重大开源项目贡献力量。
6月,腾讯云加入MariaDB基金会,释放腾讯云数据库CDB的内核积累。腾讯在去年,也成为OpenDaylight项目的白银会员,两次主办全球SDN&ODL技术实践峰会。
另外腾讯也独立运营了一些自己项目的开源社区,例如Alloyteam,开源了腾讯许多优秀的前端项目,并举办了3届WEB前端大会,工具类的Bugly和游戏的蓝鲸平台等,都有不错的口碑,并聚集了一批热心的开发者。
腾讯积极贡献知名的开源社区和项目,过去一年,产生一名docker项目maintainer,一名ceph项目的maintainer,35个patch到docker,17个patch到ceph,31个patch到Hadoop,2个patch到OpenContainer/runc,1个patch到linux kernel等等,腾讯正在以不同的方式,积极参与到开源活动中来。
腾讯目前大多数的官方开源项目,都已经放在Github上来管理,下面简单做一些介绍。
RapidJSON,腾讯游戏专家工程师的一个开源项目,是一个C++ JSON解析/生成器,目前有4800+star和 1300+fork,被包括守望先锋等许多游戏采用。Tinker,微信前端团队的Android热补丁方案,目前有9000+star和1900+fork,是腾讯第一个占据GITHUB全球周榜冠军的开源项目。WEUI,微信设计团队开源的同微信原生视觉体验一致的基础样式库,目前有17000+star和4100+fork,是腾讯最具影响力的一个开源项目。MSEC,QQ后台团队开源的毫秒服务引擎,来自于QQ后台团队10年的运营思考。
可以看到,越来越多的业务团队开始拥抱开源,把自己的项目开源出来,在接下来,还会有更多的经过腾讯众多明星业务检验的项目开源出来。
在AI方面,2个项目即将开源,一个是高性能的机器学习计算平台Angel,它的目标是让模型训练能够在千万级别、亿级别、乃至十亿级别维度的模型上,自如的展开,加速各种机器学习算法。目前腾讯包括广告推荐,视频推荐,微信公众号等业务场景,都有Angel应用的Case。另外一个NCNN,是腾讯优图实验室前向卷积神经网络的实现,是优图基于深度学习算法,如人脸检测,五官定位,配准跟踪等Android / ios sdk 使用 ncnn 框架实现,在手机QQ,手机Qzone,微信,天天P图等app中使用。
Weflow,基于TMT-WORKFLOW的前端工作流开发工具,应用于微信游戏、微信广告等项目的第三方合作团队前端构建工作SOTER,腾讯生物认证组件,应用于微信Android客户端的指纹支付业务,以及公众平台H5页面的指纹授权。还有小程序相关的一些项目……
相对于google,facebook这样的科技公司,腾讯的开源,目前还是处在一个追赶者的阶段,甚至相对于国内的其他开源先行企业,也还有很大差距,但我们看到了腾讯的工程师们已经被开源的力量唤醒,更有热情的投入到了开源中来,去追求更大的技术价值,腾讯开源也会与腾讯云紧密结合,为开发者提供更多便利的基础服务和工具,以及开源项目使用,我们希望能和外部开发者一起,砥砺前行,创造中国开源的未来