开源生态学初探——从生命游戏开始
缘起
在最近一次开源社的理事会上,我们聊到了关于如何孵化开源项目,如何更好的帮助开源项目发展的事情。我在会后思考了很多,因此决定写一篇文章来阐述一下自己的观点。
生命游戏
首先还是想介绍一下,已经有很多朋友都很熟悉的一个游戏:生命游戏。
在 1970 年的时候,约翰·何顿·康威(John Horton Conway)发明了生命游戏,规则非常简单:
- 当前细胞为死亡状态时,当周围有 3 个存活细胞时,则迭代后该细胞变成存活状态(模拟繁殖);若原先为生,则保持不变。
- 当前细胞为存活状态时,当周围的邻居细胞低于两个(不包含两个)存活时,该细胞变成死亡状态(模拟生命数量稀少)。
- 当前细胞为存活状态时,当周围有两个或 3 个存活细胞时,该细胞保持原样。
- 当前细胞为存活状态时,当周围有 3 个以上的存活细胞时,该细胞变成死亡状态(模拟生命数量过多)。
如果想自己玩玩这个游戏,可以访问:http://home.ustc.edu.cn/~zzzz/lifegame/lifegame.html
如果只是想看看效果,可以访问 B 站视频。
之前的激励模型,漏掉了什么?
3 月份的时候,我写过一篇文章:开源社区的激励模型。但是当时的讨论,现在看来还停留在“静态分析”阶段。
如果我们希望从一个生命周期的视角,来看待一个开源项目,应该如何为其建模呢?
- 初创阶段,开源项目的创始人势单力孤,甚至孤军奋斗。
- 小成阶段:开始吸引到有限的几个朋友,参与这个项目,人员不稳定,随时可能跑掉。
- 活跃阶段:已经有了稳定的开发者社区,项目稳定发展,欣欣向荣。
- 衰落阶段:人员逐渐流失,项目失去吸引力,代码提交零零星星,社区活跃度下降。
- 遗迹阶段:已经无人维护,仅剩一个代码仓库,供人凭吊。
或者更加简洁一点划分:
- 初创阶段:无吸引力,无需治理
- 活跃阶段:有吸引力,需要治理
- 衰落阶段:无吸引力,无力回天
而我之前的讨论,大多数时候是针对活跃阶段,如何治理的问题。而一个开源项目,如何从“初创阶段”,发展为“活跃阶段”,却是另一个尚未被讨论的问题。
当然,如何避免活跃的项目衰落,这个可能更难,今天的这篇文章就先不讨论了。
开源生态学,应该如何定义问题?
先看看生态学研究些什么?
生态学(德语:Ökologie,英语:Ecology),是德国生物学家恩斯特·海克尔于 1866 年定义的一个概念:生态学是研究生物与其周围环境(包括非生物环境和生物环境)相互关系的科学。德语Ökologie(最初:Oecologie)是由希腊语词汇Οικοθ(家)和Λογοθ(学科)组成的,意思是“研究居住在同一自然环境中的动物(Lebewesen)的学科”,目前已经发展为“研究生物与其环境之间的相互关系的科学”。环境包括生物环境和非生物环境,生物环境是指生物物种之间和物种内部各个体之间的关系,非生物环境包括自然环境:土壤、岩石、水、空气、温度、湿度等。
生态学考虑多个层次(从个体、种群、群落、生态系统到生物圈层面)的生态。主要研究以下问题:
- 生命过程、反脆弱性、相互作用和适应性
- 物质和能量在生物群落中的流动
- 生态系统的演进发展
- 物种内部和之间的合作、竞争和捕食
- 生物体的丰度、生物量和在环境中的分布情况
- 生物多样性的模式及其对生态系统过程的影响
映射到开源领域
- 个体:就是一个一个的(有可能)参与开源的个体
- 种群:在校学生群体,自由职业群体,企业员工群体等等
- 群落:一个一个的开源社区,可以看做一个一个的群落
- 生态系统:整个开源世界,构成了一个生态系统
- 生物圈:就是指这个开源生态系统,所处的整个世界
我们在生命游戏里是怎么玩的?
我们会暂停游戏,观察“停滞不前”的群落,然后适当的加上一个“个体”(比如图中的绿色或者黄色的点)。在游戏继续之后,可能那个群落就会兴旺发达了。
但是,与生命游戏不同的地方在于:我们加上的个体,不一定就是最适合的。于是,这个群里后续的发展方向,可能正如我们所愿,也可能会快速的分崩离析。
再回顾一下我们前面对于开源社区的分类:
- 初创阶段:无吸引力,无需治理
- 一个小群落,可能长期停滞,也可能即将消亡
- 活跃阶段:有吸引力,需要治理
- 一个活跃的,不断发展变化的群落,但是可能存在不稳定的因素
- 衰落阶段:无吸引力,无力回天
- 一个组织结构不合理,缺少关键个体,不再有效产出的群落
开源生态学,可以研究一些什么?
- 一个开源社区,以及其生产的开源软件的“生命周期”
- 开源参与者的角色与种类(个体与种群),以及其成长的典型路径
- 能够激发开源社区发展壮大的“物质与精神能量”有哪些?以及如何发生作用?
- 整个开源世界,作为一个生态系统,如何评估其健康状况?
- 开源世界中的个人、企业、社区与基金会之间,存在哪些竞争与合作关系?
- 是否存在某种开源社区的地理环境,比如:美国、中国、英文、中文,不同的环境下的开源社区,有何异同?
- 开源社区的成员多样性与健康度之间,应该是何种关系?
尝试从生态学的角度,讨论三个开源的话题
如何帮助初创阶段的开源项目,成为成熟的、活跃的开源项目?
我们可以提出一个猜想,在《【翻译】开源的简单经济学》中提到的各种回报,除了“金钱”以外的收益,都是开源项目所独有的,例如心情愉悦、未来的工作机会、同行的认可等等。这些都与“开源项目规模与活跃度”正相关。
也就是:越是大项目、很多人参与的项目,国际知名的项目,越是有人不求“物质”回报的参与贡献。因为非物质回报,足够补偿。
初创阶段 | 活跃阶段 | |
---|---|---|
吸引力 | 小 | 大 |
参与动力 | 创始人坚持 | 非物质回报 |
如果,我们能够为这个开源项目,投入一些“生力军”,帮助项目从初创阶段,成长到活跃阶段,这个项目就能够依靠自身的吸引力,继续发展下去。
于是,我们就引入了一个“生物体的丰度”概念。一个健康的开源生态,有足够密度的开源爱好者,或者说他们有充足的业余时间参与一个新兴的开源项目。这个生态圈,就能够不断的培育出新的开源项目。
否则,就会有很多新兴开源项目,还没有熬到长大,就悄无声息的消失了。
从这个意义上来说:要想改善开源生态,至少有两种方案。
- 想办法增加整体的生力军数量,以提升丰度。这可以称为环境改良
- 想办法为特定的,更有希望的“种群”,定向追加人手,帮助他们更好的存活与发展。这可以称为定向孵化
如何定向孵化一个开源项目
继续上面的话题,假设我们想投入一些生力军到一个新兴开源项目,需要考虑以下问题:
- 是找开源老手,还是找开源新人?
- 在一个原本就贫瘠的环境中,拆东墙补西墙,不是一个好选择
- 如果是找新手,是否存在风险?
- 如果一个开源项目原有的成员,本身经验就不足,新手的参与也许还帮不上忙,只会添乱
- 如果是找开源新手,但是却是开发老手,是否可行?
- 通过付费找外包的方式开发,对于项目可行,但是对于社区氛围,以及长期发展,可能不利
所以,理想的方案是:开源老手作为导师,辅导N个新手,加入一个社区。一方面帮助新人适应开源社区的开发模式,另一方面也能帮助新兴开源项目,逐步走上正规。
但是,这样的孵化,成本非常高昂,事实上Google Summber of Code基本上就是这个模式。只不过,如果要想在中国更好的发展这样的模式,导师的心力投入需要更高才行。
新建一个开源项目,应该选择何种语言?
如果我们的开源项目,初始语言是英文,那么图上的绿色点与蓝色点,都可以参与。如果初始语言是中文,那么图上的蓝色点与紫色点,都可以参与。
从“生物体的丰度”概念来看,现阶段当然是选择使用英文。除非等到使用中文的开源开发者数量大大增加,使得选择中文作为初始语言更加“划算”。
另外一种可能性,也许会与项目的具体目标用户群有关。假设我们做的是一个微信小程序上的开源项目。或者是一个用于抗击新冠、快速核酸筛查的开源项目,那么选择中文,才是更加合理的。
结束语
总之,从生态学的角度来看开源,可以帮助我们打开思路,考虑更多的可能性,以及做出不一样的选择。
欢迎大家一起来讨论。