ZeroVM

ZeroVMは、オープンソースの軽量な仮想化とサンドボックス化の技術である。
ZeroVMは、Google Native Clientのプラットフォームを利用して、一つのプロセスを仮想化する。
一つのプロセスだけを仮想化するため、(オペレーティングシステム全体を仮想化するのとは違い)起動のオーバーヘッドは5 ms台である。
サンドボックス化.
ZeroVM creates a sandbox around a single process,
ZeroVMは、Google Native Client (NaCl)ベースの技術を使い、一つのプロセスのためにサンドボックスを作成する。
そのサンドボックスは、実行されるアプリケーションがホストオペレーティングシステム上のデータにアクセスできないことが保証されている。
そのため、信頼できないコードを実行しても安全である。
ZeroVM内で実行されるプログラムは、まずNaClプラットフォーム用にクロスコンパイルされなくてはならない。
ZeroVMはx86-64プラットフォーム向けにコンパイルされたNaClコードのみ実行することができ、
ポータブルNaCl (PNaCl)フォーマットのコードは実行できない。
ZeroVM内で実行されるコードは、通常のシステムコールを呼び出すことはできず、ホスト環境と通信することもできない。
外部との全ての通信はチャネルを使って行われ、チャネルはプログラムが実行されるより前に定義しておかなくてはならない。
サンドボックスの外側では、チャネルはローカルファイルやパイプ、他のZeroVMインスタンスに接続することができる。
サンドボックスの内側では、チャネルはファイル記述子として見えている。
サンドボックス化されたプログラムは、チャネルを通じて双方向に読み書きを実行可能であるが、チャネルがホストで何に接続されているかを知ることはできない。
ZeroVM向けにコンパイルされたプログラムは、ZeroVMランタイムライブラリー(ZRT)を使うこともできる。
このライブラリーは、POSIX環境をプログラムに提供することを目的としている。
これは、Cの標準ライブラリーを部分的に置き換えることで実現されている。
特に、ZRTはCのファイル入出力関数であるcodice_1とcodice_2などをメモリー内のファイルシステムを操作する関数に置き換える。
ルートファイルシステムはtarアーカイブファイルで提供される。
これによりプログラムからは、通常のUnix環境が存在するように見える。
ZRTは、Cの日付時刻関数であるcodice_3なども置き換え、プログラムに固定的で決定論的な環境を提供する。
一定の入力を与えると、毎回同じ結果を得られることが保証されている。
関数型言語でないプログラムであっても、この制約付きの環境であれば、決定論的に動作する。
これによりプログラムの挙動は固定され、デバッグが容易になる。
Swiftとの統合.
ZeroVMは、OpenStackの分散オブジェクトストレージコンポーネントであるSwiftと統合されている。
SwiftにZeroCloudミドルウェアをインストールすると、クライアントはSwiftにZeroVMプログラムをリクエストできるようになる。
そのプログラムはストレージノードで直接実行される。
つまり、プログラムがデータに直接アクセスできると言うことである。
歴史.
ZeroVMはイスラエルのスタートアップであるLiteStackによって開発された。
codice_4Gitリポジトリーの最初のコミットは、2011年11月に行われている。
LiteStackは2013年10月にRackspaceに買収された。
ZeroVMは、Techstars Cloud 2013インキュベータープログラムに参加し、500,000米ドルを得た。
最初のZeroVM Design Summitは、2014年1月にテキサス大学サンアントニオ校で開催された。