GTLC全球技术领导力峰会·上海站,首批讲师正式上线! 了解详情
写点什么

专访奇虎 360 陈斌:开源与安全并存,阶梯助技术成长

2016 年 5 月 25 日

参加开源社区的活动,将自己的代码开源,为知名的开源框架做出自己的贡献,这对于很多技术人员来说,都是提高技术水平的阶梯。然而,很多公司并不支持技术人员这样做,他们担心开源会给自己的产品带来安全问题,技术人员也因此丧失了很多学习机会。那么,开源真的不能与安全并存吗?

奇虎 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 )关注我们。

2016 年 5 月 25 日 19:001951
用户头像

发布了 28 篇内容, 共 14.9 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

Idea应用启动时WEB-INF/lib无效标记问题处理

程序员架构进阶

Java IntelliJ IDEA 七日更 2月春节不断更

11. 用别人写好的代码,完成我的工作,剩下的时间去摸鱼

梦想橡皮擦

Python 2月春节不断更 python入门

SonarQube&Gitlab-CI 实现静态代码分析

夏兮。

ci gitlab SonarQube

sonarLint与IntelliJ IDEA 集成

夏兮。

第十二周学习心得

cc

ElasticSearch.02 - 安装

insight

elasticsearch 2月春节不断更

程序员成长第八篇:做好测试工作

石云升

测试 程序员成长 2月春节不断更

自动化测试中的Page Object

夏兮。

Python PO selenium

日记 2021年2月16日(周二)

Changing Lin

2月春节不断更

松耦合

sinsy

设计模式 RabbitMQ

年终述职PPT(996一年,怎么会什么都没干!)

Arvin

年终总结

如何搭建自动化测试框架

夏兮。

js puppeteer automation

面向对象设计原则

引花眠

面向对象设计原则

快速上手接口测试

夏兮。

Mock rest-assured,Java

【LeetCode】最大连续1的个数Java题解

HQ数字卡

算法 LeetCode 2月春节不断更

【译文】工作六年后,我对软件开发的认知转变

Zhendong

程序员 软件开发

什么是MySQL数据库?看这一篇干货文章就够了!

魔王哪吒

学习 程序员 后端 MySQ 2月春节不断更

CI-基于JMeter的性能测试

夏兮。

翻译:《实用的Python编程》01_03_Numbers

codists

Python

日记 2021年2月15日(周一)

Changing Lin

2月春节不断更

Flink集群部署:Standalone部署

正向成长

第四章作业

大小姐

Jacoco统计web接口/功能测试的代码覆盖率

夏兮。

tomcat WebService JACOCO

DO、DTO、BO、VO、POJO区别

安琪拉的博客

系统设计

week12-conclusion

J

Elasticsearch Mapping Index索引

escray

elastic 七日更 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

ARTS打卡 第31周

引花眠

微服务 ARTS 打卡计划

开箱即用cypress

夏兮。

PO Cypress

web自动化测试-puppeteer入门与实践

夏兮。

puppeteer

week12-homework

J

第十二周命题作业

cc

DNSPod与开源应用专场

DNSPod与开源应用专场

专访奇虎360陈斌:开源与安全并存,阶梯助技术成长-InfoQ