提升开源项目的开发影响力

开源开发使用的方法与许多组织所习惯使用的方法不同,但是如果您有明确的计划可以执行,开源开发就会变得更容易。幸运的是,许多公司和个人已经为重要的开源项目成功的做出了贡献,并开辟了道路。他们尝试并修改过各种方法,以便于在开源社区中发挥领导作用。

本实用指南将帮助您和贵公司改进您的内部开发流程,并帮助您做好准备面向对公司最重要的开源项目做出贡献。对Linux Kernel做出贡献是开源开发人员面临的最严峻挑战之一,所以我们将以这个事例作为本指南的一个例子。幸运的是,本指南将适用于几乎所有您将面对的开源项目。

本指南的撰稿人


Ibrahim Haddad

三星美国研究院研发副总裁兼开源小组负责人


Gil Yehuda

(Yahoo + AOL) 开源高级经理

Section 1

 什么是有影响力的开源开发

开发者的贡献是实现通过您组织的开源战略的开源程序所支持的业务目标的主要方式之一。有很多方式是会影响一个开源项目的方向,从测试不同环境中的代码并添加到代码文档的方式,到资助项目或基金会并参与到项目董事会中的方式,或者是使用其他开源项目中的代码的方式。但是,通过代码贡献的质量、数量和一致性,贵公司将会在开源项目中发挥最大的影响力。因此,为组织提供帮助您的团队开发高质量、高效的开源代码的工具和流程,是符合贵组织的最佳利益的方式。

有影响力的开源代码可以影响您贡献的开源项目的技术方向,从而改善您的产品质量,同时最大限度地减少维护该代码的成本。

我们的目标是通过对开源的贡献来提高您的开发团队的效率。通过帮助贵组织开展一些后文推荐的开源开发的最佳实践,您可以实现:

  • 减少产品团队所需的工作量
  • 使维护源代码和内部软件分支的成本最小化
  • 提高代码质量
  • 创造更高效的开发周期
  • 开发更稳定的代码以作为产品的基础

提高公司在关键的开源社区中的声誉。

Section 2

开源项目在完善开发中的作用

您的开源项目无论是作为在内部使用的基础架构或服务,还是作为商业产品发布,都会对您的产品产生直接和间接的积极影响。这些影响是您可以衡量和改进的,它们还能提供确切的结果来向高级领导层汇报——帮助您展示您的开源项目的价值及其对投资的回报。

直接启用

通过贡献代码本身的数据,您的开源项目会直接影响贵组织的开源代码的开发。每家公司都会根据最适合其自身业务目标发展和最适合公司结构的方式构建开源项目和工程贡献(请参阅我们开源项目指南中的项目架构部分)。但是,贡献代码的方式是在开源项目中获得影响力并在开源社区建立贵公司声誉的最佳方式。

在三星,开源项目拥有自己的专属工程团队,这种方式可以满足公司研发和产品团队的开源需求。此项目还帮助将三星的内部代码引入各种开源项目中,并且它已经将众多与三星产品有关的驱动程序应用为上游代码。产品团队拥有自己的开发人员,并且他们为开源项目做出贡献,但由于他们与产品开发紧密相关,所以他们的自由度较低。因此,开源团队接收诸如“我们需要在Kernel中实现功能X”的请求后,他们的工程团队就会将代码交付给产品团队和Linux Kernel。

我们向上游提交代码的专业能力和这些开源的组成部分使我们变得非常有价值,并且我们的努力已经使得用在维护三星产品和服务所需内核代码上的努力减少了很多。

Ibrahim Haddad 三星美国研究院研发副总裁兼开源小组负责人

只关注政策和流程的开源项目办公室并不总是有专属的工程团队来贡献代码,相反,跨部门的工程师会分配部分时间用来更改任何开源组成部分,以便向上游推动代码。

不管工程团队是如何构建的,其目标都是最大限度地减少这些开源组成部分的造成的技术债务。如果上游得贡献没有实现,产品团队将陷入在与上游不同步的巨大代码库中,他们将会花费时间在将更新移植到与上游不同步的分支上,而不是推进产品。

通常,一个深度参与产品团队的开源开发人员很难在上游的工作及职责(作为提交者或维护者) 和运营产品的工作之间取得平衡。

每个开源项目办公室都会根据其业务需求进行独一无二的架构设计。例如,Facebook在开源项目办公室内有一个专属的工具团队,负责开发内部工具以用来帮助其开源组合的管理工作。这个开源组合包括Facebook共享的项目,这些项目主要托管在GitHub上,除此之外还包括其做出贡献的其他外部项目,如Linux Kernel。(请参阅我们关于Facebook开源项目的案例研究 )

间接启用

然而,开源项目的影响力并不仅限于组织为各种开源项目贡献的代码。从公共关系和市场营销, 到法律支持、开发人员培训等等,一个开源项目能够通过各种方式来实现开发。这里有四种方法可以通过非代码贡献的方式来间接推动开发:

1.外部技术讨论。

做出间接贡献的一个推动开发的主要途径是通过参与技术讨论来影响各个社区。您的开源开发人员可以通过积极参与邮件列表和IRC聊天来参与讨论,并可以随时了解最新的项目更新。而在有正式管理结构的大型项目中,您可以通过参加技术指导委员会做出贡献。

2. 内部技术讨论。

在内部,开源开发人员可以参与政策和架构讨论,以确保组织的决策与特定项目社区的方向方向相匹配。例如,开源开发人员应该参与到关于对依赖开源代码的产品的长期规划的所有战略讨论中。

3. 合规支持。

项目经理还可以提供帮助来解决常规性问题,并用其收到的开源常规性的问询来支持合规团队。

4. 漏洞修复。

最后,您还可以帮助稳定您所参与的各种开源项目中的代码。您可以查找并修复漏洞,测试修补程序后向上游提交。这可以提高代码对所有项目用户(包括贵公司)的整体价值。

Section 3

普遍的改进方面

开源项目大致可以在以下三个领域中实现开源项目中开发人员生产力和生产效率的提高——文化、流程和工具。在每个范畴中,都有几个要素需要处理以适应开源模型。

文 化

发展模式
合作
透明度
精英管理
团队形成
招聘实践
正确的成功衡量指标

流 程

发展模式
管理
使用
合规性
贡献
审批
运营模式

工 具

IT基础架构
开发工具
跟踪指标
知识共享
代码重用

开源团队在企业环境中所面临的特殊挑战

文化

文化的挑战往往来源于传统软件开发实践与开源开发要求之间所存在的差距。您可以聘请开源专家并让他们培训其他不熟悉开源开发模式的团队,从而弥补这个差距。

我们的目标是为开源工程师提供足够的时间来履行对上游的责任,以便他们能够为三星提供足够的开源领导力。

Ibrahim Haddad 三星美国研究院研发副总裁兼开源小组负责人

流程

开源开发的模式是动态的,运行速度非常快,并且对合规性有特殊要求,因此那些无法使其内部流程适应于这类发展模式的公司很容易被淘汰。开发人员需要能够快速地向上游贡献代码,并且所有的内部代码策略都需要被修改来支持这一过程。

首先,让团队负责维护正确的开源合规性以避免法律问题的行为是至关重要的。(请参阅我们的电子书《企业开源合规性》

您还需要建立一个简单的开源使用和开源贡献的内部审批模式。多年来,三星已经从高度复杂和繁琐的政策转向了更简单的接收、审核和批准源代码贡献的方法,这是一个能够平衡所有相关方(法律、工程和开源)的决策。我们现在采取折中方法为专门的开放源代码的团队提供支持,该方法能够一次性批准并且为多个开源项目做出贡献。但对于那些根据所贡献代码的不同性质而需要获得不同级别审批的其他团队来说,情况并非如此简单(例如,简单的漏洞修复,改进现有功能的代码,提供新功能的代码或启动新项目的代码)。

工具

您还需要确保您的工具从一开始就与开源开发模型是兼容的状态。创建一个设置,能够满足开源项目办公室需求,并且同时也符合企业的IT指南。

例如,三星公司发布的Linux设备可以确保与其工程师在参与开源开发过程中所需的所有工具配合使用。这种环境允许开发人员不需要对其工作方式进行大幅度改变就可以加入开发团队。他们还支持在家办公,实际上在硅谷只有极少数开源开发人员会在办公室工作——其他所有员工都在世界各地远程办公。

Section 4

最受推荐的做法

首先,让我们介绍一些历史。2000年12月,IBM公开承诺将在Linux 研发上投入10亿美元,这个事件是开源历史上的一个重要里程碑。IBM对Linux和开放源代码的投资可以说得上是企业界的真正开拓者,因为在当时只有极少数公司会这样做,并且这些公司也绝对没有IBM这样的规模。IBM必须学习很多关于如何与开源软件和其所参与的各种开源项目社区进行的合作。

这是企业开放源代码的起点,自那时起,先是数十家,然后是数百家公司就一直追随IBM。到今天,仍然有数千家公司在进入开源领域,因为开源正在成为软件开发的新常态。但是问题是:我们如何才能最大限度地减少企业学习曲线并加快“做好”的过程?

答案很简单,但如何将此答案应用于独特的企业文化却是一个难题。让我们探索一些有超过17年开源软件经验的企业中,学习“简单”方面,您将会处理把这些所学的经验应用于特定企业环境的难题方面。

谨慎来说:除了实施所列出的这些实践之外,您还需要引领企业文化从传统的软件开发实践转向更加开放和协作的思维模式。公司内部的动态需要支持开源工作,作为贵组织内部的开源领导者,您将在获取资金资源、证明投资回报率、获得上游关注等方面面临诸多挑战。这些挑战往往需要思维方式的重大转变,以及经过沿着开发链条的大量培训。

1.从项目社区雇佣关键开发人员和维护人员

培养内部开源专家需要相当长的时间,因此,雇佣关键开发人员是决定性的一步,这可以让贵组织快速获得技能和认可。

两到三个关键开发人员将会是一个良好的开端,他们能在诸如Linux Kernel这样的大型项目中产生明显的影响,吸引更多可雇佣的人员,并能够给予足够的资源来指导现有的初级开发人员。(请参阅我们关于招募开源开发人员的指南)

我们的目标是找到那些拥有足够的同行认可度,并且在社区中具有影响力的关键开发人员。对这些人而言,要达到这种高度,通常有三大核心要素:领域内的专业知识,开源方法和开源实践经验。您还需要将公司兴趣与个人兴趣结合在一起:当特定项目中高级开源开发人员的个人兴趣与公司兴趣不一致时,激励他们工作的热情是非常困难的事情。例如,一个Linux内存管理专家可能对公司会优先考虑的文件系统的工作并不感兴趣,因此,寻找兴趣匹配的关键开发人员对于长期关系至关重要。

2.为向上游贡献分配时间

聘请开源开发人员的核心原则是要支持您的开源开发和上游活动,您可能也期望他们可以在他们的专业领域内能够尽力支持产品团队。然而,产品团队试图占用开源开发人员的时间来让他们尽可能多地从事到产品开发工作中,以此发挥团队的影响力,这样的情况并不罕见。如果发生这种情况, 或许在您意识到事情发生之前,就已经有许多开源开发人员会离开,寻找一份新工作来为上游项目服务。

因此,创建和保持上游工作和产品工作的分离很重要。换句话说,建议您为开源开发人员提供有保证的时间来满足他们的上游愿望和责任,尤其是当他们是维护人员时。对于在产品组成部分中使用开放源代码的初级开发人员或其他内部开发人员来说,与上游社区的这种互动将增强他们的在语言、沟通和技术上的能力。在没有这种为上游服务的时间保证的情况下,这些开发人员很容易被吸收并成为产品团队的延伸,导致他们在上游的焦点变得越来越倾向于产品开发方面。

您同样应该成为产品团队的上游合作伙伴;产品团队常常觉得自己处于高压环境下,特别是在电子产品的消费环境中。他们经常感觉人手不足,缺乏支持同产品并行的上游开发的关键资源,并且不断面临着在紧凑的时间内交付工作的压力。在这样的环境下,很容易为了在短期内节省时间而忽视了上游工作的益处,而不幸的是,这一点可能会因为导致技术债务并从长期上来看会产生较高成本。开源团队可以通过成为致力于向上游提供重要代码的合作伙伴来向产品团队提供帮助,从而减少这种技术债务的压力。

鼓励开源团队之外的开发人员向开源社区学习并做出自己的贡献自己。我们尽可能为上游代码贡献提供帮助,但是我们的资源有限,而且并不总是可以深刻了解某些产品,这些产品需要清晰确认其中的哪些代码是可以向上游提交的。更好地通过我们自己以外的团队参与开源社区,可以让我们在上游获得更多重要的代码,并提高我们与社区互动的能力。

3. 建立一个导师项目

在与您的产品相关的特定技术领域培养开源人才。从公司外聘用一些人才资源是很容易的,但这种方法存在一些局限性。

另一种方法是通过技术领域和开源方法的培训,将您现有开发人员培训为开源贡献者,然后这些开发人员可以与导师配对,以进一步提高他们的技能水平。

建立一个导师项目,可以让资深的、经验丰富的开源开发人员为初级、经验不足的开发人员提供指导。通常,导师项目时间将持续3至6个月,在此期间,导师应监督追踪受指导者的工作,给他们分配任务并确保结果的正确性。导师还会为受指导者创作的所有内容进行代码审核,并在受指导者将代码提交给上游项目之前提供评价。

我们的目标是增加公司向上游项目贡献代码的开发人员数量,并通过提高改善代码质量和提高上游项目接受的代码百分比来提高个人效率。一般而言,分配给一个指定导师的受指导者不应超过4-5 名,理想情况下,他们应该与导师在同一领域工作,以使代码的审核更有效率。

4. 正式化开源职业道路

在您的人力资源(HR)系统中创建一个开源开发人员跟踪模块,以便那些被聘用为开源开发人员的员工能够很好地了解到,对比其他非开源开发人员,他们的职业生涯在公司内部将如何发展。此外,您应该将与开源开发工作相关的目标成果纳入绩效奖励考核中。衡量专业或封闭式源代码开发人员绩效的指标通常与开源开发人员的不同。

在一些公司中,开源和非开源开发人员之间存在明显的区别。但在许多公司中,这条分界线往往是不明显的,这取决于其组织架构和开源战略的不同。实际上,所有现代开发人员都必须使用开源技术,没有闭源开发者。不同的是,他们的代码有时会留在公司内部,有时会被发布(贡献给第三方, 或作为一个新项目发布)。您的人力资源跟踪和奖励机制应该反映出贵组织独特的架构和开源方法。

最后,无论一般的公司与办公方式相关的政策如何制定,贵公司请允许开源开发人员在家办公。最近,我们看到很多公司的在家办公政策发生彻底的改变,其中有许多公司禁止在家办公或者给在家办公的开源开发人员设置了诸多严格的限制要求。但在开源世界中,在家办公的政策几乎是强制性的,因为开源专家遍布全球,所以这项政策往往是聘请他们的唯一途径。

灵活的工作政策对运营也有好处。据斯坦福大学公布的一项研究说明,提供远程办公选择可减少员工流失率,并且“员工流失率的下降超过了50%”。由一家领先的软件服务供应商PGI提供的一项研究同样表明,80%的员工在家办公时更加士气高涨,69%的员工缺勤率更低。

5.提供培训

任何公司都不可能雇佣到一个特定领域内的所有资深的、最专业的开发人员。这个观点适用于Linux Kernel和其他所有著名的开源项目。因此,您必须采用某种方法提高贵公司的开发人员在特定技术领域的竞争力。除了技术培训外,您还需要通过培训来教授给他们开源开发模型和传达开源法律合规的基本概念。

Linux Kernel案例中的培训课程包括:

  • 涵盖LinuxKernel中各个领域的技术培训。维护人员或高级开发人员通常会介绍这些内容以增强内部的Kernel专业知识能力;鉴于聘请专业的Kernel开发人员的难度,这种专业知识的教授至关重要。
  • 开展源代码开发方法课程,教授给开源新手关于开放源代码和LinuxKernel开发如何运作,以及他们应该如何最好地参与其中的内容讨论。
  • 开展源代码合规性课程,教授给员工合规性原则和开源许可的基础知识。同时也应该传达给他们贵公司的政策和流程的具体内容。(Linux基金会为开发人员提供免费的在线开源合规培训。课程可在这里找到 )

6.参加开源活动

支持您的开发人员出席并参加各类开源会议和活动,包括当地社区聚会、编程马拉松和峰会。参与这些活动有助于他们建立与同行的个人联系、建立关系、面对面地进行社交互动,并能够参与指导项目方向的技术讨论。

如果您的开发人员有其他人可能感兴趣的工作,请帮助这些开发人员准备要呈现的内容。最后, 您还可以赞助大大小小的各种活动,以提高您在项目社区内的外部可见性。这些活动也是寻找人才的绝佳场所!

7. 提供灵活的IT基础架构

提供灵活的IT基础架构,帮助开源开发人员可以没有任何困难地与开源社区和Linux Kernel社区进行沟通和协作。此外,建立与外部使用的工具相匹配的内部IT基础架构,以帮助实现缩小内部团队与Kernel社区或其他开源项目社区之间的差距的目标。

您的大部分基础架构都会随着贵组织的开源文化而自然发展,但重要的是要意识到基础架构实施的必要性和计划。

在开源开发中使用的IT服务主要有三个主要领域:知识共享方面(wiki,协作编辑平台和公共网站),沟通和问题解决方面(邮件列表,论坛和实时聊天)以及代码开发和分配方面(代码库和漏洞跟踪)。这些部分或全部工具需要能够在内部提供以便可以充分地支持开源开发。这有可能与现有的全公司的IT策略相冲突,如果是这样,如何解决这些冲突就至关重要,并且要允许开源开发人员使用他们熟悉的工具工作。

这些开源实践通常需要一个没有众多标准和IT政策限制的IT基础架构。

我们花了数年,经过不断的讨论和谈判,从传统的IT设置,转变为支持我们开源开发的更加灵活的环境。我们让它为我们工作,并且具有足够的持久性,您也可以使其为开源团队工作。

Ibrahim Haddad 三星美国研究院研发副总裁兼开源小组负责人

8.追踪开发人员的代码贡献

创建一个内部系统来追踪开发人员的贡献和影响。贡献可包括上游开发、产品团队支持、知识教授(指导,培训)、可视性(出版物,讲座)、启动新的开源项目,以及与其他团队或小组创建内部协作项目的贡献。

有几个工具包可以用来帮助追踪源代码的贡献;例如,Linux基金会使用名为gitdm的工具,该工具可以生成Linux基金会年度Linux Kernel报告中的数据。这些数据可以用来追踪个体开发人员以及整体团队的绩效成果。对个体开发人员来说,可以追踪到他们提交的补丁数量,补丁接受率(被接受补丁数量除以补丁提交数量)和补丁类型(例如,是否是增加一个新功能,增强现有功能、漏洞修复、文档撰写等等。)。

其他像GrimoireLab这样的工具也可以用来绘制和可视化您想追踪的指标。关于您应该追踪的指标的具体示例,请参阅下一节。

9.确定具有广泛影响的重点领域

向为一个或多个业务单元或多个产品带来收益的领域做出贡献并关注于这些领域,这将使您可以跨多个业务单元提供价值,并展示投资回报率,同时增加您获得更多资金和支持的机会。

将您的贡献集中表现在直接有利于公司战略和产品的上游项目上。在开源开发中,在不同的有趣项目之间忘乎所以地跳来跳去很容易。但在开源团队这样被视为成本中心的企业环境中,您的驱动力应该专注在支持产品开发的开源项目上。

三星每年对其产品组合进行一次审查,努力关注参与到能够被尽可能多的产品所共同使用的开源项目中,然后会根据几个因素把这些项目按照优先顺序列成清单,并将精力集中在最重要的项目上。用一个方法论来推动您的优先事项是坚持重要、合理和可靠的重要方式。

10.促进内部协作

与在其产品中使用相同开源项目的其他业务单元合作。这些合作可以采取一种或多种形式:

  • 为他们的开发人员提供培训机会
  • 针对特定主题或问题举办研讨会
  • 共同开发新的功能
  • 共同排查和解决问题和漏洞
  • 上游化他们没有资源实现的现有的代码
  • 帮助他们脱离旧的分支并回到主线版本中
  • 其他

这些合作的目标是通过开源支持帮助产品团队了解他们的需求,并实现他们的产品目标。

贵公司必须分享不同部门的信息和优先事项。举例来说,假设您在一个开源团队中,您被要求支持驱动程序的实施,但您无法访问硬件手册和说明。这听起来有点像在关灯的时候玩飞镖,而且事实确实如此,信息共享的确是开源团队与其他人是否可以成功进行内部协作的关键组成部分。

三星的开源

三星的开源组织(OSG)于2013年2月成立,旨在进行两项主要功能:一是通过帮助公司其他部门了解如何参与开源开发项目并从中受益,从而在三星内部提供开源领导力。其次是作为三星在更广泛的开源社区中的代表。团队的任务是通过积极为开源贡献力量来专注提高关键的开源项目数量和技术能力,以及积极参与到各种开源组织和基金会中。

Section 5

 追踪进度的指标

一旦贵公司开始实施这些开源最佳实践,您将需要设立合适的开源指标来推动所需的开发行为。但是,产品组织中常用的传统指标并不适用于开源开发环境。

例如,追踪变更集的数量或代码行数可能是评估开源开发影响的一个很好的指标,但是您可能遇到过多个在上游期望实现功能的实例,因为您的开源开发人员游说社区并得到了支持。在这种情况下,变更集的数量或代码行数的结果几乎与团队成员提供上游代码和减少公司下游维护工作的技术领导力无关。因此,您追踪的指标应考虑这两项活动。

随着时间变化的代码提交和代码行数

最基本的追踪目标之一,就是在特定时间段内(例如每周,每月或每年)变化的代码提交数量和代码行数。

bar graph of open source metrics

每个项目每周发生变化的总代码提交数和代码行数是良好的追踪指标的开端

通过这些数据,您可以比较各个内部开发团队的贡献,以确定源代码贡献的来源,并有助于确保资源得到适当的分配。

在这部分您可以创建图表来比较各个内部团队的累积贡献、总贡献的百分比数字以及向上游提交代码所花费的时间(参见下面的图表)。

chart of cumulative contributions over time

可以通过追踪随时间变化的累积贡献,来比较内部团队,并确定那些正在增加在特定开源社区中活动参与的团队
(本图展示的是Linux Kernel的相关指标)

chart of percent contribution

展现公司的贡献中各部分占总数的百分比随时间变化的变化,可让您确认贡献代码最多的团队

chart to commit code upstream

向上游提交代码所花费的时间数据对于追踪您的开发效率而言可能很有价值。此图表显示了各个团队如何快速向上游贡献代码,并将其与整个社区进行比较。

您还可以使用这些指标来比较您的绩效与其他参与内核生态系统的公司的绩效的差距(请参阅下面的图表)。这种竞争分析将有助于您更好地了解项目的整体开发人员生态系统的表现。

chart of cumulative open source contributions

贵公司可以对累积贡献进行分类比较,来了解贵公司与其他公司是如何竞争的。

这些衡量指标提供了一个更好的方法来说明您的优势和劣势分别在哪里,并可以帮助您了解整体发展战略的方向。例如,追踪您自己的贡献数据与竞争对手数据相对的进行比较,可以提供有价值的信息,帮助组织确认其产品在市场中相对于竞争对手产品的定位。

charts from the kernel development report

项目也可以独立发布贡献数据。
例如,您也可以利用来Linux基金会的Linux Kernel开发报告和LWN追踪Linux Kernel的贡献者

Linux Kernel对三星来说十分具有战略意义,因此公司在其他众多项目中选择将其开发工作的重点放在了此项目上。他们现在已经通过变更集,使得公司贡献排名长期处于Linux Kernel的前5名贡献者之列。同时,该公司在其认为对产品开发至关重要的其他几个开源项目上正取得同样的进展。

对于公司来说,成为最高贡献者并不是其目标,目标是得到表现出该组织的开发成果会被其所参与的社区所接受的迹象。俗话说,您要么能够作为开源影响者坐在餐桌边,要么出现在菜单上。

在菜单上意味着您会坐在办公室中为需要维护内核之外的大量代码而哭,因为您不能融入到上游中。我们更愿意坐在桌旁。

Ibrahim Haddad 三星美国研究院兼开源小组负责人

Section 6

 结语

有效开源开发直接给予是无效的,它必须通过自己努力来获得。这种领导力可以通过定期、持续的参与和贡献来获得。

通过实施开源领域中企业开拓者所进行的一些最佳开源实践,您可以在开发您所需的内部开源专业知识方面取得快速进展。然后,您可以利用这些专业知识来改进您的产品和服务质量,同时降低代码的维护成本。

黑客万岁!

这些资源是与TODO(Talk Openly,Develop Openly)组织合作创建的, 该组织是Linux基金会中专业的开源网络组织。特别感谢奉献自己的时间和知识来制作这些综合指南的开源项目负责人。参与制作的公司包括Autodesk,Com- cast,Dropbox,Facebook,Google,Intel,Microsoft,Netflix,Oath(Ya- hoo + AOL),Red Hat,Salesforce,Samsung和VMware。如想了解更多信息,请访问:todogroup.org

 

本作品拥有创作共用授权之相同方式共享授权4.0版国际许可协议(Creative Commons Attribution ShareAlike 4.0 International License)授权许可。

TODO Group
注册以获取更新!成为第一个知道何时添加更多开源指南和其他内容的人。