Google Native Client

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
Google Native Client
開発元 Google
最新版 Pepper 27 / 2013年04月12日(14か月前) (2013-04-12
プログラミング言語 C++
対応OS Microsoft Windows, OS X, Linux, Chrome OS, Android
サポート状況 開発中
種別 ウェブブラウザ上でネイティブコードを動作させるサンドボックス
ライセンス BSDライセンス
公式サイト developers.google.com/native-client/
テンプレートを表示

Google Native Client(ネイティブクライアント、塩化ナトリウムを意識してNaClと略される)は、ウェブブラウザ内でサブセット化されたネイティブコードを安全に実行するサンドボックス技術。ソフトウェアベースのフォールト(ソフトウェア割り込み)分離[1]を使用している。本項では仮想機械により CPU 非依存で動作させられる Portable Native Client (PNaCl) もまとめて記載する。

概要[編集]

NaCl, PNaCl とも x86ARM に対応したものが公開されている。ウェブブラウザ上で安全にネイティブコードを実行することでウェブアプリケーションをネイティブアプリケーションに近い速度[2]で実行することを目指している。PC 版及びChrome OS版Google Chrome 14 からはChromeウェブストアで配布されているアプリケーションを実行する場合に限りデフォルトで有効になっており、それ以外の場合は chrome://flags/ で有効にする必要がある[2][3]Google Chrome 29 から PNaCl が導入され、Google Chrome 31 (デスクトップ版のみ)からは、PNaCl がデフォルトで有効になっており、NaCl とは異なり Adobe Flash のように Chrome ウェブストア以外の一般のウェブページ内に埋め込みでも使用可能[4]

NaCl の ARM への実装は、2010年3月にリリースされた[5]x86-64 もサポートされている。しかし、NaCl は CPU 依存であり、それぞれホストの命令セットへコンパイルされたバイナリしか使用できない。Portable Native Client (PNaCl) では、LLVM中間言語コードを採用することでこの問題を解決しており、CPU 非依存でアプリケーションを動作させられる[6]。PNaCl 向けに書かれたアプリケーションを Emscripten を使い、汎用の JavaScript として動作させるための、pepper.js も Google は開発している。

標準Cライブラリとして Newlib を使用しているが、NaCl はポートされた GNU Cライブラリ (glibc) も使用可能である[7]。今のところ、PNaCl は glibc は未対応。標準CライブラリではPOSIXスレッドも使用可能であるが[8]、プロセスはサポートしていない。

Google Chrome 14 (release 0.5) から、Native Client は安定版の ABI を持っていて、将来のバージョンでの上位互換性を保証している[9]。同様に、PNaCl の方は Google Chrome 31 以降、上位互換性を保証している[10]

NaCl, PNaCl は Google によってオープンソースプロジェクト(BSDスタイルのライセンス)として開発が進められいる[11]

サンドボックス[編集]

NaCl は ARM と x86-64 でのサンドボックス化のため、ソフトウェアによるフォールト分離を利用している[12]。x86-32での実装は、サンドボックスのメモリ空間を規制するなど一部用途以外ではx86のセグメンテーション機能を用いない[13]。システムコールの呼び出しなどの危険な命令の実行を防ぐためには、コード検証機を利用する。また、安全な命令の中に隠された危険な命令へジャンプすることを防ぐため、Native Client でのインダイレクトジャンプは32bitブロックの先頭へのみ許されるほか、ジャンプ先ブロックが不定なジャンプは許可されない[13]。これらの制約のため、C言語で書かれたプログラムは Native Client 上で動作するためにはカスタマイズされたGNU toolchain、特にgccbinutilsで再コンパイルすることが必要になる。

Pepper API[編集]

Pepper APIはNative Clientアプリケーションを作成するために使えるクロスプラットフォームAPIで、PPAPI (Pepper Plug-in API) とも呼ばれる。ネットスケープNPAPIがベースとなっており、ブラウザを超えた機能に安全にアクセスすることができる[8]

名前の由来は、Native Clientの略がNaClで、塩 (塩化ナトリウム) の化学記号であることから、調味料・香料としてセットにされる塩胡椒の胡椒 (Pepper) から来ている[8]

以下はPPAPI使用できる機能。

  • JavaScriptインターフェース
  • リモートファイルローダ
  • ローカルファイルIO
  • 2Dグラフィックス
  • 3Dグラフィックス (OpenGL ES 2.0)
  • オーディオ再生
  • WebSocket
  • 各種入力(マウス、キーボード、ゲームパッド等)
  • ゲーム向け支援機能(マウスカーソルロック、フルスクリーン等)
  • etc ...

Mozilla の反応[編集]

JavaScript の生みの親であり、Mozilla CTO の Brendan Eich は、ECMAScript 6 で十分であると述べ、NativeClient の必要性を退けている[14]Mozillaバイスプレジデントである Jay Sullivan は NativeClient を指して「これらのネイティブアプリはウェブページのブラックボックスでしかなく、(中略)我々はHTMLを信じており、我々が集中したいと考えるものだ」("These native apps are just little black boxes in a webpage. [...] We really believe in HTML, and this is where we want to focus.")と述べた[15]

類似の方向性の物として Mozilla は Emscriptenasm.js を開発している。

参照[編集]

  1. ^ Efficient software-based fault isolation, Robert Wahbe, Steven Lucco, Thomas E. Anderson, Susan L. Graham, 1993
  2. ^ a b Native Client: A Technology for Running Native Code on the Web
  3. ^ How to Test-Run Web Applications
  4. ^ Chrome 31 Beta: Android Application Shortcuts, requestAutocomplete(), and PNaCl
  5. ^ Google's Native Client goes ARM and beyond”. The H (2010年3月18日). 2010年5月19日閲覧。
  6. ^ PNaCl: Portable Native Client Executables
  7. ^ NativeClient: Plash Wiki
  8. ^ a b c Native Client Technical Overview
  9. ^ Official NaCl Release Notes
  10. ^ Stability of the PNaCl bitcode ABI
  11. ^ Google Native Client on Google Code
  12. ^ David Sehr, Robert Muth, Cliff L. Biffle, Victor Khimenko, Egor Pasko, Bennet Yee, Karl Schimpf, Brad Chen (2010年). “Adapting Software Fault Isolation to Contemporary CPU Architectures”. 19th USENIX Security Symposium. 2011年7月31日閲覧。
  13. ^ a b Bennet Yee, David Sehr, Greg Dardyk, Brad Chen, Robert Muth, Tavis Ormandy, Shiki Okasaka, Neha Narula, Nicholas Fullagar (2009年). “Native Client: A Sandbox for Portable, Untrusted x86 Native Code”. IEEE Symposium on Security and Privacy (Oakland'09). 2011年7月31日閲覧。
  14. ^ JavaScript founder dismisses Google Native Client, pushes ECMAScript 6
  15. ^ Mozilla: Our browser will not run native code

外部リンク[編集]