A native Linux port of EmuDOS — a good-looking, Boxer-style DOS gaming frontend. Drop your games in and they appear as boxes on a shelf: art downloaded automatically, sensible settings applied for you, and Roland MT-32 music (with a working LCD) when you supply the ROMs.
The original is Windows/WPF/.NET 10; this port is rebuilt on .NET 10 + Avalonia. The goal is a 1:1 clone — aesthetically and functionally identical to the Windows app, with only the platform plumbing swapped underneath:
| Windows | Linux |
|---|---|
| WPF | Avalonia (X11/Skia) |
| Direct3D 11 (3dfx render + librashader) | OpenGL / EGL |
| WASAPI / NAudio | SDL3 audio |
| XInput | SDL3 gamepad |
| WebView2 PDF viewer | system PDF handler |
LoadLibrary core loading |
dlopen |
Emulation is handled by the DOSBox Pure libretro core, downloaded at runtime — no core is bundled.
Legal notice: This project is a frontend only. It does not include, distribute, or facilitate the acquisition of any copyrighted software, game files, BIOS images, or Roland firmware ROMs. You are solely responsible for ensuring you have the legal right to use any software you load.
- Bookshelf library — your games as box art on a shelf; hover a box to preview its gameplay video
in a retro monitor, and press Ctrl+F to search and filter. Drop a folder,
.zip, or CD image to import. - 2D & 3D box art — downloaded automatically (ScreenScraper, with a SteamGridDB fallback); choose 2D or 3D per game or library-wide, or drop in your own cover. Logos, marquees, maps and screenshots download from the Manage window's Extras tab.
- Just-works settings — a curated catalog (seeded from eXoDOS) applies known-good DOSBox options on import; everything is overridable per game and survives updates.
- Discs & Windows — multi-disc games, disc swapping, and installing/booting a full Windows 9x.
- Roland MT-32 — drop the ROMs in and MT-32 games use them, with an on-screen dot-matrix LCD.
- Save states, screenshots/recording, mouse lock, and a smart launcher that picks the right program.
- Cloud save sync — back up your save states and notes to your own private GitHub repo, with optional passphrase encryption, synced automatically at launch (see Cloud Sync).
- CRT shaders — download a CRT-focused slice of the libretro slang shader collection (CRT, scanlines, monochrome monitors); GPU-accelerated, switched live in-game and remembered per game, and captured in screenshots and recordings.
- Hardware 3dfx — Voodoo/Glide games render through hardware OpenGL for a sharp, accelerated picture.
- A modern 64-bit Linux desktop (X11 or Wayland)
- Runtime libraries (most desktops already have these; the
.debdeclares them):libsdl3-0(audio + controllers),libegl1/libgl1+ Mesa drivers (game rendering),ffmpeg(recording encodes),libx11-6+libfontconfig1(UI). Recommended:libvlc5+vlc-plugin-base+vlc-plugin-ffmpeg(the game-card video snaps). - The DOSBox Pure core
.so(fetched on demand — Preferences → Downloads) - Roland MT-32 / CM-32L ROMs (optional; supply your own — see MT-32)
The published packages bundle the .NET 10 runtime (self-contained), so no separate .NET install is needed.
- Grab the latest build from the Releases page:
emudos_<ver>_amd64.deb— system install (emudoson PATH, desktop entry).EmuDOS-<ver>-linux-x64.tar.gz— self-contained; extract anywhere writable and run./EmuDOS.- Arch users:
emudos-binon the AUR.
- On first launch, open Preferences → Downloads and get the DOSBox Pure core (fetched on demand from the Linux libretro build servers, not bundled).
- Drag a game folder,
.zip, or disc image onto the window to add it.
The core is downloaded as dosbox_pure_libretro.so from
buildbot.libretro.com/nightly/linux/x86_64 — the same core as upstream, as .so instead of .dll.
EmuDOS plays MT-32 music with its own synth — a small library built from
munt and shipped with the app (libemudos_mt32.so). It needs the
Roland MT-32 (or CM-32L) ROMs, which are Roland's copyrighted firmware — we can't and don't
distribute them. Supply your own by dragging the .rom files (or a folder containing them) onto
EmuDOS; the Downloads tab shows whether they're detected.
Sign in with your GitHub account (Preferences → Downloads — device flow, no password stored) and
your save states, in-game saves, and notes sync through a private repository on your account
(emudos-saves by default).
How it works (click to expand)
Saves pull automatically before a game launches and upload when the session ends (configurable: on game close / every 15 minutes / manual), or sync everything on demand.
- Cross-platform — the same repository serves the Windows app and this port: save on one machine, pick up on the other. Saves are keyed by game, so both installs must import the same game.
- Per-machine library snapshot — the library database is backed up per machine
(
db/library.<hostname>.db.gz) rather than to one shared file, so two machines sharing the repo can never overwrite each other's library. Per-game save states are additive and never overwrite an existing cloud copy; in-game saves follow a newest-wins, no-clobber rule. - Optional encryption — AES-256-GCM with a passphrase you choose; the same passphrase is required on every PC that shares the repository.
Sync activity is logged to the data folder's Logs/.
Follows the XDG Base Directory spec:
~/.config/EmuDOS/ config.json
~/.local/share/EmuDOS/ (or your custom data folder)
library.db
Cores/ (DOSBox Pure .so — downloaded in-app)
Gameboxes/ (one folder per imported game: content, saves, notes, art)
Shaders/ (CRT slang preset pack — downloaded in-app; librashader runtime ships bundled)
System/ (Roland MT-32 / CM-32L ROMs)
Screenshots/ / Recordings/ / Logs/ / ...
Requires the .NET 10 SDK and Avalonia 12. The MT-32 synth shim builds automatically from
vendored source (src/native/mt32, LGPL munt) via an MSBuild target, so the C toolchain is needed to
build from source:
sudo apt install build-essential pkg-configgit clone git@github.com:codingncaffeine/EmuDOS-For-Linux.git
cd EmuDOS-For-Linux
dotnet build EmuDOS.slnx -c ReleaseThe toolchain is only needed to build from source — it compiles
libemudos_mt32.so. End users running a packaged release (.debor tarball) don't need it: the compiled.sois bundled.
EmuDOS stands on the work of others, with thanks. Emulation is the DOSBox Pure libretro core by Bernhard Schelling (and the DOSBox project it builds on) — downloaded at runtime, never bundled.
- Boxer by Alun Bestor — the Mac DOS frontend that inspired EmuDOS, and the reference for the Roland MT-32 LCD.
- munt / mt32emu — the Roland MT-32 emulation behind our synth.
- eXoDOS — the DOS configuration set our catalog is seeded from.
- libretro — the core API EmuDOS hosts.
Frameworks & libraries (the Linux port swaps several of the Windows ones):
| Library | Purpose | License |
|---|---|---|
| Avalonia | Cross-platform UI (replaces WPF) | MIT |
| SDL3 | Audio output + controllers (replaces NAudio/WASAPI + XInput) | Zlib |
| librashader by SnowflakePowered | runs the slang CRT shaders on the GPU (OpenGL backend) — bundled with EmuDOS so shaders work out of the box | MPL-2.0 / GPL-3.0 |
| libretro slang shaders | the downloadable CRT shader collection | per-shader (see repo) |
| LibVLCSharp | game-card video snaps | LGPL-2.1 |
| FFmpeg | optional gameplay recording | GPL |
| Microsoft.Data.Sqlite | library database | MIT |
| SharpCompress | archive import | MIT |
| CommunityToolkit.Mvvm | MVVM | MIT |
Box art and manuals come from ScreenScraper,
SteamGridDB, and the Internet Archive via their
APIs. Full license texts in NOTICES.txt.
This is a community Linux port of EmuDOS by the same author.
