diff --git "a/\347\254\254\344\272\224\351\203\250\345\210\206\342\200\224\342\200\224\345\274\200\346\272\220\346\262\273\347\220\206/\346\211\223\351\200\240\345\274\200\346\272\220\347\244\276\345\214\272.md" "b/\347\254\254\344\272\224\351\203\250\345\210\206\342\200\224\342\200\224\345\274\200\346\272\220\346\262\273\347\220\206/\346\211\223\351\200\240\345\274\200\346\272\220\347\244\276\345\214\272.md" index 1dbe3230a90e1611d3154282977392183046dacb..c01627e7334695a36a093067d7b745afa47e4e06 100644 --- "a/\347\254\254\344\272\224\351\203\250\345\210\206\342\200\224\342\200\224\345\274\200\346\272\220\346\262\273\347\220\206/\346\211\223\351\200\240\345\274\200\346\272\220\347\244\276\345\214\272.md" +++ "b/\347\254\254\344\272\224\351\203\250\345\210\206\342\200\224\342\200\224\345\274\200\346\272\220\346\262\273\347\220\206/\346\211\223\351\200\240\345\274\200\346\272\220\347\244\276\345\214\272.md" @@ -1 +1,161 @@ -> 如何为自己的项目打造开源社区?建立一个开源社区的前提是什么?如何将其发展壮大? \ No newline at end of file +# 打造开源社区 + +> 如何为自己的项目打造开源社区?建立一个开源社区的前提是什么?如何将其发展壮大? + +`社区(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 群、微信群等等。 + +### 吸引参与者 + +吸引各种类型的人加入社区,参与其中,并为社区的目标做出贡献。对所有的社区来说,一个非常关键的步骤就是吸引新的参与者。为了吸引新人加入社区,我们的不仅要做宣传,而且是对正确的人做宣传,确保他们可以加入社区。这个时候,记住两点: + +- 确保面向新人的社区入口尽可能地畅通无堵。总之,让社区给人一种开放和容易接近的感觉。 +- 吸引那些愿意作出承诺,愿意为了社区的目标而努力工作的人加入社区。 + +我觉得有必要单独说一下第2点,我建议你想办法避开那些草率的社区参与者。草率的社区参与者带来的成本是昂贵的,这不一定只是经济成本,还包括时间成本。 + +### 建立良好的基础设施 + +新社区以及带着特殊使命诞生,社区人创始人已经建立起交流渠道,一些早期的社区成员也已经加入进来。慢慢地,你会发现社区需要额外的工具。即便是最简单的社区,也需要使用工具来沟通、存储工作和共享信息。社区贡献者的类型不同,他们的需求也不同,需要的工具也不同。例如:开发人员需要版本控制工具和漏洞追踪工具,文档人员需要编辑器,测试人员需要测试套件,而所有人都需要同他们交流。许多社区都为不同类型的贡献者提供了各种各样的工具和设施。 + +除了为特定类型的贡献者提供工具,你可能还需要考虑一下其他人。例如,用户可能需要一个地方来查看项目的文档、了解项目的进展,以及咨询反馈。当然,贡献者也可能需要这些。 + +在挑选工具时要避免对工具的盲目崇拜,每个人都有自己习惯的工具,你永远不可能让所有人都满意。所以你需要确定出真正的需求,尽快挑选出可行的部分。要知道,越早让选定的工具用起来,人们就能越早集中精力做有用的事情,你的社区就会运转得越好。 + +### 留住参与者 + +社区也可以看作是一个环境。环境不仅影响着人们的感受,还影响着机会。在一个被认为不太安全的社区里,人们往往因为恐怖而不敢互相交往。而在一个令人感到安全和友好的社区里,本地的小组,任意多点间的谈话,还有各种其它形式的互动都十分活跃。 + +如果你想要让参与者留下来,就需要给他们常规意义上的成就感。你要让他们感觉到:第一,他们能做很多事情;第二,他们的贡献得到了认可。如果能够不断的让参与者感受到了这两点,那就更好了。 + +### 举办活动和会议 + +活动和会议对增长社区人气和振奋社区非常有效,这给参与者们提供了一个很好地彼此交流的机会。 + +### 为社区获取经济支持 + +社区的运转是需要经济来源的。除了自掏腰包外,广告、销售周边、获取捐赠与赞助都能给社区带来收入的机会。在收到别人的捐赠或者赞助时,不要吝啬感谢。 + +## 壮大社区 + +现在你的社区已经在不断运转了,那么如何让社区繁荣昌盛呢? + + ### 跟踪社区的健康情况 + +林子大了,什么鸟都有。开放社区由一群性格迥异的人组成,他们拥有各自的职责、技能和天差地别的经历。社区的多样性会触发各种各样的火花,有好的,也有坏的。通过主动观察,你可以得到你眼中的社区健康情况,而通过有规律的、持续的反馈,你可以获知别人眼中的社区健康情况。 + +#### 主动观察 + +你能看到的有很多,例如:邮件列表活跃吗?有人报告缺陷时,开发人员能否迅速积极地做出响应? 成员在回答问题时是否有礼貌且富有成效? + +#### 反馈的意义 + +人们常常会忽视从外界收集反馈意见这件事情,但它是建设强大、健康的社区的一个重要方面。反馈非常重要,它让我们了解别人的看法,这些看法可以帮助我们找出机会、问题和需要重新重视的区域。通过反馈,我们可以知道社区外的人们是如何看待社区的。 + +不幸的是,许多社区负责人都认为反馈是个麻烦的东西,如果收到的反馈挑战了他们的工作和社区的准则,他们就忽略它,这是一个错误的想法。反馈其实为我们提供了一个非常好的机会,来改善社区的功能。 + +感谢那些骂你的和批评你的人吧。爱之深,恨铁不成钢,可能他们才是真正关心项目发展的人。 + +#### 鼓励反馈 + +当社区成员对你的工作充满意见和担忧,却没人告诉你时,后果可能会非常严重。社区成员的担忧和意见却可能在社区内悄悄流传,人们交头接耳,议论纷纷。然后你却一无所知,你可能信心满满地认为社区现在很健康,看上去一片祥和,宁静之下暗潮涌动。因为你没有任何反馈信息,你当然也无法着手处理问题。因此,要鼓励所有人大胆地反馈。你可能得想办法让人们”大胆起来“,比如你可以写一篇博客告诉所有人:你承诺对所有的反馈、建议和批评都欣然接受,并积极改正。 + +那么如何收集反馈呢?很多社区都会建立一个专门用来处理反馈的电子邮箱,或者在社区网站上开放一块用于反馈的区域。当然还有很多其它的方式,但最重要的是要确保反馈者有一个非常好用的反馈渠道,并努力做到公开透明。 + +#### 处理反馈 + +当你收到反馈后,积极地回应,提出解决方案,让改变发生。如果社区成员不断反映问题,却看不到任何改变,慢慢地,他们就不再反馈了。开放地对待反馈,表明你的诚意,社区成员也会因你的态度和贡献而愈发尊重你。 + +### 社区治理 + +想必大家都不会对`治理`这个词感到陌生,治理是一个庞大而复杂的话题。例如,国家政府以改善基础设施、提升国民生活水平为己任。那么,社区也需要治理吗?答案并不是绝对的。如果你的社区只有 5 个人,可能真没有治理的必要。但是,如果你的社区规模达到了 500 人,你就需要慎重考虑了。 + +#### 常见的三种治理模式 + +世界上有无数的社区,每个社区都有自己的管理办法。在这些管理办法中,大致呈现出三种模式: + +1. 独裁模式:治理和决策主要由一人掌控,比如 Linux 社区。 +2. 开明专制:没有正式的领导者,唯才是用。比如 KDE 社区。 +3. 委托式管理:社区的治理权被委派给一个治理机构。这种方式开放、透明,并且有利于社区的健康发展。比如 Ubuntu 社区。 + +#### 处理冲突 + +治理的首要职责是**解决冲突**,目标是带来社区的祥和。随着社区规模的扩大,人们的观点会出现分歧,分歧可能变成争论,并发展成派系斗争。这将是一个非常严重的问题。冲突会损害社区健康,将社区变成一个不舒适的环境,影响社区成员的感受。 + +那么如何处理冲突呢?以下是几个可行的步骤: + +1. 理解冲突:了解冲突是关于什么的,客观描述各方观点。 +2. 沟通调查:提出开放性问题,倾听,全面了解各方情况。 +3. 寻找方案:进行头脑风暴,寻找所有可能的解决方案。 +4. 选择最佳方案:帮助冲突各方进行商讨,寻找出最有利于各方共同利益的、最能被各方接受的方案。 +5. 巩固实施:总结并确认各方达成一致的内容,并实施。 + +值得一提的是,虽然冲突容易引起不适,但它也不全是不好的。冲突能够帮助社区管理者发现社区内的多样性、社区成员的激情,以及社区的活跃程度。 + +## 参考资料 + +* [社区 - 百度百科](https://baike.baidu.com/item/%E7%A4%BE%E5%8C%BA/904140). +* [社区 - 维基百科](https://zh.wikipedia.org/zh-cn/%E7%A4%BE%E5%8C%BA). +* [开源生态白皮书(2020年)](http://m.caict.ac.cn/yjcg/202010/P020201021698937496716.pdf). +* [开源之道](http://opensourceway.community/). +* [The Open Organization Workbook](https://opensource.com/open-organization/resources/workbook). +* [Building Welcoming Communities](https://opensource.guide/building-community/). +* [The Art of Community](http://artofcommunityonline.org). +* [GitHub Community Guidelines](https://docs.github.com/en/free-pro-team@latest/github/site-policy/github-community-guidelines). +* [Training for Conflict Resolution](https://ctb.ku.edu/en/table-of-contents/implement/provide-information-enhance-skills/conflict-resolution/main). +* [TODO Group Guides](https://todogroup.org/guides). \ No newline at end of file