缘起

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

生命游戏

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

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

  • 当前细胞为死亡状态时,当周围有 3 个存活细胞时,则迭代后该细胞变成存活状态(模拟繁殖);若原先为生,则保持不变;

  • 当前细胞为存活状态时,当周围的邻居细胞低于两个(不包含两个)存活时,该细胞变成死亡状态(模拟生命数量稀少);

  • 当前细胞为存活状态时,当周围有两个或 3 个存活细胞时,该细胞保持原样;

  • 当周围有 3 个以上的存活细胞时,该细胞变成死亡状态(模拟生命数量过多)。

  • 如果想自己玩玩这个游戏,可以访问:

http://home.ustc.edu.cn/~zzzz/lifegame/lifegame.html

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

https://www.bilibili.com/video/BV1LL411J7Jg/

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

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

《开源社区的激励模型》

https://zhuangbiaowei.github.io/opensource/2022/03/05/opensource-motivation-model.html

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

  • 初创阶段,开源项目的创始人势单力孤,甚至孤军奋斗。

  • 小成阶段:开始吸引到有限的几个朋友,参与这个项目,人员不稳定,随时可能跑掉。

  • 活跃阶段:已经有了稳定的开发者社区,项目稳定发展,欣欣向荣。

  • 衰落阶段:人员逐渐流失,项目失去吸引力,代码提交零零星星,社区活跃度下降。

  • 遗迹阶段:已经无人维护,仅剩一个代码仓库,供人凭吊。

或者更加简洁一点划分:

  • 初创阶段:无吸引力,无需治理

  • 活跃阶段:有吸引力,需要治理

  • 衰落阶段:无吸引力,无力回天

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

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

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

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

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

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

  • 生命过程、反脆弱性、相互作用和适应性

  • 物质和能量在生物群落中的流动

  • 生态系统的演进发展

  • 物种内部和之间的合作、竞争和捕食

  • 生物体的丰度、生物量和在环境中的分布情况

  • 生物多样性的模式及其对生态系统过程的影响

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

中:https://zh.wikipedia.org/wiki/%E7%94%9F%E6%80%81%E5%AD%A6

En:https://en.wikipedia.org/wiki/Ecology

映射到开源领域

  • 个体:就是一个一个的(有可能)参与开源的个体

  • 种群:在校学生群体,自由职业群体,企业员工群体等等

  • 群落:一个一个的开源社区,可以看做一个一个的群落

  • 生态系统:整个开源世界,构成了一个生态系统

  • 生物圈:就是指这个开源生态系统,所处的整个世界

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

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

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

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

  • 初创阶段:无吸引力,无需治理

  • 一个小群落,可能长期停滞,也可能即将消亡

  • 活跃阶段:有吸引力,需要治理

  • 一个活跃的,不断发展变化的群落,但是可能存在不稳定的因素

  • 衰落阶段:无吸引力,无力回天

  • 一个组织结构不合理,缺少关键个体,不再有效产出的群落

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

  • 一个开源社区,以及其生产的开源软件的“生命周期”

  • 开源参与者的角色与种类(个体与种群),以及其成长的典型路径

  • 能够激发开源社区发展壮大的“物质与精神能量”有哪些?以及如何发生作用?

  • 整个开源世界,作为一个生态系统,如何评估其健康状况?

  • 开源世界中的个人、企业、社区与基金会之间,存在哪些竞争与合作关系?

  • 是否存在某种开源社区的地理环境,比如:美国、中国、英文、中文,不同的环境下的开源社区,有何异同?

  • 开源社区的成员多样性与健康度之间,应该是何种关系?

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

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

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

《【翻译】开源的简单经济学》

https://zhuangbiaowei.github.io/opensource/economics/2022/05/18/the-simple-economics-of-open-source.html

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

_

初创阶段

活跃阶段

吸引力

参与动力

创始人坚持

非物质回报

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

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

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

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

  • 想办法增加整体的生力军数量,以提升丰度。这可以称为环境改良;

  • 想办法为特定的,更有希望的“种群”,定向追加人手,帮助他们更好的存活与发展。这可以称为定向孵化。

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

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

  • 是找开源老手,还是找开源新人?

  • 在一个原本就贫瘠的环境中,拆东墙补西墙,不是一个好选择

  • 如果是找新手,是否存在风险?

  • 如果一个开源项目原有的成员,本身经验就不足,新手的参与也许还帮不上忙,只会添乱

  • 如果是找开源新手,但是却是开发老手,是否可行?

  • 通过付费找外包的方式开发,对于项目可行,但是对于社区氛围,以及长期发展,可能不利

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

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

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

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

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

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

结束语

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

欢迎大家一起来讨论。

转载自:开源雨林

作者:庄表伟

编辑:李佳阳

责编:王玥敏

设计:李昊原

相关阅读 | Related Reading

一个开源贡献者的自我修养 :在Apache Spark推进SPIP时我们学到了什么?

技术播客月 | 开发者社区运营是怎么样一个体验?

我所理解的开源软件供应链安全

开源社简介

开源社成立于 2014 年,是由志愿贡献于开源事业的个人成员,依 “贡献、共识、共治” 原则所组成,始终维持厂商中立、公益、非营利的特点,是最早以 “开源治理、国际接轨、社区发展、开源项目” 为使命的开源社区联合体。开源社积极与支持开源的社区、企业以及政府相关单位紧密合作,以 “立足中国、贡献全球” 为愿景,旨在共创健康可持续发展的开源生态,推动中国开源社区成为全球开源体系的积极参与及贡献者。

2017 年,开源社转型为完全由个人成员组成,参照 ASF 等国际顶级开源基金会的治理模式运作。近八年来,链接了数万名开源人,集聚了上千名社区成员及志愿者、海内外数百位讲师,合作了近百家赞助、媒体、社区伙伴。

开源生态学初探——从生命游戏开始相关推荐

  1. 元胞自动机CA+生命游戏代码

    1.元胞自动机 元胞自动机(Cellular Automaton,复数为Cellular Automata,简称CA,也有人译为细胞自动机.点格自动机.分子自动机或单元自动机).是一时间和空间都离散的 ...

  2. C语言康威生命游戏,【2020存档】康威生命游戏(CGoL)研究进展

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1.历史概述 生命游戏,由康威发明于1970年,同年登载在科学杂志上,引发一阵风潮. 最早的发现是在1969年末,康威和研究生初步探索B3/S23时,发现 ...

  3. 伍六七带你学算法 进阶篇-生命游戏

    有趣的算法题–生命游戏 难度-中等 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 想要体验生命游戏的小伙伴可以到这里-->生命游戏 进入 ...

  4. html5 生存游戏,html5版生命游戏

    html5版生命游戏 只有一个.html文件,无任何依赖. 使用canvas 1.[文件] index.html ~ 4KB     下载(206) canvas { background: #eee ...

  5. 康威生命游戏是如何搭建计算机的?

    2020年4月,数学家约翰·康威(John H. Conway)因新冠肺炎去世.大家回顾康威教授平生贡献时,不可避免要提到伟大.深刻的"康威生命游戏"(Conway's Game ...

  6. 生命游戏(Game of Life)描述

    一.生命游戏(Game of Life)描述 生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死亡的细胞.一个细胞在下一 ...

  7. 细胞计算机生命游戏,【图片】【20170108 其它內容】【转】生命游戏【三体吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 有些初始图案最终会得到稳定不变的图形,康威把这些稳定图形叫做"静物"(still life).常见的静物有:方块.小船.面包.蜂巢等( ...

  8. [Leetcode] 第289题 生命游戏

    一.题目描述 根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞具有一个初 ...

  9. 分布与并行计算—生命游戏(Java)

    生命游戏其实是一个零玩家游戏,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量.如果相邻方格活着的细胞数量 ...

最新文章

  1. Android TextView 在strings 里面 实现换行
  2. 伪静态技术(SEO) 摘自:http://bbs.admin5.com/thread-8522290-1-1.html
  3. NAT概念解释(不完全版,但不会搞错...)
  4. 分布式锁和mysql事物扣库存_这个是真的厉害,高并发场景下的订单和库存处理方案,讲的很详细了!...
  5. Angular Reactive Form里的setNgReflectProperty
  6. mysql 日期索引的使用_日期使用
  7. 帝国CMS操作类型一览表
  8. 避免大规模故障的微服务架构
  9. 专访全面智能CTO陈章:想法只有在技术落地的那一刻才有撬动地球的能力
  10. php机器人聊天对话框,PHP实现QQ聊天机器人
  11. 转发小程序php,微信小程序 转发功能的实现
  12. 47.0.概率论与数理统计-两个正态总体均值差的置信区间
  13. wifi mesh组网
  14. SOCKET 实现NAT 穿越
  15. Office - PPT 02
  16. Win10与Ubuntu 20.04 LTS并存安装
  17. 我不是说你,我是说大家
  18. 实时公交位置系统的实现
  19. 风控建模之外部数据评估
  20. Hexo+NexT添加分享功能

热门文章

  1. play-framework的安装配置(OS X和windows版)
  2. 基于深度神经网络的火灾探测声学灭火器控制
  3. GPU暗战CPU十年凭什么?
  4. 俄罗斯立法机关将于下周开始审核加密货币法律草案
  5. 【购房必备知识】成都公积金贷款/商业贷款的一些知识记录
  6. SAS聚类分析(系统聚类cluster,动态聚类fastclus,变量聚类varclus)
  7. 用户开启了iCloud 照片库,选择了“优化 iPhone/iPad 储存空间”获取图片失败
  8. java任务系统设计_任务调度系统-任务依赖的设计
  9. MySQL学习笔记-(5)---(JDBC)
  10. ie8下实现预览pdf