Anthropic新VCS Scion被指抄袭Meta Mononoke

Anthropic发布新VCS Scion,被指核心机制抄袭Meta Mononoke。两者均利用“衍生数据”优化blame等效率,该概念早在2022年便已在Mononoke中详细阐述并应用。

Anthropic 新 VCS Scion 被指深受 Mononoke 启发

近日,Anthropic 发布其全新版本控制系统 Scion,并重点介绍了名为“衍生数据”(derived data)的核心概念,旨在优化 blame 等操作的效率。然而,这一设计思路被指出与 Meta 内部开发的源代码控制服务器 Mononoke 存在高度相似性。

Scion与Mononoke架构对比
Anthropic 对 Scion 衍生数据机制的描述。

根据 Anthropic 的技术文档,Scion 的变更集(changeset)仅记录变化内容,无法直接快速回答诸如“谁最后编辑了某一行代码”或“哪些提交影响了某个文件”等问题。为此,Scion 从变更集中构建额外的数据结构,包括专门用于文件 blame 和路径历史的索引,以及用于提交图的跳表(skip lists)。所有不属于变更集直接部分的数据均被称为“衍生数据”,并通过一种通用机制计算得出。每种类型的衍生数据都是递归定义的,即其在某个变更集中的值由其父变更集中的值计算而来。

该机制具备三大优势:首先,当新的数据结构能加速某些操作时,可以轻松添加新的衍生数据类型;其次,针对每种类型,可以选择急切计算或延迟处理,从而避免生成不必要的数据;最后,由于客户端不接触这些数据的内部结构,可以在不改变客户端的情况下进行优化。随着系统发展,团队已多次添加新的衍生数据类型,例如用于执行复制检测或基于路径的文件搜索的新索引。

Mononoke 中关于衍生数据的早期描述。

早在 2022 年,相关技术人员在 Oxide 候选材料中便详细描述了协助构建的 Mononoke 源控制服务器如何使用相同的“衍生数据”概念。当时指出,虽然 Bonsai 变更集适用于推送操作,但在处理差异(diffs)时表现不佳。Git 中的 diff commit1..commit2 是一个复杂度为 $O(n \log n)$ 的操作(其中 $n$ 为更改文件数),而在 Bonsai 模型下,需要检查两个提交之间的每一个单独提交来计算更改文件列表。对于大型仓库,这可能导致速度呈数量级下降,并加剧指针追踪问题。

为解决此问题,Mononoke 将适合差异计算的表示形式转化为衍生数据(即索引)。服务器创建一个独立的 Merkle DAG,采用类似 Git 的树/对象(tree/blob)模型,并根据需要指回 Bonsai 变更集。关键特性包括:衍生数据可在主临界区之外异步计算和存储;提交与树之间的指针关系发生反转——在 Git 数据模型中,提交文本包含根树的哈希,而在 Bonsai 模型中,根树文本包含引入它的提交的哈希。这种架构允许为其他操作构建衍生索引。例如,Git blame 在大型仓库中非常缓慢,需遍历整个仓库而非仅触及文件的提交。Mononoke 构建了一个 blame 友好型索引,其中每个文件的每个版本都是 Merkle DAG 中的独立节点,其父节点指向该文件的前一版本,并指回 Bonsai 变更集。这使得 blame 操作的复杂度从 $O(\text{仓库提交总数})$ 降低至 $O(\text{触及该文件的提交数})$。随着时间推移,团队增加了更多索引以处理特定用例,Mononoke 最终拥有 8 个独立索引,且新增索引无需对数据结构进行根本性修改。

对比显示,Scion 的设计模仿程度远超简单的见解相似。尽管 Anthropic 在其博客中提及了“艰难教训”(Hard Lessons),但并未引用 Mononoke。事实上,Meta 团队在多年前提出的诸多见解,如从 Google 的 SrcFS 到数据库写入日志等技术,似乎被 Claude 在近十年后忠实地应用到了 Scion 设计中。

开源理念旨在通过传播优秀想法造福人类,因此 Anthropic 借鉴 Mononoke 设计本身并非不可接受。然而,随着 LLM 继续协助设计新系统,它们可能会大量索引现有设计并融入训练套件。目前,若询问 Opus 5.5 或 GPT-6 Astra 关于先前技术的问题,模型均能立即指出其与 Mononoke 的相似之处。这表明在 AI 辅助开发背景下,识别和尊重原始创新变得比以往任何时候都更加容易且重要。

评论 0

0/500

评论需审核后展示,请文明发言

💬
还没有评论,来说两句

相关阅读