Software licences: what the sold console may contain
The hardware design is ours. The firmware is not, for the most part: it is a fork of Retro-Go with emulator cores from many projects, each under its own licence. Some of those licences allow selling at no cost; others forbid any commercial use. The console cannot be sold with the firmware as it is today. This page lists, core by core, what can ship, what cannot, and how to replace each part that cannot, without paying licence fees.
Audit of the licence files in the fork (retro-go master 7ef3b710 and the
xtensa-68000-dynarec submodule). It is read from the licence texts, not a
legal opinion: have it confirmed by a lawyer who knows open-source licences
before the first sale. SNES, CPS1 and Neo Geo, the systems with the most
work in them, are in the cannot ship list; the SNES already runs on its
replacement (SNESticle, MIT), the launcher's default.
Rule 1: GPL code may be sold, and its source goes with it
Retro-Go is GPL v2, and most cores are GPL too. The GPL costs nothing and allows selling, on these conditions:
- every buyer receives the complete source of the firmware we ship (in the box, as a download link, or as a written offer valid for 3 years), with the build scripts, and may modify and redistribute it;
- the licence texts and copyright notices ship with the product (manual or a "Licences" screen);
- we add no terms that take those rights away (no "do not modify" clauses on GPL firmware).
Our repositories can stay private while we develop. What is released in a sold console must have its source published at the same time.
Our own apps. The MP3 player (media-go) and the e-book reader
(ebook-go) are our code, but both are built with the retro-go library
(set(COMPONENTS "main retro-go")), which is GPL. Linked that way, the
shipped binaries are GPL too. To keep them closed they must be rebuilt on
our own UI/system library with no GPL code in it. A separate closed program
next to the GPL ones on the same flash is allowed (mere aggregation).
Can ship (no fee; source published)
| System | Core | Licence |
|---|---|---|
| Launcher and shared code | Retro-Go | GPL v2 |
| NES | nofrendo | GPL v2 |
| Game Boy / Color | gnuboy | GPL v2 |
| Master System / Game Gear | smsplus | GPL v2 |
| PC Engine | pce-go | GPL v2 |
| Mega Drive | gwenesis | AGPL v3 (same duty as GPL; also covers network use) |
| Game Boy Advance | gpSP + our Xtensa dynarec (gbsp-libretro, xjit) | GPL v2 |
| Atari 2600 | Stella | GPL v2 |
| Atari 5200 | Atari800 | GPL v2 or later |
| Atari 7800 | ProSystem | GPL v2 |
| Commodore 64 | Teensy64 + reSID | GPL v3 or later (makes retro-home GPL v3) |
| Virtual Boy | beetle-vb (Mednafen) | GPL v2 |
| Neo Geo Pocket | RACE | GPL v2 |
| Atari Lynx | Handy | zlib (acknowledgement in the documentation) |
| Doom, Quake, Duke Nukem 3D, OpenTyrian | engines | GPL; only free game data ships (Freedoom; the OpenTyrian data under its own terms) |
| MP3 player, e-book reader | ours + minimp3 (CC0), Noto Serif (SIL OFL 1.1) | GPL while linked with retro-go, see above |
Cannot ship (licence forbids commercial use)
| Component | Systems | What the licence says | Way out without fees |
|---|---|---|---|
Snes9x 2005 (retro-core/components/snes9x) | SNES | Snes9x is non-commercial. The GPL v2 file in our copy comes from a port (ndssfc) whose authors could not relicense Snes9x code. | Replaced by SNESticle (see below), the launcher's default; Snes9x is only a hidden fallback. The sale build ships SNESticle and no Snes9x. |
MAME 0.37b5 (mame-go/components/mame2000) | CPS1, Neo Geo (and every other mame-go driver) | "The source code cannot be used in a commercial product without the written authorization of the authors." | Neo Geo: Geolith (believed BSD; verify). CPS1: a new driver written from current MAME, relicensed GPL/BSD in 2016. Our speed work (bands, cover, flash ROM cache) is our code and moves over. |
| Musashi 3.1 (68000 CPU in mame-go; the reference of our 68000 dynarec) | CPS1, Neo Geo | "May be freely used for non-commercial purposes... commercial ventures must contact the author." | Move to Musashi 4.x (MIT, verify). Small job. |
fMSX 6.0 (fmsx/) | MSX | Free for non-commercial use; the author sells commercial licences. | Drop MSX, or buy the licence. |
Wolf4SDL / Wolfenstein 3D (wolf3d-go) | Wolfenstein 3D | id Software "Limited Use" licence. | Drop. |
SM64 / MK64 ports (sm64-go, mk64-go) | Nintendo 64 games | Decompiled Nintendo code. | Drop, no way to ship. |
Cannonball (cannonball/) | OutRun | Needs Sega's ROMs; engine licence to verify. | Drop. |
SNES replacement: SNESticle
snesticle-go (fork master, core in the private repo pjcau/snesticle-esp32)
runs SNES games on a core that can be sold. It is the SNES tab's default and
much faster than Snes9x (game-by-game table in
emulators):
| Part | Source | Licence |
|---|---|---|
| 65816 CPU, SPC700, S-DSP, PPU | SNESticle (Icer Addis, released 2022) | MIT |
| ESP32 port and speed work (RGB565 blender on core 1, idle-loop skip, ...) | ours | MIT |
| DSP-1 / DSP-1B (Super Mario Kart, Pilotwings) | ours, written from public documentation (fullsnes, SnesLab); no Snes9x code, no Nintendo data | MIT |
| SuperFX / GSU (Star Fox, Yoshi's Island) | ours, behaviour following ares | MIT + ares ISC notice |
| SA-1, Cx4, S-DD1, SPC7110, OBC1, S-RTC, NEC DSP (DSP-2/3/4, ST010/011) | ours, from ares and public documentation | MIT + ares ISC notice |
Rules kept for every chip: no Snes9x code (not even rewritten while reading it), no GPL code, no Nintendo firmware or data ROM in the firmware. Chips that only work with a Nintendo program or data ROM (DSP-2/3/4, ST010/011, the Cx4's internal data ROM) can only run with a file the user supplies, like the console BIOS files.
SNESticle's original DSP-1 file included Snes9x code (sn9x/dsp1emu.c,
not part of the MIT release); it was removed, and the DSP-1 above
replaces it.
To check before the first sale: retro-extra/components/arcade3d (no
licence stated in the upstream README) and every piece of art imported into
the launcher (system backgrounds, logos, themes).
No ROMs, no BIOS
Nothing in the firmware, on a bundled card or in a download: no game ROMs,
no console BIOS (C64 KERNAL/BASIC, Atari 5200, Neo Geo, GBA). The code
already reads every BIOS from /retro-go/bios/ on the user's card and
embeds none. The MAME licence adds one more rule: whoever sells or
advertises media with illegal ROM images may not distribute MAME at all.
What this means for the plan
| Step | Work | Size |
|---|---|---|
| 1. Sale firmware build | a build with only the "can ship" cores, licence screen, source archive per release | days |
| 2. Musashi 4 | swap the 68000 core and the dynarec's reference | days |
| 3. Neo Geo | port Geolith (or write our own driver) with our renderer work | weeks |
| 4. CPS1 | new driver from current MAME (GPL/BSD) with our band/cover renderer | weeks |
| 5. SNES | SNESticle in place of Snes9x: done, every chip; drop Snes9x from the sale build | days |
| 6. Closed apps (optional) | MP3 and e-book rebuilt without the retro-go library | weeks |
Shipping the non-commercial cores as a separate "community firmware" download is a grey area: the seller still profits from it. It is not part of this plan.
Related: Launch compliance (CE, WEEE, batteries, trademark) and Business plan.