Google Native Client

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
Google Native Client
開発元かいはつもと Google
最新さいしんばん
Pepper 45 / 2015ねん6がつ10日とおか (8ねんまえ) (2015-06-10)
リポジトリ ウィキデータを編集
プログラミング
言語げんご
C++
対応たいおうOS Microsoft Windows, macOS, Linux, Chrome OS, Android
サポートじょうきょう 終了しゅうりょう
種別しゅべつ ネイティブコードを安全あんぜんに、しかし効率こうりつてき実行じっこうすることを目標もくひょうとしたサンドボックスフレームワーク
ライセンス BSDライセンス
公式こうしきサイト developers.google.com/native-client/
テンプレートを表示ひょうじ

Google Native Client(ネイティブクライアント、食塩しょくえん意識いしきしてNaClりゃくされる)は、ネイティブコードを安全あんぜんに、しかし効率こうりつてき実行じっこうすることを目標もくひょうとした、サンドボックス中心ちゅうしんとしたフレームワークである。当初とうしょはそのとおりネイティブコードばんのみであったが、その情勢じょうせいなどにより、現在げんざいはプロセッサアーキテクチャ依存いぞんPortable Native Client (PNaCl) もあり、それについてもべる。

WebAssemblyの普及ふきゅうともないそちらにリソースを集中しゅうちゅうするため開発かいはつ終了しゅうりょうし、2019ねんにChromeから削除さくじょされることを発表はっぴょう[1]。2023ねん削除さくじょされた[2]

概要がいよう[編集へんしゅう]

NaCl、PNaClともx86ARM対応たいおうしたものが公開こうかいされている。ウェブブラウザじょうのウェブアプリケーションをネイティブアプリケーションにちか速度そくど[3]実行じっこうすることなどをおも目標もくひょうとした、安全あんぜんにネイティブコードを実行じっこうできるシステムである。PCばんおよびChrome OSはんGoogle Chrome 14からはChromeウェブストア配布はいふされているアプリケーションを実行じっこうする場合ばあいかぎりデフォルトで有効ゆうこうになっており、それ以外いがい場合ばあいはchrome://flags/で有効ゆうこうにする必要ひつようがある[3][4]Google Chrome 29からPNaClが導入どうにゅうされ、Google Chrome 31(デスクトップばんのみ)からは、PNaCl がデフォルトで有効ゆうこうになっており、NaClとはことなりAdobe FlashのようにChromeウェブストア以外いがい一般いっぱんのウェブページないみでも使用しようできる[5]

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

標準ひょうじゅんCライブラリとしてNewlib使用しようしているが、NaClはポートされたGNU Cライブラリ(glibc)も使用しよう可能かのうである[8]いまのところ、PNaClはglibcは対応たいおう標準ひょうじゅんCライブラリではPOSIXスレッド使用しよう可能かのうであるが[9]、プロセスはサポートしていない。

Google Chrome 14 (release 0.5) から、Native Clientは安定あんていばんABIっていて、将来しょうらいのバージョンでの上位じょうい互換ごかんせい保証ほしょうしている[10]同様どうように、PNaClのほうはGoogle Chrome 31以降いこう上位じょうい互換ごかんせい保証ほしょうしている[11]

NaCl、PNaClはGoogleによってオープンソースプロジェクト(BSDスタイルのライセンス)として開発かいはつすすめられていた[12]

サンドボックス[編集へんしゅう]

NaClはARMとx86-64でのサンドボックスのため、ソフトウェアによるフォールト分離ぶんり利用りようしている[13]。x86-32での実装じっそうは、サンドボックスのメモリ空間くうかん規制きせいするなど一部いちぶ用途ようと以外いがいではx86のセグメンテーション機能きのうもちいない[14]。システムコールのしなどの危険きけん命令めいれい実行じっこうふせぐためには、コード検証けんしょう利用りようする。また、安全あんぜん命令めいれいなかかくされた危険きけん命令めいれいへジャンプすることをふせぐため、Native Clientでのインダイレクトジャンプは32バイトブロックの先頭せんとうへのみゆるされるほか、ジャンプさきブロックが不定ふていなジャンプは許可きょかされない[14]。これらの制約せいやくのため、C言語げんごかれたプログラムは Native Client じょう動作どうさするためにはカスタマイズされたGNU toolchainとくgccbinutilsさいコンパイルすることが必要ひつようになる。

Pepper API[編集へんしゅう]

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

名前なまえ由来ゆらいは、Native ClientのりゃくがNaClで、塩化えんかナトリウム(食塩しょくえん)の化学かがく記号きごうであることから、調味ちょうみりょう香料こうりょうとしてセットにされるしおコショウの胡椒こしょう (Pepper) からている[9]

以下いかはPPAPI環境かんきょう使用しようできる機能きのう

  • JavaScriptインターフェース
  • リモートファイルローダ
  • ローカルファイルIO
  • 2Dグラフィックス
  • 3Dグラフィックス (OpenGL ES 2.0)
  • オーディオ再生さいせい
  • WebSocket
  • 各種かくしゅ入力にゅうりょく(マウス、キーボード、ゲームパッドとう
  • ゲーム支援しえん機能きのう(マウスカーソルロック、フルスクリーンとう
  • etc ...

Mozilla の反応はんのう[編集へんしゅう]

JavaScriptみのおやであり、Mozilla CTO の ブレンダン・アイク は、ECMAScript 6 で十分じゅうぶんであるとべ、NativeClient の必要ひつようせい退しりぞけている[15]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.")とべた[16]

関連かんれん項目こうもく[編集へんしゅう]

参照さんしょう[編集へんしゅう]

  1. ^ WebAssembly Migration Guide (P)NaCl Deprecation Announcements
  2. ^ 株式会社かぶしきがいしゃインプレス (2023ねん11月1にち). “「Google Chrome 119」が正式せいしき公開こうかい ~Androidばんは「Android 7.0 Nougat」対応たいおう終了しゅうりょう/セキュリティ関連かんれん修正しゅうせいぜん15けん”. まどもり. 2023ねん11月9にち閲覧えつらん
  3. ^ a b Native Client: A Technology for Running Native Code on the Web
  4. ^ How to Test-Run Web Applications
  5. ^ Chrome 31 Beta: Android Application Shortcuts, requestAutocomplete(), and PNaCl
  6. ^ Google's Native Client goes ARM and beyond”. The H (2010ねん3がつ18にち). 2010ねん5がつ19にち閲覧えつらん
  7. ^ PNaCl: Portable Native Client Executables
  8. ^ NativeClient: Plash Wiki
  9. ^ a b c Native Client Technical Overview
  10. ^ Official NaCl Release Notes
  11. ^ Stability of the PNaCl bitcode ABI
  12. ^ Google Native Client on Google Code
  13. ^ 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にち閲覧えつらん
  14. ^ 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にち閲覧えつらん
  15. ^ JavaScript founder dismisses Google Native Client, pushes ECMAScript 6
  16. ^ Mozilla: Our browser will not run native code

外部がいぶリンク[編集へんしゅう]