← 最新论文
💻 computer science

Deforking the World of Code: A Project-Provenance Map that Recovers Cross-Forge Fork Families that Platform Graphs Cannot See

本文介绍了一种为代码世界精心构建的“去分叉”(deforking)映射图,该图通过将共享的 git 历史记录折叠为统一的簇,从而重建了跨分叉平台的项目家族,进而纠正了流行度通胀,并揭示了数以千计的在特定平台图谱中不可见的派生关系——包括多平台分叉家族及非 GitHub 根源的项目。

原作者: Audris Mockus

发布于 2026-06-30
📖 1 分钟阅读☕ 轻松阅读

原作者: Audris Mockus

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,整个软件开发的历史就像一座巨大且混乱的图书馆。在这座图书馆里,有数百万本书(代码仓库)。但问题在于,许多书其实只是同一部原创故事的复印件。

在编程世界中,这被称为分叉(forking)。开发者获取一个现有的项目,将其复制,并开始自己的版本。他们可能会在这里或那里修改几行代码,但核心历史是完全相同的。

这篇论文所解决的问题是,如果你试图通过计算图书馆中每一本书的数量来衡量一个代码片段有多“受欢迎”,你会得到一个极度膨胀的数字。如果一个受欢迎的故事被复印了 10,000 次,看起来就像有 10,000 个不同的故事正在被阅读,但实际上它只是一个故事在 10,000 个不同的地方被阅读。

这篇论文引入了一个新的地图(工具),它清理了这座图书馆。它将所有的复印件重新组合在一起,并与它们的原始来源挂钩,这样研究人员就能看到真实的故事,而不是复印件带来的噪音。

以下是他们如何实现的,使用了简单的类比:

1. “共享页面”侦探

作者们意识到,在数字世界中,你无法轻易伪造历史。如果两本书共享完全相同的页面(一个特定的“提交/commit”或代码变更),它们必然是相关的。

  • 旧方法: 他们曾尝试链接每一本共享页面的书。但这就像是在说:“如果两本书都有一页写着‘版权所有 2024’,那么它们就是同一个故事。”这是错误的!许多互不相关的书都有相同的版权页。这导致他们的地图将完全不同的故事粘合成了一个巨大的、混乱的泥团。
  • 新方法: 他们构建了一个更聪明的地图。他们寻找的是许多共享页面,而不仅仅是一个。如果两本书共享一整个章节,它们肯定是有关系的。

2. “尺寸限制”过滤器(上限)

即使有了更聪明的地图,一些巨大的、乏味的页面(比如标准的许可协议或空白的入门模板)仍然充当着桥梁,将互不相关的故事连接在一起。

  • 修复方案: 作者们为这些桥梁设置了一个尺寸限制。如果一个共享页面出现在超过 250 本书中,他们就会假设这只是一个通用的模板(比如标准的“服务条款”页面)并忽略它。
  • 结果: 这打破了那些巨大的、混乱的泥团。突然之间,地图显示出了不同的故事家族,而不是一个巨大的、令人困惑的超级集群。它并没有拆散真正的家族;它只是移除了将无关事物粘在一起的胶水。

3. “真实历史”检查

作者们担心,通过切分这些巨大的泥团,他们可能会在无意中切断了一个真实的、复杂的历史故事(例如一个被翻译成多种语言并随后重新组合的大型项目)。

  • 测试: 他们查看了地图上最大的剩余组。他们发现这并非错误,而是一个真实的、复杂的历史过程——其中一个大型项目确实吸收了其他著名项目的部分内容(比如一个主要的操作系统合并了来自 Web 浏览器的代码)。
  • 决定: 因为这个“残留”组是由真实的、深层的历史构成的,而不是由廉价的胶水组成的,所以他们决定不再进一步切分它。他们保留了它,因为它代表了软件世界中一种真实的、复杂的关联关系。

4. 与“官方列表”对比检查

为了确保他们的地图是准确的,他们将其与 GitHub 的官方“分叉列表”(即用户手动点击“Fork”按钮生成的列表)进行了对比。

  • 匹配情况: 当他们查看同时存在于其地图和 GitHub 列表中的项目时,匹配率达到了 99%
  • 惊喜发现: 他们的地图发现了 GitHub 列表遗漏的东西!
    • 跨平台家族: 他们发现了在 GitHub 上开始,但随后被复制到 GitLab、Bitbucket 以及其他网站的项目家族。GitHub 的列表只能看到 GitHub 内部的情况;而这张地图能看到整个互联网上的完整家族树。
    • 脱离关系的分叉: 他们发现了一些最初是副本、但后来完全重写了历史的项目,以至于它们不再与原件相连。地图正确地将这些识别为独立的实体,而官方列表可能仍认为它们是相互关联的。

5. 为什么这很重要

在此地图出现之前,如果你想知道一名程序员参与了多少个不同的项目,你可能会得到一个虚假的数字,比如“5,000 个项目”,仅仅是因为他参与了一个拥有 5,000 个副本的热门项目。

  • 修正: 这张地图解决了这个问题。它告诉你,该程序员实际上参与了 5 个独立的项目,而不是 5,000 个。
  • 成果: 它提供了一个清晰、准确的软件世界视图,将原始故事与复印件区分开来,甚至能识别出跨越不同网站的故事。

简而言之: 作者们构建了一个能够理清混乱的代码复制网的工具。他们使用“尺寸限制”来防止无关项目粘连在一起,通过官方记录验证了他们的工作,并发现软件世界的跨网站互联程度比我们之前预想的还要紧密。他们发布了这张地图供所有人使用,以确保未来的软件历史研究不会被海量的复印件所误导。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →