
230
12-5でブラウザ外で動作するWasmについての話をしましたが、ここ
では特に仮想サーバーやコンテナとの違いに注目してみます。
サーバー仮想化は仮想ハードウェアの構成定義によってハードウェアを
仮想化することで、アプリケーションは別々の仮想サーバーで動作しま
す。仮想ハードウェア単位で分離するため、アプリケーションからもOS
からも個別のハードウェアがあるように見えます。コンテナはコンテナエ
ンジンによるプロセス分離によりアプリケーションの実行空間(プロセ
ス)を分離しながらカーネルを共通的に使います。アプリケーションから
はコンテナという個別のアプリ実行場所があるように見えます。
Wasmは、Wasm ランタイムによりアプリケーションをサンドボックス
の単位で分離します。Wasmアプリはサンドボックスという個別のアプリ
実行場所があるように見えます。OSが管理するリソースへは WASI を使
用してアクセスします。
WASIは Wasm ランタイム用の APIを定義して、Wasm がホストの外部の
環境およびリソースにアクセスできるようにするもので、Wasmtimeや
Wasmerといった Wasm ランタイムで実装されています。
WASIの重要な点の1 つ目はポータビリティです。各種OSにWASIを配
置してWASIのインタフェースが統一されることで、Wasmバイナリ形式
にコンパイルしさえすればWASIが実行できるあらゆる環境でアプリケー
ションが実行できます(図12-17)。
重要な点の2