# 内置游戏授权说明

本目录下的每一条「内置游戏」，都是**许可证明确允许再分发**的作品。
这份文件是它们的授权证据清单——每一个 ROM 文件对应下面一条记录，
记录里写清楚授权依据是什么、证据在哪、核实日期。

## 为什么要这么麻烦

模拟器本身是合法的技术。真正有法律风险的是 ROM：绝大多数经典游戏的 ROM
至今仍在版权保护期内，**下载和分发都侵权**，跟「汉化没汉化」没有关系——
汉化版是原作的未授权演绎作品，汉化组从来没有拿到过授权。

所以这个项目只做两件事：

1. **BYOR（自带 ROM）**：你自己合法拥有的游戏副本，拖进来就能玩。文件全程留在你
   自己的浏览器里，不上传、不外发。
2. **内置免费作品**：只收录作者本人明确授权、允许自由再分发的自制游戏
   （homebrew / 同人作品）。这些作品**不是**商业游戏的替代品，是独立创作。

内置区不是「免费游戏下载站」。任何一条记录只要拿不出下面标准的授权证据，就不收。

## 收录标准（硬性门槛）

一个作品要进这份清单，必须同时满足：

1. **作者本人公开声明了允许再分发的许可证**，并且该许可证允许在本项目中随附分发。
   可接受的例如：CC0 / CC-BY / CC-BY-SA、MIT / BSD / Apache-2.0、
   zlib、GPL 系列、以及作者在自己仓库根目录写出了明确授权条款的「免费软件」声明。
2. **分发渠道是作者自己的**：作者的 GitHub / GitLab / Codeberg releases，
   或作者自己的站点。**不接受**任何第三方 ROM 站、ROM 聚合站、镜像站。
3. **能拿到许可证原文**：仓库里的 `LICENSE` / `COPYING` 文件，
   或作者站点上的授权声明页。只写「free」而没有任何授权条款的，**视为不可分发**。
4. **证据留档**：取证时的 URL、许可证名称、核实日期，逐条记在下面。

「免费下载」≠「允许再分发」。这是两件完全不同的事，很多自制游戏只是前者。
前者不足以让我们把它打包进这里。

## 明确不收的东西

- 任何商业游戏的 ROM，无论什么机种、什么语言、什么版本（含汉化版、修改版、
  盗版转制版）
- 「作者已失联 / 许可证不详」的作品——许可不明 = 不能分发
- 从 romhacking 类聚合站、`free ROM` 站、archive.org 的 ROM 合集里拿到的文件
- 只有口头「随便用」、仓库里没有任何授权文本的作品

## 清单

| ROM 文件 | 作品 | 作者 | 许可证 | 核实日期 |
|---|---|---|---|---|
| `roms/concentration-room.nes` | Concentration Room | Damian Yerrick | GPL-3.0+，附 iNES 逐字复制例外 | 2026-09-15 |
| `roms/rhde.nes` | RHDE: Furniture Fight | Damian Yerrick | GNU All-Permissive License | 2026-09-15 |
| `roms/super-tilt-bro.nes` | Super Tilt Bro. | Sylvain Gadrat | WTFPL-2.0 | 2026-09-15 |
| `roms/witch-n-wiz.nes` | Witch n' Wiz | Matt Hughson | MIT | 2026-09-15 |
| `roms/runner.nes` | runner | Zorchenhimer | MIT | 2026-09-15 |
| `roms/opennes-snake.nes` | openNES Snake | Sebastian Dine | Zlib | 2026-09-15 |
| `roms/opennes-breakout.nes` | openNES Breakout | Sebastian Dine | Zlib | 2026-09-15 |
| `roms/adjustris.gb` | Adjustris | Dave VanEe (tbsp) | CC0-1.0（公有领域） | 2026-09-15 |
| `roms/libbet.gb` | Libbet and the Magic Floor | Damian Yerrick | Zlib | 2026-09-15 |
| `roms/squishy.gb` | Squishy the Turtle | cppchriscpp | MIT | 2026-09-15 |
| `roms/nonogram-advance.gba` | Nonogram Advance | Emma Britton | MIT | 2026-09-15 |
| `roms/gb-arcade.gba` | GB Arcade | Emma Britton | MIT | 2026-09-15 |

演示用的 `demo/smoke-test.nes` 不在上表——它是本仓库自己写的自检程序，
由 `tools/make-test-rom.mjs` 汇编生成，随附 `demo/LICENSE.txt`（CC0 1.0）。

---

## 逐条记录

每条记录的 `sha256` 与 `tools/fetch-homebrew.mjs` 里 `GAMES` 表登记的值一致。
换一个字节都会对不上，作者日后悄悄换包会被 `--verify` 当场发现。

### 1. Concentration Room

- **作者**：Damian Yerrick（pinobatch）
- **许可证**：GPL-3.0-or-later，**但附加了一条 iNES 逐字复制例外**
- **证据**：<https://github.com/pinobatch/croom-nes> 仓库 README
- **关键措辞**（原文）：

  > *As a special exception, you may copy and distribute exact copies of the
  > program, as published by Damian Yerrick, in iNES or UNIF executable form
  > without source code.*

  这一句是我们能收录它的**唯一理由**。GPL 本身要求「分发目标码必须同时提供对应
  源码」；这条例外明确豁免了逐字复制的 ROM 的源码义务，正好就是「把自己编译好的
  ROM 原样随附分发」这个场景。**不得修改**这个 ROM——例外只覆盖 exact copies。
- **下载**：<https://github.com/pinobatch/croom-nes/releases/download/v0.02a/croom.nes>
- **sha256**：`2ce17df1ad66a8a0533c0a8739f5b5ebe275c264924bbe350c42c5ac0394f20e`

### 2. RHDE: Furniture Fight

- **作者**：Damian Yerrick（pinobatch）
- **许可证**：GNU All-Permissive License
- **证据**：<https://github.com/pinobatch/rhde-nes> 仓库 `LICENSE`
- **说明**：GNU All-Permissive 是 FSF 发布的宽松许可（以 MIT/X11 为基底，
  FSFAP），允许任意使用、修改、再分发，无源码义务。跟 GPL 只共享一个发布者，
  条款内容完全相反。
- **下载**：<https://github.com/pinobatch/rhde-nes/releases/download/v0.07/rhde.nes>
- **sha256**：`b2c4748a5b3651e393572046daf126213653b58b55472cdfdf4b863834dd0241`

### 3. Super Tilt Bro.

- **作者**：Sylvain Gadrat（sgadrat）
- **许可证**：WTFPL-2.0（Do What The Fuck You Want To Public License）
- **证据**：<https://github.com/sgadrat/super-tilt-bro> 仓库 `LICENSE`
- **说明**：WTFPL 是 FSF 认可的、与 GPL 兼容的极宽松许可，允许无限制地使用、
  复制、修改、分发。仓库同时含 ROM 的构建产物。
- **下载**：<https://super-tilt-bro.com/shares/stb_igbik.nes>（作者本人站点）
- **sha256**：`6f077796b539b2b75783452fa515d453f72bd7416fe25aeec6fe01c45ec95d40`

### 4. Witch n' Wiz

- **作者**：Matt Hughson（mhughson）
- **许可证**：MIT
- **证据**：<https://github.com/mhughson/mbh-A53-witchnwiz> 仓库 `LICENSE`
- **注意**：这里收录的是 **2021 年 NESdev 比赛版本**（`v1.0.0-nesdevcompo`），
  不是后来在 itch.io / 实体卡带上发售的完整版。作者把比赛版源码和构建产物
  以 MIT 释出，完整版是另外的商业发行，两者不是一回事。
- **下载**：<https://github.com/mhughson/mbh-A53-witchnwiz/releases/download/v1.0.0-nesdevcompo/witchnwiz_2021_02_22_nes_dev_v_1_0_0.nes>
- **sha256**：`5ff6c6c633683e43966c24205747a7526bbaa11f5bb0174ef7f33abc20411e16`

### 5. runner

- **作者**：Zorchenhimer
- **许可证**：MIT
- **证据**：<https://github.com/zorchenhimer/nes-runner> 仓库 `LICENSE`
- **下载**：<https://github.com/zorchenhimer/nes-runner/releases/download/v1/runner.nes>
- **sha256**：`1a67bfabdde2d96eacb04eb7f9d17e8da6c082d4976c318315fe31e2d19b4384`

### 6. openNES Snake

- **作者**：Sebastian Dine（sebastiandine）
- **许可证**：Zlib
- **证据**：<https://github.com/sebastiandine/openNES-Snake> 仓库 `LICENSE`
- **说明**：Zlib 许可明确允许「以源码或二进制形式再分发，无论是否修改」，
  唯一要求是保留版权声明、且不得声称原作者为你的使用背书。ROM 属二进制分发，
  完全在许可范围内。
- **下载**：<https://github.com/sebastiandine/openNES-Snake/releases/download/v1.0.9/openNES-Snake-1.0.9.nes>
- **sha256**：`71792a9b4e4db52fb60df4633400301fac8f244f802b88d336b58e079c75acc7`

### 7. openNES Breakout

- **作者**：Sebastian Dine（sebastiandine）
- **许可证**：Zlib
- **证据**：<https://github.com/sebastiandine/openNES-Breakout> 仓库 `LICENSE`
- **下载**：<https://github.com/sebastiandine/openNES-Breakout/releases/download/v1.0.1/openNES-Breakout-1.0.1.nes>
- **sha256**：`2dc69e3c852511fd064766becc164e29cfa0ef319906c992f83ea3be0b72eeaa`

### 8. Adjustris

- **作者**：Dave VanEe（tbsp）
- **许可证**：CC0-1.0（公有领域奉献）
- **证据**：<https://github.com/tbsp/Adjustris> 仓库 `LICENSE`
- **说明**：CC0 是这批里最干净的一个——作者主动放弃全部著作权，进入公有领域，
  连署名都不是强制要求。条件允许的话我们仍然在页面上标了作者。
- **下载**：<https://github.com/tbsp/Adjustris/releases/download/v1.1/adjustris.gb>
- **sha256**：`b6c8affe6d906419cfc99ff459718f33a1868af03254a2f65cea2a9430394712`

### 9. Libbet and the Magic Floor

- **作者**：Damian Yerrick（pinobatch）
- **许可证**：Zlib
- **证据**：<https://github.com/pinobatch/libbet> 仓库 `LICENSE`
- **下载**：<https://github.com/pinobatch/libbet/releases/download/v0.08/libbet.gb>
- **sha256**：`3607412031c8287cf878299ce96e581e85b852dde703806343b95576fa3ff1a9`

### 10. Squishy the Turtle

- **作者**：cppchriscpp
- **许可证**：MIT
- **证据**：<https://github.com/cppchriscpp/SquishyTheTurtle> 仓库 `LICENSE`
- **注意**：下载的是作者放在**自己站点**上的 MAGFest 版本
  （`cpprograms.net`，见下面 URL），不是 GitHub release。这是作者本人的域名，
  符合收录标准第 2 条。
- **下载**：<http://cpprograms.net/devnull/squishy-magfest.gb>
- **sha256**：`ac1e2eff95cdcf71ed931bd16c88f080038977b8b9dcde433bc023ee6b86c021`

### 11. Nonogram Advance

- **作者**：Emma Britton（emmabritton）
- **许可证**：MIT
- **证据**：<https://github.com/emmabritton/gba_nonogram_advance> 仓库 `LICENSE`
- **下载**：<https://github.com/emmabritton/gba_nonogram_advance/releases/download/v0.9.5/nonogram_advance_v0.9.5_sram.gba>
- **sha256**：`e9947cf38f5b537f694ee3bd76dcc21dd6f4ed1b96bf33ae36940b9d20e1164b`

### 12. GB Arcade

- **作者**：Emma Britton（emmabritton）
- **许可证**：MIT
- **证据**：<https://github.com/emmabritton/gba_gbarcade> 仓库 `LICENSE`
- **下载**：<https://github.com/emmabritton/gba_gbarcade/releases/download/v0.1.4/gbarcade_v0.1.4.gba>
- **sha256**：`26d9f848c793e0a87c6b66213018dd803392a4a35283d8fcb230b0555bbb6ebc`

---

## 核实过、但没收录的

这些作品的许可证我们查了，**不满足**上面的门槛，所以不放进来。
理由一并记下，免得日后有人重复调研。

| 作品 | 许可证 | 不收的原因 |
|---|---|---|
| Thwaite | GPL-3.0 | 无 iNES 例外。分发 ROM = GPL 意义上的「传递目标码」，须同时提供 Corresponding Source |
| Nova the Squirrel | GPL-3.0 + 素材 CC-BY-**NC**-SA | 双重问题：源码义务同上；NC 条款还会给整个 bundle 加上「非商业」限制 |
| RoboRun / Voxelburg / Rhino Express / Big2Small / Undercooked | GPL-3.0 | 源码义务同上。要收就得随附完整源码包，收益不值这个复杂度 |
| Waternet | Zlib | 许可没问题，但作者只提供 4.6 MB 的 zip，内含多个构建。为取出一个 32 KB 的 ROM 引入 ZIP 解析不值得 |
| 《Super Tilt Bro.》后续付费版 | 商业发行 | 与比赛版是不同产品，只在 itch.io 出售，不收录 |

**关于 GPL 的说明**：GPL 是「允许再分发」的许可证，本身并不禁止我们打包 ROM。
问题出在 GPL 的**源码义务**——分发二进制时必须让接收者能拿到对应源码。
这在技术上是可做的（随附源码 tarball），但会把内置区从「几个 ROM 文件」
变成「每个游戏带一个源码包」，体积和维护成本都不划算。所以统一策略是：
**只收无源码义务的宽松许可（MIT / Zlib / CC0 / WTFPL / FSFAP），
GPL 作品除非像 Concentration Room 那样自带 ROM 级例外，否则不收。**

## 关于模拟器内核

内置的模拟器内核（FCEUmm、Nestopia、Snes9x、Gambatte、mGBA）各自遵循其原始
许可证，与上面的游戏授权是两回事，详见项目根目录的 `README.md`。
其中 **Snes9x 为非商业许可**，商业使用前需要另行处理，README 里有说明。

## 怎么更新这份清单

```bash
# 校验现有文件（文件头 + 长度 + sha256），不联网
node tools/fetch-homebrew.mjs --verify

# 下载缺失的（国内访问 GitHub 通常要挂代理）
HTTPS_PROXY=http://127.0.0.1:7897 NODE_USE_ENV_PROXY=1 node tools/fetch-homebrew.mjs
```

加新游戏时，先在本文件里按上面的格式补齐证据，再往
`tools/fetch-homebrew.mjs` 的 `GAMES` 表加条目（首次运行会把算出的 sha256
打印出来，回填进去），最后加进 `manifest.json`。

## 如果你要移除某个内置游戏

清空 `manifest.json` 里 `games` 数组即可——页面在清单为空时整块不显示。
删除对应的 ROM 文件后，请同时删掉本文件里那条记录。
已经进入浏览器游戏库的副本要在页面里手动删除，两个是独立的。
