长久以来,很多人把一些开源社区的数据进行系统地收集,用于判断和评估一个开源项目的质量,包括项目的受欢迎程度、可靠性和活跃度等信息。但业内人士认为,这些评判标准其实都存在缺陷。
在上个世纪 8、90 年代,人们常常用代码行数 LOC 来衡量一个软件项目的发展情况。ZDNet 资深技术编辑 Steven J. Vaughan-Nichols 认为,统计每个月增长的代码行数虽然是一件很容易的事,但用它来评价一个项目的好坏却具有很强的误导性。编程天才 Edsger Dijkstra 曾在 1988 年提出,LOC 给了人们 “一种令人安心的错觉”,用 “每月生产的代码行数” 来衡量 “程序员的生产力” 是很不明智的,因为这个标准忽略了程序员的创造性带来的更大价值,反而会鼓励人们编写没有意义的多余代码。
从那以后,比 LOC 更丰富的评判体系陆续出现,但新的问题也随之出现。
以 GitHub 上的 Star 为例。作为目前全球最大的开源 Git 仓库,GitHub 对 Star 功能的定位最初只是方便人们跟踪自己认为有趣的项目。但如今许多开发者已经把 Star 数量当做衡量一个开源项目受欢迎程度和知名度的标准。简而言之,Star 越多,项目越好。但真的是这样吗?
Docker 的联合创始人 Solomon Hykes 曾表示,“GitHub 的 Star 就是个骗局,这种狗屁的衡量标准是如此的无孔不入,GitHub 对开源社区的扼制是如此的彻底,以至于维护者不得不扭曲自己的工作流程来适应‘GitHub 模式’,否则就有可能被行业分析师公开羞辱,真是耻辱。”
Hykes 并不是唯一反感这种评判标准的人。Gartner 高级总监 Fintan Ryan 称 “Github 的 Star 只是一场游戏,很多项目都在玩。” 微软负责 Azure 开源开发的项目经理 Ralph Squillace 在推特上说:“在我看来,对于微软的项目工程和管理来说,这些 Star 毫无价值。但却总有人抓住它们不放。”
去年 8 月,韩国最大的无线通讯服务商 SK Telecom 为了给旗下一个名为 Metatron Discovery 的实时数据分析项目(基于定制版本的 Apache Druid)刷星,推出了一个点亮 Star 赠送奖品的营销活动。该活动使得项目一天就获得了 2500 多个 Star 。虽然最后 SK Telecom 公司迫于舆论压力将该项目下架,但刷星事件仍然带来了很大的负面影响。
此外,在国内某些电商平台甚至还出现了付费刷 Star 数量的产业链,使得这种简单直接的代码评价形式沦为了一些人包装自己的工具。
这就是问题所在。Steven 指出,人们总是喜欢简单的指标,他们想要用快速、一目了然的方法找到能够解决他们问题的开源代码。但事实上,根本就没有这样简单的方法。
根据 Red Hat 公司最近的调查报告,有 95% 的企业 IT 领导者认为开源软件 “具有重要的战略意义”。但是,在数以万计的开源项目中,要想找出哪些项目是至关重要的,哪些项目是你和你的团队真正需要的,并不是一件容易的事。仅仅依靠所谓的 Star 数或某一项参数的高低,难以做出正确的判断。
当然,我们可以很容易确定一些最重要的开源项目,比如 Apache、Firefox 和 Linux 这些家喻户晓的项目。
然而事实上,一些极其重要、使用率非常高的项目往往作为组件深藏在一些程序中。在 2020 年的一项研究中,Linux 基金会的核心基础设施计划(CII)和哈佛大学创新科学实验室(LISH)发现,人们最常用的程序包括 Com.google.guava,Httpcomponents-core 和 Lodash 等几乎没人听过的组件。
为了找到这些组件,他们使用开发者安全公司 Snyk 和 Synopsys 网络安全研究中心的软件组成分析(SCA)工具,对数万个开源代码库进行了深入研究。这是一项颇为复杂的工作,但却是确定哪些代码功能真正流行和经常被人使用的唯一方法。
既然仅靠 Star 数很难完全判断一个项目的好坏,那我们如何全面准确地评估一个开源项目呢?Steven 列出了几个能够判断一个开源项目质量的角度,包括:
当然,要全面了解这些情况,并不是一件容易的事情,这可能会让一个初始技术团队在开源技术选型的过程中耗费大量的时间和精力去查阅相关资料。
2017 年 ,Linux 基金会成立了 CHAOSS 项目组,开始致力于为评估开源社区和项目发展情况提供量化指标。目前,CHAOSS 旗下已经有了两个开源的项目评估工具。
Augur
Augur 是用于收集和评估有关自由与开源社区的结构化数据的工具,其核心宗旨是希望公开收集人们可以信任的数据,然后提供有用且定义明确的指标,以帮助人们通过这些数据指标全面了解一个开源项目的发展情况。项目组为此收集了大量的数据。目前主要的数据来源有 4 个:
这些数据由 Augur 项目组中的数据专员进行收集,每个工作人员负责查询上述数据源的某些子集。
GrimoireLab
GrimoireLab 同样是用于软件开发分析的 CHAOSS 工具集。它包括一组协调的工具,能够从用于支持软件开发(存储库)的系统中检索数据,将其存储在数据库中,通过计算相关指标来显示该项目的情况,同时支持运行分析和可视化处理。
创立于 2017 年的 CHAOSS 项目一直致力于创建分析和指标以帮助人们更加全面地了解一个开源项目的健康程度。
AllSpark
看看国内,AllSpark 是由华东师范大学 X-Lab 实验室研发的开源大数据查询管理平台。 该项目采集了开发者在 Github、Gitee 等平台协作开发过程中产生的大量行为数据,如 Issue 讨论、Pull Request 及代码评议讨论、Commit 记录等。以 Github 平台为例,GH Archive 和 GH Torrent 两个数据归档项目均持续归档存储 Github 平台上的行为数据,两个项目分别来自企业界和学术界,代表了各方对开源数据的重视。GH Archive 监视 GitHub 公共事件时间轴,AllSpark 能在这些具有时间属性的行为数据当中,基于数据挖掘和分析的方法,得出开发者协作关系、社区演化过程以及社区状态等属性,并从中挖掘出繁荣开源社区治理的内在经验。
AllSpark 项目的数据管理基础设施部分已经运行在 X86 架构的服务器上,目前可以持续收集 Github 的全域行为数据。该项目基于此项服务对 2019 年的开源数据进行了分析,发布了 2019 开源数字年报。 以下为 AllSpark 根据从 GitHub 采集到的各项数据排列出的 2019 年度十大开源项目:
此外,国内的开源代码托管平台 Gitee 也在 Star 功能以外推出了“码云指数”功能,从代码活跃度、社区活跃度、团队健康度、流行趋势、影响力等多个维度评估一个开源项目的健康度。
“总而言之,只有保持对重要的开源项目的关注,并观察它们是如何被人们看到和使用的,你才能真正知道哪些项目会对你有好处。”Steven 表示,“虽然这是一个比光看 Star 数要复杂得多的过程,但却是非常值得的。”
领取专属 10元无门槛券
私享最新 技术干货