创建开源办公室指南

集中式的开源办公室是一个专门支持、培育、共享、解释和发展开源的地方。有了这样的办公室,企业可以明确制定和执行他们的开源策略,为领导者、开发人员、营销人员和其他员工提供所需的工具,使开源在他们的运营中取得成功。

本指南旨在帮助你了解为什么以及如何建立一个计划,来管理公司内部的开源使用和创建,并展示你的开发人员如何在公司运营之外对开源项目做出自己的贡献。它将涵盖开源专项办公室的各个主题,包括:角色和职责、公司结构、开源管理计划的要素、如何选择和雇佣开源项目经理等。

目录

为什么创建开源办公室

如今,开源软件应用广泛,包括从零售到金融再到汽车等各行各业的公司。然而,对于负责运营的高管领导和决策者来说,开源软件并不总是被完全理解。

一个核心问题是,企业制定和遵循传统的商业计划来指导开源项目的运营和目标,但开源软件可能令人困惑。开源创新有其自身的方法论,并不遵循传统的业务流程。其最大差异之一是开源开发是协作性的,而传统的软件和商业实践是专有且封闭的。对于许多企业来说,在使用开源时所需的理念转变并不容易或自然而然地发生

这就是创建开源办公室可以带来重大好处的地方。通过创建开源办公室,企业可以启用、简化和组织开源的使用方式,使其与公司的长期商业计划直接相关。开源办公室旨在成为公司开源运营和组织架构的中心,帮助把所有必要的组件整合在一起。

这可以包括设置代码使用、分发、选择、审计和其他政策,以及培训开发人员、确保法律合规性和促进与建立社区参与。办公室还可以提供关于公司内部和外部所有开源事宜的宣传和沟通。

-– John Mark Walker, founder of the Open Source Entrepreneur Network (OSEN).

“开源办公室是任何现代公司的至关重要的一部分,尤其是那些有着相当雄心壮志,计划影响软件生态系统各个领域的公司。如果一家公司想要增加影响力、明确开源信息、最大化其项目的权威性,或提高产品开发的效率,那么采取多方面的开源项目方法是至关重要的。”

—— 约翰·马克·沃克,开源企业家网络(OSEN)创始人。

开源办公室的角色

最终,一个组织良好的开源办公室之所以有价值,是因为它能够在公司内部推动开源的使用、贡献和创造,从而获得战略优势。

一个成功的办公室可以通过建立支持开发人员及其团队的流程,极大地促进企业的开源使用。它鼓励标准的编码和组织实践、流程以及工具集。同时,开源办公室也可以帮助避免或移除那些不必要的、僵化的流程,这些流程可能会被创造性开发人员规避或忽视,从而威胁到项目的安全性和其他方面。

开源办公室的职责是多种多样的。这些职责包括:

对于每家公司来说,开源办公室的角色可能会根据其业务、产品和目标进行定制配置。没有适用于所有行业的通用开源项目构建模板——甚至在同一行业的公司中也没有通用模板。这可能使其创建过程变得具有挑战性,但你可以借鉴其他公司的经验,并将其结合起来以满足自己组织的需求

“没有一种放之四海而皆准的模型。我不能站在大家面前说,‘这就是你应该怎么做’,”——杰夫·麦卡弗微软开源办公室主任。

微软在过去几年中一直致力于创建和完善其开源策略。微软拥有数万名员工,涵盖了广泛的业务部门,其专门的开源办公室致力于协助开发人员、营销团队以及其他参与开源的人员,涉及云服务、硬件和软件产品、游戏、内容、媒体和其他产品线。由于每个部门根据其具体的商业模型和参与场景需要不同的支持,因此不可能用相同的方案服务所有部门。

开源办公室的一个关键角色是为业务部门在开始考虑将开源纳入其计划时提供实质性和事实性的支持,以确保对开源的考虑有全面的理解,包括其原因、可能的后果以及实现目标所需的条件。这通常涉及到框定讨论的方向,使相关利益方知道从哪里开始,以及在权衡决策时需要考虑哪些因素。

开源办公室还可以成为开发人员与开源用户社区之间的关键联络人,帮助解决和理解出现的问题或需求。办公室可以协助处理法律问题,提供开发者支持,并代表那些在公司开源项目上构建的外部用户的声音。同时,办公室还可以帮助将这些信息传递给公司内部的其他部门,包括产品管理团队,以进一步推动代码的发展。此外,开源办公室越来越多地招聘专职开发者倡导者,专注于确保项目的增长和可持续性。

Source: Ibrahim Haddad, http://www.ibrahimatlinux.com/charts.html

案例:谷歌开源计划

自1998年公司成立以来,谷歌开源的使用一直是其使命和成功的核心部分,开源办公室的角色非常广泛。根据办公室经理 Will Norris 的说法,该办公室于 2004 年成立,主要是为了遵守合规要求,了解和组织开源许可证和代码的使用。那时的谷歌规模较小,参与了广泛的开源项目和代码使用,但当时并没有许多正式的合规流程。随着公司不断发展,这种缺乏合规性和组织的情况必须改变。Norris 说,他在办公室工作了四年,最初作为软件工程师,2016 年 9 月成为其经理。

谷歌的开源办公室遵循三个重要原则,这些原则旨在帮助员工使用开源代码、将开源代码回馈社区,并支持全球更广泛的开源生态系统。这些使命自办公室创建以来一直保持不变,而该办公室仅有大约 15 名团队成员,服务于公司约 72,000 名员工。

为了保持开源生态系统的健康,谷歌主要通过以下几种方式进行努力:雇佣合格且经验丰富的工程师参与项目,为需要资助的开源基金会、组织和项目投入大量公司资金,同时定期赞助技术会议,以传播开源软件创建的理念和实用性。

这也意味着开发和运营像谷歌夏季编程这样的项目,为全球开发者提供机会,让他们在夏季期能在导师的帮助下编写代码,获得导师提供的培训和指导。

对于谷歌的开源办公室而言,夏季编程项目是一个直接体现投资回报的项目——它培养了一批未来潜在的开发者,这些开发者可以带着经验和对开源开发实际操作的了解,未来有机会成为公司的一员。在开源世界中,这种策略可以通过类似的开源办公室投资,惠及许多其他公司,帮助它们在参与的社区中获得利益。

在谷歌,大多数开源社区管理工作会发生在其众多的产品团队中,而开源办公室则为这些团队和项目提供支持,帮助它们按照自己的方向前进。不同项目的业务目标各不相同,取决于是否在每个案例中开源一个项目。谷歌通常同时进行约2,000 到 4,000个开源项目。

“因为开源一个项目或代码的理由有很多,我们允许公司内的各个业务部门根据商业角度决定是否开源某个项目。我们乐于让项目根据其目标采取适合他们的方式。我们的角色更多是作为促进者和顾问。” —— Will Norris,谷歌开源办公室经理。

谷歌的开源办公室由以下几个团队组成:一个合规团队,包括两名律师;一个外展团队,负责活动参与;以及一个工程团队,负责构建自动化合规检查工具和支持公司的开发项目。其另一个重要职责是仔细而持续地跟踪各种开源使用的统计数据,包括需要构建什么以确保合规,以及代码发布或引入所需的时间。

谷歌开源办公室最近实施了一个有趣的举措,鼓励所有在主要工作中负责开源的员工——无论他们是图形设计师、技术文档人员、营销人员还是开发人员——将最多20%的时间用于公司内其他项目的具体工作。这个想法是促进团队之间的更多跨部门合作,从而帮助他们更好地理解彼此,并改进整体项目。

建立开源办公室

对于每家公司而言,这就是个性化决策开始的地方。这个过程可以从高层管理开始,获得高层的支持;也可以从底层开始,由一些使用开源的开发人员和开源爱好者推动,希望将其正式化。它可以表现为对法律问题和安全性的指导需求,或者作为一个从草根努力发展起来的项目,吸引公司高层的关注。它甚至可以从一个具有前瞻性的CEO或CTO开始,他们倡导和推动公司前进,通过加深对开源的承诺来增加价值。这种共识和高层支持对于获得关注并推动项目向前发展至关重要。

那么,你如何开始开源办公室的旅程呢?以下是一些关键步骤:

1.寻找一位领导者

无论你的计划如何开始,找到合适的领导者来帮助开发和管理公司内的新兴开源办公室,是至关重要的。理想的候选人应该对开源的运作有详细的理解,同时具有作为开发者、贡献者或提交者参与现有开源项目的技术背景。他们还应对公司的业务有广泛的了解,并具备商业洞察力和管理技能,以帮助制定策略和规划跨业务部门的工作。同时,他们需要具备良好的社交能力,以便向他人传达热情、知识和信息,帮助他们理解开源的创新,是如何变革、改变和改善公司的运营。项目办公室负责人需要能够与人讨论深层技术,但不必掌握每项技术的细节,因为技术种类繁多,难以全部精通。

在开源合作的精神下,有大量在线资源可以帮助寻找最佳候选人,包括为各种公司(如 Capital One、Box、VMware、Microsoft、Twitter 和 Yahoo)设立此类角色的详细示例职位描述以及开源项目经理的职位描述.

2. 定义你的运营

在建立开源办公室的运营机制时,预算、人员配置和所需的技术工具和系统也是关键问题。有些公司可能会从兼职经理开始,但很快会发现这种方法的局限性。将这一职位设为全职是启动项目的坚实步骤,同时配备一个小型支持团队,以保持灵活性。

如果开源办公室规模过大,就可能变得过于集中化。你希望尽可能让公司内部的开发人员和开源社区参与到过程中。规模过大的办公室可能会导致其他人将问题推给开源办公室,而不是自己解决这些问题。

一个定义良好的开源办公室的例子是,它推动所需的政策、流程和工具,同时秉持一贯的原则,去消除发现的摩擦,自动化工具去去可简化任务,并分发需要完成的任务。我们将在以下部分详细介绍如何制定政策和流程。

一个开源办公室必须提供结构化的政策和流程,但也要保持灵活性。当开源用户和贡献者需要帮助时,办公室的运作更像是一种咨询服务,提供指导的同时仍然允许员工做出与他们工作相关的个人或团队业务决策。最终的目标是建立适当的职责和责任平衡,以满足公司及其开源用户的需求。

3. 寻求反馈和获得支持

建立开源办公室不是一件可以孤立完成的工作。由于它将在你的业务中发挥核心作用,成功创建它需要来自公司内部所有相关方面的开放和诚实的意见和反馈。确保从高管到开发人员的每个人都能参与到其创建过程中,将有助于为这一工作赢得广泛的支持。

“如果你的目标是全面处理公司在开源方面的活动,包括发布和引入开源,你真的需要考虑哪些是你真正关心的核心事项。保持流程尽可能简化,以便专注于这些核心事项,然后在此基础上尽可能多地自动化。” —— Will Norris,谷歌开源办公室经理。

组织架构

那么,开源办公室应该如何以建立,及在公司组织架构中的哪个位置设立呢?它应该设立在工程部门内吗?还是在法律部门、CTO 办公室或其他具体业务部门内?同理,这取决于你公司的主要业务和开源战略。

法律部门

对于拥有大量知识产权的公司来说,开源办公室可能非常适合设在法律部门,这样开发人员可以与法律团队密切合作解决出现的问题。这可能对硬件公司特别合适,因为这类公司始终关注可能遇到的与知识产权相关的法律问题。

工程部门

对于那些以工程为主导的公司来说,他们通常选择将开源办公室设在工程部门内部。这使他们能够直接将精力集中在提高开发人员的工作效率和生产力上。

开发者关系、市场营销或传播部门

在其他情况下,一些开源办公室设在组织的市场营销部门,因为他们利用开源来引导潜在客户,从而销售他们开源构建的产品。

在Twitter,虽然开源的使用对公司的成功至关重要,但自2010年起,开发人员发现很难向开源项目贡献代码,因为公司的法律部门对代码许可和相关问题有严重担忧。开发人员和软件工程师通过寻求自动化许可合规流程的方法——以“润滑轮子”的方式——来缓解法律和工程部门的顾虑。最终的结果是聘请了一位开源项目经理,并成立了开源办公室,以解决流程问题、简化程序、引入工具来自动化任务,并进行其他必要的更改。

有趣的是,Netflix容器云部门的经理Andrew Spyker说他们采取了不同的方法,选择不创建或使用集中式的开源办公室。这家流媒体电影和娱乐公司通过一个 小型跨职能工作组 来组织其开源使用,该工作组运营一个内部邮件列表用于讨论,并每月非正式地开会一次,以帮助彼此解决开源问题。志愿者工作组成员协助其他分散的团队,减少了大家在法律问题、工具、监控和社区推广等行政任务上的关注。对于Netflix来说,这种方法是可行的,因为它是一家娱乐公司,而不是一家软件公司。

在微软,开源办公室的结构独特,因为它位于工程部门内部,并且需要支持大约 60,000 名软件工程师。如此庞大的开发人员数量要求公司放弃将所有开源项目的细节集中处理的想法,这种集中方式会导致办公室不堪重负且难以运作。相反,对于那些无法自动化的事务,公司开源办公室团队使工程师能够对他们的项目做出本地决策,而无需尝试绕过可能造成操作瓶颈的集中办公室。

在微软的流程中,工程师可以进入公司的开源工作流,分享他们希望使用一段代码或向开源社区发布某些内容的信息,然后从本地审阅者那里获得反馈。大约300个不同的业务和法律审阅小组可以对这些本地请求提供专业意见,通过高度专业化的过程为公司提供可行的方法。

“如果我们试图设立一个集中机构来批准 Windows、Office 和 Azure 的开源,那我们会抓狂。这些是根本不同的业务。我们为 工程师 提供工具和指导以支持他们的工作,但我们不是一个 集中审批机构。这种集中审批在一些公司有效,但在我们这里行不通。” —— Jeff McAffer,微软开源办公室主任。

管理角色

在创建开源办公室时,还必须决定开源项目经理、公司的法律团队以及由工程师和高管组成的任何审查委员会的角色和职责。

项目经理

为了实现最大效果,项目经理应该被赋予执行级别的职位,直接监督和亲自管理公司在开源活动中的利益。这将使他们拥有引导公司朝着开源目标和愿景前进所需的工具。

微软使用一个开源执行委员会,它类似于一个审查委员会。该小组由公司内部所有主要业务部门的副总裁组成,提供董事会风格的政策变更和引入指导,设定开源项目的优先级,并协助推动行为变革。

法律

像公司内部的其他职能部门一样,法律团队必须在开源办公室的运营中有发言权,以确保遵守法律、开源许可协议和其他法律细节。对于开源项目,法律团队需要负责确保公司可以在内部使用代码,并在可接受的条款下向项目做出贡献。大型组织应考虑聘请或培训一名专职律师来为他们的开源项目提供建议。你也可以使用兼职的、有相关知识的员工或外部律师。与了解和有开源许可及知识产权经验的律师合作通常会有帮助,因为这相对于商业合同或标准来说是一个专门且有时令人困惑的法律领域。

合规团队

开源合规团队是一个跨学科的小组,由负责确保开源合规的各类人员组成。核心团队,通常称为开源审查委员会(OSRB),由来自工程和产品团队的代表、一名或多名法律顾问以及合规官(通常是开源项目经理)组成。

扩展团队由多个部门的各种人员组成,他们持续为合规工作做出贡献。这些成员可能包括文档部门、供应链、企业发展、IT、本地化以及开源执行委员会(OSEC)。然而,与核心团队不同,扩展团队的成员仅根据从 OSRB 接收到的任务兼职处理合规问题。三星项目经理易卜拉欣·哈达德(Ibrahim Haddad)在他的书籍 《企业中的开源合规》 中详细讨论了在实现开源合规过程中各个参与者的角色和职责。

开发者关系、倡导和传播者

开源开发者关系和传播者对于一个新兴的开源办公室非常重要,因为他们可以在公司的开发者社区内为特定项目激发兴趣和热情,这有助于推动工作并增加工程师之间的团队合作。传播者通常会参加会议和技术活动,解释什么是开源,帮助观众了解开源如何使用以及它带来的挑战和机遇,同时分享他们在开源社区中的公司经验。

Others

其他

此外,创建其他职位对于开源办公室的成功也很重要,包括工具管理员、培训经理、工具和系统的集成开发人员、部署支持人员、实施项目负责人和开源传播者。例如,工具管理员需要帮助选择、提供和集成工程师在开源项目中所需的工具,同时确保这些工具符合企业的许可和其他要求。

设定政策和流程

在公司开源办公室的重要组成部分已经规划或组建完毕后,从创建到结构再到人员,下一步就是制定明确的政策和流程,以便一致地实施公司的开源战略。

这些政策应明确公司在开源工作中的要求和规则,以及记录和可执行的流程,以确保日常操作中遵循这些规则。

关键是,这些政策应要求最少的额外开销。微软在审视其开源办公室的政策和流程时,目标是使其对开发人员和其他团队成员尽可能不显眼。该方法是在审查现有开源政策和流程时,反复地消除、自动化和授权任务,以便不断质疑和更新规则,从而简化程序。这意味着要询问政策存在的理由以及如何改进以便更好地服务用户。

“制定一个明确的政策是很好的,但必须是一个明确的、最小化的政策。否则,律师、安全人员、业务人员等各方都会纷纷提出他们的顾虑和限制。最终,你会得到一套束缚性的政策,基本上意味着没有人能做任何事情。” —— Jeff McAffer,微软开源办公室主任。

即使这些规则为开源办公室精心制定,公司也必须准备好,随着时间的推移,根据业务变化和开源参与的成熟与增长,来调整和修改这些规则和流程。

这可能听起来像是过程中的另一个令人畏惧的步骤,但就像开源代码本身一样,样本规则和流程在开源领域中是可以获取的,企业可以实施和定制这些样本,从而简化任务。

最好的示例之一来自谷歌,该公司在2017年初发布了其 开源政策,供公众审阅和自由使用,以便其他人了解公司如何使用、发布和支持开源,以及如何参与项目和社区。虽然出于安全和隐私原因,部分内容被隐藏,但它提供了许多关于公司如何进行工作的宝贵经验。

在起草开源政策时,需要讨论的许多主题包括:

发布代码的政策

你希望帮助人们在为开源项目做出贡献和发布自己项目方面取得成功。指南和检查表能确保开发者在将代码发布为开源时,避免遇到许可或保密问题。特别是对于新贡献者,提供一个内部审核过程作为安全的反馈渠道,也有助于在做出贡献之前获得反馈。(请参阅我们的参与开源社区指南)。

你的组织还应努力采用“优先向上游提交代码”的开发政策。通过首先向上游开源项目提交补丁,并将其整合到自己的产品中,将避免在每次发布后花费大量时间和金钱进行重构工程。

接受贡献的政策

除非你的开源项目托管在一个中立的基金会,否则制定规则以规范公司如何接受来自外部开发者的贡献是特别重要的。

“你实际上不希望只有你们公司的人在为你的开源项目做贡献。你希望公司外的人也能为你的开源项目做贡献,因为最终,雇用全球所有最聪明的人是不可能的。即使你是谷歌,这也仍然不现实。” – Chris Aniszczyk,Cloud Native Computing Foundation 首席运营官。

当然,这也是将公司开源代码发布到其他社区并邀请其他开发者对自己的项目产生兴趣的好处之一。因为从大的角度来看,即使这些开发者并不是你们公司的正式员工,你们也可以有来自全球的优秀人才在你们的代码上工作,提升其质量和扩展功能。这种合作对公司来说非常重要,也是许多开源办公室的共同关注点。

促进采用的政策

你还需要鼓励其他人将你的代码用于他们的产品和服务。这对建立生态系统至关重要,这些生态系统反过来又有助于发展和维持你的开源项目。开源使用的政策可以采取各种创新形式。

Red Hat有一个独特的政策,即在大多数情况下,默认将新创建的代码从一开始就设为开源。这意味着在公司内部开发的每一段软件,都假设它将来可能会被发布为开源。这一点很有趣,因为通常工程师在将他们的代码发布为开源时会有不同的态度,这是因为其他人会查看这些代码。由于这种审查,他们往往在编写开源代码时会以更好的方式组织代码,编写出更干净的代码,并减少或改善代码依赖。

内部使用的政策

其他需要的政策包括关于团队如何寻找可信的开源软件来源和创建的规则,建立代码管理和维护程序的政策,以及规范项目的社区互动。(参见我们关于使用和分发开源代码的指南。)

开源软件使用策略确保了任何软件(无论是专有的、第三方的还是开源的)在进入产品基础之前都经过审计、审查和批准。这还确保了公司有计划完成使用各种软件组件所产生的许可证义务,确保产品在交付给客户之前已经符合所有要求。

例如,你的政策可以要求工程师在将任何开源代码集成到产品中之前,先获得公司审计人员的批准,例如开源审查委员会(OSRB)。政策还可以规定,从第三方收到的软件必须经过审计,以识别其中包含的开源代码,从而确保在产品发布之前能够履行许可证义务。

合规政策

还需要制定政策,以规范和建立法律合规程序,并确保高层管理对该计划的监督。(详见我们的电子书,《企业中的开源合规》。)

你需要规划如何处理那些支持你的合规性和代码测试策略的软件工具。你将需要自动化和简化开发人员和贡献者的程序,同时还需要内部供应链团队(如果有的话)的帮助,以确保第三方引入的代码也符合合规要求。

目前市场上有广泛的开源工具(如 FOSSologySPDXOpenChainORTClearly Defined),以及收费的专有工具,这些工具可以帮助完成这些重要任务。对于大多数开源办公室而言,可以利用高质量且功能齐全的工具集合,无需自建定制化的工具。这主要得益于开源协作,贡献者创建和完善了可以处理企业任务的工具。如果这些工具不能完全满足你的项目需求,用户可以参与贡献,修改和改进它们以获取所需的功能。参与开源社区中的企业工具开发,是你未来开源办公室可能希望支持的一个方面。

现有的开源资源也是寻找开源项目所需其他材料的潜在宝藏,包括贡献者许可协议(CLA)的文档。CLA“定义了在公司/项目中贡献知识产权的条款,通常是开源许可下的软件。” 贡献者许可协议 使用CLA的项目要求贡献者及其公司在接受贡献之前签署CLA。

许多公司已经编写了自己的CLA,但也有通用版本的开源协议可以使用,无需从头开始编写。大多数所需内容可以从模板中找到,然后根据具体情况自定义CLA,以涵盖所有剩余问题。其他潜在贡献公司的律师通常会欣赏使用标准条款的做法。

谷歌定期使用各种工具来执行自动化代码检查,这些工具包括自定义过滤器,可以扫描代码库以检查许可证、许可证兼容性和其他因素。每次谷歌发布新版安卓或其他应用程序时,都要经过一个自动化的许可证合规检查过程,从而简化公司的程序。自动化加快了向工程师解释该过程简单和无缝,并且不会对他们的应用程序使用造成负担。

所有新入职的谷歌工程师还必须参加一个小时的开源课程,课程中强调了许可证和合规性如何成为公司业务的一部分。公司分享的一个关键收获是,谷歌不仅因法律要求而必须遵守许可证,而且因为这样做对社区是正确的。谷歌的律师会在许可证或代码使用上出现明显错误时代表公司,但公司对可能提交的代码对社区声誉造成伤害非常敏感。

“激怒我们的开源社区朋友将是毁灭性的。这是我们绝对不愿意做的事情,因为我们关心这个社区,我们是其中的一员。对于那些刚接触开源的公司,我认为他们往往没有意识到这一点的重要性。” – Will Norris,谷歌开源办公室经理。

结束语

当公司决定创建一个开源办公室时,有很多工作要做,也有许多因素需要考虑,但其价值很可能会超过为此付出的努力。在整个过程中,找到合适的领导者来推动项目办公室的工作是取得成功的关键步骤。

“这是一次文化变革的努力。代码显然是其中的重要部分,但社区和参与是人与人之间的事情。如果你打算创建一个开源办公室,并努力使其成为现实,你需要理解这种文化,并找到能够帮助推动这种文化达到新水平的人。你的开源负责人实际上是一个变革推动者。” – Jeff McAffer,微软开源办公室主任

开源项目职位列表样例

如果你有兴趣建立一个开源办公室并希望招聘相关职位,我们建议查看 TODO Group 提供的模板以及实际的职位描述示例:

https://github.com/todogroup/job-descriptions

致谢

贡献者名单: