x86仮想化で利用できるオープンソースの仮想マシン作成・実行ソフトウェアであるQEMU、KVM/QEMU、Bochs、Xen、VirtualBox、VMware Player、Hyper-V、Virtual PC...etc.についてみてみようと思います。
OSの仮想化方法の1つとしてCPUを丸ごとエミュレートするタイプとホストOSのCPUを使って同一CPU(のOS実行環境)をエミュレートする方法があります。
前者には、x86/IA-32のPC/AT互換機をエミュレートするBochsや各種マシンをエミュレートするQEMUがあり、CPU(実質マシン自体)を丸ごとエミュレートする為、Bochsでは、CPUの異なるマシン上であってもx86/IA-32のPC/AT互換機環境を、QEMUは複数のサポート済みCPU搭載マシン環境を異なるCPU搭載PCの仮想マシン上で実行することもできますが、何れにしてもエミュレートする際のオーバーヘッドが大きくなりがちという側面もある為、このタイプの仮想化ソフトウェアをリリースする企業・団体は今のところ多くありませんが、KVMやXenではQEMUをその一機能として利用しています。
尚、当サイトで各種仮想マシンにおける各種ゲストOSを検証した際のテストマシンスペックであるデュアルコアCPU1.8GHz、RAM1GB程度だとVMware PlayerやVirtualBoxでは、ゲストOSの必要メモリは、256MBまでは快適、512MBではゲストだけ使う分には、まずまずですが、ぎりぎりのライン、一方、QEMUの場合、64MB以下程度ならサクサク動き、128MBでもまずまず快適ですが、256MBになると起動・起動後の挙動共に明らかに遅くなることからホスト環境としてデュアルコア、クアッドコアなどマルチコアCPUで且つRAMも2GB、更には4GBや8GB以上あれば、異なるCPU環境でも動作させられるBochsやQEMUという選択肢以外、検討する必要さえないかもしれません。
仮想化の便宜上の分類方法の1つとしてマシン自体のOSも、仮想化したいOSも同じ様に管理するハイパーバイザ型とハイパーバイザをホストOS上のアプリケーションとして機能させるホストOS型があり、仮想化ソフトウェアによっては、これら2つに分類しきれない中間的、または微妙な存在のものもあります。
何れにしてもハイパーバイザが介在することから広義ではホストOS型もハイパーバイザ型として定義(、その中で両者に分類)されているようです。
ハイパーバイザとは、実質、スーパーバイザと言われるOS・カーネルよりも上位の管理者となる仕組み・機能であり、実機のマシンのOSと仮想化したいOSは、何れもハイパーバイザコールによって動作することから併存することになります。
仮想化には、ゲストOSに手を加えることなく実行可能な『完全仮想化』とゲストOSに若干手を加えることによって実行可能とする『準仮想化』があります。
一部仮想化が難しい部分があるといわれるx86については、後にこれを解決すべく開発されたIntel-VT、AMD-Vと対応UEFIまたは、BIOSによってx86マシン上でx64 のゲストをも実行可能な『完全仮想化』が実現したといわれています。
IT/ICTにおける仮想化については広範囲に及びますが、C/Sシステムとしてみた場合の仮想化においてはサーバ仮想化とクライアント仮想化(デスクトップ仮想化)を挙げることができます。
サーバ仮想化においては機能ごとに分散していた物理サーバを仮想化した上でより少数のサーバに集約しようというものです。
他方、クライアント仮想化とは、シンクライアントやデスクトップPCのOS上に仮想マシンを配備することでOSごと仮想化したり、仮想マシン自体をサーバに持たせてネットワークを通じてデスクトップ画面を転送、あたかもクライアント端末でOSが動作しているように見せるプレゼンテーション仮想化といったものを指します。
更にOSとは別にアプリケーション部分を仮想化、サーバからストリーミングまたは、サーバ上のアプリケーションをクライアントで実行することでOSやアプリケーションといったリソースをサーバ側で集中管理できるようにするのがアプリケーション仮想化です。
クライアント仮想化の中でもプレゼンテーション仮想化、アプリケーション仮想化といった仕組みは、クライアントごとにインストールやアップデート、アンインストールなどを行う必要がなく管理がしやすくなります。
こうしたクライアントにおける仮想化は、時にネットワークブートやネットワーク仮想化、クライアントPCのストレージ(保存用ディスク)の仮想化にもつながります。
ちなみにリモートデスクトップは、サーバやサーバに限らず、一方の端末から他方の端末のデスクトップを遠隔操作することを可能とする技術であり、仮想化とは若干異なります。
仮想化ソリューションの概要やサーバ仮想化(製品)等については別ページ(仮想化ソフトウェア動向)に記すとして、ここではC/Sシステムを忘れてデスクトップ環境に絞って仮想マシン作成・実行ソフトウェアの特徴を挙げてみると以下のようなことが言えるでしょう。
ホストOSを何にするかによっても選択肢は変わってきます。
VirtualBox 4.x、VMware Player 3.x、Virtual PC 2007をホストOSにWindows、ゲストOSにDOS、WindowsやLinuxなどをインストール、使用してみたところ、LinuxやDOSについては、何れも遜色なし、ゲストOSをWindowsとした場合には、XPでは何れも遜色なし、3.x/95/98/98SE/MEなどはVirtual PCが最もスムースであるものの、VMware Playerでも、また、98/98SE/PEを除けばVirtualBoxもほとんど遜色なしといったところです。
客観的にみると、ただでさえ、実質利用はできても他OSをサポートしない汎用性に欠けるVirtual PC 2004、Virtual PC 2007の後継は、XP Mode含め、Windows 7上でのみサポートされるWindows Virtual PC、Windows 8(x64)上でのみサポートされるHyper-Vと実質Windows専用という位置づけとなっています。
ただ、クラウド環境であるWindows Azureでは、Windowsはもとより、Linuxをサーバとして利用することもでき、Linuxも大々的にサポートしているようです。
Parallels DesktopやVMware Fusionは、Mac OS X用の有償の仮想化ソフトウェアであり、QEMUやVirtualBoxはMac OS Xでも無償で利用可能です。
ここでいくつかの観点から仮想マシン作成・実行ソフトウェアを分類してみます。
オープンソースで且つWindows、Mac OS X、Linux、BSD、PC-UNIX、DOS、OS/2など多彩なゲストOSに対応する汎用的な仮想マシン作成・実行ソフトウェアでオーバーヘッドが比較的小さいものとなるとこのようになります。
この内、64ビット移行期ではあるものの、まだまだ現役で存在するx86(32ビット)マシンを現時点の最新バージョンでホストOSとしてサポートしているとなるとこのようになります。
但し、KVMは、ホストはLinux限定かつ64ビットマシン、または、ハードウェア仮想化支援機能(Intel VT-x/AMD-V)付き32ビットマシンのみ利用可能、ちなみに、こうしたマシンであれば、KVM/QEMU、Xen、VMware、VirtualBox、Hyper-V、LXC/Linux Containers、UML/User Mode Linux...等々あらゆる仮想化ソフトウェア上の仮想マシンやそのリソースをも管理できてしまうlibvirtというライブラリを使ったCLI/Command Line Interface環境virsh、GUIフロントエンドvirt-managerを利用することも可能です。
更にこの内、ホスト及びゲストOS共に汎用的な仮想マシン作成・実行ソフトウェアとなるとこのようになります。
尚、オープンソースの仮想マシン作成・実行ソフトウェアの中でもVirtualBoxは、C++(Java/Python)プログラミングAPIによる拡張が可能だったり、Intel-VT/AMD-V対応だったり、PXEブート対応だったり、3D対応だったり、OVF対応だったり、そうでなくとも複数の他仮想マシンディスクフォーマットとの互換性が高かったり(、サーバ仮想化技術も別途あったり)とより機能が充実していると言えそうです。
CPUもPCの高性能化に伴い、8bit/16bit/32bit/64bitと拡張されてきましたが、32bitから64bitへの移行は円滑に進んでいるとは言い難く、例えば、Windowsで言えば、XP含む以降には既にx64版もありますが、Windows Vista/2008/7/2008 R2/8...と今尚、並行して32bitであるx86版、64bitであるx64版いずれも販売・提供されているのが実状です。
仮想化ソフトウェアもx86とx64対応が進んでいますが、ことWindowsについては、Micorosoft社の仮想化ソフトウェア入手、開発の経緯からx86にはVirtual PC、x64には、Hyper-Vというラインナップがあり、ホストとなるWindows OSをx86からx64に移行する際、及び(x86、x64何れも)Windows 7からWindows 8 Pro(x64)に移行する際には、仮想化ソフトウェアは、必然的にVirtual PCからHyper-Vに移行する必要があり、一方、なんでそうなったのか、Windows 8(x86やx64)に移行してもMicrosoftがサポートする専用の仮想化ソフトウェアはないという状況になっているようです。
ハイパーバイザー型、ホストOS型仮想化ソフトウェアでは、仮想マシンを作成後、希望する特定のOSをインストール/起動するというスタイルですが、他方で開発環境を構築することに主眼を置き、物理マシンや仮想マシン、使用するOS、周辺環境を予め構成ファイルにまとめて記述しておくことでOSやアプリケーションの起動までを自動化し、必要なら簡単に同じ環境を複数構成することもでき、クラウド環境との連携も意識した環境構築自動化ツール/フレームワークとしてVagrant、Chef、Puppet、Ansible、Saltといったものもあります。
また、仮想化ソフトウェアと呼ぶべきものか微妙な気もしますが、ハイパーバイザー型、ホストOS型と対比し、コンテナ型仮想化ソフトウェアとも呼ばれることもあるLXCやDockerもあります。
このLXCやDockerは、Linuxカーネルを前提にしているため、Linuxでのみ利用可能な技術ですが、稼働マシンのOS上とは隔離してOS環境やアプリケーションの実行環境を構築できることからFreeBSDのjail(やLinuxのchroot)と対比されることもあります。