Zigbook 正在抄袭 Zigtools Playground

发布: (2025年11月30日 GMT+8 11:54)
8 min read

Auguste Rame, Techatrix — 2025年11月30日

引言

对于不熟悉的人来说,Zigtools 成立的目的是支持 Zig 社区,尤其是新手,通过创建编辑器工具(如 ZLS),提供使用 lsp-kit 编写的语言服务器构建块,开发诸如 Zigtools Playground 的工具,并为 Zig 编辑器扩展(如 vscode-zig)做出贡献。

抄袭事件

几周前,一个名为 Zigbook 的 Zig 资源发布,声称“零 AI”,并采用原创的“项目驱动”结构。

然而,稍作查看那荒唐的章节结构、书籍内容、示例、通用网站或事后被禁用的仓库问题,就会发现这本书完全是 LLM 生成的废话,项目本身的结构更像是一场阿谀奉承的心理战,伴随机器账号和虚假互动。

我们不提供 Zigbook 的直接链接,以免给他们更多 SEO 流量。

我们原以为广泛的社区反弹会让该项目止步,但 Zigbook 仍然坚持,甚至在上周推出了全新功能——“高压测试版” Zig Playground。

由于我们在 Zigtools 也拥有自己的 Zig Playground(仓库网站),这立刻引起了我们的兴趣。其外观和功能相当相似,Zigbook 甚至在其 Playground 中(以非功能方式)集成了 ZLS,以提供代码补全、跳转定义等炫酷的编辑器功能。

鉴于 Zigbook 一贯的欺骗历史,我们立刻检查了 WASM 二进制文件。遗憾的是,这些 WASM 文件与我们的逐字相同。考虑到这两个二进制文件(zig.wasm——轻度修改的 Zig 编译器版本,以及 zls.wasm——为 WASI 修改入口点的 ZLS)都是为 Zigtools Playground 专门定制的,这绝非巧合。

我们已将这些 WASM 文件归档,感谢伟大的互联网档案馆:

随后我们查看了 JavaScript 代码,迅速判断出它同样被复制,只是加入了 LLM 的扭曲,可能是为了避免代码完全相同。但仍有若干段落是一对一复制的,例如 JavaScript worker 的数据传递结构和日志记录(原始 ZLS Playground 代码抄袭的 Zigbook 代码)。

以下两文件中的代码完全相同:

try {
    // @ts-ignore
    const exitCode = wasi.start(instance);

    postMessage({
        stderr: `\n\n---\nexit with exit code ${exitCode}\n---\n`,
    });
} catch (err) {
    postMessage({ stderr: `${err}` });
}

postMessage({
    done: true,
});

// ...

onmessage = (event) => {
    if (event.data.run) {
        run(event.data.run);
    }
};

其中 \n\n---\nexit with exit code ${exitCode}\n---\n 这段字符串是最明显的抄袭片段。

有趣的是,尽管 Zigbook 抄袭了我们大量代码,却没有复制 ZLS 集成代码中最关键的部分——用于与 ZLS WASM 二进制 API 交互的 JavaScript ZLS API。该 JavaScript 代码是与他们抄袭的 ZLS 二进制交互的必备部分。Zigbook 要么因为怕太明显而省略了这段代码,要么根本不理解 Zigtools Playground 的工作原理,亦或是计划以后再继续抄袭我们的代码。

需要说明的是,复制我们的代码和 WASM 二进制在技术上是允许的,因为 Playground 和 Zig 本身采用 MIT 许可证。然而,Zigbook 完全没有遵守 MIT 许可证的条款,甚至把代码和二进制当作自己的作品而未正确附带许可证。

我们向 Zigbook 提交了一个中立的PR 以纠正许可证违规,但他们迅速关闭并删除了描述,显然是想掩盖其不当行为。

原始描述(也可在原 PR 评论的“编辑”下拉框中看到)如下:

我们(@zigtools)注意到您在使用 Zigtools Playground 的代码,包括我们 WASM 二进制的逐字复制以及 JavaScript 源码的片段。
这违反了 Zigtools Playground 所采用的 MIT 许可证,同时也违反了 zig.wasm 二进制所对应的 Zig MIT 许可证。
正如 MIT 许可证所述:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

我们已在您的仓库中添加了相应的许可证。由于您的仓库未直接链接到 *.wasm 依赖,我们也在 Playground 页面上添加了许可证声明。

Zigbook 如上所述的恶劣行为以及他们持续违反我们许可证且不愿修复的态度,促使我们撰写此博客文章。

我们对 Zigtools Playground 的愿景

我们的第一篇博客居然是关于我们最酷子项目的抄袭,实在令人惋惜。我们最初创建基于 WASM 的客户端 Playground,旨在实现离线使用、代码隐私以及零服务器成本。

此事激励我们进一步投入 Playground 的开发,并产生了以下想法:

  • 启用多文件支持,以便在浏览器中运行更复杂的 Zig 项目。
  • 与其他 Zig 社区成员合作,将 Playground 集成到他们优秀的 Zig 教程、书籍和博客中。一个理想的案例是让用户能够直接在 Playground 中体验 Ziglings
  • 将 Zig 官方网站本身作为重要的集成入口。
  • 支持使用 DWARF 调试信息的堆栈追踪,而这在自托管的 Zig 编译器中尚未生成。

结论

作为 Zig 社区成员,我们建议所有 Zig 社区的其他成员远离 Zigbook

如果您想学习 Zig,强烈推荐官方的优秀资源——Zig 学习页面,其中包括前文提到的 Ziglings 以及 Karl Seguin 的 Learning Zig

我们也借此机会说明,我们正在为唯一的全职维护者 Techatrix 的 ZLS 可持续发展进行筹款。如果您愿意每月捐助 $5,我们将不胜感激。您可以访问我们的 OpenCollectiveGitHub Sponsors

感谢阅读! (^-^)/

Back to Blog

相关文章

阅读更多 »

失去信心

请提供您希望翻译的文章摘录或摘要文本,我才能为您进行简体中文翻译。