Linux上の86Box:Windows 9xとレガシーアプリを動かすための正確な旧式PCハードウェアエミュレーション

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

午前3時。クライアントからメッセージが届いた:2003年製の会計ソフトを月次レポートの出力に使いたいが、古いWindows XPマシンの電源が壊れてしまったとのこと。データファイルもインストーラーも手元にあるのに、Windows 11で動かそうとすると、インストール時点でエラーが出る。慣れた光景だ――こういう状況には、年に数回は必ず遭遇する。

私はProxmox VEで12台のVMとコンテナを管理するホームラボを運用している――本番環境に投入する前にあらゆるものをテストするためのプレイグラウンドだ。レガシーソフトウェアの問題に直面したとき、最初に問うべきは「何を使うか」ではなく「このケースに何が適しているか」だ。エミュレーターはどれも同じではないからだ。

Linux上で旧ソフトウェアを実行する方法の比較

問題は86Boxが優れているかどうかではなく、それが適切かどうかだ。まずそのソフトウェアがハードウェアに何を求めているかを特定する必要がある。ツール選びを誤れば、半日費やしても動かないまま終わる。

Wine — Linuxで直接実行、エミュレーションなし

特別なドライバーを必要としないシンプルなWin32アプリなら、Wineが最速の選択肢だ。ただしWineはハードウェアをエミュレートしない――Win32 API呼び出しをLinuxに変換するだけだ。特定のハードウェア(SoundBlasterサウンドカード、CGA/EGAモニター、旧式SCSIドライバー)と直接通信する必要があるソフトウェアには、Wineは手も足も出ない。

DOSBox — DOSのみ対応

DOSBoxは一つのことをうまくこなす:DOSの実行だ。DOSゲーム、純粋なDOSアプリ――問題ない。欠点は、Windows 3.x以降を安定して動かせないこと、そしてチップレベルの正確なハードウェアエミュレーションがないことだ。DOSBox-XはWindows 9xのサポートを追加しているが、それでも完璧ではない。

VirtualBoxとQEMU/KVM

この2つは現代のOS――Windows 10、Ubuntuサーバー――を実行するために設計されており、1993年製のSoundBlaster ISAをエミュレートするためのものではない。Windows 95、Windows 98、あるいは非常に特定のハードウェアを必要とするDOS――特定のSoundBlasterを探すドライバー、Gravis Ultrasoundを必要とするゲーム――では、QEMU/KVMのハードウェアエミュレーションはレベルが高すぎ(汎用x86)、多くのドライバーが認識されない。

PCemと86Box — チップレベルのハードウェアエミュレーション

これは全く別次元の話だ。PCemと86Boxは単にx86 CPUをエミュレートするだけでなく――個々の具体的なチップをエミュレートする:Intel 386DX-40、AMD 486DX2-66、Pentium MMX 233。個々のサウンドカード:Sound Blaster 16、Gravis Ultrasound、AdLib。個々のグラフィックカード:S3 Trio64、Cirrus Logic GD5424、Tseng ET4000。86BoxはPCemのフォークだが、開発ペースが大幅に速く、数週間ごとにリリースされ、GUIもほぼ完全に作り直されている。

86Boxの長所と短所

長所

  • チップレベルの精度:正確なチップ、正確なタイミングをエミュレート――ハードウェア依存のソフトウェアが設定したハードウェアを正しく認識する
  • 多様なマシンのサポート:PC/XT(8088)からPentium IIIまで、数十種類のマザーボード
  • 正確なサウンド:SoundBlaster、OPL FM合成――DOSゲームの音が当時と同じように聴こえる
  • 積極的なメンテナンス:定期的なリリース、Discordに数千人のコミュニティ――何を聞いても答えが返ってくる
  • 多くの旧OSに対応:DOS 3.3からWindows XP、OS/2、BeOS、FreeDOS

短所

  • QEMUよりも大幅に低速:サイクル精度エミュレーションは実際のCPUを大量消費する――Pentium III 500MHzのエミュレーションは現代のマシンでコアの40〜60%を消費することがある
  • 複雑な設定:どのハードウェアをエミュレートするか知っていなければならない――魔法のような自動検出機能はない
  • KVMアクセラレーションを使用しない:すべてソフトウェアエミュレーション
  • ROMのセットアップ:BIOS ROMを自分で用意する必要がある(著作権の理由でバンドルされていない)

まとめると:特定のハードウェアを必要とするソフトウェアには86Boxを使う――SoundBlasterが必要なDOSゲーム、DirectX 5-7を使う旧Windows 95/98アプリ、特定のVGAグラフィックカードを必要とする産業用ソフトウェア。アプリが通常のWin32アプリに過ぎないなら、Windows XP VMを使ったQEMU/KVMの方がはるかに速い――複雑なセットアップは不要だ。

Linuxへの86Boxのインストール

ほとんどのディストリビューションの公式パッケージリポジトリには86Boxが含まれていない。インストール方法は3つある:

方法1:AppImage(最も簡単)

# GitHub ReleasesからAppImageをダウンロード
wget https://github.com/86Box/86Box/releases/latest/download/86Box-Linux-x86_64.AppImage

# 実行権限を付与
chmod +x 86Box-Linux-x86_64.AppImage

# 試しに実行
./86Box-Linux-x86_64.AppImage

方法2:Flatpak

flatpak install flathub net.86box.86Box
flatpak run net.86box.86Box

方法3:ソースからビルド(Ubuntu/Debian)

# 依存パッケージをインストール
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

# リポジトリをクローン
git clone https://github.com/86Box/86Box.git
cd 86Box
mkdir build && cd build

# 設定とビルド
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ..
ninja -j$(nproc)

# バイナリはbuild/src/86Boxにある
./src/86Box

BIOS ROMの準備

BIOS ROMなしでは86Boxは起動できない――著作権上の理由からバンドルされていない。必要なBIOSのほとんどをまとめたコミュニティリポジトリが存在する:GitHubの86Box/roms。ダウンロードして正しい場所に解凍するだけだ:

# 86Boxデータディレクトリ内にromsフォルダを作成
mkdir -p ~/.local/share/86Box/roms

# ROMセットをここに解凍
# ディレクトリ構造は86Boxのドキュメントに従う必要がある
unzip 86box-roms.zip -d ~/.local/share/86Box/roms/

# 86BoxがROMを認識しているか確認:
# Settings -> Machineに移動し、マシンリストが選択可能なら ROM OK

Windows 98を実行するための仮想マシンの設定

Windows 98 SEを例に挙げる――これは私が最もよく使う設定で、旧ゲームにも2000〜2003年頃の業務ソフトにも対応できる。安定していて、ドライバーが豊富で、奇妙なエラーが少ない。

マシン設定

  • Machine type:Intel 430VX Socket 7 ― Win98時代に広く使われ、ドライバーが豊富で安定
  • CPU:Intel Pentium MMX 200MHzまたは233MHz ― 十分なパワーで、タイミングの問題も起きにくい
  • RAM:64MBまたは128MB ― Windows 98はこの容量で最もよく動く

ディスプレイ設定

  • Video card:S3 Trio64V+ ― Win98ドライバーが安定し、2Dが滑らかで、DirectX 5に対応
  • 3Dが必要な場合:Voodoo 2(3dfx)――多くのゲームがGlide API向けに最適化されており、当時はDirectXより滑らかに動く

サウンド設定

  • Sound card:Creative Sound Blaster 16(ISA)――ゴールドスタンダード、99%のゲームがすぐに認識
  • MIDI:Roland MT-32エミュレーション、または正確な音楽を求めるならFluidSynth経由のGeneral MIDI

ストレージ設定

# qemu-imgでWindows 98用のディスクイメージを作成
qemu-img create -f raw win98.img 2G

# 2GBはWindows 98 SE + ドライバー + 必要なソフトウェアに十分
# 86BoxはRAWイメージ(.img)を直接読み込む
# CD-ROM:Windows 98 SEのISOファイルを指定

86Box Settingsで、win98.imgを指定してHard Diskを追加し、ISOを指定してCD-ROM Driveを追加する。最初はCDから起動して、通常通りWindowsをインストールする。

ホストとゲスト間のファイル共有

これがVirtualBoxやVMwareと比べたときの86Boxの最大の不便な点だ:共有フォルダがない。実用的なワークアラウンドをいくつか紹介する:

# 小さなファイル(<1.44MB)転送用フロッピーイメージを作成
mkfs.fat -C transfer.img 1440

# マウントしてファイルをコピー
sudo mount transfer.img /mnt/floppy
sudo cp myfile.exe /mnt/floppy/
sudo umount /mnt/floppy

# 86Box Settings -> Floppy Drives:transfer.imgをドライブA:に割り当て
# Windows 98ゲストで、A:\にアクセスしてファイルを取得

大きなファイルの場合は、ISOを作成して仮想CD-ROMドライブにマウントするか、PCnetネットワークカードを設定してホストLinuxからSMB共有をセットアップする方が良い。

86Boxを他の解決策より選ぶべき場面

クライアントのレガシーソフトウェアを20〜30回処理した経験から、このチェックリストをまとめた:

  • 特定のサウンドカード(AdLib、SoundBlaster、Gravis Ultrasound)を必要とするDOSアプリ → 86Box
  • DirectX 5-7または3dfx Glideを必要とするWindows 9xゲーム → 86Box
  • Windows 98/ME上で動く会計・産業用ソフトウェア → 86Box
  • 一般的なWindows XP/2000アプリ → QEMU/KVM with XP VM(はるかに高速)
  • 特定のサウンドを必要としないシンプルなDOSアプリ → DOSBox
  • 特定のハードウェアを必要としないWin32アプリ → Wine

非常に特化したツールだ――すべてに使う必要はない。しかし、ソフトウェアが正確なチップの種類、正確なサウンドカードのモデル、正確なタイミングを要求するとき――86Boxの代替はない。

あの2003年製の会計ソフトは?結局、Windows 98 SE上の86Boxで動いた――Intel 430VX、Sound Blaster 16、S3 Trio64。クライアントは午前4時にレポートを出力できた。それで十分だ。

Share: