仮想マシン
OSベースの仮想化と、CPUの仮想化がある
CPUの仮想化では実際のCPUのコードを他のCPUで動作させるものと言語内などで仮想CPUコードを定義してその範囲でバイナリコードを持ち運べるようにしたものがある
Java VM Java用の仮想CPUを想定し、バイナリコードをどのCPUでも実行可能にする。 インタプリタ形式、ネイティブコンパイラ形式など実装方法は様々
他の言語のコンパイラなどもある
多くの言語が対応している
仕様が閉じているため直接CPUコードにするより安全
ネイティブコードに変換され実行されることが多いため高速
OSの仮想化では、CPU内で持つ仮想化機能が使われ、複数のOSを平行して実行することができたりする
仮想環境の中で仮想環境を実行する、ような場合もある
管理機能を分離するものでCPUコードを変換する必要はないので高速
VMware
VirtualBox
Windowsが持つ仮想化機能 Windows本体もこの中の仮想環境のひとつとして動作する
Windows (Hyper-Vなどを利用したもの)
Windows Subsystem for Linux (WSL) Linuxカーネルは1つなのでコンテナに近いのかも
WSL1 Linuxカーネルを真似たもの
Windows Subsystem for Android (WSA) Android に特化した環境、流行らなく終了
似たもの
OCIコンテナ (Docker, Podman, Kubernetes) Linuxカーネルで複数のOSイメージを実行するが、カーネルは1つ、アプリケーション単位で絞られるため動作が軽量。共有ライブラリなどの互換性問題がなくなるという利点があるが、環境をすべて含むためimageサイズが大きい。
Linux用のためWindowsやMacなど他のOSで実行するにはLinux VMが必要。
CPUエミュレートの機能はビルド時に可能になってきているが実行速度は? Wasmに対応する動きはある。