Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 107 additions & 0 deletions .github/release-notes/v2.2.5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
# 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.
- **`NOTICE` rewritten** 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.
- **GeraNES (GPL-3.0-only) disclosed** — it was cited as a reference across ~58
files but was previously absent from `NOTICE`.
- **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.rs`** no longer mislabels `blip_buf` as 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 with `NOTICE`.
- **`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 `.nes` total, 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 the `retroachievements` / `scripting` / `hd-pack` feature combos),
`RUSTDOCFLAGS="-D warnings" cargo doc`, markdownlint, and the `no_std`
`thumbv7em-none-eabihf` cross-compile all pass.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
/target/
/target/doc/
/target/criterion/
# Nested per-crate target/ dirs (build output; the root /target/ rule is anchored).
crates/*/target/
**/*.rs.bk
*.bench
# This workspace ships a binary app — commit the lock (re-include it).
Expand Down
4 changes: 2 additions & 2 deletions AGENTS.md

Large diffs are not rendered by default.

56 changes: 56 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,62 @@ cycle-accurate core later replaced.

## [Unreleased]

## [2.2.5] - 2026-08-03 - "Colophon" (provenance, licensing, and documentation integrity)

A **provenance, licensing, and documentation-integrity** release, prompted by
community review of the project's licensing and AI-assisted origins. **Zero
emulation-core behavior changes**, so **AccuracyCoin holds 141/141 (100.00%)**, nestest is
0-diff, and the `#![no_std]` chip stack, save-state / TAS / netplay formats, and
every golden vector are byte-identical to v2.2.4 by construction.

### Changed

- **In-source "port" comments corrected.** A full-tree audit found comments that
described implementations of publicly-documented hardware behavior (the CPU
unstable-store opcodes, the PPU sprite-evaluation / OAM models, and numerous
mapper register decoders) as "ports of" copyleft emulators (Mesen2 — GPLv3;
puNES — GPLv2). Those behaviors are implemented from the NESdev wiki, published
datasheets, and the documented 6502 behavior, and were cross-checked against
reference emulators as *oracles*; the comments were reworded to say so. No
GPL-licensed emulator source is incorporated.
- **CRT shaders & NTSC filters reworded.** `crt_royale` / `crt_guest` / `megatron`
and the Bisqwit / EMMIR NTSC filters were reviewed at source level and reframed
from "port / condensation of X" to independent single-pass reimplementations of
the *look and technique* (copyright protects code expression, not a visual look);
no upstream shader source is incorporated. The comment claiming tables were
"ported verbatim from Bisqwit's C" was corrected — those tables encode the
NESdev-documented NES composite signal.
- **`blip.rs`** no longer mislabels `blip_buf` as BSD/MIT (it is LGPL-2.1+); the
file is an independent BLEP implementation and now says so.
- **README** toned down and corrected: added an AI-assistance disclosure, removed
a comparison graphic with inaccurate details, fixed a mislabeled
("sub-cycle accuracy") screenshot caption, and synced Acknowledgments with
`NOTICE`.

### Added

- **`NOTICE` rewritten** to disclose the behavioral-oracle use of GPL emulators
(Mesen2/MesenCE, higan, **GeraNES**, ares, FCEUX, Nestopia UE, puNES — no code
incorporated), attribute the incorporated permissive components (emu2413,
TriCNES, rcheevos — all MIT, with the MIT text), the bundled fonts (Font Awesome;
Press Start 2P / OFL) and test ROMs, and credit the CRT-shader / NTSC-filter
visual influences as independent reimplementations. GeraNES (GPL-3.0-only), cited
across ~58 files, was previously undisclosed.
- **New `docs/originality-and-provenance.md`** — an honest account of where
RustyNES advances, diverges from, or independently re-derives NES emulation
technique, its development timeline, and its full license posture (including that
the project is heavily AI-assisted).
- **Press Start 2P OFL text** added to the Android app assets (it shipped without
the required OFL text; desktop and iOS already carried it).

### Fixed

- **`tests/roms/LICENSES.md`** — a false exclusion claim (four Holy Mapperel mapper
ROMs stated as excluded were 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 `.nes` total, none
commercial).

## [2.2.4] - 2026-07-24 - "Cartridge" (libretro core builds/installs for RetroArch)

A **libretro / RetroArch distribution** cut. Its purpose is that the RustyNES
Expand Down
36 changes: 18 additions & 18 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ members = [
default-members = ["crates/rustynes-libretro"]

[workspace.package]
version = "2.2.4"
version = "2.2.5"
edition = "2024"
rust-version = "1.96"
license = "MIT OR Apache-2.0"
Expand Down
Loading