Skip to content

Differences from Windows

codingncaffeine edited this page Jun 7, 2026 · 3 revisions

Differences from Windows

Emutastic for Linux is a 1:1 port of Emutastic for Windows — same look, same features, same data formats. The same author maintains both. The genuine differences are platform plumbing, listed here; if a page in this wiki doesn't mention a difference, the behavior matches Windows.

Architecture

Concern Windows Linux
UI framework WPF (.NET 8) Avalonia (.NET 10)
Game rendering Direct3D / Vulkan overlay window Separate --game-host process; OpenGL with a native Wayland toplevel presenter (X11/SDL fallback)
HW-core rendering Vulkan/GL overlay HWND GL FBO + never-blocking 4-slot PBO readback ring
Audio WASAPI SDL3 audio stream (audio-master clock + dynamic rate control)
Input XInput SDL3 gamepad
Core loading LoadLibrary (.dll) dlopen via .NET NativeLibrary (.so)

Games running in a separate process is the biggest structural difference: a crashed core can never take the library down, and the library window stays fully responsive during play.

Paths

Follows the XDG spec instead of %AppData%:

Windows Linux
%AppData%\Emutastic\config.json ~/.config/Emutastic/config.json
Data folder (chosen at first run) ~/.local/share/Emutastic/

Same two triggers (portable.txt beside the executable, or --portable), same PortableData/ layout. Only the tarball install can be portable; a .deb install lives in root-owned /usr/lib so the marker can't apply.

Same files, same rotation, three deltas:

  • controller-diag.log lives in the Logs/ folder with everything else, not next to the executable (the install dir is read-only on a .deb install).
  • vulkan_debug.txt never appears — the Linux port renders everything through OpenGL.
  • One extra: emulator-host.log — games run in a separate host process, which logs there (the library process keeps emulator.log).

Fully interoperable with Windows: one shared repository serves both platforms (battery saves are keyed by ROM hash, so both installs must import the same ROM files). The per-PC repository toggle works the same.

Recording

Always the ffmpeg/x264 software path (no Windows.Graphics.Capture on Linux, and hardware video encode is deliberately not used). ffmpeg must be on PATH; the .deb declares it.

Shaders

The Windows app runs the libretro slang shader pack through librashader (D3D11). librashader publishes no Linux binaries, so the Linux build instead downloads the libretro GLSL pack (shaders_glsl — the same shader library in the format RetroArch's own GL driver uses) and runs it through a built-in GL preset chain. Seven built-in presets (CRT Scanlines, the Game Boy palettes, LCD Grid, Smooth) are always available without the download. A shader choice saved on Windows (slang: prefixed) is ignored on Linux and vice versa — pick per platform.

Cores

Downloaded from the Linux libretro buildbot (.so instead of .dll); same core lineup and priorities as Windows. See Libretro Cores.

Linux-only additions

A few things shipped on Linux ahead of the Windows app:

  • In-game challenge/progress indicators for RetroAchievements (primed-challenge badges, measured-progress tracker) rendered in the GL overlay.
  • Per-game window size memory — each game's window reopens at its last size.
  • P pause hotkey in-game — the Windows app pauses only via the overlay button.

Building from source

Requires the .NET 10 SDK plus a C toolchain for the small vendored native libraries — details in the README.

Clone this wiki locally