Circus Linux! 1.0.0 — original Windows source screen
2026-10-18: original Windows archive acquired and statically checked. One granted
passive startup fails fast at CRTDLL _fpreset; no menu or gameplay reached.
No build, browser, registration, audio, or performance claim.
Provenance and recovery
Official page https://newbreedsoftware.com/circus-linux/download/ identifies
the Windows release as 1.0.0 from New Breed Software and links directly to
https://tuxpaint.org/ftp/unix/x/circus-linux/win32/circuslinux-1.0.0.zip.
HEAD and download returned 2,107,742 bytes; Last-Modified was 2003-08-18.
Archive SHA-256:
29983cc728c563ca0c314f6bf3332c715ec9b7a9893b58504f4052fa70ced619.
The original EXE timestamp is May 29, 2000; mirror modification time is not the
executable build time. Bundled COPYING.txt is GNU GPL version 2; no installer or
license answer was needed. Original source and build files accompany the binary.
Retained evidence is scratch/runs/20261018-circuslinux-source/ in the shared
repository, outside Git. Its acquire.js is a bounded recovery recipe; download
the exact URL, verify archive hash, inspect the ZIP directory and expansion size,
then extract preserving the circuslinux-1.0.0/ subtree. Acquisition and evidence
have a 24 MiB total cap and refuse work below 2 GiB plus 64 MiB free. Archive
expansion is 4,303,588 bytes across 150 files. The retained directory was about
7.1 MB after inspection, comfortably below the cap.
source-manifest.json hashes every original; archive-listing.json retains ZIP
metadata. verify-plan.js re-compares every extracted file byte-for-byte with
the original ZIP and regenerates verification.json and passive-plan.json.
All 150 comparisons passed; independent unzip -t reported no compressed-data
errors. No original was patched. No prior Circus Linux registry, corpus, task,
notes, board entry, or local payload was found during selection.
PE and asset closure
circuslinux.exe is original i386 PE32, preferred base 0x00400000, entry RVA
0x11a0, SHA-256
a6a41ef40de82b03f62ab6f960744be13b5125392bfc2c00e8cf3dd760a3e0a2.
It imports CRTDLL, GDI32, KERNEL32, USER32 and WINMM. It does not directly import
the supplied SDL DLLs; do not assume this release shares the newer LGames SDL
runtime route. Bundled SDL.dll, SDL_image.dll, and SDL_mixer.dll are all
i386 PE32. SDL_image and SDL_mixer import SDL and KERNEL32; SDL imports WINMM,
KERNEL32, USER32 and GDI32. Independent objdump import lists agree with the JS
PE reader for all four binaries; full symbols are retained in pe-closure.json
and the four *.pe.txt reports.
There are no unresolved vendor DLL names in the static recursive closure.
CRTDLL is recognized by lib/dll-loader.js as a Windows system DLL; this does
not establish that its required semantics work. No physical CRT is substituted.
api-name-screen.json records names absent from the exact API table: _fmode_dll,
_environ_dll, _fpreset, _setjmp, longjmp, setbuf, _fileno, and
waveOutGetErrorTextA. Aliases and data imports may resolve elsewhere; this is a
startup risk, not a proven runtime failure or permission to install silent stubs.
The included Makefile-win32 uses DATA_PREFIX="data/". All 123 literal asset
references in original circuslinux.c exist in the archive. Preserve all 150
files with their relative directories, including images, sounds, music, source,
README and COPYING. Runtime discovery of additional files remains untested.
Prepared passive route
passive-plan.json gives 150 hash-pinned host/guest mounts under C:\CIRCUS,
EXE C:\CIRCUS\circuslinux.exe, cwd C:\CIRCUS, no arguments, and three
original DLL seeds. The source defaults use_fullscreen=0 and selects a 640x480
window; README reserves --fullscreen for opt-in. No speculative resolution
switch or changed binary is needed. README says circuslinux.dat stores scores
and volume in the Windows application directory.
Next runtime, only after coordinator grant and fresh source/module/disk pins: one passive 60-second startup, 65-second soft/85-second hard wall bounds, 8 MiB log cap, strict 2 GiB floor with 128 MiB admission/64 MiB stop margins. No injected input. Review captures and report the first concrete CRT/API or rendering boundary. A menu alone does not qualify core gameplay. Do not silently replace CRTDLL with MSVCRT or rebuild the supplied source to evade an original binary blocker.
Original passive startup — concrete CRT boundary
Run 20261018-circuslinux-passive-startup used the prepared original route with
150 mounts, three original SDL DLL seeds, no arguments and no injected input.
Runtime checkout was /tmp/wa-recovery-20261014 at
78541f61ed0e051c7747a15de695a48f8fefa07b; the existing module SHA-256 was
fd1613e22ee7e77300d3f246b91295fb7da513dc5d37b64e6ca022eb89bdfc92.
Physical source pins record the actual checkout independently of its HEAD.
Pure checks covered four disk boundaries, all mounts/seeds, no physical CRT
substitution, no arguments/input, syntax, and missing-grant refusal before launch.
At 20:31:43Z all three SDL DLL initializers returned EAX=1. The EXE then hit
UNIMPLEMENTED API: _fpreset at original VA 0x00463f60, the import jump through
[0x004b733c], with return address 0x0040115b. This is a concrete early CRT
startup boundary, before the main program can display a window. No screenshot
was produced before failure; output.log preserves the complete 4,414-byte
failure report and stack. No other missing symbol is runtime-proven by this run.
Child 2441806 and controller 2441789 exited with status 1; terminal evidence is
20:31:43.285Z. The crash-text guard requested capture/quit, but the fail-fast
termination was already underway. No time, disk, or log-cap guard fired.
Minimum observed free disk was 2,335,801,344 bytes. Postflight and an independent
check verified all 3,144 source pins, all 150 original file hashes, archive and
module unchanged, both processes absent, and no remaining process-group members.
review.json was written after evidence inspection. As the title is unregistered,
there is no dashboard result.json, per the capture workflow.
Runtime is released. Any next implementation must provide actual _fpreset
semantics with appropriate focused tests; a successful reset alone would not
establish the later CRT data-import and I/O behaviors. No implementation, stub,
physical CRT replacement, rebuilt guest, or retry was attempted.
Granted original retry after _fpreset
Run 20261018-circuslinux-fpreset-retry used the same 150 original mounts, three
DLL seeds, no arguments, and no injected input after the independently reviewed
reset fix was integrated. Checkout f5124ebc61d01ed4466aa5db0a4eab6ecbeedab6
loaded module SHA-256
0c617764e036d0422ab19bc0d97477ff68ba5eb8fa7c247833b7519e8060e5f7.
Fresh admission free space was 2,289,852,416 bytes, above the unchanged strict
2 GiB plus 128 MiB threshold (2,281,701,376 bytes).
All three DLL initializers returned 1, and the original advanced beyond
_fpreset to UNIMPLEMENTED API: setbuf. Original VA 0x00464108, return
0x0043b903; stack arguments are stream 0x07500050, buffer NULL. The stream
value lies in the thunk address range and needs investigation before any future
I/O implementation can be called correct; this observation alone does not prove
which data-import semantics are wrong. No API was bypassed or replaced.
Child 2461881/controller 2461853 both exited 1; terminal timestamp
20:47:54.593Z. No window or PNG preceded failure; the complete log is 5,230 bytes.
Minimum sampled free space was 2,288,807,936 bytes. Independent postflight checks
verified 3,145 physical source pins, 150 originals, archive and module unchanged,
both processes absent and owned process group empty. Failure review was written
last as review.json; the title remains unregistered, so no dashboard result
was attached. No further fix, retry, build, browser, or gameplay claim. Runtime
released to the coordinator.
Source-only stdio scope audit
20261018-circuslinux-stdio-source/ retains aligned original WinMain disassembly
and the import record. _iob is a CRTDLL data import at IAT VA 0x004b7340.
SDL's startup loads it and uses +32 for stdout, +64 for stderr. Before setbuf,
it calls freopen on each; if reopening fails, it calls fopen then copies eight
dwords into the original FILE address. The observed setbuf argument 07500050
and original +64 address computation imply _iob base 07500010, in the thunk
range. Existing $handle__iob implements a callable accessor instead; a true
data export must resolve to the actual registered 32-byte FILE array. The
fallback copy path is established statically, not separately traced live.
The current setvbuf handler validates stream/mode/size but leaves every stream unbuffered and never retains the requested buffer. The write/read helpers issue VFS operations immediately; custom buffering is not an available shared helper. Microsoft's setbuf contract requires NULL to disable buffering and a non-NULL BUFSIZ array to become the stream's buffer; the void API has no error result. Its setvbuf contract also requires actual use of supplied buffers. Simply calling the present setvbuf handler from setbuf would therefore not implement that contract.
Scope checkpoint sent to the coordinator before code expansion: fix CRTDLL data-export identity first, then explicitly scope real buffering state and its read/write/flush/seek/close interactions. Invalid/foreign streams must not be written through. Meaningful tests need actual immediate visibility for NULL, deferred/custom-buffer visibility and flush behavior, ownership, invalid stream rejection, and data-import identity; a successful no-op is insufficient. No setbuf implementation, API row, test execution, build, or retry was made during this audit.
Prepared retry after bounded NULL setbuf support
The separately reviewed/tested setbuf branch ends at c3e30a7b4. It supports NULL mode on canonical owned FILEs and explicitly traps custom buffers, copied/inconsistent FILE state, and closed/unowned streams. Its compiled validation does not establish Circus startup success.
A fresh source-only packet is retained at
scratch/runs/20261018-circuslinux-setbuf-retry-prep/. The next original passive
run uses the same 150 original mounts and three DLL seeds, no guest arguments
or input, 60-second guest limit, 65-second host quit and 85-second hard kill.
It now specifies both real calendar and real ticks without a wall-clock pin.
Admission remains strictly above 2 GiB plus 128 MiB, with the 64-MiB stop margin
and 8-MiB log cap. Copied-FILE rejection must be retained as an observed failure
if encountered, not bypassed.
Controller syntax and pure disk-boundary/argument checks passed, including 150 original-file hashes, unchanged mount/seed counts and refusal of unready source/module pins. Pins are deliberately marked unready until the coordinator releases its canonical build. No new runtime was performed for this packet.
Original retry result after setbuf
The subsequent single granted run used root d239556956b2f5f554ebb2725604119ef34967e3 and module 67aaa6df401d2039bd70dd4f71bd683b69524918dda5c7e93d735f19688e147f. Fresh preflight pinned 3,197 physical source/dependency files, including shared MSVCRT (887eb5ce93edb7192ca3e9220f07f9ca0f94db02af5862ebcbdfcb852db99fd1), all 150 originals and the archive. Admission free space was 2,432,458,752 bytes.
The original passed the previous setbuf boundary without copied-FILE rejection.
All three bundled DLL initializers returned 1. It opened waveOut at 11025 Hz,
two channels/16 bits, started a guest thread, and created a hidden zero-size
window titled circuslinux. This is startup evidence, not visible rendering or
audio correctness. It then failed at CRTDLL _setjmp, EIP 00464038, return
00409ddc, argument 009dcfec, with PNG signature bytes visible on the stack.
There was no menu, screenshot, gameplay, or input.
Evidence is retained at scratch/runs/20261018-circuslinux-setbuf-retry/ with
review.json (still unregistered). Child 2500673 and controller 2500663 exited;
exit status was 1 at 2026-10-18T21:19:42.972Z, log 5,930 bytes, minimum free
space 2,431,373,312 bytes. Independent postflight confirmed all source/sharedCRT,
original/archive/module pins unchanged and both processes/groups absent. No
further retry, stub, replacement, or fix was attempted; runtime was released.