第 2 小节:打造开源社区

如何为自己的项目打造开源社区?建立一个开源社区的前提是什么?如何将其发展壮大?

社区(community)一词源于拉丁语,原意为亲密的关系或共同的东西。社区是一个抽象的概念,每个人眼中的社区可能都不一样,读者不妨先问一下自己——你眼中的社区是什么?从汉语的角度来看:社区两个字组成,前者指「相互有联系、有某些共同特征的人群」,后者指「一定的区域范围」。要想给社区下一个准确的定义是很难的,不过我们可以简单地将社区看作是「在某个环境中相互交往的群体」。维基百科中提到了社区的两个属性:「共同文化」和「共同地域」。当我们说「和平里社区」和「四方社区」时,我们侧重的是社区的「共同地域」属性;而当我们说「华人社区」和「开源社区」时,我们侧重的是「共同文化」属性。开源本身代表的就是一种文化。

社区无处不在,社区的形式也多种多样。不过所有的社区几乎都有一个共同的特点,那就是:社区成员有着共同的信仰或者乐趣,他们对此充满热情,正是这种热情使得人们聚集在一起。归属感(belonging) 使人们驻留在社区,这种归属感也是社区建设的重要目标之一。一个强大社区的标志就是:社区成员都拥有归属感。

什么是开源社区

开源社区(open source communities)是社区的一种,它的核心在于开源(open source)(或者说是开放(open))。前面我们说开源代表一种文化,我们也可以将开源看成是开源社区成员们的共同兴趣,或者信仰。读者不妨先想一想——什么是开放?就open source一词中的open来说,它既表示开源项目的源代码是开放的,任何人都可以获得以及修改它,也表示开源社区本身是开放的,任何人都可以加入社区,参与社区活动。更进一步,我们也可以说开放社区(open communities),它的含义比开源社区更广,开放社区的核心在于透明性(transparency)包容性(inclusivity)适应性(adaptability)协作(collaboration)社区(community)

现在全球已经形成了大量以技术为中心的开源社区。这些开源社区一般都依托于对应的开源项目,在开源项目的发展过程中逐渐形成,社区内聚集了一大批对该项目感兴趣的人,这些人参与开源项目的开发、文档编写、测试和社区讨论等活动。随着项目的发展,一些人可能会因为各种原因离开社区,反之,又可能会有新人不断地加入进来,社区会变得日新月异。

建立你的开源社区

假设你(或者你们)写了一个牛逼的项目,你也把项目的代码公开了。现在思考一个问题——你是否希望别人也加入你,同你一起推动这个项目的发展呢。如果答案是「否」,那么说明你认为你的项目不太需要社区的帮助,你仍然可以以个人的力量推动项目的发展。反之,则说明你即将成为一个开源社区的创建者。拿出纸和笔,好好为你的社区规划一番吧。

那么,建立一个社区有哪些好处呢?社区与项目息息相关,当人们参与到了你的项目中,他们能为你的项目提供反馈、编写文档、开发新功能、修改 Bug、提出有用的建议等等。贡献者所做的一切都能为你的项目带来新的机遇,例如吸引更多的贡献者和客户、扩大产品的用户数等等。简而言之,社区能帮你和参与者实现共赢。

绘制社区蓝图

你已经开源了你的项目,现在全世界的人都能看到你的代码,或许一些人已经从你的项目中受益,一些人对你的项目充满了兴趣,迫不及待地想要和你进行交流。这个时候,该考虑建立你的开源社区了,为你的项目和参与者们创造一片小天地吧,让人们能够参与其中,享受乐趣。

在你动手建立社区之前,请先停下来思考几个问题:

  1. 社区的使命是什么?

    使命能够激励社区成员、凝聚社区力量。使命也是社区成员共同的信仰。想一想社区渴望的最终结果是什么,或者说社区要达到怎样的目标?

  2. 社区能为参与者带来哪些机会?

    参与者能从社区中获得的机会有哪些。更进一步说,如果社区实现了它的目标,它能带给参与者哪些可能。这个问题能够帮助社区寻找一个更深层次的终极目标,因为社区是离不开参与者的。

  3. 参与者在社区内可以一同做什么?

    参与者可以在社区内协同工作的任务,例如编写文档、组织会议、进行宣传等等。如果参与者无事可做,这还是社区吗?

  4. 参与者需要具备哪些技能?

    社区对参与者的技能要求,即参与者完成任务或实现目标所需要具备的能力。如果你能清晰明了地写出来,他可能会帮你吸引更多的参与者(通过这个,参与者能够清楚地知道自己可以做出哪些贡献)。

  5. 你期望的社区是怎样的?

    可以分为内外两个方面来思考:第一,社区给外界的感觉会是怎样的,这能帮助社区吸引新人;第二,社区的内部是怎样的,社区内的氛围如何,社区成员之间有着怎样的关系。

建设社区

有了宏伟的蓝图还不够。俗话说「好的开始是成功的一半」,万丈高楼平地起,你还需要为高楼打好地基。比如,社区需要有参与者,参与者之间需要有沟通渠道,社区需要基础设施进行运转等等。

做好准备工作

想要建立一个新社区,有很多准备工作要做,而其中最重要的两个任务:组建一个早期的核心团队、建立良好的沟通渠道

  • “兵熊熊一个,将熊熊一窝”,一个高凝聚力的团队,是社区的“地基”,也决定了社区究竟能走多远。

  • 保持高效沟通,可以统一步调,决定了社区究竟能走多快。在这里列举常见的沟通渠道供大家选择:邮件列表、论坛、Slack、Telegram、QQ、微信等等。

参与者

参与者是社区的灵魂,你要吸引各种类型的人加入社区,让他们为社区作出贡献并留下来。 CMXCommunity Engagement Cycle 模型很好地展现了一个人是如何成为忠实的社区成员的:

  1. 身份认同(Identity)。参与者因加入社区而拥有情感和价值意义,也就是归属感。
  2. 信任(Trust)。参与者建立起了对其它社区成员和整个社区的信任,相信社区可以给他带来价值。
  3. 参与(Participation)。参与者知道如何参与,并对社区作出贡献。
  4. 奖励(Reward)。参与者因为贡献而得到奖励,形成成就感。

上面四个步骤缺一不可,并且形成了一个正向的反馈环路,推动着社区的欣欣向荣。在这里,最重要的就是如何让新人做出自己的第一份贡献。

吸引参与者

宣传的最终目的是把人带到社区的入口,确保面向新人的社区入口尽可能地畅通无堵,让社区给人一种开放和容易接近的感觉。可以通过以下三个方面来吸引参与者:明确参与群体、选择宣传渠道、制定参与规则。

明确参与群体

你需要考虑的第一件事情就是想清楚你想要吸引哪些人群加入你的社区?

举个例子:你可能想吸引软件开发者参与项目代码的编写,吸引测试人员进行软件的测试等等。

也就是说,要对正确的人做宣传

选择宣传渠道

常规的推广方式无非两种,软广+硬广,即各平台的引流推广/付费广告推广。主要包括:公众号、社区群、平台付费推广。

  • 公众号
    • 包括自媒体公众号和官媒公众号
    • 自媒体公众号就是个人创建的公众号,通过个人公众号来进行宣传。
      • 优点在于公众号众多,通过个体传播方式扩散。
    • 官媒公众号就是官方媒体的公众号(比如Gitee),主要通过官媒影响力进行宣传。
      • 优点是依托官方影响力,通过平台传播方式扩散。
  • 社区群
    • 社区群比较五花八门了,常见的开源项目一般都会有自己的社区群。
    • 优点是借助社区影响力,通过平台传播方式扩散。
  • 平台付费推广
    • 不多做介绍了,找专业的人做专业的事。
    • 优点是专业平台提供宣传方案和落地方案,有钱就是可以“为所欲为”。

在这里,贴个链接供大家参考:https://www.zhihu.com/question/343991769/answer/810943254

制定参与规则

在宣传的过程中,有一点非常重要,就是吸引那些愿意作出承诺,愿意为了社区的目标而努力工作的人加入社区。想办法避开那些草率的社区参与者,草率的参与者带来的成本是昂贵的,这不一定只是经济上的,还可能是时间上的。

下面为大家举例说明:

  • 承诺遵守社区规范,积极参与社区建设,有持之以恒的毅力
  • 掌握参与社区必知必会的技能(设计、研发、文档、宣传等),能够为社区提供技术支持
  • 有良好的沟通问题解决问题的能力
  • 有良好的自驱力和学习能力

引导参与者做出贡献

参与者已经来了,接下来的问题就是:参与者要如何做出第一份贡献,或者你要怎么做才能让别人尽快融入社区并做出第一个贡献。你大概需要做几件事情:首先是帮助参与者理解他们为什么要参与进来,让参与者知道他们可以做什么,以及做这些对他们有什么帮助。然后是让参与者知道他们该怎么做,以及需要具备哪些技能,完成任务需要遵守的规范条例等等。接下来参与者应该会做一些事情,但是他们在做事情的过程中可能遇到各种问题,你需要让参与者知道如何获取帮助。一旦参与者做了事情,就奖励他们,鼓励他们继续做贡献。

留住参与者

社区本身是一个环境。环境不仅影响会人们的感受,还会影响机会。在一个被认为不太安全的环境中,人们往往会因为恐怖而不敢互相交往。而在一个令人感到安全友好的社区里,各种其它形式的互动都十分活跃。如果你想要让参与者留下来,就需要给他们常规意义上的成就感。你要让他们感觉到:他们能做很多事情,并且他们的贡献得到了认可。你要持续不断地让参与者感受到这两点,这样他们才会有充足的干劲儿。如果你在参与者做出一定量贡献之后,偷偷给他们送去一个 surprise ,他们会非常兴奋的。

建立良好的基础设施

新社区已经带着特殊使命诞生,社区人创始人建立起了沟通渠道,一些早期的社区成员也已经加入进来。慢慢地,你会发现社区需要额外的工具。即便是最简单的社区,也需要使用工具来沟通、存储工作和共享信息。社区中会有很多不同类型的贡献者,他们的需求不同,需要的工具也不同。例如:开发人员需要版本控制工具和漏洞追踪工具,文档人员需要文本编辑器,测试人员需要测试套件,而所有人都需要互相交流。因此,许多社区都为不同类型的贡献者提供了各种各样的工具和设施。

除了为社区内的人提供工具,你可能还需要考虑一下社区外的人。例如,用户可能需要一个地方来查看项目的文档、了解项目的进展,以及咨询反馈。当然,贡献者也可能需要这些。

在挑选工具时要避免对工具的盲目崇拜,每个人都有自己习惯的工具,你永远不可能让所有人都满意。所以你需要确定出真正的需求,尽快挑选出可行的部分。要知道,越早让选定的工具用起来,人们就能越早集中精力做有用的事情,你的社区就会运转得越好。

壮大社区

现在你的社区已经慢慢地成长起来了,接下来要思考的就是如何让社区变得繁荣昌盛,并长盛不衰。

社区健康

林子大了,什么鸟都有。开放社区由一群性格迥异的人组成,他们职责不一、技能和经历也天差地别,这些差异加上社区的包容性就带来了社区的多样性。社区的多样性会触发各种各样的火花,有好的,也有坏的。作为社区的创建者,你需要了解的健康情况。对社区健康情况的了解可以从观察开始,例如:邮件列表活跃吗?有人报告缺陷时,开发人员能否迅速积极地做出响应? 成员在回答问题时是否有礼貌且富有成效?

如何观察和解决

  • 定期进行项目review

    “子不孝,父之过”。项目就像一个婴儿一样,需要在成长中不断引导。一开始的想法往往并不成熟,想要孵化出一个优秀的开源项目,定期的项目review可以对项目发展方向及时纠偏,避免在成长中“误入歧途”。

  • 及时处理issues和PR

    项目的开源状态和问题缺陷的数量往往是成正比的,优秀的开源项目会喜提很多issues和PR。问题缺陷是往往是不可避免的,在项目孵化期间甚至是正式版本发布后,随着项目的成长,问题总会层出不穷,就算是赫赫有名的Douge Lee也逃脱不掉“八阿哥”的魔掌。有问题不可怕,可怕的是不能及时响应和解决。

    试想一下,如果你聚集了大批志同道合的小伙伴去旅行,旅行途中抛锚了,如果不及时修好车子上路,小伙伴们是不是就只能被迫下车搭乘其他的车辆去了。因此,及时响应参与者提出的问题和优化建议,是非常重要的!

    正所谓“偏听则暗,兼听则明”,我们会从这些源源不断的提议中发现并解决问题,甚至能够发现更多新鲜的idea,这些都是促进项目良性持续发展的重要法宝。

  • 了解行业最新动态

    现如今,技术更新的速度非常快,我们除了做好自身的发展以外,还要积极关注行业内的发展信息。

    一方面,我们可以通过了解其他技术提升自身项目,扩展项目能力,或者找到其他技术与自身项目的融合点,提供一体化解决方案。

    另一方面,我们可以及时了解相同或相邻赛道的项目动态,了解竞品差异,可以更好的定位项目落地场景和未来发展方向。

社区运转

良好的社区运转是需要成本的,也就是说,你需要为社区获取经济支持。除了自掏腰包外,广告、销售周边、获取捐赠与赞助都能给社区带来收入的机会。在收到别人的捐赠或者赞助时,不要吝啬感谢。

运转方法

社区运转的办法有很多,最直接有效的方法,就是拉拢一位精通各路运营的小伙伴,如果没有,请继续拉拢!

那如果你项目刚起步,可能真的找不到这样的伙伴,那么,这里为你提供两个非专业的建议。欢迎专业人士参与补充!

  • 指定城市负责人
    • 参与人数较少时,可由核心参与者担任
    • 参与人数较多时,可选择有经验的参与者担任
  • 定期举办meetup等活动

社区治理

想必大家都不会对治理这个词感到陌生,治理是一个庞大而复杂的话题。例如,国家政府以改善基础设施、提升国民生活水平为己任。那么,社区也需要治理吗?答案并不是绝对的。如果你的社区只有 5 个人,可能真没有治理的必要。但是,如果你的社区规模达到了 500 人,你就需要好好考虑一下了。

治理模式

世界上有无数的社区,每个社区都有自己的管理办法。在这些管理办法中,大致呈现出三种模式:

  1. 独裁模式:治理和决策主要由一人掌控,比如 Linux 社区。
  2. 开明专制:没有正式的领导者,唯才是用。比如 KDE 社区。
  3. 委托式管理:社区的治理权被委派给一个治理机构。这种方式开放、透明,非常有利于社区的健康发展。比如 Ubuntu 社区。

治理的首要职责是解决冲突,目标是带来社区的祥和。随着社区规模的扩大,人们的观点会出现分歧,分歧可能变成争论,并发展成派系斗争。这将是一个非常严重的问题。冲突会损害社区健康,将社区变成一个不舒适的环境,影响社区成员的感受。值得一提的是,虽然冲突容易引起不适,但它也有好的一面。冲突能够帮助社区管理者发现社区内的多样性、社区成员的激情,以及社区的活跃程度。

参考资料

本部分内容贡献者

Nicholas Zhan雪山凌狐ORHtaotieren西狩