参加开源社区的活动,将自己的代码开源,为知名的开源框架做出自己的贡献,这对于很多技术人员来说,都是提高技术水平的阶梯。然而,很多公司并不支持技术人员这样做,他们担心开源会给自己的产品带来安全问题,技术人员也因此丧失了很多学习机会。那么,开源真的不能与安全并存吗?
奇虎 360(下文简称“360”)作为一家以安全平台为支撑的公司,在企业内部建立了一套开源体系,不仅推出了优秀的企业级开源框架,还帮助了技术人员成长和学习,得到了很多意想不到的收获。奇虎 360 是如何做到这些的呢?为此,InfoQ 采访了 360 技术委员会主席,360 开源委员会成员,Web 平台部总监的服务端技术专家陈斌老师,让我们一起来了解开源背后的工作。
InfoQ:360 目前开源现状是什么样的?有哪些代表性的开源项目?
陈斌: 360 的开源现状是由下至上形成的。三年前,360 的一些小团队就开始做了开源分享,去年,我们整合了 360 内部的 GitHub 账号,设置了主账号,开始着手进行统一的管理。
目前,360 在 GitHub 的开源项目约为 20 个。其中,比较有代表性的有三个。一是被成为安卓黑科技的 DroidPlugin ,它可以在 Android 上免安装、免修改来运行一个 APK,是一款比较成熟的插件化开发框架。还有一个比较成熟的 MVC 框架—— ThinkJS 它是一款使用 ES2015/2016 特性全新开发的 Node.js MVC 框架。三是 Atlas ,它是一个基于 MySQL 协议的数据中间层项目。这三个开源项目影响都比较大,其中,DroidPlugin 目前已有三千多个 star。
InfoQ:360 有参与过 OpenResty 这样的国际型的开源项目,时是否有相关制度?是否 patch 或 fork 过大型的开源项目?
陈斌: 对于国际的开源项目,我们主要是关注和使用。获取到开源项目后,我们会进行使用,根据具体情况做一些修改,遇到 bug 时会提交给官方。这方面没有统一的制度去参与
像 Redis、OpenResty,包括一些 iOS 的相关项目,我们都有提交过一些 patch。由于我们是做安全行业的,所以在使用开源项目时,会做一些特殊规定,所以会 fork 一些分支出来。
InfoQ:360 的开源理念是什么样的?
陈斌:我们是鼓励开源的,并且认为开源会更有利于项目。首先,我们不担心核心技术被别人学习。现在互联网如此发达,核心技术早已不是最重要的核心,而快速提高技术水平才能保持领先,才是最关键的核心。开源是一种趋势,也是提高自身水平的一种手段,因此,我们认为,该开源技术的都应该开源,而且要给予正确的导向,鼓励开源的同时保证做到安全地开源。
InfoQ:请介绍一下 360 开源委员会,主要成员以及运作模式等。
陈斌: 360 开源委员会是今年成立的,主要包括四个部门:技术分委会、安全审查部门、法务和市场。
每个部门都有其专门的职责:技术分委会的主要成员是架构师和工程师,负责鉴定项目用到的的技术是否适合做开源;安全审查主要是对开源项目的安全性进行审查,防止泄露公司的账号等对安全造成威胁的信息;法务部门会审核是否符合我们的开源协议;市场部门负责对开源项目做推广工作,例如做开源大会等。
InfoQ:360 内部的开源流程是怎么样的,大概周期需要多久?
陈斌: 360 内部的项目想要开源有规范的流程的。
大致步骤如下:
- 技术审查。要经过技术委员会的审查。他们会分析其中的技术要点以及用户场景,来评判项目是否适宜开源。
- 安全审核。由安全部门对源代码进行审核,确保不会对敏感信息造成威胁。
- 法务审查。由法务审查是否遵循相关协议,例如 BSD 协议。
- 开放代码。在 GitHub 上建立仓库,提交开源代码了。
- 推广使用。接下来,我们还会推动开源项目的使用,不仅推动内部使用,还会由市场部来做相关的推广。
- 长期维护。一个好的开源项目,必须有人对其进行维护,我们会将项目绑定到团队身上,由团队来负责长期维护。
一个项目由提交,经过各种审查,到最后开源至 GitHub 上,大约需要两周。这些过程都是在工作时间完成的,因为 360 不仅仅是一家安全服务公司,也是一家技术公司。
InfoQ:刚才提到对开源项目进行维护,那么 360 如何保证公司级开源项目的持续维护呢?
陈斌:公司级的开源项目需要投入源源不断的人力,而单个的人是具有不稳定性的,假如将它绑定在个人身上,是要冒着很大风险的。所以我们将开源项目和团队绑定在一起,由固定的团队来负责某一开源项目。这样一来,实现持续维护就容易多了。同时,由于项目的持续维护有了保障,口碑必然增强,不管是个人还是团队,荣誉感都会大大提升。
InfoQ:请介绍一下 360 技术委员会,它的主要职责是什么?
陈斌: 360 技术委员会是我们的一个虚拟组织,对应各个领域(如前端)设立相应的分委会。具体的成员是由技术人员推选出来的,比例为 5%,即 100 位技术人员中会推选出 5 位委员。
技术委员会的职责主要有以下三方面:
- 技术评级。360 内部建立了评级体系,帮助技术人员成长。很多程序员都遇到过这样的问题:刚入职时被分配到某个项目中去,这个项目由于各方面的原因做的并不成功,而后续的发展却要与该项目挂钩。这对程序员来说是非常不公平的,因为一个项目的好坏并不能代表程序员技术的高低。我们给技术人员建立了一个成长的阶梯,不以项目论成败。而 360 技术委员会在这个体系中担负着重要的职责,就是为技术人员进行评级。
- 内部沟通。由于 360 内部的管理比较扁平化,所以会带来很多沟通上的问题。360 技术委员会会来改善这种情况,打通各个团队之间的交流通道,横向沟通,学习各个团队的经验,避免重复“踩坑”。
- 对外宣传。360 技术委员会还肩负着对外宣传的职责。我们每个月的第 3 周的周六都会有对外交流的活动,而且还有 360 培训营,所有技术人员都可以免费参加这些培训活动。
InfoQ:360 内部有一些非常优秀的技术团队,如何保持它们的成长?
陈斌:保持团队的成长就要保证对技术人员有正确的发展导向。首先,我们将薪资与技术级别挂钩,从薪资上直接激励技术人员提高自身技术水平。其次,我们还会为优秀的技术人员提供学习机会和环境,例如参与技术大会等。另外,我们还设有一系列的荣誉,例如对高级别的技术委员会委员颁发奖杯。
InfoQ:360 内部的团队非常扁平化,能说说它所带来的好处和坏处吗?
陈斌:扁平化的管理的一大好处就是可以更好地适应变化,因为扁平化的团队更加灵活,能够快速解决问题、快速发展。而与此同时,却带来了沟通减少、继承性差、难以积累所学等问题。总体来讲,其优势还是大于劣势的。我们正从各个方面进行努力,来消减扁平化管理所带来的坏处。
InfoQ:扁平化的管理会造成公司业务由众多的小团队去分别完成,那么如何避免他们踩同样的“坑”?
陈斌: 我们有专门的技术部门,例如 Web 平台部,它们不直接和业务挂钩,有自己的 KPI 和工作职责,来做技术方面的总结和升华。这样可以避免小团队难以积累的缺点。
InfoQ:公司内的开源项目如何在不同团队进行推广?
陈斌: 推广的方式有很多,除了进行宣传外,我们还会在评级时对使用了 360 开源项目的人员进行加分,这可以直接促使他们使用公司内的开源项目。
InfoQ:感谢您接受我们的采访。
感谢徐川对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论