サンドボックスで安全性確保、オーバーヘッド5%
ブラウザでx86バイナリ実行、グーグルが新技術
2008/12/09
米グーグルは12月8日、x86アーキテクチャ向けにコンパイルしたコードをWebブラウザで実行する研究開発プロジェクト「Native Client」(略称、NaCl)を発表した。Linux、Windows XP、Mac OS X上など異なるOSで実行できるという。現在対応するWebブラウザはFirefox、Safari、Opera、Chrome。
プロジェクトチームは同日、実行環境やコンパイラツール群をBSDライセンスでオープンソースとして公開した。NaClは開発初期段階で、セキュリティの専門家などからフィードバックを受けて開発を続けるとしている。また開発チームではx86以外にもPowerPCやARMなどほかのアーキテクチャのサポートに向けて開発を続けているという。
実行環境はWebブラウザ向けのプラグインとしてサンドボックスの形で提供する。実行前に静的解析を行い危険なx86コードが含まれないかをチェックする。従来こうした静的解析では、自己改変を行うコードなどのために任意のコードで安全性を保証することが難しかったが、NaClではこうした振る舞いを禁じることで対応したという。すでにランダムに生成したインストラクション列や、有効なインストラクションの組み合わせについても徹底した検証を終えているという。
サンドボックス上では、ネイティブ環境と遜色のないレベルでアプリケーションやモジュールを実行できるという。実行前にコードの安全性をチェックするためオーバーヘッドはあるが、スキャン速度は2.4GHzのCore 2 Duoで30MB/秒と高速で、ダウンロード時間に比べてスキャン時間は無視できるとしている。
サンドボックスを使うことによるオーバヘッドの最大の要因は、キャッシュミスでGCCや一部のベンチマークテストで大幅にストールが起こることがあるという。ただ、おおむねNaClのオーバーヘッドは5%程度に収まり、実際、物理シミュレーションやOpenGLベースのグラフィック処理アプリケーション、3Dゲーム、H.264のコーデックライブラリなどがネイティブコードと遜色ないパフォーマンスで動いているという。例えば3Dゲームの「Quake」では、Linux向けにコンパイルしたネイティブコードと、NaClのコードでまったく区別が付かない速度差になったという。
プロジェクトではGCC 4.2.2をはじめとするコンパイラ関連ツールに手を加えて、NaClに対応したバイナリ生成ができるツールチェインを用意した。Linuxで使われる一般的なライブラリ、特にネットワーク関連やストレージ関連といったシステムコールを使わないアプリケーションやライブラリであれば、ほとんどソースコードの変更なしにNaCl対応バイナリにできるという。
NaClモジュールは信頼できるもの(trusted)と、そうでないもの(untrusted)を区別する。信頼済みコードは、例えばローカルのストレージにアクセスでき、リソースの濫用などを防ぐ。一方、必ずしも信頼できないコードは信頼できるNaClモジュールと通信して、ローカルPCのリソースなどを間接的に利用する。ActiveXは実行するモジュールを信頼するかどうかという二者択一のモデルだったが、NaClでは2種類を組み合わせて使える点が異なる。NaClモジュール間はSRPC(Simple RPC)や共有メモリを使ったIMC(Inter-Module Communication)と名付けられたインターフェイスで行うという。
プロジェクトチームはNaClモジュールは、比較的シンプルで重い計算処理が必要な画像処理、言語処理、物理シミュレーションなどの用途などに向くのではないかとしている。これは、SSEやマルチスレッドによる並列化の恩恵も受けられるネイティブコードをWebアプリケーションに生かす試みだ。将来的にDOMによる手軽なアクセスが提供できれば、ほとんどの処理をNaClモジュールがネイティブコードとして実行し、ごくシンプルなJavaScriptのラッパーを書くだけでWebアプリケーションを作成できるようになるだろうとしている。こうしたアプローチにはさらに、Webブラウザの中にとどまらない応用が考えられるが、今のところこうした可能性については追求しないという。
関連記事
情報をお寄せください:
- GASで棒、円、折れ線など各種グラフを作成、変更、削除するための基本 (2017/7/12)
資料を作る際に、「グラフ」は必要不可欠な存在だ。今回は、「グラフの新規作成」「グラフの変更」「グラフの削除」について解説する - GET/POSTでフォームから送信された値をPHPで受け取る「定義済みの変数」【更新】 (2017/7/10)
HTMLのフォーム機能についておさらいし、get/postメソッドなどの内容を連想配列で格納するPHPの「定義済みの変数」の中身や、フォーム送信値の取り扱いにおける注意点について解説します【PHP 7.1含め2017年の情報に合うように更新】 - PHPのfor文&ループ脱出のbreak/スキップのcontinue【更新】 (2017/6/26)
素数判定のロジックからbreak文やcontinue文の利点と使い方を解説。for文を使ったループ処理の基本とwhile文との違い、無限ループなども併せて紹介します【PHP 7.1含め2017年の情報に合うように更新】 - Spreadsheetデータの選択、削除、挿入、コピー、移動、ソート (2017/6/12)
Spreadsheetデータの選択、挿入、削除、コピー、移動、ソートに使うメソッドの使い方などを解説する
|
|
キャリアアップ
- - PR -
転職/派遣情報を探す
「ITmedia マーケティング」新着記事
いよいよ米国で禁止へ 「トランプ大統領」がTikTokを救う可能性は……?
ドナルド・トランプ氏は2024年の米大統領選挙で当選後、TikTok売却法案について方針を明...
「プロダクトレッドグロース」が非SaaS企業にも重要である理由とは?
製品・サービスそのものが成長を促すプロダクトレッドグロース(PLG)が注目されている。...
インフルエンサーをAIが淘汰? BoseのCMOが語るこれからのブランド戦略
Bose初のグローバルマーケティング責任者であるジム・モリカ氏が、感情に訴えるマーケテ...