2018 年 9 月 30 日,腾讯迎来成立 20 年以来最具变革意义的组织架构调整——至今已经整整一年的时间。
在这次架构调整中,腾讯宣布了技术委员会即将成立的消息。100 天后,腾讯技术委员会正式成立;下设「开源协同」、「自研上云」两个项目组及「对外开源管理办公室」,计划发力内部代码的开源和协同,并推动业务在云上全面整合。
由此,开源协同成为腾讯在技术发展层面的一个关键词。
开源协同:为打破内部壁垒而来
对于开源协同,腾讯在集团决策层面有着非常深入的思考;腾讯高级执行副总裁、技术工程事业群总裁卢山表示:
提出开源协同,就是希望以开源的手段来改善过去协同不好的问题。参考开源社区的组织方式,将同类项目的不同技术团队聚合在一起,开源共建。能合当然好,不能合也互通有无,开源坦诚相见,接受使用者的自然选择。
从腾讯技术自身发展的层面来说,开源协同也是一个自然而然的结果。
腾讯技术委员会 PMO 成员、开源协同项目负责人郑亚峰在接受雷锋网采访时透露, 2018 年,腾讯在技术层面遭到了一系列来自外界的质疑和批评,腾讯内部论坛也出现了一些匿名吐槽,这件事情真正地触动了腾讯技术人员。郑亚峰表示:
过往我们有很多引以为豪的技术,为什么到了去年,外界突然开始质疑腾讯的技术实力?我们一直在反思这个问题。之前公司内部确实有一些技术壁垒,部门与部门之间的隔阂太多了,同样的技术有多个团队在做。因此,我们做开源协同的初衷就是要打破壁垒,最主要的是形成开放的技术氛围和代码文化,开源协同是实现这个目标的手段。
显然,腾讯技术委员会的正式成立成了腾讯开源工作的一个转折点。
雷锋网了解到,在技术委员会成立之前,腾讯的开源文化是自下而上的,公司层面对此没有硬性规定,技术人员通常会自发推进关于前端的,或是工具类的一些开源项目;但这种方式很难推动和业务捆绑紧密、更底层的重量级项目开源——而腾讯技术委员会成立后,自上而下的开源协同机制建立,恰好能解决这一问题。
不过,在具体的运作方式上,所谓自上而下的开源协同,其实并没有专门的团队来负责,内部开源也不分项目,除了需保密的业务逻辑,所有的代码都要开放,算得上是“倾全公司之力”在做(全腾讯两万多名技术人员全员参与)。换句话说,技术人员仍在做自己的本职工作,只是工作的方式发生了变化——开源方面,之前代码对小组/部门开放,现在是对全公司开放;协同方面,之前是同一个技术是几个团队各做各的,现在是各团队一起协同开发。
这样一来,整合资源就变得更加容易,研发效率和代码质量进一步提升,同时运营成本也得到了优化。
不过,腾讯协同开源的路也并非走得一帆风顺。
郑亚峰告诉雷锋网,腾讯在开源协同方面遇到各种问题,其中,最大的困难是统一人心。在开源协同的过程中,难免会涉及到一些利益相关问题。在这种情况下,就需要上层来决定什么项目应该贡献出来,哪些团队应该参与;当然,上层并不会使用强硬的手段把大家捆绑在一起,而是通过协调和沟通来解决问题。
新代码文化:开源是手段,协同是结果
开源协同的推进不仅打破了腾讯各个部门之间坚硬的技术壁垒,极大地提升了研发效率;更重要的是,它还带来了更有意义的改变,比如说代码文化的升级。正如腾讯副总裁姚星在腾讯内部技术社区码客上回应一位普通开发者提出的问题时所言:
开源协同是目前腾讯研发体系升级很重要的一个方法,开源是手段,协同是结果。开源的目的是减少‘重复造轮子’,权限开放、代码相互可见。协同的目标是‘去中心化’, 能使用开源组件,能复用必复用;开源组件去 BG 部门属性,共同拥有腾讯属性;开发人员是开源组件的共同的参与者和创作者,不是甲方和乙方,从而保持快速的响应。
实际上,腾讯代码文化的诞生,可以回溯到 2013 年;当时,在公司 “开放” 战略升级的背景下,腾讯提出了代码的 “开放、复用和合力开发”。在 2018 年进行 930 变革之后,“新代码文化” 的概念应运而生,即:开源,协同,云上生长。
为了切身解决研发人员遇到的问题,推动新代码文化的发展和快速落地,腾讯内部技术社区的建设也开始走上正轨。
2019 年 1 月 2 日,在技术委员会的指导下,名为“码客”的技术社区上线,腾讯员工可以在此交流技术问题、学习编程知识。雷锋网了解到,在近 10 个月的时间内,每个月有超过 80% 的技术人员访问码客社区进行技术讨论,社区上提问数量近 3000 个,回答与评论达 15 万次,94% 的技术难题都得到了回复。
值得一提的是,2019 年 6 月,腾讯还开了一次 “吐槽大会”,辩论双方就 “开源协同是否有助于提高公司研发水平” 的问题展开了讨论;无论是从现场投票的结果来看,还是腾讯在 CI、大数据、编码器等方面的实际情况来看,吐槽大会的主题问题已经得到了肯定的回答。同时,这场吐槽大会也为技术委员会与公司技术人员创造了直接对话的机会,技术人员在现场提出的 70 多个问题,现在基本全部解决。
郑亚峰表示:
开源协同也是为了解决内部同事寻求技术帮助的诉求。我们做了一些技术工具,除了码客,还有技术图谱和工蜂 Git(雷锋网按:腾讯工蜂 Git 负责承载腾讯全公司的软件工程代码管理,功能涵盖代码仓库、代码评审、研发动态和开源协作)。现在,技术人员能够在固定的地方找到之前开源或者不开源的技术,然后直接拿来用。Talk is cheap,show me the code(什么话都不要说,把代码摆出来亮一亮)的氛围也越来越浓。
在腾讯内部,曾有人调侃腾讯就像技术的迷宫,但在开源协同的大背景下,腾讯技术人员有了不一样的感受。开源协同项目腾讯 CI 负责人、腾讯蓝鲸产品中心总监党受辉表示,最大的变化是团队更稳定了,也更有活力了;以前,很多工程师只是把写代码当成工作,倡导内部开源之后,这就从一份工作变成了带有感情的事业。
开源协同项目天穹、腾讯大数据负责人刘煜宏也表示:
对外开源:前人栽树,后人乘凉开源协同之后,技术人员的参与感提升了,以前平台是个黑盒子,现在有了一个公开的渠道可以让所有开发者参与平台建设,大家很多好的 idea 和代码,都可以往里面贡献了。另外,以前可能有好几个团队都做同一个事情,重复造轮子,现在可以整合资源,资源更集中了,可以聚焦解决很多问题。
当然,腾讯在花大力气做内部开源协同的同时,对外开源的脚步也一刻没有停歇。
腾讯在对外开源始于 2016 年,主要是将内部开源出来的优质项目在 GitHub 上发布;到了 2019 年,伴随技术委员会的成立,腾讯开始耕耘更具影响力的项目,包括万亿级的大数据项目 TubeMQ,与 TensorFlow 互补的机器学习 Angel 平台等,以及最近开源的物联网操作系统 TententOS tiny。
那么,一个项目从内部开源走向对外开源,中间会经历什么样的考量?
对此,腾讯方面表示,一个项目要对外开源,首先都要在内部开源 “试水”,进入评选机制,结合客观数据和专家的评定,达到优秀项目的水平才会对外开源;除此之外,还要考虑业界的因素,如果业界同类的产品不多,对外开源才更有价值。不过,并不是所有对外开源的项目都需要很高的技术含量,因为很少有企业或用户能达到那种量级,因此,通用性也是一个重点考虑因素。
腾讯开源联盟主席、腾讯开源管理办公室委员堵俊平还提到了另一个考虑因素——看人。他说:
每个开源项目背后都需要团队的支撑,如果大家只是为了开源而开源,团队本身没有推动开源或者社区运营的能力和意志,我们并不鼓励。因为对外开源就意味着对用户负责。我们始终坚持“社区优于代码”,代码不好可以优化,但没有“好的人”,代码再好也可能石沉大海。
虽然腾讯在对外开源方面取得了可观的成果,但这数年背后的艰辛也不可忽视。腾讯副总裁王巨宏对此深有感触:
每次对外开源,人力物力的耗费是一方面,团队还要顶着巨大的压力。当时,TARS 团队表示想做开源,我们配合他们牵头推进,花了巨大的精力,甚至把相关专利捐赠给基金会,这是前所未有的(雷锋网按:TARS 是腾讯 2018 年 4 月开源的一款微服务框架)。我们还把散落在外面的开源项目回收,重新规划和宣传。除了技术人员,我们的安全团队、法务团队、知识产权管理团队等都付出了非常多的努力。
当然,腾讯的外部开源其实还反过来促进了内部开源协同的发展。
王巨宏表示,腾讯在对外开源方面走过的每一条弯路,遇过的每一个挫折都没有白费,而是以宝贵经验的形式回馈到了内部的开源协同上;如果没有腾讯多年来对外开源的积累,内部在开源协同的管理及制度建设方面可能还要摸爬滚打很长一段时间。
雷锋网小结
对于迎来 930 变革一周年的腾讯来说,无论是内部开源协同还是对外开源,其表现都可圈可点。在内部的开源协同方面,腾讯已经开展了 8000 个开源项目和 50 个协同项目,其中的代表性项目有腾讯 CI、TianQiong(天穹)、Kubernetes(k8s )等;而在对外开源方面,截止 2019 年 9 月,腾讯已在 Github 上发布 84 个开源项目,累计获得的 Star 数超过 24 万 。
但显然,伴随着腾讯全新战略的向前推进,腾讯在开源这条路上有更长的路要走——正如腾讯开源协同项目负责人郑亚峰所言:
“开源” 本身操作起来很简单,但要把腾讯过往 20 年的代码都开放出来,需要花费巨大的时间和精力……我们给自己设定了一个目标,用 3-5 年的时间去建设开源文化和氛围;由于新技术会不断出现,所以协同是一个持续性问题,需要花更长的时间。