本文由X-lab开放实验室博士生赵生宇原创出品

该篇博客继续之前关于活跃度和协作影响力的介绍继续展开,希望可以在解决协作影响力无法容纳更多数据,从而可以更全面衡量开源生态的同时,也引入一种高可扩展的数学模型,可以在任意时间快速容纳更多元的数据,而不会导致模型的大幅改动。也希望可以有更多对社区度量感兴趣的朋友参与到讨论之中,本人的联系方式见关于页。

(http://blog.frankzhao.cn/about)

(该图为可探索的完整开源星系)

01

背景

之前的两篇博客介绍了一种基于开发者行为加权统计的活跃度指标计算方法,以及基于活跃度的开源协作网络下的项目协作影响力指标计算方法。其中活跃度主要解决指标多元导致的认识困难,同时通过不同的行为权重使这个指标对开发者的行为可以起到正向的激励作用。而协作活跃度则是从整个开源技术生态的角度出发,在考虑项目间的协作关联的同时,某种程度上解决了活跃度可能出现的恶意刷分的问题和人为给定权重导致的排序不稳定的问题。

然而仅仅是上述两个指标,除了存在一些固有度量准确度的问题外,还存在着一个重要的缺陷,那就是在引入新的生态数据后模型需要再次修正,而开源软件生态的数据要远远超出 GitHub 全域行为数据的范畴,所以我们更加需要一个高度可扩展的数学模型,可以在有更多的开放数据时随时融入进来。

02

价值流网络

就像 Nadia Eghbal 的新书「Working in Public」中表述的:“消费代码的目的不是为了简单地阅读和研究它,而是为了使用它,开放源代码的价值不是来自于它的静态品质。”、“是,基于依赖关系来衡量代码的价值,只能给我们提供等式的一部分。谁在使用开放源代码很重要,但谁开发了这些代码不也很重要吗?”。这两句话很好的表明的我们对开源软件度量应该遵循的最基本的底层逻辑。

即开源软件或开源数字制品是否有价值最重要的两个需要衡量的点分别在生产侧和消费侧。从生产侧而言,即便两个开发者具有相同的活跃度,但优秀的开发者的行为所产生的价值与刚入门的开发者所产生的价值是完全不同的。而从消费侧而言,如果一个开源软件在持续开发、但从未被人使用过,和一个可能已经长期不活跃、但却被成百上千的人所使用的的项目的价值也是不同的。

所以价值流网络本质上是希望从开源软件产生的社会价值的角度来进行分析,产生一个从生产端到消费端的模型,可以直接衡量出每个软件的社会价值,同时也可以反向推演出每个开发者的价值。这对于构建完整的开源经济生态体系是基础性的工作。

03

从协作影响力开始说起

回头先来看一下上一篇的协作影响力模型。

其实在原始的网页排名算法中,是从一个概率模型出发的,即当一个互联网用户浏览到某一网页时,接下来他可能去哪些网页?有较大概率他会在当前页面的外链中随机寻找一个链接继续访问一下,也有可能就关掉网页以后在所有的网页中随机打开一个。最终网页的排名就是可能被访问到概率较大的网页排在靠前的位置。

但同时这个模型也可以从价值流的角度来看,也就是每个网页会向其外链的网页传递一部分自己的价值,而从链入它的网页获取一部分价值,同时所有网页还都具有一个基础价值。那么当在整个网络结构的价值流稳定后,每个网页的价值也就被完全确定一下来,那么价值最大的网页就会排名靠前一些。

而从上一篇的开源协作网络中,也可以认为是每个项目都有一个基础价值,同时根据开发者协作导致的项目之间的关联会带来项目之间的价值流动和传递,直到整个网络稳定时,所有项目的协作影响力也就是被确定了下来。

04

一个简单的示例

从上面的角度来看,事实上我们是可以给出一种更加泛化的方法来进行价值网络的构造和计算的。下面给出一个最简单的例子,在考虑到开发者贡献活跃度的同时加入更多的数据关系,尤其是在生产侧和消费侧的数据。

如上图所示,在这个简单的价值网络中,包含了开发者和项目两种节点,开发者和项目具有各自的价值,且开发者之间具有关注关系,类似 GitHub 上的 Follow 关系。而项目之间具有依赖关系,即上下游的使用关系。同时除了开发者对项目的活跃度以外,我们还加入了关注度的概念,也就是那些由开发者对项目发起的单向的行为,例如 star、watch、fork、clone 等表示了对项目的关注,但没有实际反馈到项目中的行为。这个网络中的价值流动可以在下表中展示,每个单元格中的表示从行节点到列节点的价值传递:

项目 开发者
项目 依赖 活跃度、关注度
开发者 活跃度
关注

在这样一个模型下,对全域开源项目和开发者的价值流网络中,每个开发者的价值会通过其活跃度、项目关注度和对其他开发者关注关系向外流动;而每个项目的价值会通过活跃度和依赖关系向外流动。即我个人所创造的价值大部分会通过我的具体贡献行为流动到我贡献的项目中,另外有一部分会流动到我关注但没有贡献的项目中,还有一部分会流动到我关注那些开发者身上。而项目的价值一部分会通过贡献关系回归到开发者那里,还有一部分会通过依赖关系流动到给它提供服务的上游项目中。

而由于项目和开发者还会保留自己的一部分价值,那么我们可以将一些不在网络中的固有属性加入到他们的初始价值中,例如开源 KOL 的初始价值更高,那么这部分初始价值事实上会因为具有一定比例的保留持有而持续产生影响。

这个模型是否可以最终收敛并得到稳定解,是一个比较复杂的数学问题,有兴趣的同学可以参考附录部分的内容。

05

开源生态价值流网络

上面是一个可以快速实现并验证的数学模型,并且具有很好的可扩展性,但事实上整个开源生态的价值网络要远比上面的网络更加复杂。从生产侧到消费侧所包含的数据是远远超过这个范畴的,事实上尤其在消费端,被其他项目依赖并不是开源项目最终被消费的方式。事实上所有软件最终被消费的方式都是通过变成服务而满足某种现实用户的需求,事实上应该是指其最终的社会效用,而不是是否被集成做二次开发。如果二次开发后的项目同样没有被任何用户使用,没有解决任何现实需求,或换句话说没有产生任何社会效用的话,那其价值就是有限的。

这里可以给出一个更加复杂,但在当下可能还不具备可行性的价值网络供大家参考:

在上图表示的复杂网络结构中,其价值流动可以从下表中观察:

项目 软件
开发者 公司
基金会 投资机构 用户
项目
依赖、使用 使用 活跃度、关注度 拥有 拥有 投资 -
软件 使用 - - - - - 使用
开发者
活跃度 关注 雇佣 成员 - -
公司
拥有 - 雇佣 子公司 赞助 投资 -
基金会
拥有 - 成员 赞助 - - -
投资机构
投资 - - 投资 - - -
用户
活跃度 - 关注 雇佣 成员 - -

在上图上,大量与软件生态相关的实体都被纳入进来,如软件、公司、基金会、投资机构、用户等。从这个不完整的视角来看,开发者的活跃和用户对软件的使用本质上是所有开源软件生态价值的来源,而投资机构的投资、公司通过对开发者的雇佣关系和对基金会的赞助关系所注入的是外部影响价值,其他的价值均在网络内部按照上述的关系进行流动。

而上述提到的项目之间除了依赖关系,还有软件和项目之间使用关系。事实上传统的项目依赖关系主要是指二次开发,通常以特定语言制品包的方式引入。而软件的使用则是指在最终像用户提供服务时,一定不是单独项目提供服务,还包括该软件运行的底层操作系统、数据库、虚拟机、其开发语言、通过 RPC 交互的其他服务等,都属于软件使用范畴。

在这个网络模型下,如果我们可以很好的量化每一部分的具体价值和流动机制,最终不仅可以很好的评估所有实体的价值,而且在数据不断完善的情况下,这个价值会逐渐趋近于其所对应的真实社会效用。这才是最终的目标所在。而事实上这种方法也经常用于复杂系统的求解,且其解通常就是该复杂系统的稳态解,揭示了该复杂系统应该具有的运行模型。

当然这也不是一个最终的模型,例如对于安全风险的引入,那些长期从事网络安全漏洞监控与分析的开发者或公司同样为开源生态带来了巨大的价值。但外延继续延伸会导致这个网络迅速膨胀,所以这里就不再扩展了。

06

思考

  • 价值流网络模型事实上是希望尽可能把开源生态中所包含的数据都囊括其中,更重要的是提供一种上层的模型可以兼容更多的数据。

  • 价值流网络模型通过对数学模型和业务模型的解耦,使得上层的开源生态描述几乎可以在不关心底层数学模型的情况下进行,例如上述较复杂的网络结构,并没有涉及到任何数学模型。

  • 价值流网络模型是否可以得到稳态解,与其底层的数学约束息息相关,感兴趣的同学可以参考附录部分。但业务模型确定后可以由具有底层知识的同学协作调整使其可收敛即可。

  • 价值流网络模型最终希望解决的是整个开源生态的经济体系构建的问题,关于这个问题,将在下一篇文章中展开。

07

问题

  • 该模型虽然解耦的数学模型和业务模型,而且具有较好的可扩展性,但如果设计业务模型的人不熟悉底层的数学逻辑,很可能会设计出无法得出稳定解的业务模型,所以对业务模型设计人员有较高的要求。

  • 该模型想要准确的衡量整个开源数字生态的经济体系,需要大量的数据,而其中大部分数据是难以获取和难以关联的,这部分将是一个非常长期,而且是需要大规模协同的工作,也将是我们后续会引出的一部分工作。

08

附录

PageRank 的收敛性一般是在其等价的马尔科夫过程视角下,利用随机过程的理论进行证明。其对应的转移矩阵需要满足两个条件:

  • 满足随机过程的要求,即转移矩阵为一个随机矩阵。

  • 转移矩阵需为素矩阵或本原矩阵(primitive matrix),此时该矩阵可以满足不可约(irreducible)和非周期(aperiodic),则根据 Perron-Frobenius 定理,该随机过程一定收敛。

那么在高维的异质信息网络中,类似的随机过程也需要满足上述两个条件,即可满足其收敛性要求。更详细的信息请自行查阅相关内容。

对于后续其他指标的介绍,请继续关注该系列文章。如需转载请与原文作者联系。

X-lab开放实验室

技术传播文明

践行同步世界

开源点亮未来

如何评价一个开源项目——价值流网络相关推荐

  1. 如何评价一个开源项目?是它了

    本文由X-lab开放实验室博士生赵生宇创作  01 背景 从 2015 年开始参与到开源社区,到 2018 年进入阿里开始做开源运营相关的工作,直到今天在 X-lab 已经读博两年,事实上一直在探索如 ...

  2. 如何评价一个开源项目——协作影响力

    本文由X-lab开放实验室博士生赵生宇创作  该篇博客紧跟上一篇关于活跃度的介绍 这篇文章系统介绍了一种基于全域开发者协作网络的项目影响力评估方法,该方法对于分析整个开源生态有极大的帮助.在一次性评估 ...

  3. 独立开发变现周刊(第41期):一个开源项目一个人每月收入8万美金

    分享独立开发.产品变现相关内容,每周五发布. 目录 1.Budibase: 开源的低代码平台 2.沃尔玛通过SEO每月获得2.5亿流量的秘密 3.DesignJoy: 一个人的设计团队,月收入9万美金 ...

  4. 项目外包跟人力外包_您应该外包下一个开源项目吗?

    项目外包跟人力外包 为您的项目使用开源解决方案有很多好处. 它们灵活,敏捷,经济高效且高度可定制. 由于开源社区的响应能力,大多数提供可靠的信息安全性. 此外,您可以从小处着手,然后扩大规模,以缩短开 ...

  5. [征询意见][投票]先集中力量做好一个开源项目

    最近一直考虑在博客园组织开源项目的开发,我觉得发挥社区力量做出成功的开源项目是社区价值的体现.虽然组织开源项目的难度很大,也有过失败的教训,但只有实际地去做,去真正地面对挑战,才有成功的可能,否则,只 ...

  6. osmocom-bb 国外的一个开源项目, c118

    最近在学习无线安全方面的知识,了解到了  OsmocomB , 拿来研究下 . 以下知识,仅用作研究探讨,请勿用作非法用途  !!!! 理论:   osmocom-bb 国外的一个开源项目, 针对 G ...

  7. 如何做好一个开源项目之徽章(二)

    在上一篇[如何做好一个开源项目(一)],笔者已经介绍过开源项目运作和维护的一些理念了,本篇开始,笔者将着重于介绍一些开源项目维护过程中的一些细节,比如徽章.构建等等.由于最近经常出差,所以博客有中断, ...

  8. 如何做好一个开源项目(一)

    做好一个开源项目其实是一件比较费时费力费心的工作,它的最大难点除了代码维护之外,还包括后期的维护和持续的跟进.我曾经做过不少开源项目,但是坚持下来的,目前有信心能够持续维护的也只有Magicodes. ...

  9. 开源项目贡献者_我如何从一名贡献者转变为一个开源项目维护者

    开源项目贡献者 by Dhanraj Acharya 通过Dhanraj Acharya 我如何从一名贡献者转变为一个开源项目维护者 (How I went from being a contribu ...

最新文章

  1. [原]软件设计的一些感悟
  2. 【编码】-小Ho的防护盾-2016.08.14
  3. 习题11-7 奇数值结点链表 (20 分) -链表
  4. linux shell之IFS分割字符串
  5. 图标缩排和悬浮突显的简单实现
  6. 500多套微精品信小程序源码部分带后台,不同行业的源码集合,适合快速开发和自己学习
  7. python爬虫,爬取哔哩哔哩视频
  8. 四种PS蒙版的运用:快速蒙版、图层蒙版、矢量蒙版、剪切蒙版
  9. 科学计数法(PAT)
  10. Res2Net: A New Multi-scale Backbone Architecture
  11. 语言学及应用语言学类毕业论文文献有哪些?
  12. Kali Linux系统正确安装指南教程(一)MAC安装kail+Vmware Fusion详细教程(吐血本人测试10次)
  13. U系银河麒麟配置本地镜像源
  14. 老板用个人手机可以远程监控员工的电脑吗?
  15. Kali从入门到出门-手记
  16. OTFS白皮书-翻译
  17. 安卓8.0 android系统,谷歌安卓8.0重磅来袭!国产定制系统有必要马上适配吗?
  18. PXIe高速数据采集板卡的技术参数
  19. 华为ensp保存网络设备配置和导出导入网络设备
  20. redis主从结构,主库宕机

热门文章

  1. 利用MyBatis Generator自动创建代码
  2. Remoting and MSMQ 结合做的一个DEMO
  3. Delphi 的字符及字符串[4] - 字符串、字符指针与字符数组
  4. html5/css3响应式布局介绍
  5. MyBatis Generator 生成器把其他数据库的同名表生成下来的问题
  6. Fragment使用--文章集锦
  7. ajax跨域请求的问题
  8. POJ 1850 Code(组合数学)
  9. POJ 1904 【强连通分量】.cpp
  10. 导入shape文件到SDE数据库