ZeroVM
From Wikipedia, the free encyclopedia
| 作者 | Camuel Gilyadov、Constantine Peresypkin、Dmitri Bortok |
|---|---|
| 開発元 | LiteStack (Rackspaceに買収された) |
| 最新評価版 |
0.9.4
/ 2013年11月26日 |
| リポジトリ | |
| プログラミング 言語 | C, アセンブリ |
| 対応OS | Linux |
| プラットフォーム | x86-64 |
| サポート状況 | Active |
| 種別 | アプリケーション仮想化 |
| ライセンス | Apacheライセンス 2.0 |
| 公式サイト |
zerovm |
ZeroVMは、オープンソースの軽量な仮想化とサンドボックス化の技術である。 ZeroVMは、Google Native Clientのプラットフォームを利用して、一つのプロセスを仮想化する。 一つのプロセスだけを仮想化するため、(オペレーティングシステム全体を仮想化するのとは違い)起動のオーバーヘッドは5 ms台である。[1]
ZeroVM creates a sandbox around a single process,[2] ZeroVMは、Google Native Client (NaCl)ベースの技術を使い、一つのプロセスのためにサンドボックスを作成する。 そのサンドボックスは、実行されるアプリケーションがホストオペレーティングシステム上のデータにアクセスできないことが保証されている。 そのため、信頼できないコードを実行しても安全である。 ZeroVM内で実行されるプログラムは、まずNaClプラットフォーム用にクロスコンパイルされなくてはならない。 ZeroVMはx86-64プラットフォーム向けにコンパイルされたNaClコードのみ実行することができ、 ポータブルNaCl (PNaCl)フォーマットのコードは実行できない。
ZeroVM内で実行されるコードは、通常のシステムコールを呼び出すことはできず、ホスト環境と通信することもできない。 外部との全ての通信はチャネルを使って行われ、チャネルはプログラムが実行されるより前に定義しておかなくてはならない。 サンドボックスの外側では、チャネルはローカルファイルやパイプ、他のZeroVMインスタンスに接続することができる。 [3] サンドボックスの内側では、チャネルはファイル記述子として見えている。 サンドボックス化されたプログラムは、チャネルを通じて双方向に読み書きを実行可能であるが、チャネルがホストで何に接続されているかを知ることはできない。
ZeroVM向けにコンパイルされたプログラムは、ZeroVMランタイムライブラリー(ZRT)を使うこともできる。
このライブラリーは、POSIX環境をプログラムに提供することを目的としている。
[4]
これは、Cの標準ライブラリーを部分的に置き換えることで実現されている。
特に、ZRTはCのファイル入出力関数であるfopenとopendirなどをメモリー内のファイルシステムを操作する関数に置き換える。
ルートファイルシステムはtarアーカイブファイルで提供される。
これによりプログラムからは、通常のUnix環境が存在するように見える。
ZRTは、Cの日付時刻関数であるtimeなども置き換え、プログラムに固定的で決定論的な環境を提供する。
一定の入力を与えると、毎回同じ結果を得られることが保証されている。
関数型言語でないプログラムであっても、この制約付きの環境であれば、決定論的に動作する。
[5]
これによりプログラムの挙動は固定され、デバッグが容易になる。