ZeroVM
サンドボックスの内側では、チャネルはファイル記述子として見えている。 サンドボックス化されたプログラムは、チャネルを通じて双方向に読み書きを実行可能であるが、チャネルがホストで何に接続されているかを知ることはできない。
ZeroVM向けにコンパイルされたプログラムは、ZeroVMランタイムライブラリー(ZRT)を使うこともできる。 このライブラリーは、POSIX環境をプログラムに提供することを目的としている。 これは、Cの標準ライブラリーを部分的に置き換えることで実現されている。 特に、ZRTはCのファイル入出力関数であるfopenとopendirなどをメモリー内のファイルシステムを操作する関数に置き換える。 ルートファイルシステムはtarアーカイブファイルで提供される。 これによりプログラムからは、通常のUnix環境が存在するように見える。
ZRTは、Cの日付時刻関数であるtimeなども置き換え、プログラムに固定的で決定論的な環境を提供する。 一定の入力を与えると、毎回同じ結果を得られることが保証されている。 関数型言語でないプログラムであっても、この制約付きの環境であれば、決定論的に動作する。 これによりプログラムの挙動は固定され、デバッグが容易になる。
ZeroVM creates a sandbox around a single process, ZeroVMは、Google Native Client (NaCl)ベースの技術を使い、一つのプロセスのためにサンドボックスを作成する。 そのサンドボックスは、実行されるアプリケーションがホストオペレーティングシステム上のデータにアクセスできないことが保証されている。 そのため、信頼できないコードを実行しても安全である。 ZeroVM内で実行されるプログラムは、まずNaClプラットフォーム用にクロスコンパイルされなくてはならない。 ZeroVMはx86-64プラットフォーム向けにコンパイルされたNaClコードのみ実行することができ、 ポータブルNaCl (PNaCl)フォーマットのコードは実行できない。
ZeroVM内で実行されるコードは、通常のシステムコールを呼び出すことはできず、ホスト環境と通信することもできない。 外部との全ての通信はチャネルを使って行われ、チャネルはプログラムが実行されるより前に定義しておかなくてはならない。 サンドボックスの外側では、チャネルはローカルファイルやパイプ、他のZeroVMインスタンスに接続することができる。