融入开源社区需要时间和努力,需要采用新的产品开发方法。传统的专有开发需要保密和管理层级,而开源开发则需要开放和价值共识。在开源项目中,影响力和技术方向是由代码贡献决定的,而不是职称或职位。
开源项目是由多样和地理分布广泛的社区开发的,这些社区有着自己的规则、惯例、工具和流程。简而言之,每个社区都有其独特的文化,需要时间来建立在开源生态中高效工作所需的信任、协作方式和文化理解。
本指南阐述了组织如何在商业上有所依赖的开源项目中建立领导力和影响力,了解项目内的领导文化和角色,决策的制定方式,组织如何建立领导力,以及在开源社区中成为一名优秀领导者的技巧。
何为要在开源项目中建立领导力
尽管开源文化是协作式的,向上游贡献也只是影响开源项目发展的第一步。如果项目对公司自身产品至关重要,那么积极参与引导或影响项目方向也很重要。
尽管开源项目已多次证明合作的价值,甚至包括竞争对手,但无法参与项目方向决策很快会变成竞争劣势。这就是为什么在开源项目中建立和维护领导力对企业的战略和目标至关重要。然而,这并不像拍桌子或砸钱那么容易。
开源中的领导力文化
一般,公司首先认为在开源社区中的领导工作方式与公司中的领导工作方式相同。事实并非如此。
“公司往往会经历这样的阶段,认为 ‘哦,我们很大,为什么不能敲敲桌子,让社区按我们的意愿行事呢?’” 在Autodesk的Open@ADSK倡议主管Guy Martin解释道。“他们很快意识到这种策略行不通。他们逐渐明白,获得领导地位的唯一途径是在社区内赢得角色,而实现这一点的唯一方式就是赢得信誉并作出贡献。”
企业领导力与开源领导力
在开源项目中获得领导力对公司自身在商业领域的成功至关重要,但采取这种颠覆性的新产品开发方法通常在开始阶段会显得违反直觉,有时甚至显得尴尬。
传统的专有开发需要保密和管理层级。相比之下,开源开发中的职称和职位毫无意义,重要的是开放和共识。
在开源项目中,影响力和技术方向取决于代码贡献。这意味着不能模糊代码贡献的界限;它们必须是实质性的,真正推动项目发展的方式。
起初,向上游贡献和开放协作可能会感觉像是在放弃自己的东西。但这种感觉不是建立在开源现实基础上的;相反,它是对思维和行动的重大变动的一种担忧。这种变动是创新必须的。
开源领导力的思维方式包括:
- 影响力而非控制
- 将透明度作为众包解决方案的一种手段,而不是作为曝光手段
- 引领而非驱赶
成功地从专有思维和文化转变为开源思维和文化需要时间和努力,有时甚至需要定期提醒其中的好处。三星电子副总裁兼开源负责人Ibrahim Haddad为此建立了这张简明参考表。
治理概览
开源社区的治理准则通常很少,但它们仍然严格执行。行为准则或社区指南因社区而异,但通常涵盖可接受和预期行为,以及覆盖处理不可接受行为或其他事件的程序。治理政策详细说明了开源项目的政策、结构和路线图的管理。维护政策通常涉及其他项目上的决策,如软件更新等。
但在项目和社区层面以及周围的治理不代表整体治理政策和问题。这些政策和问题也存在于开源软件被商业或其他组织消耗、贡献、重新分发和/或生产的地方。因此,开源治理必然成为更广泛的IT治理工作的一部分。
公司往往会遇到类似的问题,如消耗开源的多个流程、在社区中向上游贡献的不一致方式,以及公司内部创建开源项目的变化。制定标准化的治理政策对于控制混乱至关重要.
“我们希望为向上游贡献制定一个单一的流程,作为工程师,我希望简化流程,” Martin说道。“我不希望为了修复一个五行代码的错误而花费十周的时间,处理500页的文档。因此,我与法律部门合作,简化了工作流程,使工程师能够在合理的时间内完成工作。然后我们也为公司代码转换为开源项目做了同样的事情。”
最好让每家公司根据自身的开源治理政策和流程制定具体的规范,以便最好地适应公司的实际运作方式;实际上,这是对社区层面治理最佳实践的反映。但请注意,你可能无法针对公司的所有开源活动重复单一流程。
一致的治理模型有助于避免巨大的版本差异,以及开源许可证和安全性问题。“对于开源消费,一致的治理模型有助于确保合规性,因此当我们发布产品时,我们知道我们已经采取了正确的许可证合规措施。”
文化概览
虽然急需转变组织内部文化以符合开源思维,但必须在不失去与公司外部开源社区的联系和视野的前提下完成这一转变。
“为了在开源项目中发挥影响力,你必须让一群你不认识的人同意你的观点,他们来自不同的公司,可能有不同的目标,” 雅虎+美国在线(Oath)开源高级总监Gil Yehuda解释道。
尽管这么说起来容易,但在实际操作中常常遇到争议和反对意见,解决方案可能根据社区共识的不同而采取多种方向。
“在开源社区中,你会遇到来自不同公司的人,他们可能在许多领域有共同的目标和共同的结果,但也可能存在争议和不同目标的领域,” Yehuda解释道。
例如,可能有一组开发人员需要新功能,因为他们需要使某些功能正常工作,但另一组不希望这个新功能,因为他们想要稳定性。
“也许新功能会影响稳定性或可伸缩性。对此会有争论,或者至少会有一些紧张情绪,” Yehuda解释道。
解决这个问题,使项目朝一个方向前进,并不容易,因为没有一个人可以独自作出决定。相反,这是一个社区决策。
“帮助社区达成你认为有利解决方案的一个因素是,如果你在项目中拥有更多的影响力,” Yehuda说道。“即使你的决定可能对他们有一些微小短期负面影响,他们也会支持你.前提是你拥有领导力,是社区的信任成员,并且你站在社区的利益一边。”
但建立和维护这种领导力既是公司的使命,也是个人开发者的目标。
Oath的方法是告诉开发人员,如果他们看到可能引起争议的情况,应寻求公司的帮助。
“我们进行积极的咨询,内部讨论如何最好地处理情况,开发人员彼此分享情况以及如何解决它们的经验事故,” Yehuda说道。
还要理解一点,领导力在个人而非公司身上。因此,即使个人开发者得到了雇主的支持和帮助,但如果该开发者选择离开,雇主可能会失去影响力。
“如果你的开源项目对你的产品至关重要,而你公司只有一个人向上游贡献,那么你就存在单点故障的风险,” 马丁解释道。“你必须制定一份接班计划,而且需要公司有多个人参与其中。
这意味着公司内将有多人向上游贡献。对这个想法最常见的第一个反应是担心耗费太多人力资源在其他公司将受益的开源项目上。但如果你合理安排时间,这并不是问题。
“当不止一个工程师像乔·史密斯(Joe Smith)那样花费时间向上游贡献时,对工程管理人员来说更容易接受,因为这种负担可以分担到其他三四名开发人员身上,” Martin说道。
通过平衡工作量,你还可以减少公司在关键开发者离职时失去项目影响力的风险。对那些积极寻求在社区中建立领导地位以提升个人职业生涯和收入的开发人员来说,这也是一个有吸引力的计划。更多开发人员在这个计划中担任主导角色。
此外,公司可以通过内部开源实践和原则进行内部协作,以完成向开源文化转变,提高创新率和成功率,并进一步与开源社区联系,帮助建立领导力和吸引开发人员。
简而言之,如果目标是建立和维护领导地位,并对关键项目进行某种程度的控制,那么文化在其许多细微之处和许多层面都是至关重要的。
在此过程中,请记住“百分之一规则”。“90%的人只是乘坐飞机,被动地参与 —— 这是用户社区;9%积极参与,提交错误报告,公开回答问题 —— 我们称之为’贡献者’;1%协助指导或控制项目,分配错误修复任务,确定方向 —— 这些是’维护者’,或者更简单地说,是领导者,” Intel/Yocto Project的Jeff Osier-Mixon"解释道。
每个项目都是独特的;根据项目逐个进行调整。
协作项目中的领导力角色
尽管角色看起来与公司的角色和结构类似,但每个项目都是独一无二的,由一套特定的社区准则和治理政策来组织化和管理。务必阅读文档,加入实时的IRC、私人聊天,加入邮件列表等,了解角色是如何定义的,以及项目是如何结构化和管理的。
同时,以下将让你大致了解一些常见类型的领导角色。
技术领导力
- 提交者/维护者
- 技术咨询委员会(TAB)/技术委员会(TSC)成员
- TSC主席/首席架构师
- 文档/技术撰稿人 —— “这是一个特例的维护者”
治理领导力
- 执行董事
- 委员会/子委员会
- 董事会成员/成员代表
运营领导力
- 项目经理
- 社区经理和倡导者
领导力角色矩阵
请记住,虽然这些角色在历史管理层次结构中类似,但它们并不相同。你不能简单地将旧的封闭模型的价值观、流程和原则移植到新的开源模型中。在许多方面,它们是直接相反的,或者可以说是镜像。无论如何,它们在各个重要方面都是不同的。选择一个意味着拒绝另一个。
开源领导者习惯于并且甚至推广透明度,并且必须在项目向前推进之前获得共识。这个过程和领导风格对于那些更愿意坚持传统商业结构的人来说可能会让人发狂。
针对这种全面文化变革经常遇到的挫折,“很多公司会选择最省力的方式,也就是"哦,这很好。我将以这个作为基础,走岔路并在内部做自己的事情,” Martin说道。
“但问题是,从长远来看,这样是不可持续的,也不具备可扩展性,因为你离开社区的距离越远,下次想要从社区获取重大升级时就会越困难,” 他说道。
简而言之,开源是一种社区努力,你做的任何事情,如果使你的工作与社区产生脱节,最终都会对你的公司产生不利影响。
如何成为领导
在协作环境中成为领导需要相当多的人际关系技巧和愿意看到任何工作都不低于自己级别的意愿。
“最简单的事情就是注意到需要做的事情,并去做 —— 提交错误报告,回答问题,愿意在会议上坐在展台旁,” —— Intel的开源社区经理Jeff Osier-Mixon在2017年的开源领导峰会上发言。
当然,还需要在熟悉环境、了解团队动态并亲自做一些琐碎工作之后,大胆运用开源技术技能。
换句话说,成为领导者始于赢得团队的尊重。你不能要求它,你必须去赢得它。
如何加入并证明自己的实力以及获得领导力
项目记录了如何加入委员会,成为维护者,以及如何在几乎任何层次参与。查看这些文档,找到一个开始融入团队的地方。你可以从任何你喜欢的地方开始,只是不要插队。
“一个人可以发挥影响力的事情是倾听,理解,真正试着在加入之前读懂情况。如果你能随着时间的推移养成这种习惯,那么我认为人们会尊重你的贡献,并认为你更具影响力,” Yehuda说道。
开源会议还提供了与社区其他成员交流的良好机会。除了建立人际关系之外,在这些活动中进行演讲也是一个非常有效的方式,可以展示你和你所在公司在开源项目中的成就和贡献。
Yehuda说,他所在的公司Oath帮助开发者提升他们的演讲技巧,精心打磨他们的演讲,以确保他们在舞台上获得成功。实践是最好的老师,所以开发者参加的演讲越多,他们就越擅长 —— 这也使得他们在开源社区中的面孔、名字和工作变得更加有名。
然而,对于建立自己在社区中的声誉和信誉来说,向上游贡献是最重要的。投身其中,修复你看到的问题,做出对整个社区有益的贡献,而不仅仅是为了自己的项目。
加入与创建项目的对比
加入一个项目可能看起来是走向领导地位的缓慢途径。确实,这需要时间。然而,它也有优势,包括立即受益于社区已经做过的工作,并且不需要成本启动自己的项目。
为了建立领导地位而开始自己的项目并不会有太大收获。
Martin说,“如果你们是沙盒里唯一的一群孩子,都来自同一家公司,你们真的是领导者吗,还是只是在项目工作的唯一一群人?”
如果你确实开始了一个项目,那么做这件事的理由不应该是为了建立领导地位,因为坦率地说,特别是如果你的项目不是很出色,或者与一个已经建立的项目竞争,可能没有其他人会加入。
马丁建议说,“开始一个项目需要大量的工作。如果你的代码更适合贡献给另一个项目,在那个项目中通过你的代码贡献成为领导者,可能更为明智。”
技术贡献
在开源社区中,提交代码是一件严肃的事情。共同建设项目正是这个合作的目的。众人拾柴火焰高,通过众多的贡献,风险减少,质量提高。这些都是目标。
首要原则是确保你的贡献对其他人有用,而不仅仅是为了自己。但是有用性不仅仅体现在重大进展上;修复小错误和其他调整也同样受欢迎。无论是大还是小,关键是要使你的贡献在普遍上有帮助。
Ibrahim Haddad还建议贡献者遵循适当的编码风格,在项目的提交流程内操作,提供文档和解释,倾听反馈,并耐心等待接受。
招聘人才
众所周知,开源开发人员的供应短缺。在可预见的将来,情况可能会持续下去。因为开源项目的采用率创历史新高,并且没有放缓的迹象。这不仅意味着很难找到合适的开发人员,而且如果找到了,要留住他们也很难.
2016年的一份Cloud Foundry报告发现,在美国单单软件开发人员就有25万个职位空缺,需要技术的空缺职位更是达到了50万个。此外,分析人士预测,未来十年内,不可填补的开发人员空缺职位数量将增长到一百万个。
对于开源开发人员的需求更是极大的。
你可以找出开源社区中的领导者和普通技术贡献者,尝试直接聘请他们。或者,你可以要求他们推荐他们自己想一起工作的开发人员.
Martin说,“如果你计划招聘一个维护者,或者雇佣一名优秀的贡献者,请记住,这些人是最受欢迎的工作人员,他们对工作地点非常灵活。换句话说,他们可以在不同公司之间来回流动,但仍然在同一个项目上工作。唯一改变的只是签发工资支票的公司名字。”
你可以在Linux指南”招聘开源开发人员“中找到更多关于招聘开源开发人员的指导。
培养人才(最佳方式)
幸运的是,开源非常受欢迎,开发人员积极寻求机会发展或提高他们的开源技能。马丁说,迄今为止,他采访过的每个开发人员都问过他们的公司将如何帮助他们建立自己的开源品牌。帮助开发人员成长并走向开源社区的领导地位是一项主要的福利,也是招聘的有用方式。
提高公司在开源工作中的可见性也可以帮助招聘开发人员。一些公司甚至提供开源培训,以增加吸引力。在会议上介绍公司的开源项目,并在社区贡献代码是提高公司知名度的最佳方式。要求你的开发人员与其他开发人员建立联系并邀请他们加入也通常效果良好。
吸引开发人员的另一个关键方法是提供学徒制。开发人员喜欢在重大有挑战性的项目中工作。提供学徒制和导师计划往往是成功的吸引因素,也是利用已有人才的好方法。
最重要的是,赢得社区的信任,使你的公司对开源开发人员具有吸引力,对那些寻求通过与值得信赖的开源领导者合作来推动职业发展的开发人员也具有吸引力。
“像其他商业动机的开发人员一样,通过他们贡献的质量和数量在项目中获得影响力。” – 开源指南,GitHub,领导力与治理,企业员工。
战略性贡献
战略性贡献在建立领导地位方面非常重要。它们通常解决了整个生态系统的某个重大问题,或者提供了一个关键进展,使项目超越了社区设定的目标线。
然而,你不能只发布代码然后置之不理。提供文档、扩展生态系统、合作推动代码或工具进一步发展等方面,都还有很多工作要做。保持参与并保持可见性和可靠性至关重要。
非技术贡献和支持
除了技术贡献,战略贡献和其他贡献之外,还有其他的贡献方式可以支持社区,从而进一步建立领导地位。
这些包括对开发人员教育的贡献和支持,以及提供导师。提供对技术方面的支持也是建立领导地位的成功方式之一。
关键是要环顾四周,看看社区需要什么样的贡献,然后积极投入其中。
最后
总之,成为一个优秀的领导者并赢得影响力需要时间和努力。
努力成为领导者的具体方法包括:
- 适应开源项目文化、实践和工具。努力融入并遵循规则和流程。记住这不是关于你自己,而是关于项目
- 做肮脏的工作。项目需要的是勤劳肯干的人,而不是明星。此外,如果你不能做这项工作,你就没有资格担任领导者。展示你有能力并且愿意做需要的工作。
- 慷慨大方。贡献代码让整个项目受益。
- 建立共识。真正的领导者可以建立共识,努力在成为领导者之前帮助达成共识,以显示你不是一个好大喜功者或者专制者。
- 接受领导力的变化。认识并接受领导角色随着人员变动而变化,而不是随着雇佣他们的公司而变化。
鸣谢
本指南的贡献者:
- Guy Martin, Autodesk
- Gil Yehuda, Oath