Google_Native_Client
[Wikipedia|▼Menu]
.mw-parser-output .hatnote{margin:0.5em 0;padding:3px 2em;background-color:transparent;border-bottom:1px solid #a2a9b1;font-size:90%}

この項目では、ウェブブラウザ上でネイティブコードを安全に実行する技術について説明しています。暗号化ライブラリについては「NaCl (ソフトウェア)」をご覧ください。

Google Native Client開発元Google

最新版Pepper 45 / 2015年6月10日 (8年前) (2015-06-10)
リポジトリ

chromium.googlesource.com/native_client/src/native_client.git

プログラミング
言語C++
対応OSMicrosoft 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 OSGoogle 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]
関連項目

WebAssembly - これをベースに初期の実装を行ったウェブブラウザ上で実行する低水準中間言語

参照[脚注の使い方]^ WebAssembly Migration Guide (P)NaCl Deprecation Announcements
^ 株式会社インプレス (2023年11月1日). “「Google Chrome 119」が正式公開 ?Android版は「Android 7.0 Nougat」対応を終了/セキュリティ関連の修正は全15件”. 窓の杜. 2023年11月9日閲覧。
^ a bNative Client: A Technology for Running Native Code on the Web
^ How to Test-Run Web Applications
^Chrome 31 Beta: Android Application Shortcuts, requestAutocomplete(), and PNaCl
^ “ ⇒Google's Native Client goes ARM and beyond”. The H (2010年3月18日). 2010年5月19日閲覧。
^PNaCl: Portable Native Client Executables
^NativeClient: Plash Wiki
^ a b c Native Client Technical Overview
^ Official NaCl Release Notes
^Stability of the PNaCl bitcode ABI
^ Google Native Client on Google Code


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:45 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef