News & analysis · 7 June 2026

IOCCC 2025: when deliberately unreadable C becomes the most readable story on Hacker News

The 29th International Obfuscated C Code Contest dropped its full winner list this week and immediately climbed to the top of Hacker News — ahead of speculative KV-cache compression papers, Jane Street's agent-design essays, and a two-month Valve networking outage. That ordering is not random. In a week dominated by agent harnesses and infrastructure regressions, twenty-two tiny C programs that fit in a tarball became the clearest statement that someone still sat down, thought hard, and shipped something you can compile, inspect, and argue about line by line.

What changed since the hiatus

IOCCC28 ended a four-year gap after the 2020–2024 pause. Judges expected a one-time submission spike as authors polished backlog entries. IOCCC29 was supposed to normalize. It did not. Submission volume stayed near record levels, and judges report quality remained unusually high for a contest whose entire premise is making compilers weep.

The organisers credit a rewritten ruleset (version 29.15), better website design, more social visibility, and authors building on prior winners — a kind of open-source folklore where each contest teaches the next generation how far you can bend the C standard before it snaps. They also documented the full judging pipeline this cycle: closing submissions, multi-round review, website prep, and the live reveal on the Our Favorite Universe YouTube channel. That bureaucracy sounds dull until you realise it is why IOCCC survived decades while flashier hackathons vanished.

Geographic diversity ticked up too. IOCCC29's roster includes jingp49 from Taiwan — a first-time winning country for the contest — alongside the usual suspects from Japan, the UK, and the US. Yusuke Endoh, who has won so many times the judges invented new award categories to describe his streaks, returned with another entry that is somehow both a patch utility and a Perl polyglot.

Entries worth your afternoon

You cannot summarise twenty-two winners in a paragraph, but a handful explain why the front page cared:

  • ncw1 — Best real emulator: Nick Craig-Wood's Game Boy DMG emulator runs in a UTF-8 terminal at 160×73, reads ROMs from file descriptor 3 (no fopen — why waste bytes?), and was profiled with a rigorous methodology: "Does Tetris need this to run?" Half-carry flag? Deleted. Audio? "In space, no one can hear you clear four lines." Judges admitted they could not stop testing until 1<<8. The author even co-wrote test ROMs with Gemini Pro 3, then roasted his own game-design skills in the README.
  • endoh3 — Most resilient: Endoh's patch/diff quine chain starts as a unified-diff patch tool, self-modifies into a git am patch generator, runs roughly twenty-five compile-and-apply cycles, and finally extracts a working diff program from commit messages. The source is shaped like the partial derivative symbol ∂. It doubles as a Perl script that subtracts two numbers. Larry Wall — IOCCC winner 1986 and 1987 — would approve.
  • cable — Best imaginary emulator: A Subleq computer — one instruction, no registers, pure pain — implemented in obfuscated C.
  • uellenberg — Ping pong prize: Quine pong. The program plays itself. You watch.
  • yang2 — Most magical word: Zoltraak encoding from The Ancient Magus' Bride, because why should fantasy anime stay out of systems programming?

The through-line is not gimmickry for its own sake. Each winner encodes a real systems insight — memory models, diff algorithms, emulator fidelity trade-offs — then hides it behind punctuation jokes and iso646.h digraphs that make the source look like mistyped Python.

Fun challenges: IOCCC as ongoing maintenance

New this year: every winning entry ships a "fun challenge" under the judges' remarks. Some ask you to produce an alternative prog.c; others want an explanation of why something works. Open challenges accept GitHub pull requests; closed ones still welcome better solutions if judges agree yours beats the canonical answer.

ncw1's open challenges include writing 32K Game Boy ROMs that run Lucas–Lehmer primality tests — because a terminal Tetris machine should also settle whether 2^p − 1 is prime. endoh3 asks why the git-am generator needs about twenty-five iterations to birth a unified diff tool. This turns a static winner gallery into a living repo, the same way a good open-source project keeps issues open after release.

That maintenance mindset matters for readers who build software for a living. Agent harnesses can draft boilerplate fast; they are weaker at the kind of constraint-satisfaction puzzle IOCCC rewards — fit a Game Boy CPU in a size budget, obey contest rules, make judges laugh, and still pass make test. The fun challenges are a public reminder that "done" is a verb, not a chat completion.

Why HN ranked craft above agents this week

The HN discussion (thread #48432199) mixed nostalgia with substance. Older readers remembered printing winning entries on dot-matrix line printers; younger ones asked whether obfuscation still teaches anything when LLMs can generate unreadable code on demand. The persuasive replies drew a line: IOCCC code is obfuscated on purpose, with documented build steps and inspectable behaviour. Slop is obfuscated by accident — verbose, untested, and allergic to Makefile targets.

Context from the rest of the front page sharpened the contrast. Jane Street's essay on designing with Claude (which we covered in our Jane Street TUI piece) argues agents belong in professional toolchains. OpenAI's harness-engineering post makes the same case from another angle. IOCCC does not reject those tools — Craig-Wood used Gemini for ROM authoring — but it insists the artifact remain small enough to read in one sitting. That is a design value, not a luddite protest.

For platform builders, the lesson is about inspectability as a feature. Users trust what they can verify: a provably fair dice roll, a collectible's trait hash, a 2 KB C file that definitely emulates a D-pad. Black-box magic scales poorly when something breaks at 2 a.m. Our guide to verifying Solana payments applies the same instinct on-chain — show the receipt, not just the promise.

Looking ahead: IOCCC30 and the vacation schedule

Judges plan to open IOCCC30 toward the end of 2026, run through roughly Q1 2027, and document the opening process the way they documented this year's close. They also intend an actual post-contest vacation — IOCCC28's aftermath got swallowed by mkiocccentry tooling fixes until it was time to open IOCCC29 immediately.

Non-winners are explicitly encouraged to revise and resubmit. The judges note multiple IOCCC29 winners were improved versions of earlier rejects. If your entry almost made the cut, polish and try again; if you are done with the contest, publish elsewhere. The contest does not own your weird C.

Practically: download the 2025 tarball, compile with a modern clang or gcc if your system compiler chokes, and read each winner's index.html before touching prog.c. The FAQ covers common dependency failures. Half the fun is failing to understand the source, then reading the author remarks and feeling equally confused but more informed.

Bottom line

IOCCC 2025 winning the HN front page is not retro cosplay. It is a demand signal for software you can hold in your head — or at least in a terminal window 160 columns wide. Beside agent harnesses and compression papers, deliberate craft looks like differentiation, not denialism. The winners are jokes that compile, emulators that refuse to implement audio, and quines that graduate into diff tools after twenty-five git-am rounds.

If you ship products in 2026, steal the ethos if not the punctuation: constrain the problem, document the build, leave fun challenges for your users, and make inspectability a selling point. The agents can help you type faster. They cannot replace the moment a judge cannot stop playing your terminal Game Boy until byte 256.

Sources: IOCCC 2025 winners; ncw1 Game Boy emulator entry; endoh3 patch/diff quine; Hacker News discussion (June 2026). Related on Solana Garden: World Pulse; Collectibles (generative art with inspectable traits).