目录
维护一个开源项目常常是吃力不讨好且耗时极长的苦差事,这并不是什么秘密或讳莫如深的潜规则。然而,我了解到开源维护者之间有一个共同的默契:他们更喜欢与一群充满热情且具有共同目标的技术专家一起构建项目。
社区支持和团队合作是开源维护者的主要动力来源,然而获得社区支持和贡献者是一个巨大的挑战,尤其是对一个新的维护者来说。我们都希望技术人员能够找到自己的开源项目,并开始做出贡献,但现实是我们必须主动进行推销。试想一下,开发人员每天创建好几个公共存储库,但是没有人知道这些存储库的存在。如果开源项目没有社区协作的参与,我们就无法真正获得开源的优势。
尽管采用一些营销手段对于一个开源项目来说是有必要的,但开发人员往往会对此犹豫不决,毕竟面向其他开发者的营销往往会使人感到不真实。在本文中,我们将探讨一些可以用来真正吸引贡献者的办法。
一、推广开源项目
如果你想让人们对你的项目做贡献,你首先必须让他们知道项目。那么,对于一个开发者/维护者来说,推广到底意味着什么。我们可以通过多种渠道来宣传自己的项目,而不用通过DM单或者其他看起来不真实的“低端渠道”,例如:
1.会议讲座:开发者经常会通过参加各种研发会议来获得灵感。不要害怕,参会者不一定都是博士级别的大牛。在诸如All Things Open、Open Source Series 101、Codeland这样的活动中登台,谈谈你正在构建的东西,以及为什么要构建它,面临的问题等等。在你的演讲之后,人们可能想了解更多关于你的项目以及如果参与进来的具体信息。在国内,也可以经常关注类似于腾讯、阿里云等大厂定期组织的科技峰会。在如今的信息化时代,我们通常可以通过线上会议的形式获得我们想要实现的目标与效果。
2.Blog:利用流行的开发者Blog平台,比如Aviyel、Dev.to或者Hashnode来谈论你的项目。在文章中添加项目的Github链接以便合适的人可以找到他。国内目前对于开源生态的搭建正处于快速发展阶段,你可以关注类似于CSDN、OSCHINA、GITEE等平台寻找志同道合的贡献者。
3.Twitter/weibo:Twitter拥有大量的技术用户,包括开发人员、用户体验设计人员和InfoSec专业人员。他们希望彼此合作并相互学习。你可以在上面以一种真实的、非强制性的方式发布你的发现、新版本和bug修复。当然,在国内你也可以使用weibo,但效果可能并不会那么好。
4.PodCasts/Twitter Spaces:像会议演讲一样,使用podcasts和twitter spaces来建立项目的品牌。你不必用市场营销的方式来谈论它,可以试着和主持人一起讨论你的愿景以及一路上遇到的技术问题。
5.Twitch Streams:直播你的项目构建过程,以便更直观的让人们认识到自己的项目。
6.赞助:贡献并不总是必须通过提交代码的形式来完成,公司和个人可以通过赞助的方式来为你的项目做出贡献。
二、获得社区支持
“it takes a village”,这句谚语不仅适用于抚养儿童,维护一个开源项目也需要“举全村之力”。社区是开源的很大一部分组成成分,也是一个成功开源项目的基石。社区支持是双向的,为了维持社区的支持,回馈成员是最好的做法。
社区支持对于你来说是一种怎样的存在?当你推广你的项目时,你会发现人们愿意支持你。为了鼓励他们继续支持和吸引其他潜在的支持者,你可以:
1.强调贡献者/支持者:一旦你开始收获贡献,你可以通过在你的README中突出过去的贡献者来激励更多的人为你的项目提交贡献。这种致谢方式表明你重视并支持参与的贡献者,如果有一定的经济实力,还可以给你的贡献者一些礼物或一小部分赞助资金。没有也没关系,如果你真心支持你的开源社区,人们自然会被吸引过来。
2.构建一种友好的氛围:在你的知识库中发布一个行为准则,在评论、请求和提问中友好的回应大家。更重要的是,你自己也要遵守制定的准则,如果你的社区中有人不遵守规则,一定要确保他们会得到应有的处罚。
3.提供一个开放讨论的空间:通常来说,贡献者加入一个开源社区是为了和志同道合的技术人员交朋友,或者是他们有一个技术问题却找不到人进行咨询。开源项目的维护者经常使用一些工具来搭建一个开放讨论的平台,让贡献者能够沟通、交流。例如:GitHub Discussions、Discord、Matrix.org、Mattermost
三、创建一个“好”的项目
在代码和艺术领域,“好”是一个主观概念,但仍有一些方法可以表明你的项目是经过精心维护的。你的项目可以不必包含令人惊叹的代码,但请确保含有以下属性:
1.容易被找到:为了帮助其他人找到并为你的项目做出贡献,你可以向存储库中添加与项目的预期目标、主题领域、相关性组或其他重要特性相关的主题。这样当人们去github.com/topics寻找项目时,你的项目有更高的机会出现。
2.很好用:通过详细的README使你的项目易于使用。这是新用户和潜在贡献者访问项目存储库时首先看到的内容,README应该作为用户指南,其中应该包括以下信息:
①项目名称
②项目说明
③安装说明
④使用说明
⑤相关跳转链接(行为准则、开源协议、贡献指南等等)
⑥贡献者列表
3.易于贡献:提供指导方针和管理问题有助于潜在的贡献者了解提供帮助的机会。例如:
A.贡献指南:与README类似,贡献者往往会寻找一个名为Contributing.md的文件,以了解如何为项目做贡献。指南对你和贡献者都很有帮助,因为他们通常懒得问你太多的问题。撰写这份指南有助于解答一些常见的问题,例如:
- 使用的技术
- 如何报告错误
- 如何提出新的特性
- 如何打开PR
- 如何发布一个问题或任务
- 环境设置问题
- 代码编写规范
- 项目架构
- 已知问题
B.Good first issues:用这个标签来突出那些不需要遗留项目知识的问题,这样新的贡献者可以感觉到第一次为你的项目做贡献是很舒服的。
4.维护代码质量:代码质量是其他开发人员决定是否参与项目的关键因素之一,一个优秀的项目管理者需要从两个方面维护他的项目的代码质量:
①项目代码:每个项目的建设者都应该在创建新项目时仔细审查自己的代码是否存在一些高危、常见的漏洞与缺陷。这样做一来可以避免一些网络安全事件的发生,二来可以提高你项目的可信度。毕竟没有开发者会愿意主动去参与一个漏洞百出的项目。一些开发人员常用的代码检测工具有:Codesense、Binsearch、Codeant等。
②贡献代码:贡献者提交的代码同样需要经过仔细的审查,以免发生“投毒”事件。基于大家都知道的于上个月发生的NPM代码投毒事件,贡献者提交代码的意图也显得并不是那么“纯粹”了。项目管理者为了自己社区的安全与声誉,应该制定完备的审计流程以确保每个贡献者提交的代码不包含一些“私利行为”。
四、保持活跃
即使没有人为你的项目做出贡献,也要保持你自己的贡献是积极的,人们往往会更愿意参与一个活跃的项目。
1.持续性:即使没有人参与,也要继续构建项目。
2.可扩展性:一旦你有了贡献者,平衡对每个问题的响应就会变得困难起来。当你在等待更多的贡献者时,自动化那些耗费时间的任务是许多开发者优先考虑的选项。利用GitHub Actions等工具来处理发布过程和优化CI/CD管道。
吸引开源项目的贡献者需要时间,所以要有耐心,不要轻易放弃你的愿景。当你在等待并独自一人默默构建开发时,志同道合的朋友可能已经在路上了。