经常有人问我,如何持续运行一个开源社区。我认为,最重要的是主动招募社区成员。
主动招募意味着 maintainers 需要主动发现新成员。要想开发一个高价值的开源软件,一个人的力量从来都是不够的。即使是今天能够维持和推动项目开发的团队,也不一定能够应对明天的挑战。从 maintainers 角度出发,持续主动地为社区招募人才是必要的。这种主动性还体现在与希望招募的 contributor 的直接沟通上。这不同于推出一个忽视人与人连结的治理模型,然后祈祷适合的 contributor 奇迹般地出现,并自动填补空缺。开源社区的人才招募远不止于吸引,还有针对个体 contributor 的交流,达成对项目目标的一致认同。一致认同意味着对项目目标的承诺,contributor 为了达到自己承诺的目标,才会自然地坚持“自我指导”与“自我控制”。这种一致认同是不可能只通过流程或文档达到的。
我在 Perl 6 社区得到过 Zoffix Znet 的帮助。他是一个非常积极的开发者,延续了 Perl 6 的传统基于信任的假设授予大部分 contributor 直接提交代码的权限。我在 Apache Flink 社区得到过 Till Rohrmann 的帮助,我在 Flink 社区的参与就是从跟他合作的代码重构开始的。他也是我在分布式系统集群管理和并发编程领域的导师,并且是我成为 Flink committer 的提名人。后来,我在 TiDB 社区复刻了这段经历,找到测试迁移的切入点,前后与几十位 contributors 协作,并最终与其中的几位建立了密切的联系,引导他们做更多有趣的工作。现在,我在 Engula 社区分享技术讨论的内容,抛出悬而未决的议题,鼓励想要实现一个 serverless 存储引擎或开发它所能包含的任何领域的功能的 contributor 参与进来,并且在真的有人提出问题,发表建设性意见的时候积极回复。
所有这里提到的人和事,都是主动招募社区成员的思想指导下的产物。开源社区想要发展,离不开高效率的工作环境,而这种环境只能由优秀的成员造就。同时,每个人都渴望与高水平的开发者合作。相当部分的 contributor 之所以来到你的社区,是因为社区当中有他们所憧憬的开发者。你应该是这样的开发者,进一步的,你应该为社区招募这样的开发者。只有这样,你的社区才能产生无穷的引力,爆发出难以置信的生产力。
另一方面,也有可能 contributor 并不能和 maintainers 达成共识。这种情况下,比起苦口婆心的劝说,更加合理的做法是坦诚彼此的分歧,并寻找下一个潜在的社区成员。这种选择性否定了基于数量的衡量标准,避免让社区成员的招募成为一场数字游戏。
PostgreSQL 社区几十年来一直由不超过 7 人的核心团队治理,且目前拥有代码仓库提交权限的 committer 也不过 28 人。Kubernetes 社区异常繁荣,但是 sig-scheduling 和 sig-network 等核心团队,也不过十人上下。开源社区的发展天生是层次化的,一刀切地要求所有层次同水平线性增长,是常见的制定目标懒政。对于这些核心团队来说,任何一个适合的新成员的加入都是重大的增益。
对于同时具有商业公司员工身份的 maintainers 来说,这种招募人才的模型有助于解释自己的工作。对于依赖开源项目的商业公司而言,为公司招募一名员工全职投入开源项目开发的价值是非常容易理解的。但是,今天的任何一家公司都不可能将所有人才全部招募进来。如果这些人才能够进入开源社区为项目创造价值,公司不也能从项目的发展当中获益吗?既然如此,支持同时具有 maintainer 身份的员工招募社区成员就是顺理成章的了。