WebAssemblyは、通常は両立しない2つの特徴を兼ね備えたバイナリ形式です。すなわち、マシンコードに近い速度で実行される一方で、デフォルトでは一切の権限を持たないサンドボックス内に完全に隔離されているという点です。
なぜ2つ目の特性こそが興味深いのか
WebAssemblyモジュールは、それ自身の線形メモリ領域のみを持って起動し、それ以外は何も持たない。ファイルも、ネットワークも、システムクロックもない――ホスト環境がそれらを明示的に提供しない限りは。
他人が書いたコードを実行したい場合、これこそが不可欠なものです:
- プラグインシステム — プラグインによるファイルの不正読み取りを心配することなく、ユーザーがソフトウェアを拡張できるようにする
- ネットワークエッジでのコード実行 — 1ミリ秒未満で起動し、コンテナよりもはるかに軽量
- 共有マルチユーザーサービスへのクライアントロジックの組み込み
システムとのインターフェース
WebAssembly自体にはファイルやソケットという概念がないため、ホスト環境がどのような権限を提供するかを規定する標準が必要となります。この標準は「権限の付与」という原則に基づいており、モジュールは事前に付与されたディレクトリ以外のディレクトリにはアクセスできません。
まだ何も終わっていない
モジュールとホスト環境間のやり取りは、複雑なデータ構造を転送する必要があるため、依然としてコストがかかる。マルチスレッド対応やガベージコレクションは、まだ完成の途上にある。この言語はランタイムが重く、コンパイルされたモジュールのサイズもかなり大きくなる。
WebAssemblyを選ぶのは、「信頼できないコードを実行する」という課題がある場合に限るべきであり、単にパフォーマンス向上が必要な場合はそうではない――その場合は通常、もっと簡単な方法があるからだ。
Thảo luận