一向封闭的腾讯,为什么也开始拥抱开源了?

百家 作者:聊聊架构 2017-06-23 10:42:28

在 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 这样的科技公司,腾讯的开源,目前还是处在一个追赶者的阶段,甚至相对于国内的其他开源先行企业,也还有很大差距,但我们看到了腾讯的工程师们已经被开源的力量唤醒,更有热情的投入到了开源中来,去追求更大的技术价值,腾讯开源也会与腾讯云紧密结合,为开发者提供更多便利的基础服务和工具,以及开源项目使用,我们希望能和外部开发者一起,砥砺前行,创造中国开源的未来。

今日荐文

点击下方图片即可阅读

京东 618:一个中心五个原则,谈谈物流系统的大促优化实践


ArchSummit 全球架构师峰会邀请了上百位国内外顶尖技术专家前来分享各业务的核心架构设计,从 Web 协议底层优化到超级 App 的系列魔改,这里只谈最优秀的架构实践。距离大会 7 月 7 日开幕仅剩两周时间,点击“阅读原文”可获取 100+ 落地案例,如需报名,可直接识别下方二维码联系大会售票天使豆包,或者点击“阅读原文”,了解详情。

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接