Emulator licensing issues

From ParabolaWiki
Jump to: navigation, search

To clarify the issue on emulators in Parabola and hopefully help maintainers of all free distributions come to a more concrete conclusion on the matter, this page includes a list of the emulators in Arch Linux under free licenses (e.g GPL) currently being blacklisted and a summary of how the various problems effect them.

1 The current decision

Parabola GNU/Linux is currently blacklisting many emulators provided by ArchLinux due to a decision made on the FSDG mailing list "Emulators" thread which concludes that most emulators do not belong in a "free as in freedom" operating system because their exclusive purpose is to run games like ROMs and images, which are assumed to not have a free license.

2 Problems with emulators

There are actually two potential problems with the fully free (libre) emulators in Arch Linux in that respect:

  1. ROMs: when only non-free ROMs appear to be available, meaning that the emulator could be used in a completely free manner if free ROMs did exist or were created.
  2. Images: when only non-free images games appear to be available, meaning that the emulator could be used in a completely free manner if free images did exist or were created, example: Playstation or Sega Saturn images or images burn from a CD o DVD to use on an emulator. For the images to be really free, they need to not have any nonfree dependencies. The best way to check that is to rebuild these on an FSDG compliant distribution or to audit the build instructions. We also need to make sure that no nonfree tools like image converter, IDEs etc are required to actually build the software.
  3. BIOS: when the emulator requires a non-free firmware file to run in the first place, meaning that unless a free firmware was created, free development or use of the emulator would not be possible.
  4. Compilation and binaries: If we have a binary like VLC for Windows, and that VLC is free software, the binary could contain nonfree software like bundled libraries. Or it could be cross compiled from GNU/Linux and produce a binary without any nonfree software. So to be sure it is easier to build the binary inside an FSDG compliant distribution and audit the build process along the way. Some software also might have hidden nonfree dependencies that would also be found when rebuilding it.
Note: In place of the word "firmware", "BIOS" is sometimes used, since BIOS is more descriptive, and people know what it means. However, it isn't really a BIOS, which is a specific architecture, but a BIOS-like system.

An emulator is considered non-free if it requires a non-free BIOS to use, and free if it does not. Use of a free emulator with non-free ROMs and images may still be considered non-free depending on whether or not ROMs and images are interpreted to be software.

3 Problems with real hardware

GNU/Linux has been ported to a wide variety of hardware, including game consoles. However the availability of GNU/Linux doesn't magically makes everything FSDG compliant. For instance installing GNU/Linux could require nonfree games. It could also work only in certain specific distributions and adding support for specific consoles in FSDG distributions could require more or less work depending on the status of the console. Source code could also have disappeared if people didn't upstream support for the console.

In some cases people also write free software games for consoles. These might be easier to build and audit in FSDG distributions.

4 Information on blacklisted emulators

Each emulator may be considered Non-Free, Free or Free + Free Use, where the latter means that it's both possible to run and use it freely. An emulator is non-free if either of the first two columns ("Free" and "Free Firmware") are no. It qualifies for free-use if the next two columns ("Free ROMs" and "Free Dev Tools") are both yes. A freely-licensed ROM and image without free dev tools is considered non-free for the same reason we consider FreeDOS to be non-free.

The "Free" column below does not account for firmware; it means the core executable.

N/A in "Free Firmware" means that the emulator does not have or require firmware to run.

To clarify it, if there's other text there than "yes" or "no", green means yes, red means no.

Note: In some cases text is put in yellow boxes. That is equivalent to "technically yes" or "there isn't enough information".

5 List of Native Emulators

Name Free Emulates Requires firmware Free dev tools for firmware Free firmware Free dev tools for games/OS Free games/OS
Uzebox Emulator (Uzem) x86_64 and i686 Uzebox (ATmega644) No N/A N/A avr-gcc + avr-libc, packaged in Parabola Yes: The Parabola emulator package is currently broken, so the emulator and games were checked directly with their upstream source code: https://github.com/Uzebox/uzebox is GPLv3: all the C files I checked contain the GPLv3 headers, the website mention that the tools and the emulator and the Arkanoid example are under the GPLv3, and at the time of writing building from source works fine:

$ git clone https://github.com/Uzebox/uzebox
$ cd uzebox
$ git checkout e05013c91a77dc32a541f692c82d91250035d66f
$ make -C tools/uzem/
$ make -C tools/packrom/
$ export PATH=$PATH:$PWD/tools/packrom/
$ cd demos/Arkanoid/default
$ make
$ make Arkanoid.uze
Then running the emulator on the game we built also works fine:
$ ../../../tools/uzem/uzem Arkanoid.uze
We have the game graphics appearing inside the emulator and so on.
The Uzebox Games and Demos page also list potential fully-free games. Before using/packaging them, people still need to check if they have nonfree build dependencies (like windows tools to convert graphic files for instance, dependencies on avr-studio, etc).

1964js/CEN64/Mupen64/Mupen64Plus/N64js Yes Nintendo 64 (N64) (NEC VR4300) No N/A N/A GCC/GNU Binutils and Clang/LLVM/lld (mips64-unknown-elf) technically
Atari++/Atari800/kat5200 Yes Atari 400/800/400XL/600XL/800XL/130XE/5200 (MOS Technology 6502B and MOS Technology 6502C) No N/A N/A cc65, DASM and WLA_DX technically
BlastEm/DGen (SDL)/higan (bsnes - Genesis/Mega Drive)/Mednafen (Genesis/Mega Drive) Yes Sega Genesis/Mega Drive (Motorola 68000 - MC68HC000) No N/A N/A GCC/GNU Binutils (m68k-unknown-elf) and WLA_DX technically
Boycott Advance/iDeaS No Nintendo Game Boy Advance (GBA) (ARM7TDMI) Optional GCC/GNU Binutils, Clang/LLVM/lld (arm-unknown-eabi) and devkitPro (devkitARM) technically GCC/GNU Binutils, Clang/LLVM/lld (arm-unknown-eabi) and devkitPro (devkitARM) Yes but unknown if nonfree dependencies
bsnes-plus/higan (bsnes - SNES/SFC)/Mednafen (SNES/SFC)/SNEeSe Yes Super Nintendo Entertainment System (Super NES/SNES)/Super Family Computer (Super Famicom/SFC)/Super Comboy (65c816 Ricoh 5A22 - based WDC 65C816) No N/A N/A WLA_DX technically
bsnes-plus/higan (bsnes - SGB/BS-X/Sufami) Yes Nintendo Super Game Boy, BS-X Satellaview and Sufami Turbo (65c816 Ricoh 5A22 - based WDC 65C816 and Sharp LR35902 - Custom Zilog Z80) Yes WLA_DX technically WLA_DX technically
Citra/3dmoo Yes Nintendo 3DS/3DS XL/2DS (ARM11 MPCore and ARM9) Yes? GCC/GNU Binutils, Clang/LLVM/lld (arm-unknown-eabi) and devkitPro (devkitARM) Port of a fully free OS as firmware GCC/GNU Binutils, Clang/LLVM/lld (arm-unknown-eabi and arm-unknown-linux-gnueabi) and devkitPro (devkitARM) A GNU/Linux distribution is available but nobody checked it for FSDG compliance. Support for the DS also doesn't seem to be present upstream Linux, and it might need some dedicated distribution or builds anyway as the DS doesn't have much RAM and probably lacks an MMU.
Decaf Yes Nintendo Wii U/Wii U Ware (IBM PowerPC "Espresso" PPC32) Optional? GCC/GNU Binutils, Clang/LLVM/lld (powerpc-unknown-elf) and devkitPro (devkitPPC) Port of a fully free OS as firmware GCC/GNU Binutils, Clang/LLVM/lld (powerpc-unknown-elf and powerpc-unknown-linux-gnu) and devkitPro (devkitPPC) Technically: Guix support cross compiling binaries for powerpc 32bit big endian, but a rootfs probably cannot be created. No other FSDG compliant distributions has support for that architecture. Some GNU/Linux distributions were also created for the Wii but they are not FSDG compliant. Free sotware homebrew applications also exist[1][2][3][4] but they were not checked for FSDG compliance
dasShiny/DeSmuME Yes[5] Nintendo DS/DSi/DSi XL (ARM946E-S and ARM7TDMI) Optional GCC/GNU Binutils, Clang/LLVM/lld (arm-unknown-eabi) and devkitPro (devkitARM) Port of a fully free OS as firmware GCC/GNU Binutils, Clang/LLVM/lld (arm-unknown-eabi and arm-unknown-linux-gnueabi) and devkitPro (devkitARM) A GNU/Linux distribution is available but nobody checked it for FSDG compliance. Support for the DS also doesn't seem to be present upstream Linux, and it might need some dedicated distribution or builds anyway as the DS doesn't have much RAM and probably lacks an MMU.
Dolphin (emulator - 64bit software support only) Yes Nintendo GameCube (NGC/GCN/GC)/Triforce (arcade) (IBM PowerPC "Gekko" PPC32) and Nintendo Wii/WiiWare (IBM PowerPC "Broadway" PPC32) Optional GCC/GNU Binutils, Clang/LLVM/lld (powerpc-unknown-elf) and devkitPro (devkitPPC) Port of a fully free OS as firmware GCC/GNU Binutils, Clang/LLVM/lld (powerpc-unknown-elf and powerpc-unknown-linux-gnu) and devkitPro (devkitPPC) Technically: Guix support cross compiling binaries for powerpc 32bit big endian, but a rootfs probably cannot be created. No other FSDG compliant distributions has support for that architecture. Some GNU/Linux distributions were also created for the Wii but they are not FSDG compliant. Free sotware homebrew applications also exist[6][7][8][9] but they were not checked for FSDG compliance
ePSXe No Sony PlayStation (PS/PSX/PS1/PSone) (MIPS R3000A-family LSI LR333x0) Optional GCC/GNU Binutils ans Clang/LLVM/lld (mips-unknown-elf) technically GCC/GNU Binutils and Clang/LLVM/lld (mips-unknown-elf) technically
FakeNES (NES/FC)/FakeNES GT (NES/FC)/FCE (NES/FC)/FCE Ultra (NES/FC)/FCEUX (NES/FC)/Fergulator/halfnes/higan (bsnes - NES/FC)/Mednafen (NES/FC)/Nestopia (NES/FC)/Nestopia UE (NES/FC)/puNES (NES/FC)/TuxNES Yes Nintendo Entertainment System (NES)/Family Computer (Famicom/FC)/Hyundai Comboy (Ricoh RP2A03 - NTSC/Ricoh RP2A07 - PAL/Ricoh RP2CO5/MOS Technology 6502) No N/A N/A cc65, DASM and WLA_DX There is Thwaite but it needs to be checked for FSDG compliance.
FCE (FDS)/FCE Ultra (FDS)/FCEUX (FDS)/higan (bsnes - FDS)/Mednafen (FDS)/Nestopia (FDS)/Nestopia UE (FDS)/puNES (FDS) Yes Family Computer Disk System (Nintendo) (FDS/FCD) (Ricoh RP2A03 - NTSC/Ricoh RP2A07 - PAL/Ricoh RP2CO5/MOS Technology 6502) Yes cc65, DASM and WLA_DX technically cc65, DASM and WLA_DX technically
Gambatte/Gearboy/GNUboy (GB)/higan (bsnes - GB/GBC)/Mednafen (GB/GBC)/mGBA (GB/GBC)/VBA2 (GB/GBC)/VisualBoyAdvance-M (GB/GBC)/zBoy (GB) Yes Nintendo Game Boy/Game Boy Pocket/Game Boy Light/Game Boy Color (Sharp LR35902 - Custom Zilog Z80) No N/A N/A WLA_DX technically
Gearsystem/SMS Plus Yes Sega Mark III/Master System (SMS)/Game Gear (Zilog Z80) No N/A N/A WLA_DX technically
Gekko Yes Nintendo GameCube (NGC/GCN/GC) (IBM PowerPC "Gekko" PPC32) Optional? GCC/GNU Binutils, Clang/LLVM/lld (powerpc-unknown-elf) and devkitPro (devkitPPC) Port of a fully free OS as firmware GCC/GNU Binutils, Clang/LLVM/lld (powerpc-unknown-elf and powerpc-unknown-linux-gnu) and devkitPro (devkitPPC) Guix support cross compiling binaries for powerpc 32bit big endian, but a rootfs probably cannot be created. No other FSDG compliant distributions has support for that architecture.
Gens/"Gens/GS" (Genesis/Mega Drive - i686 software support only) Yes Sega Genesis/Mega Drive (Motorola 68000 - MC68HC000) No N/A N/A GCC/GNU Binutils (m68k-unknown-elf) and WLA_DX technically
Gens/"Gens/GS" (Sega CD - i686 software support only) Yes Sega CD/Mega-CD (Motorola 68000 - MC68HC000) Yes GCC/GNU Binutils (m68k-unknown-elf) and WLA_DX technically GCC/GNU Binutils (m68k-unknown-elf) and WLA_DX technically
Gens/"Gens/GS" (Sega 32X - i686 software support only) Yes Sega 32X (SH2) Optional GCC/GNU Binutils (sh-unknown-elf) technically GCC/GNU Binutils (sh-unknown-elf) technically
Handy/Mednafen (Lynx) Yes Atari Lynx (MOS Technology 6502C) Yes cc65, DASM and WLA_DX technically cc65, DASM and WLA_DX technically
Hatari Yes Atari ST/STE/TT/Falcon (Motorola 68000 - MC68HC000) No N/A N/A GCC/GNU Binutils (m68k-unknown-elf and m68k-unknown-linux-gnu) and WLA_DX Linux has some support for at least some of these computers in arch/m68k with the CONFIG_ATARI support for instance, but we don't have any FSDG compliant distributions that supports m68k yet.
higan (bsnes - GBA)/Mednafen (GBA)/mGBA (GBA)/VBA2 (GBA)/VisualBoyAdvance-M (GBA) Yes Nintendo Game Boy Advance (GBA) (ARM7TDMI) Optional GCC/GNU Binutils, Clang/LLVM/lld (arm-unknown-eabi) and devkitPro (devkitARM) technically GCC/GNU Binutils, Clang/LLVM/lld (arm-unknown-eabi) and devkitPro (devkitARM) Yes but unknown if nonfree dependencies
higan (bsnes - SC1k/MS/GG)/Mednafen (SC1k/MS/GG) Yes SG-1000/SG-1000 II/SC-3000/SF-7000/Sega Mark III/Master System (SMS)/Game Gear (Zilog Z80) No N/A N/A WLA_DX technically
higan (bsnes - WonderSwan)/Mednafen (WonderSwan) Yes Bandai WonderSwan/WonderSwan Color/SwanCrystal (NEC V30 - x86_16) Yes NASM technically NASM technically
Hu-Go!/higan (bsnes - PC Engine/SuperGrafx)/Mednafen (PC Engine/SuperGrafx) Yes NEC TurboGrafx-16 Entertainment SuperSystem/SuperGrafx/TurboExpress/PC Engine (Hudson Soft HuC6280) No N/A N/A cc65 and WLA_DX technically
iDeaS (NDS) No Nintendo DS/DSi/DSi XL (ARM946E-S and ARM7TDMI) Optional GCC/GNU Binutils, Clang/LLVM/lld (arm-unknown-eabi) and devkitPro (devkitARM) Port of a fully free OS as firmware GCC/GNU Binutils, Clang/LLVM/lld (arm-unknown-eabi and arm-unknown-linux-gnueabi) and devkitPro (devkitARM) A GNU/Linux distribution is available but nobody checked it for FSDG compliance. Support for the DS also doesn't seem to be present upstream Linux, and it might need some dedicated distribution or builds anyway as the DS doesn't have much RAM and probably lacks an MMU.
JAVATARI/Stella/z26 Yes Atari 2600 (MOS Technology 6507) No N/A N/A DASM technically
JPCSP/Yaupspe Yes Sony Playstation Portable (PSP) (MIPS R4000) Yes? GCC/GNU Binutils, Clang/LLVM/lld (mips64-unknown-elf) and devkitPro (devkitPSP) Port of a fully free OS as firmware GCC/GNU Binutils, Clang/LLVM/lld (mips64-unknown-elf, mips64-unknown-linux-gnu and mips64-unknown-kfreebsd-gnu) and devkitPro (devkitPSP)

ucLinux was ported to the PSP, but even if some support mips64 in some FSDG distributions, there are no FSDG distributions that support MMU-less targets, and support for the PSP is probably not in upstream Linux anyway. And people need to look if it's possible to boot that without shipping / downloading nonfree software anyway.

Kega Fusion (Sega Genesis - i686 software support only) No Sega Genesis/Mega Drive (Motorola 68000 - MC68HC000) + SVP chip No N/A N/A GCC/GNU Binutils (m68k-unknown-elf) and WLA_DX technically
Kega Fusion (Sega CD - i686 software support only) No Sega CD/Mega-CD (Motorola 68000 - MC68HC000) Yes GCC/GNU Binutils (m68k-unknown-elf) and WLA_DX technically GCC/GNU Binutils (m68k-unknown-elf) and WLA_DX technically
Kega Fusion (Sega 32X - i686 software support only) No Sega 32X (SH2) Optional GCC/GNU Binutils (sh-unknown-elf) technically GCC/GNU Binutils (sh-unknown-elf) technically
Lxdream/redream Yes Sega Dreamcast (DC) (SH4) Yes GCC/GNU Binutils (sh-unknown-elf) Dreamshell[10] (deblobbing needed) or port of fully free KallistiOS-like[11] (or any) version as firmware GCC/GNU Binutils (sh-unknown-elf and sh-unknown-linux-gnu) There is the dclinux project to port Linux on the dreamcast. But even if there is some support for the dreamcast in upstream linux (with CONFIG_SH_DREAMCAST for instance) there are no FSDG compliant distribution that support SH4. There might be other project as well like KallistiOS but they need to be checked for FSDG compliance.
MAME (and MESS merged) Yes Multiple hardware (arcades, game consoles and computer systems) Most hardware do but uzebox doesn't. I managed to build DrMario from Uzebox. It requires avr-gcc and avr-libc. Beside that there are also generic purpose compilers like gcc / llvm that could work for some computers. There are also special compilers like cc65, DASM, devkitPro and WLA_DX. We have DrMario from uzebox that displays something on the screen. avr-gcc and avr-libc can build DrMario. Some genral purpose compilers might work for some of the targets like GCC/GNU Binutils, Clang/LLVM/lld (multiarch), and some have specific compilers: cc65, DASM, devkitPro and WLA_DX MAME suports some MIPS computers and the r3000 CPU is already supported by Linux (with CONFIG_CPU_R3000). However the R3000 seems to lack MMU support and we have no FSDG compliant distributions that support MMU-less CPUs.

For the emulation of x86 computers, running mame requires nonfree BIOSes:
$ mame ct486 -ramsize 64M
chips_1.ami NOT FOUND (tried in ct486)
1503033.bin NOT FOUND (tried in at_keybc ct486)
natural.bin NOT FOUND (tried in kb_ms_natural ct486)
et4000.bin NOT FOUND (tried in et4000 ct486)
Fatal error: Required files are missing, the machine cannot be run.
But in theory we can still run free games since MAME supports a subset of uzebox games. There is a tutorial on how to launch and/or convert uzebox games to be used with MAME but not all works. First build a game: $ git clone https://github.com/Uzebox/uzebox
$ cd uzebox
$ git checkout e05013c91a77dc32a541f692c82d91250035d66f
$ make -C tools/packrom/
$ export PATH=$PATH:$PWD/tools/packrom/
$ cd demos/DrMario/default
$ make
$ objcopy -I ihex DrMario.hex -O binary dr-mario.bin
Then get where the rom directory is located:
$ mame -showconfig | grep '^rompath'
rompath $HOME/mame/roms
Then install the dr-mario.bin in a uzeboz directory in the rom directory:
$ mkdir -p $HOME/mame/roms/uzebox
$ mv dr-mario.bin $HOME/mame/roms/uzebox/
And we finally can run drmario like that:
$ mame uzebox drmario
dr-mario.bin WRONG LENGTH (expected: 0000dcaa found: 0000ce5a)
dr-mario.bin WRONG CHECKSUMS:

   EXPECTED: CRC(8144b271) SHA1(d4bb13f54b756e2ba9e57075aae473b72397f48f)
FOUND: CRC(c0130ccf) SHA1(8bca126a623c19033eace513ae547a0560e9f558)

WARNING: the machine might not run correctly.
Average speed: 41.13% (3 seconds)
I've then no idea how to play that game, or if it works fine, but at least it shows somehting on the screen. So in the worst case users could "play" the game of debugging all that and fixing it. Or trying to write games (starting from DrMario) that actually work. DrMario is GPLv3+.

Mednafen (Neo Geo Pocket) Yes SNK Neo Geo Pocket/Neo Geo Pocket Color (Toshiba TLCS900H) Yes tlcs900archc technically tlcs900archc technically
Mednafen (PC Engine CD) Yes NEC TurboGrafx-CD/TurboDuo/PC Engine CD (Hudson Soft HuC6280) Yes cc65 and WLA_DX technically cc65 and WLA_DX technically
Mednafen (PC-FX) Yes NEC PC-FX (NEC V810) Yes GCC/GNU Binutils (v850-unknown-elf) or gccVB (GCC v2.95 + v810 patch) or VBDE (needs ported to free OS) technically GCC/GNU Binutils (v850-unknown-elf) or gccVB (GCC v2.95 + v810 patch) or VBDE (needs ported to free OS) technically
Mednafen (PlayStation) Yes Sony PlayStation (PS/PSX/PS1/PSone) (MIPS R3000A-family LSI LR333x0) Yes GCC/GNU Binutils and Clang/LLVM/lld (mips-unknown-elf) technically GCC/GNU Binutils and Clang/LLVM/lld (mips-unknown-elf) technically
Mednafen (Saturn - 64bit software support only) Yes Sega Saturn (SH2) Yes GCC/GNU Binutils (sh-unknown-elf) technically GCC/GNU Binutils (sh-unknown-elf) technically
Mednafen (Virtual Boy) Yes Nintendo Virtual Boy (NEC V810) No N/A N/A GCC/GNU Binutils (v850-unknown-elf) or gccVB (GCC v2.95 + v810 patch) or VBDE (needs ported to free OS) technically
MEKA No contains License SG-1000/SG-1000 II/SC-3000/SF-7000/Sega Mark III/Master System (SMS)/Game Gear/ColecoVision/Othello Multivision (Zilog Z80) No N/A N/A WLA_DX technically
Nucleus/RPCS3 (PS3) Yes Sony PlayStation 3 (PS3) (Cell Broadband Engine PPC64) Yes? GCC/GNU Binutils, Clang/LLVM/lld (ppc64-unknown-elf and spu-unknown-elf) and devkitPro (devkitPPC) Port of a fully free FreeBSD-like (or any) as firmware GCC/GNU Binutils, Clang/LLVM/lld (ppc64-unknown-elf, ppc64-unknown-linux-gnu and spu-unknown-elf) and devkitPro (devkitPPC) Linux has support for the PS3 with CONFIG_PPC_PS3 for instance, but it requires a GNU/Linux distribution that works in big endian as CONFIG_PPC_PS3 has "depends on PPC64 && PPC_BOOK3S && CPU_BIG_ENDIAN". The list of distributions known to work doesn't have any FSDG compliant distribution in it. Guix has experimental support for powerpc 64bit little endian, so that won't work. 32bit big endian distributions may be able to work still, but Guix supports powerpc 32bit big endian only for cross compilation and building a bootable a rootfs will probably not work.
openMSX Yes MSX/MSX2/MSX2+/MSX TurboR (Zilog Z80) Yes WLA_DX C-BIOS WLA_DX technically
PCSX/PCSX-df/PCSX-Reloaded Yes Sony PlayStation (PS/PSX/PS1/PSone) (MIPS R3000A-family LSI LR333x0) Optional GCC/GNU Binutils and Clang/LLVM/lld (mips-unknown-elf) technically GCC/GNU Binutils and Clang/LLVM/lld (mips-unknown-elf) technically
PCSX2 (i686 software support only) Depends OpenGL 3.3 (Mesa 10.0 for i965{Intel video} and Mesa 10.1 for nouveau{nVidia video}), and needs a patch to remove zzogl and zerogs plugins that depends for nonfree nvidia-cg-toolkit support Sony PlayStation 2 (PS2) (Emotion Engine MIPS64) Yes GCC/GNU Binutils and Clang/LLVM/lld (mips64-unknown-elf) Port of a fully free OS as firmware GCC/GNU Binutils and Clang/LLVM/lld (mips64-unknown-elf, mips64-unknown-linux-gnu and mips64-unknowm-kfreebsd-gnu) According to Wikipedia, the playstation 2 has a 64bit little endian CPU and we don't have FSDG distributions supporting that anymore. Parabola has discontinued support for it and Guix only has cross compilation for it so making a rootfs will probably not work. I'm unsure if the support for the Playstation 2 has been upstreamed in Linux. Finally it'd also need a bootloader to boot and I've not checked the status or if the ones available are FSDG compliant.
Play! Depends OpenGL 3.3 (Mesa 10.0 for i965{Intel video} and Mesa 10.1 for nouveau{nVidia video}) Sony PlayStation 2 (PS2) (Emotion Engine MIPS64) Yes GCC/GNU Binutils and Clang/LLVM/lld (mips64-unknown-elf) Port of a fully free OS as firmware GCC/GNU Binutils and Clang/LLVM/lld (mips64-unknown-elf, mips64-unknown-linux-gnu and mips64-unknowm-kfreebsd-gnu) According to Wikipedia, the playstation 2 has a 64bit little endian CPU and we don't have FSDG distributions supporting that anymore. Parabola has discontinued support for it and Guix only has cross compilation for it so making a rootfs will probably not work. I'm unsure if the support for the Playstation 2 has been upstreamed in Linux. Finally it'd also need a bootloader to boot and I've not checked the status or if the ones available are FSDG compliant.
PPSSPP Yes[12][13][14] Sony Playstation Portable (PSP) (MIPS R4000) No N/A N/A GCC/GNU Binutils, Clang/LLVM/lld (mips64-unknown-elf, mips64-unknown-linux-gnu and mips64-unknown-kfreebsd-gnu) and devkitPro (devkitPSP) ucLinux was ported to the PSP, but even if some support mips64 in some FSDG distributions, there are no FSDG distributions that support MMU-less targets, and support for the PSP is probably not in upstream Linux anyway. And people need to look if it's possible to boot that without shipping / downloading nonfree software anyway.
Raine No Multiple hardware (arcades) Yes (most hardware) GCC/GNU Binutils, Clang/LLVM/lld (multiarch), cc65, DASM, devkitPro and WLA_DX technically GCC/GNU Binutils, Clang/LLVM/lld (multiarch), cc65, DASM, devkitPro and WLA_DX technically
Reicast Yes Sega Dreamcast (DC)/ Sega NAOMI (SH4) Optional GCC/GNU Binutils (sh-unknown-elf) built-in free ReiOS uses as default to run the emulator, Dreamshell[15] (deblobbing needed) or port of fully free KallistiOS-like[16] (or any) version as firmware GCC/GNU Binutils (sh-unknown-elf and sh-unknown-linux-gnu) There is the dclinux project to port Linux on the dreamcast. But even if there is some support for the dreamcast in upstream linux (with CONFIG_SH_DREAMCAST for instance) there are no FSDG compliant distribution that support SH4. There might be other project as well like KallistiOS but they need to be checked for FSDG compliance.
Retroarch Yes: packaged in FSDG distros (Guix, Parabola) Emulates many consoles or games engines through various backends. According to retroarch website, "Some cores, like 2048, do not require any content in order to work.". No N/A N/A Yes According to retroarch website, "Some cores, like 2048, do not require any content in order to work." so that 2048 code is built inside FSDG distros. Yes According to retroarch website, "Some cores, like 2048, do not require any content in order to work." so we have FSDG compliant games at least.
RPCS3 (PS Vita) Yes Sony PlayStation Vita (ARM Cortex-A9 MPCore) Yes? GCC/GNU Binutils, Clang/LLVM/lld (arm-unknown-eabi) and devkitPro (devkitARM) Port of a fully free OS as firmware GCC/GNU Binutils, Clang/LLVM/lld (arm-unknown-eabi) and devkitPro (devkitARM) technically
Snes9x Noncormercial Software Super Nintendo Entertainment System (Super NES/SNES)/Super Family Computer (Super Famicom/SFC)/Super Comboy (65c816 Ricoh 5A22 - based WDC 65C816) No N/A N/A WLA_DX technically
Supermodel 3 Yes Sega Model 3 (arcarde) (IBM PowerPC 603e) No N/A N/A GCC/GNU Binutils, Clang/LLVM/lld (powerpc-unknown-elf) and devkitPro (devkitPPC) technically
UAE Yes Commodore Amiga (MOS Technology 6502) No N/A N/A cc65, DASM and WLA_DX technically
VisualBoyAdvance (GB/GBC) Partially free (2xSaImmx.asm only allows for *non commercial* use). It could be free without it Nintendo Game Boy/Game Boy Pocket/Game Boy Light/Game Boy Color (Sharp LR35902 - Custom Zilog Z80) No N/A N/A WLA_DX technically
VisualBoyAdvance (GBA) Partially free (2xSaImmx.asm only allows for *non commercial* use). It could be free without it Nintendo Game Boy Advance (GBA) (ARM7TDMI) Optional GCC/GNU Binutils, Clang/LLVM/lld (arm-unknown-eabi) and devkitPro (devkitARM) technically GCC/GNU Binutils, Clang/LLVM/lld (arm-unknown-eabi) and devkitPro (devkitARM) Yes but unknown if nonfree dependencies
Virtual Jaguar Yes Atari Jaguar (Motorola 68000 - MC68HC000) No N/A N/A GCC/GNU Binutils (m68k-unknown-elf) and WLA_DX technically
VICE Yes Commodore C64/C64DTV/C128/VIC20/PET/PLUS4/CBM-II (MOS Technology 6502) No N/A N/A cc65, DASM and WLA_DX technically
XQEMU Needs Nonfree MCPX binary blob Microsoft Xbox (Intel Pentium III "Coppermine-based" - i686) Yes GCC/GNU Binutils and Clang/LLVM/lld (i686-unknown-elf) Port of fully free ReactOS-like (or any) version as firmware GCC/GNU Binutils and Clang/LLVM/lld (i686-unknown-elf, i686-unknown-linux-gnu and i686-unknown-kfreebsd-gnu) Some FSDG distributions still support i686. Since the xbox has 64M of RAM only, probably only LibreCMC will work, and since there are no i686 images, you will need to compile that yourself from the source code. Fortunately it is relaitvely easy to do. That said you will need a way to boot that distribution. There are various ways to install distributions on the Xbox. The Software Method depends on nonfree software. But you can use the The onboard TSOP method instead. It requires cromewell and raincoat and boot look like free software. Archive.org has some infos about cromewell source code and raincoat source code but someone needs to somehow get the source, build it and so on, and see if LibreCMC can somehow build Linux for the xbox or see if patches are needed because there is still some differences with regular PCs.
Yabause Yes Sega Saturn (SH2) Optional GCC/GNU Binutils (sh-unknown-elf) technically GCC/GNU Binutils (sh-unknown-elf) technically
ZSNES (i686 software support only) Yes Super Nintendo Entertainment System (Super NES/SNES)/Super Family Computer (Super Famicom/SFC)/Super Comboy (65c816 Ricoh 5A22 - based WDC 65C816) No N/A N/A WLA_DX technically

6 List of Emulators which run only on Wine

Name Free Emulates Requires firmware Free dev tools for firmware Free firmware Free dev tools for games/OS Free games/OS
1964 Needs Visual Studio to compile this Software Nintendo 64 (N64) (NEC VR4300) No N/A N/A GCC/GNU Binutils and Clang/LLVM/lld (mips64-unknown-elf) technically
Altirra Needs Visual Studio to compile this Software Atari 400/800/400XL/600XL/800XL/130XE/5200 (MOS Technology 6502B and MOS Technology 6502C) No N/A N/A cc65, DASM and WLA_DX technically
cxbx Yes Microsoft Xbox (Intel Pentium III "Coppermine-based" - i686) Yes? GCC/GNU Binutils and Clang/LLVM/lld (i686-unknown-elf) Port of fully free ReactOS-like (or any) version as firmware GCC/GNU Binutils and Clang/LLVM/lld (i686-unknown-elf, i686-unknown-linux-gnu and i686-unknown-kfreebsd-gnu) Some FSDG distributions still support i686. Since the xbox has 64M of RAM only, probably only LibreCMC will work, and since there are no i686 images, you will need to compile that yourself from the source code. Fortunately it is relaitvely easy to do. That said you will need a way to boot that distribution. There are various ways to install distributions on the Xbox. The Software Method depends on nonfree software. But you can use the The onboard TSOP method instead. It requires cromewell and raincoat and boot look like free software. Archive.org has some infos about cromewell source code and raincoat source code but someone needs to somehow get the source, build it and so on, and see if LibreCMC can somehow build Linux for the xbox or see if patches are needed because there is still some differences with regular PCs.
DaedalusX64 Yes Nintendo 64 (N64) (NEC VR4300) No N/A N/A GCC/GNU Binutils and Clang/LLVM/lld (mips64-unknown-elf) technically
Dxbx/Xenoborg Needs Visual Studio to compile this Software Microsoft Xbox (Intel Pentium III "Coppermine-based - i686) Yes? GCC/GNU Binutils and Clang/LLVM/lld (i686-unknown-elf) Port of fully free ReactOS-like (or any) version as firmware GCC/GNU Binutils and Clang/LLVM/lld (i686-unknown-elf, i686-unknown-linux-gnu and i686-unknown-kfreebsd-gnu) Some FSDG distributions still support i686. Since the xbox has 64M of RAM only, probably only LibreCMC will work, and since there are no i686 images, you will need to compile that yourself from the source code. Fortunately it is relaitvely easy to do. That said you will need a way to boot that distribution. There are various ways to install distributions on the Xbox. The Software Method depends on nonfree software. But you can use the The onboard TSOP method instead. It requires cromewell and raincoat and boot look like free software. Archive.org has some infos about cromewell source code and raincoat source code but someone needs to somehow get the source, build it and so on, and see if LibreCMC can somehow build Linux for the xbox or see if patches are needed because there is still some differences with regular PCs.
EMU7800/ProSystem Emulator Needs Visual Studio to compile this Software Atari 7800 (MOS Technology 6502C) No N/A N/A cc65, DASM and WLA_DX technically
Genesis Plus Yes Sega Genesis/Mega Drive (Motorola 68000 - MC68HC000) No N/A N/A GCC/GNU Binutils (m68k-unknown-elf) and WLA_DX technically
MFZPSP/Sam PSP/Soywiz PSP Emu Yes, Needs Digital Mars D(The backend is nonfree, use GDC or LDC instead) to compile Soywiz PSP Emu Sony Playstation Portable (PSP) (MIPS R4000) Yes? GCC/GNU Binutils and Clang/LLVM/lld (mips64-unknown-elf) Port of a fully free OS as firmware GCC/GNU Binutils and Clang/LLVM/lld (mips64-unknown-elf) technically
Nester Needs Visual Studio to compile this Software Nintendo Entertainment System (NES)/Family Computer (Famicom/FC)/Hyundai Comboy (Ricoh RP2A03 - NTSC/Ricoh RP2A07 - PAL/Ricoh RP2CO5/MOS Technology 6502) No N/A N/A cc65, DASM and WLA_DX There is Thwaite but it needs to be checked for FSDG compliance.
NeutrinoSX2 Yes Sony PlayStation 2 (PS2) (Emotion Engine MIPS64) Yes GCC/GNU Binutils and Clang/LLVM/lld (mips64-unknown-elf) Port of a fully free OS as firmware GCC/GNU Binutils and Clang/LLVM/lld (mips64-unknown-elf, mips64-unknown-linux-gnu and mips64-unknown-kfreebsd-gnu) According to Wikipedia, the playstation 2 has a 64bit little endian CPU and we don't have FSDG distributions supporting that anymore. Parabola has discontinued support for it and Guix only has cross compilation for it so making a rootfs will probably not work. I'm unsure if the support for the Playstation 2 has been upstreamed in Linux. Finally it'd also need a bootloader to boot and I've not checked the status or if the ones available are FSDG compliant.
Nintendulator Needs Visual Studio to compile this Software Nintendo Entertainment System (NES)/Family Computer (Famicom/FC)/Hyundai Comboy (Ricoh RP2A03 - NTSC/Ricoh RP2A07 - PAL/Ricoh RP2CO5/MOS Technology 6502) No N/A N/A cc65, DASM and WLA_DX There is Thwaite but it needs to be checked for FSDG compliance.
Nintendulator (FDS) Needs Visual Studio to compile this Software Family Computer Disk System (Nintendo) (FDS/FCD) (Ricoh RP2A03 - NTSC/Ricoh RP2A07 - PAL/Ricoh RP2CO5/MOS Technology 6502) Yes cc65, DASM and WLA_DX technically cc65, DASM and WLA_DX technically
nullDC Needs Visual Studio to compile this Software Sega Dreamcast (DC)/ Sega NAOMI (SH4) Yes GCC/GNU Binutils (sh-unknown-elf) Port of fully free Dreamshell[17]/KallistiOS-like[18] (or any) version as firmware GCC/GNU Binutils (sh-unknown-elf and sh-unknown-linux-gnu) There is the dclinux project to port Linux on the dreamcast. But even if there is some support for the dreamcast in upstream linux (with CONFIG_SH_DREAMCAST for instance) there are no FSDG compliant distribution that support SH4. There might be other project as well like KallistiOS but they need to be checked for FSDG compliance.
Ootake Needs Visual Studio to compile this Software NEC TurboGrafx-16 Entertainment SuperSystem/SuperGrafx/TurboExpress/PC Engine (Hudson Soft HuC6280) No N/A N/A cc65 and WLA_DX technically
Ootake (PC Engine CD) Needs Visual Studio to compile this Software NEC TurboGrafx-CD/TurboDuo/PC Engine CD (Hudson Soft HuC6280) Yes cc65 and WLA_DX technically cc65 and WLA_DX technically
PC Atari Emulator (DOSBox and WINE) Needs Borland to compile this Software Atari 2600 (MOS Technology 6507) No N/A N/A DASM technically
Potemkin/PSP Player Needs Visual Studio to compile this Software Sony Playstation Portable (PSP) (MIPS R4000) Yes? GCC/GNU Binutils, Clang/LLVM/lld (mips64-unknown-elf) and devkitPro (devkitPSP) Port of a fully free OS as firmware GCC/GNU Binutils, Clang/LLVM/lld (mips64-unknown-elf, mips64-unknown-linux-gnu and mips64-unknown-kfreebsd-gnu) and devkitPro (devkitPSP) technically
Project64 Noncormercial and/or Nonfree Software Nintendo 64 (N64) (NEC VR4300) No N/A N/A GCC/GNU Binutils and Clang/LLVM/lld (mips64-unknown-elf) technically
VirtuaNES Needs Borland to compile this Software Nintendo Entertainment System (NES)/Family Computer (Famicom/FC)/Hyundai Comboy (Ricoh RP2A03 - NTSC/Ricoh RP2A07 - PAL/Ricoh RP2CO5/MOS Technology 6502) No N/A N/A cc65, DASM and WLA_DX There is Thwaite but it needs to be checked for FSDG compliance.
Xenia Needs Visual Studio to compile this Software Microsoft Xbox 360 (IBM PowerPC "Xenon" PPC64) Yes? GCC/GNU Binutils, Clang/LLVM/lld (powerpc64-unknown-elf and spu-unknown-elf) and devkitPro (devkitPPC) Port of fully free ReactOS-like (or any) version as firmware GCC/GNU Binutils, Clang/LLVM/lld (powerpc64-unknown-elf, powerpc64-unknown-linux-gnu and spu-unknown-elf) and devkitPro (devkitPPC) Upstream Linux has no support for the for the Xbox 360, but the free60 project has information and git repositories that are needed to run GNU/Linux on the Xbox 360. The issue is also that the CPU seems to be big endian. Guix has experimental support for powerpc 64bit little endian, so that won't work. 32bit big endian distributions may be able to work still, but Guix supports powerpc 32bit big endian only for cross compilation and building a bootable a rootfs will probably not work. And we would probably need kernel patches or having someone to upstream support for the Xbox 360 and also check if the way to boot GNU/Linux doesn't require to distribute or download nonfree software.

7 List of Hardware Without Emulator

Name Free Emulates Requires firmware Free dev tools for firmware Free firmware Free dev tools for games/OS Free games/OS
N/A N/A Microsoft Xbox One (AMD APU x86_64) N/A It doesn't seem to be able to run GNU/Linux yet It doesn't seem to be able to run GNU/Linux yet It doesn't seem to be able to run GNU/Linux yet It doesn't seem to be able to run GNU/Linux yet
N/A N/A Sega VMU (Sanyo LC86K87 - custom Sanyo LC8670 "Potato", similar to LC86104C/108C - 8bit) N/A N/A N/A No No
N/A N/A Sony PlayStation 4 (PS4) (AMD APU x86_64) N/A GCC/GNU Binutils and Clang/LLVM/lld (x86_64-unknown-elf) Port of a fully free FreeBSD-like (or any) as firmware GCC/GNU Binutils and Clang/LLVM/lld (x86_64-unknown-freebsd, x86_64-unknown-elf, x86_64-unknown-linux-gnu and x86_64-unknown-kfreebsd-gnu) There is some information about installing GNU/Linux distributions on the Playstation 4, but it seems to requires (1) a custom kernel and (2) some exploit. So we'd need to review the exploits and make sure they are free software and make linux-libre versions of these kernel or find information about the status of the PS4 in upstream Linux.
N/A N/A Nintendo switch N/A N/A N/A Yes There is an u-boot fork and it also has linux fork. Here the amount of work to integrate it in an FSDG distro looks relatively small: one can upstream support for the switch in upstream u-boot and Linux and also package fuseegelee (the free software exploit) and tegra tools and have it supported. It will however require a computer to run the exploit through USB at every boot.

8 List of Compatibility Layers

Name Free Emulates/API Free runtime Free Dev Tools Free programs TODO (before inclusion in FSDG distributions)
Anbox The host tools are probably free. Android: Replicant 11 can be built and it can run the Replicant 11 applications. Depends on devices with nonfree bootloaders. Requires an adapted Android distribution, and so far only a modified Android distribution (LineageOS? AOSP?) exist. Android distributions usually have nonfree software in Linux and at least in various repositories that are useless for Anbox. Replicant 6.0 and 11 can be used to build some Android applications. Replicant also has an SDK for Android 4.2 and PureOS 10 can be used to build an Android hello world. All that is untested in Anbox. Replicant 6.0 and 11 can be used to build some Android applications. Replicant also has an SDK for Android 4.2 and PureOS 10 can be used to build an Android hello world. All that is untested in Anbox.
  • Make it use an FSDG compliant Android distribution
  • Review the host tools
  • Patch and/or package it in some FSDG distribution
  • Test fully free packages from Replicant or built with 100% free toolchains on FSDG distros to validate that it works
Darling Yes but it depends on nonfree Xcode. There is some free software Darwin source code, but there is no more Darwin distribution (the Apple source code releases are probably incomplete). Darling claims it's fully free, has about 130 repositories, probably fully free (no hardware related code, mainly common projects + apple code often under APSL 2.0) but it depends on nonfree Xcode Some free toolchain exist: Clang/LLVM/lld and GCC/GNU Binutils (powerpc-unknown-darwin*, powerpc64-unknown-darwin*, i686-unknown-darwin*, x86_64-unknown-darwin*, armv7-unknown-darwin* and aarch64*-unknown-darwin*) but but they seem to require Xcode to cross build them somehow. Maybe some free binary toolchain could be bootstraped from xcode and the binaries could be published to be able to build free toolchains in darling at least. Many free toolchain also require to run on a nonfree target OS (mac OSX / iOS) to link to the host libraries. Yes but they depend on nonfree Xcode to be built.
  • Build a free toolchain, ideally a cross toolchain
  • Review and package the source code in some FSDG distribution
  • Test fully free applications (like a hello world) built from FSDG distributions inside Darling to validate that it works.
DOSBox Yes[19]

FreeDOS for x86_16 and x86_32 requires either a nonfree compilers or to use a patch to build with free compilers. Freedos is also probably not (yet) FSDG compliant (due to bundled in utilities).

Yes DOSBox has applications like COMMAND.COM. They are provided in Parabola's dosbox package. The Parabola package has a COMMAND.COM application. So it needed to be built somehow with free tools. There may also be other standalone toolchains that weren't reviewed: GCC/GNU Binutils/DJGPP (i386-pc-msdos* and i586-pc-msdosdjgpp) and NASM Already OK
DOSEMU Yes

FreeDOS for x86_16 and x86_32 requires either a nonfree compilers or to use a patch to build with free compilers. Freedos is also probably not (yet) FSDG compliant (due to bundled in utilities).

needs FreeDOS (it can't be compiled with free software, needs a patch to build with free software compilation)

NASM Yes
  • Package a free compiler in an FSDG distribution
  • Build freedos packages with it in an FSDG distribution
  • Test the fully free toolchain to validate that we really have free applications
libhybris Yes Android userspace drivers linked against Bionic (multiarch). Replicant 11 can build these drivers. Untested Probably fully free software Replicant, Android NDK / SDK as packaged in GNU/Linux distributions. Result untested with libhybris.

Old versions of libsamsung-ril can be run with libhybris. Newer versions are not yet fully supported by Replicant 11 and running it though libhybris is untested with recent FSDG GNU/Linux distributions.

  • Build libsamsung-ipc and libsamsung-ril within replicant 11 so that they are linked to Android bionic libc
  • Package libhybris in FSDG distributions
  • Build the Replicant 11 kernel for GNU/Linux
  • Test libhybris under Parabola on a Galaxy SIII (GT-I9300)
edk2-ovmf + qemu Yes: Packaged in FSDG distributions(edk2-ovmf in Parabola) Libreboot + Tianocore may be possible but no one tried Yes: edk2-ovmf is the runtime The Parabola grub package is also built for UEFI Example: grub package in Parabola Already OK
SeaBIOS + qemu Yes: Packaged in FSDG distributions Libreboot + SeaBIOS Yes: SeaBIOS is the runtime The Parabola grub package is also built for BIOS Example: grub package in Parabola Already OK

UEFI applications and drivers.

Has GPLv2 copying, probably need clarification about the license in the README as well.

Tianocore is probably fully free and already packaged by FSDG distros (in the edk2-armvirt, edk2-shell and edk2-ovmf package in Parabola x86_64)

Probably fully free software. Will be 100% free software if the license gets clarified.

It's possible to build UEFI applications with GCC: The Parabola edk2 source package (that comes from Arch Linux) does that.

While free software UEFI applications exists, this is usually for running what were option roms for BIOSes. I'm not sure if we have free ones or not. Maybe ipxe can be bundled inside an UEFI? Several FSDG distros (Guix, Parabola) already have ipxe packages.

  • Ask for license clarification (for instance by sending a patch to clarify the license)
  • Build the UEFI toolchain
  • Build and test UEFI applications
  • Document the process somehow and package uefireverse
Waydroid The host tools are free but they downloads and update an Android image based on LineageOS that might have nonfree software inside its corresponding source code. Android: Replicant 11 can be built and it can run the Replicant 11 applications. Depends on devices with nonfree bootloaders. Requires an adapted Android distribution, and so far only a modified LineageOS exist. LineageOS has nonfree software in Linux and at least in various repositories that are useless for Waydroid. Replicant 6.0 and 11 can be used to build some Android applications. Replicant also has an SDK for Android 4.2 and PureOS 10 can be used to build an Android hello world. All that is untested in Anbox. Replicant 6.0 and 11 can be used to build some Android applications. Replicant also has an SDK for Android 4.2 and PureOS 10 can be used to build an Android hello world. All that is untested in Anbox.
  • Make it use an FSDG compliant Android distribution
  • Review the host tools
  • Patch it at least to remove the automatic download of LineageOS
  • Package it in some FSDG distribution
  • Test fully free packages from Replicant or built with 100% free toolchains on FSDG distros to validate that it works
Wine Yes[20] FreeDOS is fully free and supports x86_16 and x86_32. ReactOS exist for x86_32, x86_64 and armv7 but it's not FSDG compliant. Provided by Wine GCC/GNU Binutils/DJGPP/Mingw-w64 (i386-pc-msdos*, i586-pc-msdosdjgpp, i686-pc-mingw32, x86_64-pc-mingw64 and arm*-unknown-mingw32*) and NASM FSDG compliant programs: hello, xz: "guix build -t x86_64-w64-mingw32 hello". They were tested with (Parabola) wine under Parabola x86_64. Already OK

9 See also