Pure-Go DOOM (id Tech 1, 1993) — bare-metal, no cgo.
go-doom is the pure-Go port of the original DOOM
engine, derived from AndreRenaud/gore
(itself a hand-port from the id Software 1997 source release),
with a TamaGo bare-metal backend
- a 4-gate provable-test protocol validating engine determinism / GPU fidelity / audio events / audio waveform.
Sibling of the go-quake1 family
(go-quake1 / go-quake2 / go-quake3 — the id Tech 1 / 2 / 3
ports). Both engines share the same TamaGo backend conventions,
the same CGO_ENABLED=0 discipline, and the same 4-gate provable-
test harness.
| Repo | Latest | Role |
|---|---|---|
engine |
— | The DOOM engine, TamaGo backend, harvest-reference oracle, demos |
brand |
— | Logos, social previews, favicons |
.github |
— | This profile + shared org workflows |
- Engine — pure-Go DOOM (
doom.go,seed.go, etc., the AndreRenaud/gore fork hand-cleaned for bare-metal use) backend/tamago/— bare-metal adapters: frontend (run loop) + gpu (framebuffer through go-virtio GPU) + sound (PCM into virtio-snd) + input (virtio-input keyboard)embedwad/— sharewareDOOM1.WADin-tree (id Software's freely- redistributable shareware grant) so CI is reproduciblecmd/harvest-reference/— reference oracle that runs a canonical demo and records the per-tic frame + audio digests the 4 provable-test gates compare againstexample/— host-side demos (SDL, terminal, web, Ebitengine) that share the same engine + a different frontend
- Pure Go.
CGO_ENABLED=0on the engine + TamaGo backend. The host-side demos underexample/are allowed to use cgo (SDL, Ebitengine) because they run in user-space, not on bare metal. - Reference-mirror traceability. Every Go file links to the upstream C/Go function it derives from.
- 4-gate provable-test protocol.
- GATE A — engine determinism, BYTE-EQUAL frames at checkpoint tics
- GATE B — guest virtio-gpu fidelity, χ² ≤ tolerance
- GATE C-1 — audio event stream, BYTE-EQUAL CacheSound/PlaySound log
- GATE C-2 — guest WAV bounded tolerance (per-second RMS envelope)
- 6-arch CI. All six 64-bit Go targets —
amd64,arm64,riscv64,loong64,ppc64le,s390x— green on each PR (engine itself; the TamaGo + cgo-frontend demos run only on the relevant subset). - BSD-3-Clause wrapper + GPL-2.0-or-later carve-out on the engine subtree (inherited from the id Software source release).
The same reason as go-quake1 and
go-virtio: one self-contained Go binary,
zero cgo, runs on bare metal — the TamaGo target the
cloud-boot loader hands control to. A C
engine drags glibc + SDL + the cgo runtime; pure-Go drags exactly
runtime + math. DOOM's CPU-only software renderer fits the bare-metal
model: no GPU shaders, all CPU rasterisation — exactly the workload
pure-Go + go-asmgen SIMD is built for.
cloud-boot — the bare-metal TamaGo + UEFI demo target. The 4-gate provable-test discipline ships with this engine and is carried forward into go-quake1 unchanged: same gates, same reference recordings, against the same go-virtio + go-asmgen substrate.
Project landing page: https://go-doom.github.io.
