IT资讯 揭秘百度开源治理实践

skylar · 2021-07-20 09:30:06 · 热度: 18

近日,百度开源办公室开源工作组组长、开放原子开源基金会 TOC 成员沈朝华在 GOTC 全球开源技术峰会【开源运营与治理直播】专场中,介绍了百度的开源实践,系统全面地梳理了百度开源的历史和治理经验。本文根据直播内容整理。

揭秘百度开源治理实践

2009 年,百度需要做大数据相关的业务,此时内部有两种声音出现,一是自己从头做起,二是基于 Hadoop,最终百度决定基于开源大规模定制 Hadoop,这是百度首次大规模部署开源软件,从此也渐渐拉开深度参与开源的序幕:

  • 2013 年,Echarts 对外开源图标和数据可视化库,目前已经毕业。
    • 同年,内部提出平台化思维提升创新效率,在百度开源发展历程中,平台化是非常重要的一步,它鼓励内部共享,帮助百度在内部逐渐推动开源建设。
  • 2016 年,飞桨(PaddlePaddle)正式对外开源。
    • 平台化进入 2.0,内部开源兴起。实际上,在 2013 年百度开始开源平台化建设之后,内部共享平台野蛮生长了三年,2016 年之后百度希望内部共享和平台化也能够有序发展,开启了内部开源的兴起。
  • 2017 年,百度开源迅速发展的一年:Apollo 自动驾驶正式对外开源;百度以金牌身份加入Apache、CNCF、 Linux 基金会,并持续至今;正式对外开源数据库 Doris;正式对外开源 RPC 开发框架 brpc。
  • 2018 年,Echarts、Doris、brpc 捐献给 Apache 基金会进行孵化,百度以Premier 身份加入 LF AI 基金会。
    • 平台化进入 3.0,进入云上百度时代。用云的方式解决内部开源共享、效率提升的问题。
  • 2019 年,百度以Premier身份加入 LF Edge 基金会;全球首个通用安全计算平台 Teaclave 进入 Apache 孵化;对外开源负载均衡和流量转发引擎 BFE。
  • 2020 年,创始白金身份加入开放原子开源基金会;XuperChain 捐赠给开放原子;Apache Echarts 以顶级项目身份毕业。
  • 2021 年,理事单位加入开源创新联合体。

截至目前,百度共主导开源 1000+ 项目、10000+ 社区贡献者、30万+ GitHub Star,多个项目已经广泛应用于实际业务生产。

揭秘百度开源治理实践

引入外部开源

整体上,百度对于引入开源的原则是平衡效率与安全。

沈朝华介绍,从 Hadoop 开始,百度很早就意识到需要依赖开源,包括大量的服务器是跑在 Linux 上,以及大量代码依赖 GCC 等等,拥抱开源势在必行。

但百度也很快的意识到,开源有风险,包括安全漏洞,高危 Bugs,以及法律合规问题,比如 GPL 协议的传染性风险。此前,百度开源主要推动者谭中意在 GOTC 直播中也详细介绍了开源软件供应链安全问题(点击回顾)。

所以百度在引入开源方面,会设置一些相应的规范防范风险,包括两个鼓励和两个禁止,通过规范化高效和合规使用开源:

  • 鼓励使用开源软件,尤其是各语言委员会推荐的。百度是根据内部使用到的各种语言,包括 C++,Java,等等,相应地会成立不同语言的语言委员会,对每种语言怎样引入开源软件做规范和参考建议。
  • 鼓励使用各种语言的标准包管理方式来使用开源软件。
  • 禁止使用安全指定的高危开源软件。百度安全部负责列出所有高危安全软件,列出禁止使用的高危软件名单。
  • 禁止直接 Copy 开源代码到业务代码库中。此举是为了规范第三方的管理,在供应链里也讲到,这里的重要问题是要解决安全的问题,如果代码没有集中管理,是很难监控和了解有哪些代码在用,很难及时修复这些问题。

此外,百度在引入开源方面也做了一些规范和基础设施的建设。首先是建立第三方开源软件管理规范,包括:

  • 引入:
    • 自查。百度制定了自查指南,说明需要自查的方面,比较重要的两点包括该开源代码是否在安全黑名单中、软件的 License 是否符合要求,是否有风险。
    • 引入方式。目前有包管理和统一源码管理方式。百度的源代码统一托管在内部代码托管平台上,对于第三方源码,要求必须放在 third-party 目录下统一进行管理。
  • 终止。设置此条的主要原因并非指开源软件无人使用,而是指存在较大风险时,如何限期整改、删除。当发现一些软件有较大风险时,安全部会梳理出有哪些业务在使用该风险软件,并通知相应业务部门限期整改。
  • 审计。开源软件引进之后还会伴随着不断地更新,百度会定期做代码安全扫描。
  • 维护:明确 Owner、维护团队和机制。由于有些开源软件在引入之后也会更改,所以每一个第三方软件代码引入之后,会有明确的 Owner 负责维护,并建立相应的维护团队和机制。

第二是开发相应代码相关工具,包括:

  • 安全扫描工具:发现风险、CVE 漏洞等。
  • 代码搜索工具,主要解决两个问题:重复代码检测,包括代码是否重复引用,代码是否被直接应用到业务中去;代码引用问题,通过搜索 工具 知道 third-party 下面的代码到底有哪些业务在使用,有任何问题时可及时通知并跟踪解决。
  • 搭建包管理平台,如 mvn、npm 等。

第三也是非常重要的——持续对全员进行开源知识培训。因为规范和工具只能解决大部分问题,大家是否真正了解开源软件的风险,是否知道如何正确使用开源软件也很重要。

百度在这方面的措施包括:产研相关的新员工入职培训中会专门设置章节,讲平台化和开源的内容。同时,内部会提供开源相关在线课程,如有关开源规范的讲解、律师整理的开源相关的法律规范及介绍等等。

通过这些原则和规范,百度希望在开源的引入上,既能比较好地利用开源的价值,也能更好地防范风险。

内部开源

沈朝华介绍了百度在集团内部的开源举措。内部开源的一个重要问题是布道,“不是所有的产研同学都会去关注开源、真正意义上地了解开源,所以推进开源,布道就相当重要。”

百度内部开源的布道工作可从三个方面开展:

  • 建立内部开源相关社群,积极传播开源文化。

包括开源核心群、开源兴趣群;邀请内部开源项目 Owner 分享;邀请外部开源专业人士走入百度分享;充分利用内部渠道传播开源,包括新员工培训、内网、内部 IM 工具(如流的公众号)等。

  • 组织内部开源相关活动,推动开源实践。

如举办百度开源大赛、举办开源大赛颁奖 Party;举办开源黑客之夜主题活动,像进行 C/C++ lib 构建;开办K8S 入门训练营、组建开源网站志愿者小分队等。

  • 最后还会整理开源最佳实践,沉淀在百度内部 wiki 平台上。

如开源方最佳实践,包括完整文档、完整测试用例、耐心 reviewer。以及贡献方最佳实践,包括看文档、跑测试、求 review、反复改进等。

除此之外,百度内部开源还遇到了很多挑战,面对挑战,百度也做了许多尝试。

一是工具基础设施建设:鼓励开放,鼓励贡献,防止泄密、滥用和分支分裂。沈朝华表示,规范也好,工具也好,都不能解决所有的问题,比如公司可以规范性地要求所有引入第三方的代码不能直接放入业务仓库,但如果有员工有意或无意将代码放到自己的仓库下,检测工具是否能够检测到这种情况,就是非常关键性的决定因素了。

为了鼓励开源,百度也会移植一些外部开源平台的能力,如内部代码仓库支持基本的 repo 开放、issue 管理能力。

此外,代码仓库支持“指纹”能力,可以阻止重复提交,避免拷贝开源代码到另外仓库。内部开源仓库还会做分支限制存活,防止分裂。

最后,在开源安全方面,百度会进行入职安全教育、入职/离职保密承诺、代码行为审计、外部代码托管平台扫描,以降低风险。

第二是关注开源动机。在百度内部,开源一直与平台化战略结合,在推进平台化时,百度也希望有更多人参与,在无法及时响应用户的需求的情况下,内部开源代码,可以让业务团队及时做调整,以应对差异化需求。这也是百度对于平台化的要求——开源要达到很好的基础能力,确保其他部门的人能够低成本来贡献。

此外,从贡献者的角度如何促进动机?百度的解决方式是,在内部,技术等级的晋升是由技术委员会来进行评定,在每一次评定晋升的时候,会由开源的 TOC,给出候选人在开源方向上的贡献作为技术委员会的参考,所以参与开源对晋升是有直接价值的。另外百度高管也会出些开源相关活动,为突出的开源贡献者颁奖,提升开源在内部的认可度。

综上,内部开源的两个重要方面,一是布道,二是有很多挑战要持续去解决,沈朝华表示,“怎么去平衡安全的问题,怎么让业务方有动机去开源。让贡献方有动机去贡献,这些都是比较大的挑战,百度还在持续解决这个问题。”

百度对外开源

百度对外开源的基本路径是建立规范,并且有序、安全对外开源。

项目想要对外开源,所需流程分为 5 个环节,从开源申请,到管理审批、联合评审、内部公示,最后是正式对外开源。

首先,开源申请的前置条件是已经内部开源,符合内部开源标准,然后由项目的 Owner 方发起申请。

第二,申请之后,至少是总监级别的管理者进行审批,代表从业务团队层面,对开源达成一致,并完成安全扫描。然后是业务管理层审批,管理层需要关注是否涉密不适合开源,并对开源后资源投入承诺。

第三步是联合评审,联合开源办公室、技术委员会、法务、专利团队四方,形成虚拟 team,针对每个项目组织正式会议评审。联合评审会关注开源准备、业务价值、开源合规等,以及关注公司利益是否有对应的保障,例如是否已申请专利、商标等。其中,是否申请专利,百度更多地是从考虑保护自身权益,而非商业利润出发。

评审通过之后,第四步是内部公示,由技术委员会发起,主要考察项目是否符合开源标准、质量如何、是否会影响百度技术品牌等。

第五步才是正式对外开源,启动项目运营。对外开源时,代码同步在 Gitee/GitHub 开放,并按规范放入对应组织下,项目可根据自身发展需求,选择是纳入百度组织之下,或是新建独立的品牌。同时,对于开源项目,还会按照开源项目运营指南建立基本体系,对外发布 PR。

对于外部开源项目,百度建立了分级支持策略,推动项目快速发展。

首先必须是内部开源项目,然后对外开源,逐步发展,建立自己的社区,有一定影响力之后推荐捐赠进入基金会。沈朝华表示,之所以划分层级,一是开源办公室清楚开源项目的发展路径,二是百度集团方面会统筹资源,在不同层次的项目上使其发挥更大的价值,推动项目有序发展。

揭秘百度开源治理实践

百度外部开源还有一个重要举措,即深度参与国内外顶级开源基金会和组织。目前最主要加入了 Apache 软件基金会、Linux 基金会、CNCF 云原生计算基金会、开放原子开源基金会,总共捐赠了 9 个项目给 4 个基金会。此外,百度也在积极参与国内的一些开源组织联盟,在分享百度经验的同时,希望向同行学习。

猜你喜欢:
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册