Skip to content

Commit 65c516d

Browse files
committed
add blog zigbook-plagiarizing-playground
1 parent f73b584 commit 65c516d

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
---
2+
.title = "Zigbook is Plagiarizing the Zigtools Playground",
3+
.date = @date("2025-11-30T01:31:06"),
4+
.author = "Auguste Rame, Techatrix",
5+
.layout = "post.shtml",
6+
.draft = false,
7+
---
8+
9+
[Auguste Rame](https://github.com/SuperAuguste), [Techatrix](https://github.com/Techatrix) --- 30 November 2025
10+
11+
## Introduction
12+
13+
For those unfamiliar, Zigtools was founded to support the [Zig](https://ziglang.org/) community, especially newcomers,
14+
by creating editor tooling such as [ZLS](https://github.com/zigtools/zls), providing building blocks for language servers
15+
written in Zig with [lsp-kit](https://github.com/zigtools/lsp-kit), working on tools like the [Zigtools Playground](https://github.com/zigtools/playground), and
16+
contributing to Zig editor extensions like [vscode-zig](https://codeberg.org/ziglang/vscode-zig).
17+
18+
## The Plagiarism
19+
20+
A couple weeks ago, a Zig resource called Zigbook was released with a bold
21+
claim of "zero AI" and an original "project-based" structure.
22+
23+
Unfortunately, even a cursory look at the nonsense chapter structure, book content, examples,
24+
generic website, or post-backlash issue-disabled repo reveals that the book is wholly LLM slop and
25+
the project itself is structured like some sort of sycophantic psy-op, with botted accounts and fake reactions.
26+
27+
We're leaving out all direct links to Zigbook to not give them any more SEO traction.
28+
29+
We thought that the [broad community backlash](https://news.ycombinator.com/item?id=45947810) would be
30+
the end of the project, but Zigbook persevered, releasing just last week a brand new feature, a
31+
"high-voltage beta" Zig playground.
32+
33+
As we at Zigtools have our own Zig playground ([repo](https://github.com/zigtools/playground),
34+
[website](https://playground.zigtools.org)), our interest was immediately piqued. The form and
35+
functionality looked pretty similar and Zigbook even integrated (in a non-functional manner) ZLS
36+
into their playground to provide all the fancy editor bells-and-whistles, like code completions and goto definition.
37+
38+
Knowing Zigbook's history of deception, we immediately investigated the WASM blobs. Unfortunately,
39+
the WASM blobs are byte-for-byte identical to ours. This cannot be a coincidence given the two blobs
40+
(`zig.wasm`, a lightly modified version of the Zig compiler, and `zls.wasm`, ZLS with a modified entry point for WASI)
41+
are entirely custom-made for the Zigtools Playground.
42+
43+
We archived the WASM files for your convenience, courtesy of the great Internet Archive:
44+
45+
- `zls.wasm` (`sha256sum`: `3a63e5092e8f90172716977af5c88b4f49e546f730f25e9bafb47f4ac9a2ee1d`)
46+
- [Original](https://web.archive.org/web/20251129224054/https://playground.zigtools.org/assets/zls-Dxe5uroE.wasm)
47+
- [Plagiarized](https://web.archive.org/web/20251128234504/https://www.zigbook.net/zig/zls.wasm)
48+
- `zig.wasm` (`sha256sum`: `d3fe6b8a6b1db84a914eaa1f4a80ca5dcfd3b0948a35f2b1e78432a392eace96`)
49+
- [Original](https://web.archive.org/web/20251129224210/https://playground.zigtools.org/assets/zig-n5fT0I4M.wasm)
50+
- [Plagiarized](https://web.archive.org/web/20251128234607/https://www.zigbook.net/zig/zig.wasm)
51+
52+
We proceeded to look at the JavaScript code, which we quickly determined was similarly copied, but with LLM distortions,
53+
likely to prevent the code from being completely identical. Still, certain sections were copied one-to-one,
54+
like the JavaScript worker data-passing structure and logging ([original ZLS playground code](https://github.com/zigtools/playground/blob/main/src/workers/runner.ts#L12-L41), [plagiarized Zigbook code](https://archive.ph/4LZ2X)).
55+
56+
The following code from both files is identical:
57+
58+
```js
59+
try {
60+
// @ts-ignore
61+
const exitCode = wasi.start(instance);
62+
63+
postMessage({
64+
stderr: `\n\n---\nexit with exit code ${exitCode}\n---\n`,
65+
});
66+
} catch (err) {
67+
postMessage({ stderr: `${err}` });
68+
}
69+
70+
postMessage({
71+
done: true,
72+
});
73+
74+
// ...
75+
76+
onmessage = (event) => {
77+
if (event.data.run) {
78+
run(event.data.run);
79+
}
80+
};
81+
```
82+
83+
The `\n\n---\nexit with exit code ${exitCode}\n---\n` is perhaps the most obviously copied string.
84+
85+
Funnily enough, despite copying many parts of our code, Zigbook didn't copy the most important part of the ZLS integration code,
86+
the JavaScript ZLS API designed to work with the [ZLS WASM binary's API](https://github.com/zigtools/playground/blob/227bcd3775baeb60cbf2f1ffb1ad0566516a64fc/src/zls.zig).
87+
That JavaScript code is absolutely required to interact with the ZLS binary which they *did* plagiarize. Zigbook either
88+
avoided copying that JavaScript code because they knew it would be too glaringly obvious, because they fundamentally do not understand
89+
how the Zigtools Playground works, or because they plan to copy more of our code.
90+
91+
To be clear, copying our code and WASM blobs is entirely permissible given that the playground and Zig are
92+
MIT licensed. Unfortunately, Zigbook has not complied with the terms of the MIT license at all, and seemingly
93+
claims the code and blobs as their own without correctly reproducing the license.
94+
95+
We sent Zigbook a neutral [PR correcting the license violations](https://github.com/zigbook/zigbook/pull/43), but they
96+
quickly closed it and deleted the description, seemingly to hide their misdeeds.
97+
98+
The original description (also available in the "edits" dropdown of the original PR comment) is reproduced below:
99+
100+
> We (@zigtools) noticed you were using code from the Zigtools Playground, including byte-by-byte copies of our WASM blobs and excerpts of our JavaScript source code.
101+
>
102+
> This is a violation of the MIT license that the Zigtools Playground is licensed under alongside a violation of the Zig MIT license (for the zig.wasm blob).
103+
>
104+
> As the MIT license states:
105+
>
106+
> ```
107+
> The above copyright notice and this permission notice shall be included in
108+
> all copies or substantial portions of the Software.
109+
> ```
110+
>
111+
> We've fixed this by adding the licenses in question to your repository. As your repository does not include a direct link to the *.wasm dependencies, we've added a license disclaimer on the playground page as well that mentions the licenses.
112+
113+
Zigbook's aforementioned bad behavior and their continued violation of our
114+
license and unwillingness to fix the violation motivated us to write this blog post.
115+
116+
## Our Vision for the Zigtools Playground
117+
118+
It's sad that our first blog post is about the plagiarism of our coolest subproject.
119+
We challenged ourselves by creating a WASM-based client-side playground to enable offline usage, code privacy, and no server costs.
120+
121+
This incident has motivated us to invest more time into our playground and has generated a couple of ideas:
122+
123+
- We'd like to enable multifile support to allow more complex Zig projects to be run in the browser
124+
- We'd like to collaborate with fellow Ziguanas to integrate the playground into their excellent Zig tutorials, books, and blogposts
125+
- A perfect example usecase would be enabling folks to hop into [Ziglings](https://codeberg.org/ziglings/exercises) online with the playground
126+
- The Zig website itself would be a great target as well!
127+
- We'd like to support stack traces using DWARF debug info which is not yet emitted by the self-hosted Zig compiler
128+
129+
## Conclusion
130+
131+
As Zig community members, **we advise all other members of the Zig community to steer clear of Zigbook**.
132+
133+
If you're looking to learn Zig, we strongly recommend looking at the excellent official [Zig learn page](https://ziglang.org/learn/)
134+
which contains excellent resources from the previously mentioned [Ziglings](https://codeberg.org/ziglings/exercises) to [Karl Seguin's Learning Zig](https://www.openmymind.net/learning_zig/).
135+
136+
We're also using this opportunity to mention that we're fundraising to keep ZLS sustainable for our
137+
only full-time maintainer, Techatrix. We'd be thrilled if you'd be willing to give just $5 a month.
138+
You can check out our [OpenCollective](https://opencollective.com/zigtools) or [GitHub Sponsors](https://github.com/sponsors/zigtools).
139+
140+
Thanks for reading! \\(^-^)/

0 commit comments

Comments
 (0)