3 AM. A client texts: the 2003 accounting software needs to run to export end-of-month reports, and the old Windows XP machine just had its power supply die. The data files are still there, the installer is still around, but running it on Windows 11 throws an error right at the installation step. Classic — this kind of situation comes up at least a few times a year.
I run a homelab with Proxmox VE managing 12 VMs and containers — a playground for testing everything before pushing to production. When faced with a legacy software problem, the first question isn’t “what tool to use” but “which one fits this specific case.” Because not all emulators are created equal.
Comparing Options for Running Old Software on Linux
The question isn’t whether 86Box is good — it’s whether it’s the right fit. You first need to identify exactly what the software demands from the hardware. Pick the wrong tool and you’ve wasted an entire evening with nothing to show for it.
Wine — Runs Directly on Linux, No Emulation
If the software is a simple Win32 app with no special driver requirements, Wine is the fastest option. But Wine doesn’t emulate hardware — it translates Win32 API calls to Linux. Software that needs to communicate directly with specific hardware (SoundBlaster audio cards, CGA/EGA monitors, old SCSI drivers) will hit a wall with Wine.
DOSBox — DOS Only
DOSBox does one thing well: run DOS. DOS games, pure DOS apps — no problem. The limitation is that it can’t reliably run Windows 3.x and above, and it doesn’t emulate hardware accurately at the chip level. DOSBox-X adds Windows 9x support but it’s still not perfect.
VirtualBox and QEMU/KVM
These were built to run modern operating systems — Windows 10, Ubuntu Server — not to emulate a 1993 ISA SoundBlaster. For Windows 95, Windows 98, or DOS with very specific hardware requirements — drivers hunting for a particular SoundBlaster model, games requiring a Gravis Ultrasound — QEMU/KVM emulates hardware at too high a level (generic x86), and many drivers simply won’t recognize it.
PCem and 86Box — Chip-Level Hardware Emulation
This is a completely different league. PCem and 86Box don’t just emulate an x86 CPU — they emulate specific chips: Intel 386DX-40, AMD 486DX2-66, Pentium MMX 233. They emulate specific sound cards: Sound Blaster 16, Gravis Ultrasound, AdLib. Specific graphics cards: S3 Trio64, Cirrus Logic GD5424, Tseng ET4000. 86Box is a fork of PCem — but with significantly faster development, releases every few weeks, and a nearly completely rewritten GUI.
86Box: Pros and Cons
Pros
- Chip-level accuracy: Emulates the exact chip with correct timing — hardware-specific software will recognize exactly the hardware you configure
- Wide machine support: From PC/XT (8088) to Pentium III, dozens of different motherboards
- Accurate audio: SoundBlaster, OPL FM synthesis — DOS games sound exactly like they used to
- Actively maintained: Frequent releases, a community of thousands on Discord — someone always has an answer
- Runs many legacy OSes: DOS 3.3 through Windows XP, OS/2, BeOS, FreeDOS
Cons
- Much slower than QEMU: Cycle-accurate emulation is genuinely CPU-intensive — emulating a 500MHz Pentium III can consume 40–60% of a single core on a modern machine
- Complex configuration: You need to know what hardware you’re trying to emulate — there’s no magic auto-detection
- No KVM acceleration: Everything is pure software emulation
- ROM setup required: You must supply BIOS ROMs yourself (not bundled for licensing reasons)
Bottom line: use 86Box when software needs specific hardware — DOS games with SoundBlaster, Windows 95/98 apps using older DirectX 5-7, industrial software requiring a specific VGA card. If the app is just a standard Win32 application, a QEMU/KVM Windows XP VM is much faster with far less setup complexity.
Installing 86Box on Linux
86Box isn’t in the official package repositories of most distros. There are three installation methods:
Method 1: AppImage (Easiest)
# Download 86Box AppImage from GitHub Releases
wget https://github.com/86Box/86Box/releases/latest/download/86Box-Linux-x86_64.AppImage
# Make it executable
chmod +x 86Box-Linux-x86_64.AppImage
# Run it
./86Box-Linux-x86_64.AppImage
Method 2: Flatpak
flatpak install flathub net.86box.86Box
flatpak run net.86box.86Box
Method 3: Build from Source (Ubuntu/Debian)
# Install dependencies
sudo apt install -y cmake ninja-build pkg-config \
libsdl2-dev libfreetype-dev libpng-dev \
libopenal-dev libslirp-dev libfltk1.3-dev \
git build-essential
# Clone the repo
git clone https://github.com/86Box/86Box.git
cd 86Box
mkdir build && cd build
# Configure and build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ..
ninja -j$(nproc)
# Binary is at build/src/86Box
./src/86Box
Preparing BIOS ROMs
86Box won’t boot without BIOS ROMs — and they’re not bundled due to licensing. There’s a community repository that aggregates most of the necessary BIOSes: 86Box/roms on GitHub. Download it, extract it to the right location, and you’re done:
# Create the roms directory inside 86Box data directory
mkdir -p ~/.local/share/86Box/roms
# Extract the ROM pack here
# Directory structure must match 86Box documentation
unzip 86box-roms.zip -d ~/.local/share/86Box/roms/
# Verify 86Box detects the ROMs:
# Go to Settings -> Machine; if you can see a list of machines to select, ROMs are working
Configuring a Virtual Machine to Run Windows 98
Using Windows 98 SE as the example — this is the configuration I use most often, suitable for both old games and business software from the 2000–2003 era. Stable, plenty of drivers, rarely throws strange errors.
Machine Settings
- Machine type: Intel 430VX Socket 7 — common in the Win98 era, abundant drivers, stable
- CPU: Intel Pentium MMX 200MHz or 233MHz — powerful enough without timing issues
- RAM: 64MB or 128MB — Windows 98 runs best at this range
Display Settings
- Video card: S3 Trio64V+ — stable Win98 driver, smooth 2D, DirectX 5 support
- For 3D: Voodoo 2 (3dfx) — many games were optimized for the Glide API and ran smoother than DirectX at the time
Sound Settings
- Sound card: Creative Sound Blaster 16 (ISA) — the gold standard, recognized instantly by 99% of games
- MIDI: Roland MT-32 emulation or General MIDI via FluidSynth for accurate music playback
Storage Settings
# Create a disk image for Windows 98 using qemu-img
qemu-img create -f raw win98.img 2G
# 2GB is enough for Windows 98 SE + drivers + necessary software
# 86Box reads raw images (.img) directly
# CD-ROM: point to your Windows 98 SE ISO file
In 86Box Settings, add a Hard Disk pointing to win98.img and a CD-ROM Drive pointing to the ISO. On first boot, boot from the CD and install Windows normally.
Sharing Files Between Host and Guest
This is the biggest inconvenience with 86Box compared to VirtualBox or VMware: there’s no shared folder feature. A few practical workarounds exist:
# Create a floppy image for transferring small files (<1.44MB)
mkfs.fat -C transfer.img 1440
# Mount it and copy files in
sudo mount transfer.img /mnt/floppy
sudo cp myfile.exe /mnt/floppy/
sudo umount /mnt/floppy
# In 86Box Settings -> Floppy Drives: attach transfer.img to Drive A:
# Inside the Windows 98 guest, access A:\ to retrieve the file
For larger files, a better approach is to create an ISO and mount it as a virtual CD-ROM drive, or configure a PCnet network card and set up an SMB share from the Linux host.
When to Choose 86Box Over Other Solutions
After handling legacy software for clients 20–30 times, I’ve distilled this checklist:
- DOS app requiring a specific sound card (AdLib, SoundBlaster, Gravis Ultrasound) → 86Box
- Windows 9x game needing DirectX 5-7 or 3dfx Glide → 86Box
- Accounting or industrial software running on Windows 98/ME → 86Box
- Standard Windows XP/2000 app → QEMU/KVM with an XP VM (much faster)
- Simple DOS app with no specific sound requirements → DOSBox
- Win32 app with no specific hardware requirements → Wine
86Box is a highly specialized tool — it’s not meant for everything. But when software demands the exact chip, the exact sound card model, the exact timing — nothing else can replace it.
That 2003 accounting software? It eventually ran on 86Box with Windows 98 SE — Intel 430VX, Sound Blaster 16, S3 Trio64. The client exported their reports at 4 AM. Job done.
