在 6 月 22 日的腾讯“云 + 未来”峰会上,腾讯研发管理部总监许勇首次对外公开了腾讯的开源理念,本文根据其演讲整体而成。
大家下午好,简单介绍一下自己,我是腾讯研发管理部的许勇,目前任职腾讯的研发平台,主要致力于推动腾讯内部开源社区建设和外部开源项目的管理工作。今天,我以“腾讯开源,在路上”为题,分享腾讯内部如何打造工程师文化和外部开源的情况。
曾经的腾讯比较保守,什么事情都是关起门来自己做,内部的技术研发也是如此,各业务和产品都会重复开发很多类似的功能,比如 5~6 个不同版本的二维码扫描,7~8 个功能类似的热补丁组件等等。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 图等应用中使用。
Weflow,基于 TMT-WORKFLOW 的前端工作流开发工具,应用于微信游戏、微信广告等项目的第三方合作团队前端构建工作 SOTER,腾讯生物认证组件,应用于微信 Android 客户端的指纹支付业务,以及公众平台 H5 页面的指纹授权。还有小程序相关的一些项目……
相对于 Google,Facebook 这样的科技公司,腾讯的开源,目前还是处在一个追赶者的阶段,甚至相对于国内的其他开源先行企业,也还有很大差距,但我们看到了腾讯的工程师们已经被开源的力量唤醒,更有热情的投入到了开源中来,去追求更大的技术价值,腾讯开源也会与腾讯云紧密结合,为开发者提供更多便利的基础服务和工具,以及开源项目使用,我们希望能和外部开发者一起,砥砺前行,创造中国开源的未来。
评论