{"slug": "who-does-anubis-actually-stop", "title": "Who does Anubis actually stop?", "summary": "Farid Zakaria developed a tool called anubis-fetch that easily bypasses Anubis, a proof-of-work proxy designed to block AI scrapers from accessing Linux kernel mailing list threads. The author argues that Anubis fails to stop AI bots while imposing a regressive tax on human users, especially those with weaker devices or non-JavaScript clients, wasting significant collective time and energy.", "body_md": "# Who does Anubis actually stop?\n\nPublished 2026-07-09 on\n[Farid Zakaria's Blog](/)\n\nI have been working on a patch to the Linux kernel to support `$ORIGIN`\n\nfor the interpreter (`PT_INTERP`\n\n) via bpf in `binfmt_misc`\n\n[[thread](https://lore.kernel.org/linux-mm/20260622043934.179879-1-farid.m.zakaria@gmail.com/T/#t)].\n\nOf course I’m leveraging an LLM to help me do this! To pre-seed the context of the LLM, I asked it to read the [https://lore.kernel.org/](https://lore.kernel.org/) thread.\n\nUh oh. Looks like they have adopted [Anubis](https://github.com/TecharoHQ/anubis), which is an HTTP proxy that requires *proof-of-work* before allowing access to the resource.\n\nDid this really do anything?\n\nUnfortunately, no.\n\nMy AI diligently came up with **anubis-fetch**, which you can find at [https://github.com/fzakaria/anubis-fetch](https://github.com/fzakaria/anubis-fetch). The tool tries to natively solve the proof of work or, as a last resort, will launch Chromium to visit the URL.\n\nThis tool also impersonates a real Chrome TLS/JA3 fingerprint natively via\n\n[req]so it clears passive Cloudflare blocking too. ☝️\n\n``` bash\n# HTML to stdout\n$ anubis-fetch https://lore.kernel.org/linux-mm/some-thread/T/\n\n# readable plain text\n$ anubis-fetch --text https://lore.kernel.org/linux-mm/some-thread/T/\n```\n\nSo who did we stop?\n\nThe exact adversary Anubis targets defeats it trivially.\n\nThe whole use of Anubis feels regressive and marginalizes those without access to “good” AI.\n\nFor a scraper, solving the Anubis challenge is a one-time, amortized-to-zero cost since the cookie can be cached and reused. For a human, it’s seconds of spinner, battery drain on every fresh visit. They can’t amortize anything amongst each other.\n\nThis “regressive tax” is paid even more so by those with weaker devices or who access the content on their phone. Clients that don’t leverage JavaScript (e.g., text browsers (w3m/lynx), screen readers, RSS readers) are completely left out.\n\nDid deploying Anubis stop any of the aforementioned bot-farms or are they mildly inconvenienced when they had to augment their bots to support a new proof of work solution briefly?\n\nThe irony is that Anubis’s goal is to stop AI but it was incredibly easy for AI to circumvent it and yet the cost to humans and an open web remains.\n\nWith the presumption Anubis is now a regressive tax, how much does it cost us?\n\nEvery number here is a rough estimate. This is not a environmental argument at all since the bot-farmers and AI tools themselves are using many orders of magnitude more energy. Nevertheless, it’s interesting to see how much time is spent doing proof-of-work challenges that marginalize people.\n\nDifficulty\n\n`d`\n\nis the number of leading zerohexcharacters the hash must have, so the expected work per solve is`W = 16^d`\n\nhashes.\n\n| Difficulty | Hashes / solve | Go native | Browser JS | Felt wall-clock |\n|---|---|---|---|---|\n4 |\n65,536 | ~1.3 ms | ~130 ms | ~1–5 s |\n| 5 | 1,048,576 | ~20 ms | ~2 s | ~5–15 s |\n\n*Difficulty 4 is the common default. Rates assumed: ~50 MH/s native (Go), ~0.5 MH/s in-browser JS; “felt” wall-clock includes page load, the worker, and the reload.*\n\nLet `C`\n\nbe the number of Anubis challenge-solves per day, worldwide. Assume a felt time of `t = 2 s`\n\nand device energy `E = 20 J`\n\nper solve (screen + CPU).\n\n**Human-time / year**=`C × t × 365 / 3.15×10⁷`\n\n**Energy / year (kWh)**=`C × E × 365 / 3.6×10⁶`\n\n`C` (solves/day) |\nHuman-time wasted / year | Energy / year |\n|---|---|---|\n| 1 M | ~23 person-years |\n~2 MWh |\n| 10 M | ~230 person-years |\n~20 MWh |\n| 100 M | ~2,300 person-years |\n~200 MWh |\n\nCollectively we are wasting an impressive amount of time waiting for access to websites; time we didn’t spend before the AI era. As a human, time is precious and finite to me, whereas to a robot it is not.\n\n[Improve this page @ 428e8f0](https://github.com/fzakaria/fzakaria.com/tree/428e8f0b28347674ee326d1218d991d405c54eb6/_posts/2026-07-09-who-does-anubis-actually-stop.md)\n\nThe content for this site is\n[CC-BY-SA](https://creativecommons.org/licenses/by-sa/2.0/).", "url": "https://wpnews.pro/news/who-does-anubis-actually-stop", "canonical_source": "https://fzakaria.com/2026/07/09/who-does-anubis-actually-stop", "published_at": "2026-07-12 02:34:31+00:00", "updated_at": "2026-07-12 02:36:07.603721+00:00", "lang": "en", "topics": ["artificial-intelligence", "ai-policy", "ai-ethics", "developer-tools"], "entities": ["Anubis", "Farid Zakaria", "Linux kernel", "Chromium", "Cloudflare", "Go", "JavaScript", "RSS"], "alternates": {"html": "https://wpnews.pro/news/who-does-anubis-actually-stop", "markdown": "https://wpnews.pro/news/who-does-anubis-actually-stop.md", "text": "https://wpnews.pro/news/who-does-anubis-actually-stop.txt", "jsonld": "https://wpnews.pro/news/who-does-anubis-actually-stop.jsonld"}}