3 giờ sáng. Khách hàng nhắn tin: phần mềm kế toán từ năm 2003 cần chạy để xuất báo cáo cuối tháng, mà cái máy Windows XP cũ vừa hỏng nguồn. File dữ liệu vẫn còn, installer vẫn có, nhưng chạy trên Windows 11 thì báo lỗi ngay từ bước cài đặt. Quen rồi — loại tình huống này mình gặp ít nhất vài lần mỗi năm.
Mình chạy homelab với Proxmox VE quản lý 12 VM và container — playground để test mọi thứ trước khi đưa lên production. Khi gặp bài toán legacy software, câu hỏi đầu tiên không phải là “dùng gì” mà là “cái nào phù hợp với trường hợp này”. Vì không phải emulator nào cũng như nhau.
So sánh các cách chạy phần mềm cũ trên Linux
Vấn đề không phải là 86Box có tốt không — mà là nó có phù hợp không. Trước tiên phải xác định cái phần mềm đang cần gì từ phần cứng. Chọn sai tool, mất cả buổi mà vẫn không chạy được.
Wine — chạy thẳng trên Linux, không giả lập
Nếu phần mềm là Win32 app đơn giản, không cần driver đặc biệt, Wine là lựa chọn nhanh nhất. Nhưng Wine không giả lập hardware — nó dịch Win32 API calls sang Linux. Phần mềm cần giao tiếp trực tiếp với hardware cụ thể (card âm thanh SoundBlaster, màn hình CGA/EGA, driver SCSI cổ) thì Wine bó tay.
DOSBox — chỉ cho DOS
DOSBox làm tốt một việc: chạy DOS. Game DOS, app DOS thuần — không vấn đề gì. Giới hạn ở chỗ không chạy được Windows 3.x trở lên một cách đáng tin cậy, và không giả lập phần cứng chính xác ở mức chip. DOSBox-X có thêm Windows 9x support nhưng vẫn không perfect.
VirtualBox và QEMU/KVM
Hai cái này sinh ra để chạy OS hiện đại — Windows 10, Ubuntu server, không phải để giả lập SoundBlaster ISA từ 1993. Với Windows 95, Windows 98, hay DOS với phần cứng rất specific — driver tìm SoundBlaster cụ thể, game cần Gravis Ultrasound — thì QEMU/KVM giả lập phần cứng ở level quá cao (x86 generic), nhiều driver không nhận ra.
PCem và 86Box — giả lập phần cứng cấp chip
Đây là level khác hoàn toàn. PCem và 86Box không chỉ giả lập CPU x86 — chúng giả lập từng chip cụ thể: Intel 386DX-40, AMD 486DX2-66, Pentium MMX 233. Giả lập từng card âm thanh: Sound Blaster 16, Gravis Ultrasound, AdLib. Từng card đồ họa: S3 Trio64, Cirrus Logic GD5424, Tseng ET4000. 86Box là fork của PCem — nhưng development nhanh hơn đáng kể, release mỗi vài tuần, GUI được làm lại gần như hoàn toàn.
Phân tích ưu nhược điểm của 86Box
Ưu điểm
- Độ chính xác ở mức chip: Giả lập đúng chip, đúng timing — phần mềm đặc thù hardware sẽ nhận ra đúng loại hardware mình cấu hình
- Hỗ trợ nhiều máy: Từ PC/XT (8088) đến Pentium III, hàng chục mainboard khác nhau
- Âm thanh chính xác: SoundBlaster, OPL FM synthesis — game DOS nghe đúng như ngày xưa
- Đang được maintain tích cực: Release thường xuyên, community hàng nghìn người trên Discord — hỏi gì cũng có người trả lời
- Chạy được nhiều OS cổ: DOS 3.3 đến Windows XP, OS/2, BeOS, FreeDOS
Nhược điểm
- Chậm hơn QEMU nhiều: Cycle-accurate emulation tốn CPU thật sự — giả lập Pentium III 500MHz có thể ngốn 40–60% một core trên máy hiện đại
- Cấu hình phức tạp: Phải biết mình cần giả lập loại hardware gì — không có magic auto-detect
- Không dùng KVM acceleration: Toàn bộ là software emulation
- Setup ROM: Cần tự cung cấp BIOS ROM (không bundled vì lý do bản quyền)
Tóm lại: dùng 86Box khi phần mềm cần phần cứng specific — game DOS với SoundBlaster, app Windows 95/98 dùng DirectX 5-7 cũ, phần mềm công nghiệp cần card đồ họa VGA cụ thể. Nếu app chỉ là Win32 thông thường, QEMU/KVM với Windows XP VM nhanh hơn nhiều — không cần setup phức tạp.
Cài đặt 86Box trên Linux
Package repo chính thức của hầu hết distro không có 86Box. Có ba cách cài:
Cách 1: AppImage (đơn giản nhất)
# Tải 86Box AppImage từ GitHub Releases
wget https://github.com/86Box/86Box/releases/latest/download/86Box-Linux-x86_64.AppImage
# Cấp quyền execute
chmod +x 86Box-Linux-x86_64.AppImage
# Chạy thử
./86Box-Linux-x86_64.AppImage
Cách 2: Flatpak
flatpak install flathub net.86box.86Box
flatpak run net.86box.86Box
Cách 3: Build từ 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 repo
git clone https://github.com/86Box/86Box.git
cd 86Box
mkdir build && cd build
# Configure và build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ..
ninja -j$(nproc)
# Binary nằm ở build/src/86Box
./src/86Box
Chuẩn bị ROM BIOS
Không có ROM BIOS thì 86Box không khởi động được — và chúng không được bundled vì lý do bản quyền. Có một repo community tổng hợp hầu hết BIOS cần thiết: 86Box/roms trên GitHub. Tải về, giải nén đúng chỗ là xong:
# Tạo thư mục roms trong 86Box data directory
mkdir -p ~/.local/share/86Box/roms
# Giải nén bộ ROM vào đây
# Cấu trúc thư mục phải đúng theo tài liệu 86Box
unzip 86box-roms.zip -d ~/.local/share/86Box/roms/
# Kiểm tra 86Box nhận được ROM chưa:
# Vào Settings -> Machine, nếu thấy list máy có thể chọn thì ROM OK
Cấu hình máy ảo để chạy Windows 98
Lấy Windows 98 SE làm ví dụ — đây là cấu hình mình dùng nhiều nhất, vừa cho game cũ vừa cho phần mềm công ty thời 2000–2003. Ổn định, driver nhiều, ít bị lỗi lạ.
Machine Settings
- Machine type: Intel 430VX Socket 7 — phổ biến thời Win98, driver nhiều, ổn định
- CPU: Intel Pentium MMX 200MHz hoặc 233MHz — đủ mạnh, không bị timing issue
- RAM: 64MB hoặc 128MB — Windows 98 chạy tốt nhất ở mức này
Display Settings
- Video card: S3 Trio64V+ — driver Win98 stable, 2D smooth, DirectX 5 support
- Nếu cần 3D: Voodoo 2 (3dfx) — nhiều game được optimize cho Glide API, chạy mượt hơn DirectX thời đó
Sound Settings
- Sound card: Creative Sound Blaster 16 (ISA) — chuẩn vàng, 99% game nhận ra ngay
- MIDI: Roland MT-32 emulation hoặc General MIDI qua FluidSynth nếu muốn nhạc chuẩn
Storage Settings
# Tạo disk image cho Windows 98 bằng qemu-img
qemu-img create -f raw win98.img 2G
# 2GB là đủ cho Windows 98 SE + driver + phần mềm cần thiết
# 86Box đọc raw image (.img) trực tiếp
# CD-ROM: trỏ vào file ISO của Windows 98 SE
Trong 86Box Settings, thêm Hard Disk trỏ vào win98.img, thêm CD-ROM Drive trỏ vào ISO. Boot lần đầu vào CD, cài Windows như bình thường.
Chia sẻ file giữa host và guest
Đây là điểm bất tiện nhất của 86Box so với VirtualBox hay VMware: không có shared folder. Có vài cách workaround thực tế:
# Tạo floppy image để transfer file nhỏ (<1.44MB)
mkfs.fat -C transfer.img 1440
# Mount và copy file vào
sudo mount transfer.img /mnt/floppy
sudo cp myfile.exe /mnt/floppy/
sudo umount /mnt/floppy
# Trong 86Box Settings -> Floppy Drives: gắn transfer.img vào Drive A:
# Trong Windows 98 guest, truy cập A:\ để lấy file
Với file lớn hơn, cách tốt hơn là tạo ISO rồi mount vào CD-ROM drive ảo, hoặc cấu hình card mạng PCnet và setup SMB share từ host Linux.
Khi nào chọn 86Box thay vì giải pháp khác
Mình đúc kết được checklist này sau khoảng 20–30 lần xử lý legacy software cho khách hàng:
- App DOS cần specific sound card (AdLib, SoundBlaster, Gravis Ultrasound) → 86Box
- Game Windows 9x cần DirectX 5-7 hoặc 3dfx Glide → 86Box
- Phần mềm kế toán/công nghiệp chạy trên Windows 98/ME → 86Box
- App Windows XP/2000 thông thường → QEMU/KVM với XP VM (nhanh hơn nhiều)
- App DOS đơn giản không cần sound cụ thể → DOSBox
- App Win32 không cần hardware specific → Wine
Công cụ rất chuyên biệt — không cần dùng cho mọi thứ. Nhưng khi phần mềm đòi đúng loại chip, đúng model sound card, đúng timing — không có gì thay thế được 86Box.
Cái phần mềm kế toán năm 2003 kia? Cuối cùng chạy được trên 86Box với Windows 98 SE — Intel 430VX, Sound Blaster 16, S3 Trio64. Khách hàng xuất được báo cáo lúc 4 giờ sáng. Đủ rồi.
