Skip to content

【Zig 日报】Zigbook 正在剽窃 Zigtools playground #286

@jiacai2050

Description

@jiacai2050

Zigtools 旨在通过创建编辑器工具(如 ZLS)、为用 Zig 编写的语言服务器提供构建模块 (lsp-kit)、开发 Zigtools Playground 以及贡献 Zig 编辑器扩展(如 vscode-zig)来支持 Zig 社区,特别是新手。

抄袭事件

最近,一个名为 Zigbook 的 Zig 资源发布,声称“零 AI”和原创的“基于项目”的结构。

然而,对其章节结构、内容、示例、网站和禁用 issue 的仓库进行粗略的查看后,发现 Zigbook 是完全由 LLM 生成的内容,并且结构如同某种谄媚的心理战,存在虚假账户和反应。Zigtools 避免提供 Zigbook 的直接链接,以防止增加其 SEO 权重。

尽管社区强烈反对,Zigbook 仍然发布了一个新的“高压测试版” Zig playground。

由于 Zigtools 有自己的 Zig playground,他们立即对其产生了兴趣。Zigbook 甚至集成了 ZLS (但功能不完整) 到他们的 playground 中,以提供代码完成和跳转定义等编辑器功能。

经过调查,Zigtools 发现 Zigbook 的 WASM blob 与他们的完全相同。鉴于这两个 blob(zig.wasm 和 zls.wasm)是为 Zigtools Playground 定制的,这不可能是巧合。Zigtools 存档了这些 WASM 文件。

进一步的调查发现,JavaScript 代码也被抄袭,但经过 LLM 的扭曲,可能为了防止代码完全相同。然而,某些部分仍然完全相同,例如 JavaScript worker 的数据传递结构和日志记录。

一个显著的例子是:

    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。Zigbook 可能避免复制该代码,因为他们知道它会太明显,或者他们根本不了解 Zigtools Playground 的工作原理,或者他们计划复制更多的代码。

尽管 Zigtools 的 playground 和 Zig 都是 MIT 许可的,复制他们的代码和 WASM blob 是完全允许的。但是,Zigbook 完全没有遵守 MIT 许可的条款,并且声称代码和 blob 是他们自己的,而没有正确地复制许可证。

Zigtools 向 Zigbook 发送了一个中立的 PR,以纠正许可证违规行为,但他们迅速关闭了它并删除了描述,似乎是为了掩盖他们的不当行为。

Zigtools 的 PR 描述如下:

Zigtools注意到 Zigbook 使用了来自 Zigtools Playground 的代码,包括 WASM blob 的逐字节复制和 JavaScript 源代码的摘录。这违反了 Zigtools Playground 获得许可的 MIT 许可证以及 Zig MIT 许可证(对于 zig.wasm blob)。

由于 MIT 许可证声明:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
Zigtools 已通过将相关许可证添加到 Zigbook 的仓库中来解决此问题。由于 Zigbook 的仓库不包含指向 *.wasm 依赖项的直接链接,Zigtools 还在 playground 页面上添加了许可证声明,其中提到了许可证。

Zigbook 的不当行为以及他们继续违反 Zigtools 的许可和不愿修复违规行为促使 Zigtools 撰写了这篇博文。

Zigtools Playground 的愿景

Zigtools 希望通过创建一个基于 WASM 的客户端 playground 来实现离线使用、代码隐私和零服务器成本。

这个事件促使 Zigtools 投入更多时间到他们的 playground 中,并产生了一些想法:

  • 支持多文件,以允许在浏览器中运行更复杂的 Zig 项目
  • 与 Ziguanas 合作,将 playground 集成到他们出色的 Zig 教程、书籍和博客文章中
  • 支持使用 DWARF 调试信息进行堆栈跟踪

结论

作为 Zig 社区的成员,Zigtools 建议所有其他 Zig 社区成员避开 Zigbook。如果想学习 Zig,强烈建议查看官方 Zig 学习页面。

Zigtools 还利用这次机会进行筹款,以保持 ZLS 对其唯一全职维护者 Techatrix 的可持续性。

Zigbook is Plagiarizing the Zigtools Playground - zigtools

加入我们

Zig 中文社区是一个开放的组织,我们致力于推广 Zig 在中文群体中的使用,有多种方式可以参与进来:

  1. 供稿,分享自己使用 Zig 的心得
  2. 改进 ZigCC 组织下的开源项目
  3. 加入微信群Telegram 群组

Metadata

Metadata

Assignees

No one assigned

    Labels

    日报daily report

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions