作者:Kagol,DevUI 开源运营
从启动开源项目到运营开源社区
据 Github 官方统计,从2016年开始,Github 平台每年平均新增1000多万开发者、5000多万开源项目,且增幅呈现逐年递增的趋势。而中国的开发者参与开源的热情更是超过其他国家,不管是开发者还是开源项目的增长速度,中国都是名列前茅,2021年中国共有755万 GitHub 开发者,全球排名第二。
我国在“十四五”规划中首次把开源纳入顶层设计, 从国家层面体现了对开源的重视,国内的华为、腾讯、阿里等多家大厂也都将开源作为公司战略的一部分,国内外开源呈现一片繁荣的景象,开源的春天已经来了!
启动开源项目
开源生态是以开源项目为中心、以贡献者组成的开源社区为关键要素构建的,作为一名个人开发者,我们要如何启动自己的开源项目,为整个开源生态作贡献呢?
项目价值
一个好的开源项目应该是能够满足人们的某种需求或者解决人们的某个痛点的,也就是说它应该是有价值的。在启动一个开源项目之前,我们需要想清楚开源项目的用户群体是谁,能满足他们的什么需求,解决他们的什么问题,把价值讲清楚了,就可以启动开源项目啦。
比如 Vite 这款前端构建工具,面向的用户群体是广大的前端开发者,解决了 Webpack 构建速度缓慢的问题,为前端开发者提供极速的服务启动和轻量快速的热重载体验,赢得了开发者的青睐。
代码仓库
启动开源项目首先需要有一个想法,然后就是通过代码实现这个想法,所以需要创建一个代码仓库。
比如 Vue DevUI 是一个基于 DevUI Design 设计体系的前端组件库项目,使用 Vite + Vue3 + TSX 技术搭建,我们就需要创建一个 Vite + Vue3 + TypeScript 的前端项目工程,推送到 Github 代码仓库,这就是开源项目的起点啦。
有了代码仓库只是一个起点,作为项目的创始人,你还需要将你的想法最核心的那部分通过代码实现,形成项目的骨架,进而吸引社区开发者一起把项目的其余部分完善起来。
以 Vue DevUI 前端组件库为例,我们需要有一个组件目录,用来存放一个个的组件,并且需要开发一部分设计良好的组件,以供后来的贡献者参考。
我们还需要搭建一个文档系统,用来展示组件的 Demo 效果和 API 文档,需要能通过一个简单的 npm run dev 命令本地启动这个文档系统,方便开发者进行组件功能的调试。
组件库最终是要发布到 npm 仓库给开发者使用的,因此还需要开发组件库的构建脚本,打通从本地开发到构建发布的流程。
完成这些事情,项目的骨架就形成了,这为以后的社区协作提供了基础。
配套文档
项目骨架只是提供了社区协作的基础,但要吸引开发者加入社区,让协作更加高效,还需要完善一些必要的文档。
首先就是一份精心编写的 README 文档,一般包含以下几个部分:
- 项目名称和LOGO
- 项目简介和特性
- 快速开始文档
- 贡献者
- 开源许可
README 一般是给项目的使用者看的,还有两份文档是给参与项目贡献的开发者看的,也非常重要,一份是社区行为准则,重点阐述你希望社区成员应该遵循的行为是什么,你反对什么样的行为,这对于营造积极友好的社区氛围非常重要;另一份是贡献者指南,这为初次参与项目贡献的开发者提供了一份详细的入门指导。
Vue DevUI 的贡献指南详细描述了参与贡献的步骤,如何 Fork 和 Clone 项目代码,如何本地启动项目和调试代码,编码规范是什么,如何提交代码和发起PR等。之所以写得这么事无巨细,是因为我们发现很多开发者是第一次参与开源贡献,为了让他们能比较顺畅地参与进来,除了编写详细的贡献指南,我们还专门录制了一期教学视频,手把手教大家为开源项目提交第一个PR。
此外,为了保障项目质量,确保代码风格保持一致,还需要提供一些开发规范文档,这些规范有一部分是可以通过自动化工具来检查的,还有一部分需要通过文档的方式来展示。
比如代码提交规范可以通过 commitlint 工具来进行约束,编码规范可以通过 ESLint 工具来检查,文件命名规范可以通过 ls-lint 来进行约束等。
而组件文件怎么组织,组件怎么编写,组件的 demo 和 api 文档格式是怎样的,这些很难通过工具来约束,就需要我们通过文档的方式提供,并通过代码检视识别未遵循规范的代码,引导开发者共同遵循规范,编写出高质量和强一致的代码,最大程度保障项目质量。
运营开源社区
有了代码仓库和配套文档,我们就可以在技术社区发起开发者招募啦,只要有了开发者参与进来一起建设项目,成员之间不断互动和交流,开源项目就慢慢变成了开源社区。
人们会因为你的宣传而加入到开源社区中来,但真正让他们留下来的,一定是社区能给他们带来价值,让他们产生成就感和归属感,这也就是开源社区运营需要重点关注的。
社区价值
开源社区包含对社区成员和组织的双重价值,要吸引更多人加入社区,需要讲清楚社区存在的价值。
社区成员渴望有意义的协作方式,通过社区,他们可以:
- 结识其他优秀的人
- 丰富人生体验
- 高质量的学习资源、相互交流和寻求帮助的平台
- 培养技能
- 获得指引和辅导
- 积累职业经验和专业知识,丰富简历
组织期望获得商业成功,而通过社区,组织可以:
- 实现用户的增长
- 提供更好的支持
- 提升品牌认可度
- 产品和技术升级
- 吸引人才和招聘
这种双赢是开源社区能够持续发展的基础。
参与模型与激励计划
每一位对社区感兴趣的开发者都会经历新手阶段,新手体验的好坏决定他会不会继续留在社区,成为贡献者,再到维护者、管理者。
为了激励不同阶段的贡献者,提升贡献者的参与度,保持社区的长期健康发展,需要制定一套贡献者评价标准和激励计划。
社区成员可以按照对社区的贡献程度分成:
- 入门者:有意愿加入社区,但还未做出实际贡献的开发者
- 贡献者:提交第一个PR并合入的开发者即可成为贡献者
- 维护者:在社区长期活跃、做出重大贡献的优秀贡献者,即可由管理者提拔为维护者
- 管理者:具备一定的组织和领导能力,能带领社区变得更好,由现有管理者进行投票选拔
每次达到一个新阶段就即时激励,一方面是鼓励以往的贡献,另一方面也是激励后续持续的贡献,一个阶段连接另一个阶段,从而提升各阶段贡献者的参与度,让社区不断发展和繁荣。
比如只要有开发者提交一个PR并被合入,就给他发一封感谢邮件,祝贺他成为贡献者,将他加入贡献者列表,并邀请他加入微信群和邮件列表,这会让新手感到自己在社区作出的贡献是被认可的,从而受到鼓舞。在检视第一次参与社区贡献的开发者的代码时,也需要格外用心,对于做得好的地方要不吝惜给予赞美,做得不足的地方耐心给予指导,让开发者感受到自己是受欢迎的,这对于新手来说是非常重要的。
已经加入社区并参与过多次贡献的社区成员,我们可以考虑提拔为维护者,给他邮寄一些小礼物或颁发荣誉证书,感谢他在社区作出的杰出贡献,并适当在公开场合表扬。这部分社区成员由于已经走过了新手期,对项目和规范都很熟悉,是社区非常重要的组成部分,一定要争取让他们留下来,与他们保持密切的沟通,善于发现他们的志向,帮助他们取得成功,未来他们中的一部分很可能成为社区管理者,成为影响社区发展的关键。
创始人和管理团队
对于长期活跃,作出巨大贡献,并且表现出一定组织和领导能力的维护者,应该考虑选拔成为管理者,管理者是从社区中精挑细选出来的贡献最大的社区成员,他们是你最值得依赖的合作伙伴,也是社区的核心所在,他们决定了社区未来的走向。
而开源社区创始人最关键的职责将管理团队成员凝聚在一起,朝着共同的目标前进。
对于创始人来说,最重要的是坚定的信念,虽然开源的道路漫漫,但作为项目创始人要保持坚定的推动社区和项目持续往前的信念,对外积极宣传自己的开源社区和开源项目,吸引有志之士加入,对内鼓舞社区成员的士气,凝聚人心,朝着共同的目标不断前进。
没有持之以恒的精神和坚定的信念,社区文化很难形成,社区成员的凝聚力和归属感也很难形成,社区也就很难长久发展和持续繁荣。
另外就是需要具备一定的组织能力,运营开源社区和管理开源项目都是非常复杂的事情,需要规划好长远的目标,并将目标拆解成关键事项,分解到社区成员。需要组织好人和事,需要具备良好的与人沟通和协调的能力,通过有条不紊的项目管理和规划,确保社区和项目的健康发展。为了让开源项目产生更广泛的影响力,创始人还需要具备一定的写作和演讲能力,对外宣传和推广开源项目。
创始人既要始终瞄准前进的方向,又要脚踏实地关注项目的质量和进展,关注社区的健康,关注行业和技术发展趋势,保持与社区成员的联系。
DevUI 开源社区每周都会组织线上 PMC 会议,和管理团队成员一起讨论 DevUI 开源项目未来的规划,关键事项的进展情况,竞争力建设,社区生态扩展等事务,为了更顺畅的协作,一起制定流程和规范。每位社区成员都可以申报议题,大家在 PMC 会议上讨论和决策。
每周我们也会组织面向更广泛开发者的田主大会,带大家一起检视代码、讨论组件的设计和实现、分享新技术等,一方面将我们的经验和理念传递给社区开发者,提升参与社区的体验,另一方面我们希望能提供一个社区成员之间更紧密的交流平台,后续我们也会尝试将线上的交流会迁移到线下,让大家能有更多的交流和相互碰撞的机会。
社区是由人组成的,社区的繁荣依赖于社区成员的贡献、参与和协作,只有将社区成员凝聚在一起,集思广益,才能创造出更好的开源项目,这也是开源社区运营的核心所在。