开源生态学初探——从生命游戏开始

缘起

在最近一次开源社的理事会上,我们聊到了关于如何孵化开源项目,如何更好的帮助开源项目发展的事情。我在会后思考了很多,因此决定写一篇文章来阐述一下自己的观点。

生命游戏

首先还是想介绍一下,已经有很多朋友都很熟悉的一个游戏:生命游戏

在 1970 年的时候,约翰·何顿·康威(John Horton Conway)发明了生命游戏,规则非常简单:

  1. 当前细胞为死亡状态时,当周围有 3 个存活细胞时,则迭代后该细胞变成存活状态(模拟繁殖);若原先为生,则保持不变。
  2. 当前细胞为存活状态时,当周围的邻居细胞低于两个(不包含两个)存活时,该细胞变成死亡状态(模拟生命数量稀少)。
  3. 当前细胞为存活状态时,当周围有两个或 3 个存活细胞时,该细胞保持原样。
  4. 当前细胞为存活状态时,当周围有 3 个以上的存活细胞时,该细胞变成死亡状态(模拟生命数量过多)。

如果想自己玩玩这个游戏,可以访问:http://home.ustc.edu.cn/~zzzz/lifegame/lifegame.html

如果只是想看看效果,可以访问 B 站视频

之前的激励模型,漏掉了什么?

3 月份的时候,我写过一篇文章:开源社区的激励模型。但是当时的讨论,现在看来还停留在“静态分析”阶段。

如果我们希望从一个生命周期的视角,来看待一个开源项目,应该如何为其建模呢?

或者更加简洁一点划分:

而我之前的讨论,大多数时候是针对活跃阶段,如何治理的问题。而一个开源项目,如何从“初创阶段”,发展为“活跃阶段”,却是另一个尚未被讨论的问题。

当然,如何避免活跃的项目衰落,这个可能更难,今天的这篇文章就先不讨论了。

开源生态学,应该如何定义问题?

先看看生态学研究些什么?

生态学(德语:Ökologie,英语:Ecology),是德国生物学家恩斯特·海克尔于 1866 年定义的一个概念:生态学是研究生物与其周围环境(包括非生物环境和生物环境)相互关系的科学。德语Ökologie(最初:Oecologie)是由希腊语词汇Οικοθ(家)和Λογοθ(学科)组成的,意思是“研究居住在同一自然环境中的动物(Lebewesen)的学科”,目前已经发展为“研究生物与其环境之间的相互关系的科学”。环境包括生物环境和非生物环境,生物环境是指生物物种之间和物种内部各个体之间的关系,非生物环境包括自然环境:土壤、岩石、水、空气、温度、湿度等。

生态学考虑多个层次(从个体、种群、群落、生态系统到生物圈层面)的生态。主要研究以下问题:

以上内容摘录自中英文维基百科:En

映射到开源领域

我们在生命游戏里是怎么玩的?

我们会暂停游戏,观察“停滞不前”的群落,然后适当的加上一个“个体”(比如图中的绿色或者黄色的点)。在游戏继续之后,可能那个群落就会兴旺发达了。

但是,与生命游戏不同的地方在于:我们加上的个体,不一定就是最适合的。于是,这个群里后续的发展方向,可能正如我们所愿,也可能会快速的分崩离析。

再回顾一下我们前面对于开源社区的分类:

开源生态学,可以研究一些什么?

尝试从生态学的角度,讨论三个开源的话题

如何帮助初创阶段的开源项目,成为成熟的、活跃的开源项目?

我们可以提出一个猜想,在《【翻译】开源的简单经济学》中提到的各种回报,除了“金钱”以外的收益,都是开源项目所独有的,例如心情愉悦、未来的工作机会、同行的认可等等。这些都与“开源项目规模与活跃度”正相关。

也就是:越是大项目、很多人参与的项目,国际知名的项目,越是有人不求“物质”回报的参与贡献。因为非物质回报,足够补偿。

  初创阶段 活跃阶段
吸引力
参与动力 创始人坚持 非物质回报

如果,我们能够为这个开源项目,投入一些“生力军”,帮助项目从初创阶段,成长到活跃阶段,这个项目就能够依靠自身的吸引力,继续发展下去。

于是,我们就引入了一个“生物体的丰度”概念。一个健康的开源生态,有足够密度的开源爱好者,或者说他们有充足的业余时间参与一个新兴的开源项目。这个生态圈,就能够不断的培育出新的开源项目。

否则,就会有很多新兴开源项目,还没有熬到长大,就悄无声息的消失了。

从这个意义上来说:要想改善开源生态,至少有两种方案。

如何定向孵化一个开源项目

继续上面的话题,假设我们想投入一些生力军到一个新兴开源项目,需要考虑以下问题:

所以,理想的方案是:开源老手作为导师,辅导N个新手,加入一个社区。一方面帮助新人适应开源社区的开发模式,另一方面也能帮助新兴开源项目,逐步走上正规。

但是,这样的孵化,成本非常高昂,事实上Google Summber of Code基本上就是这个模式。只不过,如果要想在中国更好的发展这样的模式,导师的心力投入需要更高才行。

新建一个开源项目,应该选择何种语言?

如果我们的开源项目,初始语言是英文,那么图上的绿色点与蓝色点,都可以参与。如果初始语言是中文,那么图上的蓝色点与紫色点,都可以参与。

从“生物体的丰度”概念来看,现阶段当然是选择使用英文。除非等到使用中文的开源开发者数量大大增加,使得选择中文作为初始语言更加“划算”。

另外一种可能性,也许会与项目的具体目标用户群有关。假设我们做的是一个微信小程序上的开源项目。或者是一个用于抗击新冠、快速核酸筛查的开源项目,那么选择中文,才是更加合理的。

结束语

总之,从生态学的角度来看开源,可以帮助我们打开思路,考虑更多的可能性,以及做出不一样的选择。

欢迎大家一起来讨论。