Windows 11はもう入れただろうか? テレビコマーシャルもやっているようだが、これまでのWindowsのバージョンアップに比べると、今回は、ずいぶんと静かな感じがある。Windows 95のときに深夜販売していたのがウソのようである。
Windows 11に搭載されているWSL2(Windows Subsystem for Linux Ver.2)には、Linux GUIアプリケーションの実行機能(WSLgと呼ばれている)がある。しかし、それよりも重要な点としてkvm(Kernel Virtual Machine)が有効になっていることが挙げられる。つまり、WSL2の中のLinuxで仮想マシンを動かすことができるのだ。そもそもWSL2が仮想マシン(MicrosoftはLight Weight Utility Virtual Machine、軽量ユーティリティVMと呼んでいる)で動作しているので、仮想マシンの中で仮想マシンが動く。これにより、エミュレーターであるQEMUなどでx86、x64コードを動かすとき、kvmにより高速なエミュレーションが可能になる。
WSL2でkvmが使えるのかどうかは、ホスト側となるCPUの「Nested VM」と呼ばれる機能に依存する。これは、インテルCPUでは第五世代から、AMDのCPUではZenアーキテクチャ以降で利用できる。
Windows 11の、WSL2は、wsl.exe --installオプションで有効化できる(Windows 10 Ver.2004以降も同様)。デフォルトだとUbuntuが選択されるので、“wsl.exe --install -d Ubuntu-18.04”のようにインストールしたいディストリビューションを指定するとよい。インストール可能なWSLディストリビューションは、“wsl.exe --list --online”で表示できる。
まずはWSL2でNested VMの有無を確かめよう。WSL2のbashから、“egrep 'vmx|smx' /proc/cpuinfo”を実行して、vmx(インテル)、svm(AMD)というキーワードが色付きで表示されれば、Nested VMは有効で、WSL2の中で仮想マシン支援機能が有効になっている。WSL2のNested VMのオンオフは、Win32側ユーザーフォルダー下の“%userprofile%\.wslconfig”で設定できる。デフォルトでオンなので、このファイルが存在しなければ有効になっているはずである。
本記事は、Windows11 Ver.21H2 ビルド22000.258、WSL2は、Linuxカーネル Ver.5.10.60.1、Ubuntu-18.04で確認を行っている。
QEMUでDOSを動かしてみる
とりあえず、サンプルとしてQEMUにMS-DOS互換のFreeDOSをインストールしてみる(写真01)。QEMUを動かす前に“sudo chmod a+rw /dev/kvm”として、一般ユーザーでkvmが利用できるようにしておこう。その後、aptコマンドなどで“qemu-kvm”をインストールする。また、FreeDOSのサイトから「FD13-LegacyCD.zip」をダウンロードする。
zipファイルを解凍すると中にISOイメージファイルがあるので、これをWSL2側のファイルシステムにコピーする。WSL2は、Win32側のファイルにもアクセスできるが、あまり速度が速くない。なのでWSL2で作業をする場合には、必要なファイルをWSL2側にコピーしておいたほうが効率的だ。次に、
qemu-img create -f raw freedos13.img 400M
として「400M」バイトの仮想ディスクイメージを作る。必要量はインストールするパッケージの数に依存するが、400メガバイトでISOイメージのすべてのパッケージをインストールできた。ISOファイルがFD13LGCY.isoだったとき、以下のコマンドでISOイメージをマウントしてインストーラーを起動する。
qemu-system-x86_64 -rtc base=localtime -drive file=freedos13.img,format=raw -cdrom FD13LGCY.iso -boot d
起動するとウィンドウが表示されて、中でFreeDOSのインストーラーが起動する(コマンド中カンマの前後に空白を入れないように)。途中、一回再起動したあと、言語選択に戻ってからインストールが始まるので、メッセージをよく見ること。ISOファイル内にはさまざまなパッケージが含まれていて、全部インストールするにはちょっと時間がかかる。インストールが終了したら、次回からの起動は、“-cdrom”以降の部分は不要だ。
QEMUは、Windowsでも動作するが、もともとLinux/UNIX系OSでの利用が中心だったこともあり、関連する作業などはLinuxのほうが便利だ。たとえば作成したFreeDOSのイメージファイルをループバックデバイスでマウントすれば、ファイルシステムに直接アクセスできる。事前にマウント先(/mnt/freedos)を作成しておき、
sudo mount -t msdos -o loop,offset=32256 FreeDos13.img /mnt/freedos
とする。
Windowsもそれなりに便利だが、こういう作業はLinuxのほうが道具が揃っている。Linux GUIアプリケーションやkvmに対応したWindows 11は、WSL2でこうしたツールのほとんどを手に入れたといってもいいかもしれない。