RustyNES v2.2.5 — "Colophon" (provenance, licensing, and documentation integrity)
RustyNES v2.2.5 — "Colophon" (provenance, licensing, and documentation integrity)
A provenance, licensing, and documentation-integrity release. It was prompted
by community review (NESdev forums) of the project's licensing and AI-assisted
origins, and it corrects how RustyNES describes its own provenance — in source
comments, in NOTICE, and in the docs — so the record matches what the code
actually is.
Zero emulation-core behavior changes. The deterministic #![no_std] chip stack,
save-state / TAS / netplay formats, and every golden vector are byte-identical to
v2.2.4 by construction, so AccuracyCoin holds 141/141 (100.00%) and nestest is
0-diff. This was re-verified after every change (AccuracyCoin full + run-ahead,
the nestest golden log, the dual-path differential net, and the snapshot-schema
audit), and the whole tree passes cargo fmt, clippy -D warnings (workspace +
feature combos), rustdoc -D warnings, markdownlint, and the no_std
cross-compile.
Why this release exists
A reviewer pointed out — correctly — that a number of in-source comments described
implementations as "ports" of other emulators, including GPL-licensed ones, and
that the project's AI-assisted nature was not disclosed. Rather than argue the
point, we audited the entire tree and fixed it. The short version:
- The chip, mapper, and peripheral behaviors are implemented from public
hardware documentation (the NESdev wiki, published datasheets, the documented
6502 unofficial-opcode behavior) and pinned to public test ROMs. Where a
reference emulator was consulted, it was used as a behavioral oracle — to
observe and cross-check documented behavior — not as a source of copied code. - Some comments had mischaracterized that relationship as "ported from X." Those
were reworded to state what actually happened. No GPL-licensed emulator source
is incorporated into RustyNES.
Licensing & provenance
- In-source "port" comments corrected across the CPU (unstable-store opcodes),
PPU (sprite-evaluation and OAM models), APU, and numerous mapper register
decoders — reframed from "ported from Mesen2 / puNES" (GPLv3 / GPLv2) to
independent implementations of publicly-documented hardware behavior,
cross-checked against reference emulators as oracles. NOTICErewritten to:- disclose the behavioral-oracle use of GPL-licensed emulators
(Mesen2/MesenCE, higan, GeraNES, ares, FCEUX, Nestopia UE, puNES) with no
code incorporated; - attribute the genuinely incorporated permissive components — emu2413
(Mitsutaka Okazaki, MIT), TriCNES (Chris Siebert, MIT), and rcheevos
(RetroAchievements.org, MIT) — with their copyright notices and the MIT text; - attribute the bundled fonts (Font Awesome; Press Start 2P / OFL) and
the bundled test ROMs (AccuracyCoin MIT, Damian Yerrick Holy Mapperel zlib,
blargg / kevtris public domain); - credit the CRT-shader / NTSC-filter visual influences as independent
reimplementations.
- disclose the behavioral-oracle use of GPL-licensed emulators
- GeraNES (GPL-3.0-only) disclosed — it was cited as a reference across ~58
files but was previously absent fromNOTICE. - CRT shaders and NTSC filters (
crt_royale,crt_guest,megatron, the
Bisqwit and EMMIR NTSC filters) were reviewed at source level. Each is a
single-pass shader built on RustyNES's own uniform/pipeline conventions and is
structurally incompatible with being a translation of the upstream multi-pass
shader source; copyright protects code expression, not a visual look or a
rendering technique, so these are independent reimplementations. Comments were
reworded from "port / condensation of X" accordingly, and the one comment
claiming tables were "ported verbatim from Bisqwit's C" was corrected — those
tables encode the two-level NES composite signal documented at the NESdev wiki. blip.rsno longer mislabelsblip_bufas BSD/MIT (it is LGPL-2.1+); the
file is an independent band-limited-step (BLEP) implementation and now says so.
Documentation
- New
docs/originality-and-provenance.md— a candid account of where RustyNES
advances, diverges from, or independently re-derives NES emulation technique
(the one-clock timebase, the transistor-literal octal-latch fetch, the
machine-checked accuracy-honesty gates, the determinism contract, measured-and-
rejected optimizations), the development timeline, an oracle-versus-port
classification of every reference, and the full license posture — written to be
honest rather than triumphal, including that the project is heavily AI-assisted. - README — added an AI-assistance disclosure; removed a comparison graphic that
contained inaccurate details; corrected a mislabeled "sub-cycle accuracy in
action" screenshot caption (it was an early-development image); toned down
overstated language; and synced the Acknowledgments withNOTICE. tests/roms/LICENSES.md— fixed a false exclusion claim (four Holy Mapperel
mapper ROMs stated as excluded are in fact committed), a stale crate path, and
the AccuracyCoin sub-test count, and added blanket coverage for the committed
directories not individually tabulated (328 committed.nestotal, none
commercial).
Assets
- Press Start 2P OFL text added to the Android app assets. The font shipped in
the Android app without the SIL Open Font License text that OFL 1.1 requires
travel with the font; the desktop and iOS builds already carried it.
Compatibility
No format, save-state, or behavior changes. .rns save-states, .rnm movies, and
netplay replays are byte-identical to v2.2.4. The libretro core's
display_version advances to v2.2.5; there are no other functional changes to
the RetroArch integration.
Verification
- AccuracyCoin: 141/141 (100.00%) — full suite and through run-ahead.
- nestest: 0-diff against the Nintendulator golden log.
- Dual-path differential net and snapshot-schema audit green.
cargo fmt --check,cargo clippy --workspace --all-targets -- -D warnings
(plus theretroachievements/scripting/hd-packfeature combos),
RUSTDOCFLAGS="-D warnings" cargo doc, markdownlint, and theno_std
thumbv7em-none-eabihfcross-compile all pass.