| Googleネイティブクライアント | |
|---|---|
| 開発者 | Google、その他 |
| 初回リリース | 2011年9月16日[ 1 ] (2011年9月16日) |
| 安定版リリース | |
| リポジトリ | |
| 書かれた | C、C++ |
| オペレーティング·システム | Windows、Linux、macOS、ChromeOS |
| プラットフォーム | x86、ARM、MIPS |
| 後継 | Webアセンブリ |
| タイプ | ネイティブコード用のWebブラウザのサンドボックス |
| ライセンス | 新しいBSD |
| Webサイト | 開発者 |
Google Native Client(NaCl)は、Intel x86、ARM、MIPSネイティブコードのサブセット、またはポータブル実行ファイルをサンドボックス内で実行するための、廃止されたサンドボックス技術です。ユーザーのオペレーティングシステムに依存せず、 Chromiumベースのウェブブラウザからネイティブコードを安全に実行できるため、ウェブアプリをネイティブに近い速度で実行できます。これはGoogleのChromeOS計画と一致しています。また、ブラウザプラグインや他のアプリケーションの一部、あるいはZeroVMなどのアプリケーション全体を保護するためにも使用できます[ 2 ]。[ 3 ]
Googleは、Google Chromeが9月に導入されて間もない2008年12月8日にNative Clientを一般公開した。[ 4 ] NaClは、2011年9月に安定したChromeバージョンでリリースされ、ウェブで一般公開された。[ 1 ] 2013年にGoogleは、アーキテクチャに依存しない、 NaClの事前コンパイルバージョンであるPortable Native Client(PNaCl)を導入した。[ 5 ] NaClの一般的な概念(ウェブブラウザでネイティブコードを実行する)は、以前にActiveXで実装されていたが、NaClはサンドボックスでコンテンツを実行する一方で、ActiveXアプリケーションはシステム(ディスク、メモリ、ユーザーインターフェイス、レジストリなど)に完全にアクセスできる。Mozillaは、ActiveXとNaClの両方の代替としてasm.jsを提案した。asm.jsでは、 CまたはC++で記述されたアプリケーションをブラウザで実行するようにコンパイルすることもでき、事前コンパイルもサポートしているが、JavaScriptのサブセットであるため、直接サポートしていないブラウザとも下位互換性がある。
2016年10月12日、Chromiumの問題追跡システムへのコメントで、GoogleのPepperチームとNative Clientチームが人員削減されたことが示されました。[ 6 ] 2017年5月30日、GoogleはPNaClを廃止し、WebAssemblyに移行すると発表しました。[ 7 ]当初、Googleは2018年第1四半期にPNaClを削除する予定でしたが、[ 7 ]開発者は2022年6月まで何度も延期しました。[ 8 ] [ 9 ]
概要
Native Client は、 Google が開発したオープンソース プロジェクトでした。[10] Quake、 [ 11 ] XaoS、Battle for Wesnoth 、 [ 12 ] Doom 、 [ 13 ] Lara Croft and the Guardian of Light、[ 14 ] From Dust、[ 15 ] MAMEなどのゲームや、サウンド処理システムCsoundが Native Client に移植されています。 Native Client は、バージョン 14 以降Google Chromeウェブ ブラウザーで使用でき、バージョン 31 で Portable Native Client (PNaCl、発音: pinnacle) がリリースされてから、デフォルトで有効になっています。[ 16 ] [ 17 ] [ 18 ] Native Client は、 Dæmon ゲーム エンジンなど、ウェブ ブラウザー以外のソフトウェアでダウンロードしたコードを安全に実行するためにも使用されています。[ 19 ]
ARM実装は2010年3月にリリースされました。[ 20 ] x86-64、 IA -32、MIPSもサポートされていました。
PNaCl環境でアプリケーションを移植可能に実行するには、アーキテクチャに依存しない安定したLLVM中間表現バイトコードのサブセットにコンパイルする必要があります。[ 21 ]実行ファイルはPNaCl実行ファイル(pexe)と呼ばれます。PNaClツールチェーンは.pexeファイルを作成し、PNaClツールチェーンは.nexeファイルを作成します。.nexeファイルのマジックナンバーは0x7F 'E' 'L' 'F'で、 ELFです。Chromeでは、これらのファイルは実行できるようにアーキテクチャ固有の実行ファイルに変換されます。
NaClは、x86-64とARM上のサンドボックス化にソフトウェア障害検出と分離を使用しています。[ 22 ] Native Clientのx86-32実装は、x86アーキテクチャのめったに使用されないセグメンテーション機能を利用する斬新なサンドボックス化方法で注目に値します。 [ 23 ] Native Clientは、サンドボックス化されたコードがアクセスできるメモリ範囲を制限するためにx86セグメントを設定します。システムコールを実行するような安全でない命令の使用を防ぐためにコード検証を使用しています。コードが安全な命令の真ん中に隠れた安全でない命令にジャンプするのを防ぐために、Native Clientでは、すべての間接ジャンプが32バイト境界で整列されたブロックの先頭へのジャンプであることを要求し、命令がこれらのブロックをまたぐことは許可されていません。[ 23 ]これらの制約のため、CおよびC++コードは、 GNUツールチェーン、具体的にはGNUコンパイラコレクション(GCC)、GNU Binutils、LLVMのカスタマイズされたバージョンを提供するネイティブクライアントで実行するために再コンパイルする必要があります。
Native Client はBSD スタイルのライセンスに基づいてライセンスされます。
ネイティブクライアントはCライブラリとしてNewlibを使用しますが、 GNU Cライブラリ(GNU libc)の移植版も利用可能です。[ 24 ]
歴史
2011年12月9日、Googleは、Bastion ( Chromeウェブストアではサポート終了)を含む、リッチでプロセッサを大量に消費するグラフィックで知られるゲームのChrome専用バージョンをいくつか新たに提供開始することを発表し、この技術の成熟度を示しました。NaClは、ハードウェアアクセラレーションによる3Dグラフィック(OpenGL ES 2.0経由)、サンドボックス化されたローカルファイルストレージ、動的読み込み、全画面モード、マウスキャプチャ機能を備えています。また、NaClを携帯型デバイスでも利用できるようにする計画もありました。[ 25 ] [ 26 ]
ポータブルネイティブクライアント(PNaCl)はアーキテクチャに依存しないバージョンです。PNaClアプリは事前にコンパイルされます。ほとんどのユースケースでは、NaClよりもPNaClが推奨されます。[ 27 ] NaClの一般的な概念(Webブラウザでネイティブコードを実行する)は、以前ActiveXで実装されており、現在も使用されている間はシステム(ディスク、メモリ、ユーザーインターフェイス、レジストリなど)へのフルアクセスが可能です。ネイティブクライアントはサンドボックスを使用することでこの問題を回避しています。
Mozilla による代替手段はasm.jsで、これもCまたはC++で記述されたアプリケーションをブラウザーで実行できるようにコンパイルでき、事前コンパイルもサポートしますが、JavaScript のサブセットであるため、直接サポートしていないブラウザーとの下位互換性があります。
2016年10月12日、Chromiumの問題追跡システムへのコメントで、GoogleのPepperチームとNative Clientチームが人員削減されたことが示されました。[ 6 ] 2017年5月30日、GoogleはPNaClを廃止し、WebAssemblyに移行すると発表しました。[ 7 ]当初、Googleは2018年第1四半期にPNaClを削除する予定でしたが、[ 7 ]その後2019年第2四半期に削除し、[ 28 ] 2022年6月に( Chromeアプリと共に)削除されました。[ 8 ] [ 9 ]
ペッパー
NaClは塩化ナトリウム、つまり一般的な食卓塩を表します。語呂合わせでコショウの名前も使われました。Pepper APIは、ネイティブクライアントモジュールを作成するためのクロスプラットフォームのオープンソースAPIです。[ 29 ] PepperプラグインAPI、またはPPAPI [ 30 ] [ 31 ]は、ネイティブクライアントで保護されたウェブブラウザプラグイン用のクロスプラットフォームAPIで、最初はNetscapeのNPAPIに基づいていましたが、その後ゼロから書き直されました。ChromiumとGoogle Chromeで、 Adobe FlashのPPAPIバージョン[ 32 ]と組み込みのPDFビューアを有効にするために使用されました。[ 33 ]
PPAPI
2009年8月12日、Google Codeのページで新しいプロジェクト「Pepper」と、それに関連する「Pepper Plugin API(PPAPI)」が紹介されました。 [ 34 ]これは「プラグインの移植性とセキュリティを向上させるためのNPAPIへの一連の変更」です。[ 35 ]この拡張機能は、アウトプロセスプラグイン実行の実装を容易にするために特別に設計されています。さらに、このプロジェクトの目標は、プラグインを完全にクロスプラットフォーム化するためのフレームワークを提供することです。検討されているトピックには以下が含まれます。
- ブラウザ間での NPAPI のセマンティクスの統一。
- レンダラー ブラウザとは別のプロセスで実行されます。
- ブラウザの合成プロセスを使用してレンダリングを標準化します。
- 標準化されたイベントと 2D ラスタライズ関数を定義します。
- 3D グラフィックス アクセスを提供するための最初の試み。
- プラグインレジストリ。
Pepper APIはゲームパッド(バージョン19)とWebSocket(バージョン18)もサポートしています。[ 36 ]
2010年5月13日時点では、GoogleのオープンソースブラウザであるChromiumが、新しいブラウザプラグインモデルを採用した唯一のウェブブラウザであった。[ 37 ] 2020年現在、PepperはChrome、Chromium、OperaやMicrosoft EdgeなどのBlinkレイアウトエンジンベースのブラウザでサポートされている。
2020年8月、Googleは2022年6月にGoogle ChromeとChromiumからPPAPIのサポートを削除すると発表した。[ 38 ]
Firefox の PPAPI
Firefoxの開発者は2014年に、Chromeへの実装以外にAPIの完全な仕様がなく、Chrome自体がBlinkレイアウトエンジンでのみ使用するように設計されており、文書化されていないFlash Playerプラグイン固有のプライベートAPIを持っていたため、Pepperをサポートしないと述べた。[ 39 ] 2016年10月、MozillaはPepper APIとPDFiumをFirefoxの将来のリリースに組み込むかどうかを再検討し、検討していると発表したが[ 40 ]、そのような措置は取られなかった。2017年7月、AdobeはFlashを非推奨とし、2020年末にサポートを終了すると発表した。 [ 41 ] 2021年1月までに、Adobe Flash Player、Google Chrome、Firefox、Safari、Windows [ 42 ]はFlashを無効化または完全に削除するアップデートを受け取った。
アプリケーション
あるウェブサイト[ 43 ]では、サーバー上でNaCLを使用して、ユーザーがブラウザからGoプログラミング言語を試すことができるようにしました。 [ 44 ]
ウェブブラウザ以外での使用
オープンソースのゲーム「Unvanquished」は、Q3VM( Quake III仮想マシン) [46]の代わりに、Dæmonゲームエンジン[ 45 ]のNative Clientを利用しています。 [ 46 ] [ 47 ]このゲームエンジンでは、Native Clientサンドボックスを使用して、ゲームサーバーからダウンロードした任意のゲームコード(MOD)を安全に実行します。Native Clientテクノロジを使用することで、ゲーム開発者は仮想マシンで実行されるゲームにC++言語を使用し、C++ライブラリを使用し、ゲームとエンジン間でコードを共有し、Q3VMよりも優れたパフォーマンスを得ることができます。[ 19 ]
受付
一部のブラウザ開発者グループは Native Client テクノロジをサポートしていましたが、他のグループはサポートしていませんでした。
サポーター
IMVUのChad Austin氏は、ネイティブクライアントが(ネイティブコードに比べて約5%のペナルティで)安全に高性能なアプリケーションをWebに導入できる点と、(JavaScript以外の)プログラミング言語を選択できる点を高く評価しました。[ 48 ]
Id Softwareのジョン・D・カーマックはQuakeCon 2012でNative Clientを称賛し、次のように述べた。「ブラウザ内で何かを行う必要がある場合、Native Clientははるかに興味深いものです。なぜなら、最初から非常に巧妙なx86ハックとして始まり、ユーザーモードでこれらすべてをサンドボックス化できるという興味深い方法があったからです。今では動的再コンパイルが可能で、CまたはC++でプログラムし、完全にネイティブなコードのための-O4最適化レベルではないものの、ネイティブコードに非常に近いものにコンパイルされます。これにより、あらゆる悪意のあるポインタ追跡など、to-the-metalゲーム開発者としてやりたいことが何でもできるようになります。」[ 49 ]
批判者
他の IT プロフェッショナルは、このサンドボックス テクノロジには重大な相互運用性の問題があるため、より批判的でした。
Mozillaの製品担当副社長ジェイ・サリバン氏は、Mozillaはブラウザ内でネイティブコードを実行する予定はないとし、「これらのネイティブアプリはウェブページ内の小さなブラックボックスに過ぎません。[...] 私たちはHTMLを本当に信じており、そこに注力したいと考えています。」と述べた。[ 50 ]
MozillaのChristopher Blizzard氏はNaClを批判し、ネイティブコードはソースコード駆動型のWebと同じように進化することはできないと主張した。また、NaClをDLL Hellに悩まされているMicrosoftのActiveX技術と比較した。[ 2 ]
OperaのCTOであるHåkon Wium Lie氏は、「NaClは『ウェブ以前の古き悪しき時代を懐かしんでいる』ようだ」とし、「ネイティブクライアントは新しいプラットフォームを構築する、あるいは古いプラットフォームをウェブに移植するものであり[...]複雑さとセキュリティの問題をもたらし、ウェブプラットフォームから焦点を奪うことになるだろう」と語った。[ 2 ]
第二世代
Googleが開発した第2世代のサンドボックスはgVisorです。[ 51 ] [ 52 ]これはGoogle Cloud、より正確にはGoogle App EngineにおけるNaClの代替となるものです。GoogleはWebAssemblyも推進しています。[ 53 ]
参照
- アプリケーション仮想化
- エムスクリプトン
- Sandboxieはサンドボックス内で Windows プログラムを実行する
- WebAssembly、ウェブブラウザのバイトコード標準
- XAML ブラウザ アプリケーション(XBAP)
参考文献
- ^ a b「GoogleのネイティブクライアントがChromeで利用可能に」 The Register、2011年9月16日。 2016年3月12日閲覧。
- ^ a b c Metz, Cade (2011年9月12日). 「Google Native Client: 未来のウェブか、それとも過去のウェブか?」 The Register . 2011年9月17日閲覧。
- ^ “ZeroVM Architecture” . 2014年2月8日時点のオリジナルよりアーカイブ。2014年3月16日閲覧。
- ^ Chen, Brad (2008年12月8日). 「ネイティブクライアント:Web上でネイティブコードを実行するためのテクノロジー」 . 2008年12月9日時点のオリジナルよりアーカイブ。
- ^ 「ポータブルネイティブクライアント:スピード、セキュリティ、移植性の「頂点」」 2013年11月12日。
- ^ a b "Bugs.chromium.org" . 2016年10月12日. 2016年10月12日閲覧。
- ^ a b c d「PNaCl に別れを告げ、WebAssembly にようこそ!」 Chromiumブログ。2017年5 月 31 日閲覧。
- ^ a b「Chrome アプリのサポート タイムラインの変更」 Chromiumブログ2020 年 8 月 10 日。
- ^ a b Li, Abner (2020年8月10日). 「Google、全プラットフォームでのChromeアプリの廃止を延期」 . 9to5Google . 2021年10月2日閲覧。
- ^ 「Google Code 上の Google Native Client」 。 2012年4月25日閲覧。
- ^ davemichael (2020年10月3日). 「GitHub - davemichael/NaCl-Quake: Quake for Native Client (SDL Quake ポートに基づく)」 . GitHub .
- ^ 「Wesnothの戦い」。
- ^ “Index of /” . 2025年4月23日時点のオリジナルよりアーカイブ。2013年11月26日閲覧。
- ^ 「Chrome ウェブストア - ララ・クロフトとガーディアン・オブ・ライト」。2013年12月8日時点のオリジナルよりアーカイブ。2013年11月26日閲覧。
- ^ “From Dust” . 2016年3月12日時点のオリジナルよりアーカイブ。2016年2月24日閲覧。
- ^ Chen, Brad (2008年12月8日). 「ネイティブクライアント:Web上でネイティブコードを実行するためのテクノロジー」 . Google-code-updates.blogspot.com . 2012年4月25日閲覧。
- ^ 「Chromiumブログ:ネイティブクライアントがサンドボックス化されたネイティブコードをChromeウェブストアアプリに提供」 Blog.chromium.org、2011年8月18日。 2012年4月25日閲覧。
- ^ 「Google Code ブログ: ポータブル ネイティブ クライアント: スピード、セキュリティ、移植性の「頂点」」。blog.chromium.org。2013年11月12日。 2014年3月16日閲覧。
- ^ a b「Unvanquished、PNaClサポートの取り組みを継続」 . Phoronix . 2014年3月15日. 2024年12月3日閲覧.
PNaClサンドボックスにより、ゲームプレイ開発者は最新のC++およびC/C++ライブラリを仮想マシン内で直接使用できるようになり、エンジンコードとゲームロジック間のコード共有が向上します。PNaClは、オリジナルのQuake III仮想マシンよりも優れたパフォーマンスを発揮すると報告されています。
- ^ 「GoogleのネイティブクライアントがARMを超えていく」 The H. 2010年3月18日. 2010年5月19日閲覧。
- ^ 「PNaCl: Portable Native Client Executables」(PDF)。2012年5月2日時点のオリジナル(PDF)からアーカイブ。 2012年4月25日閲覧。
- ^ Sehr, David; Muth, Robert; Biffle, Cliff L.; Khimenko, Victor; Pasko, Egor; Yee, Bennet; Schimpf, Karl; Chen, Brad (2010). 「現代のCPUアーキテクチャへのソフトウェア障害分離の適応」 . 第19回USENIXセキュリティシンポジウム. 2011年7月31日閲覧。
- ^ a b Yee, Bennet; Sehr, David; Dardyk, Greg; Chen, Brad; Muth, Robert; Ormandy, Tavis; Okasaka, Shiki; Narula, Neha; Fullagar, Nicholas (2009). 「ネイティブクライアント:ポータブルで信頼できないx86ネイティブコードのためのサンドボックス」 IEEE Symposium on Security and Privacy (Oakland'09) . 2011年7月31日閲覧。
- ^ 「Native Client: 構築」 . developer.chrome.com. 2014年3月17日時点のオリジナルよりアーカイブ。2014年3月16日閲覧。
- ^ Rosenblatt, Seth (2011年12月9日). 「ネイティブクライアントがChromeをハイエンドゲームプラットフォームに変える」 . CNET. 2012年8月28日時点のオリジナルよりアーカイブ。2011年12月9日閲覧。
- ^ 「Google Code ブログ: ゲーム、アプリ、ランタイムが Native Client に登場」 Googlecode.blogspot.com、2011 年 12 月 9 日。2012年4 月 25 日閲覧。
- ^ “NaClとPNaCl” . 2020年11月18日時点のオリジナルよりアーカイブ。2015年11月15日閲覧。
- ^ 「WebAssembly移行ガイド - Google Chrome」 . developer.chrome.com . 2019年3月12日時点のオリジナルよりアーカイブ。 2018年12月20日閲覧。
- ^ 「技術概要」 。2014年2月28日時点のオリジナルよりアーカイブ。
- ^ 「Pepper Plugin API project at」 。 2016年9月9日時点のオリジナルよりアーカイブ。2012年4月25日閲覧。
- ^ 「Chrome Source: Index of /trunk/src/ppapi」 . Src.chromium.org . 2012年4月25日閲覧。
- ^ 「より安全で、より安定した、より派手なFlashへの道」 2012年8月8日。 2013年8月10日閲覧。
- ^ Metz, Cade (2010年6月18日). 「Google、ChromeとPDFの統合でAdobeを強く支持」 The Register . 2012年4月25日閲覧。
- ^ 「Getting Started: Background and Basics – The Chromium Projects」 . Chromium.org. 2020年12月21日時点のオリジナルよりアーカイブ。2012年4月25日閲覧。
- ^ "Pepper.wiki" . 2012年2月24日. 2012年4月25日閲覧。
- ^ “リリースノート” . 2020年11月18日時点のオリジナルよりアーカイブ。2014年3月16日閲覧。
- ^ Metz, Cade (2010年5月13日). 「Google、Chrome OS向けネイティブコードを強化」 . Theregister.co.uk . 2012年4月25日閲覧。
- ^ Anthony Laforge (2020年8月10日). 「Chrome アプリのサポート タイムラインの変更」 . Chromium ブログ.
- ^ Zbarsky, Boris. 「バグ 729481 - 「Pepper」プラグインAPIのサポート」2016年4月15日閲覧。
- ^ Metz, Cade (2016年10月3日). 「Project Mortar」 . Mozilla . 2016年10月30日閲覧。
- ^ 「Flashとインタラクティブコンテンツの未来」Adobe Inc. 2017年7月25日。2017年12月2日時点のオリジナルよりアーカイブ。2023年7月31日閲覧。
- ^ Salter, Jim (2021年5月4日). 「Flash、またしてもさようなら—MicrosoftがWindows 10からの削除を義務化」 Ars Technica . 2023年8月1日閲覧。
- ^ 「囲碁の遊び場」。
- ^ 「Inside the Go Playground - The Go Blog」 . blog.golang.org . 2016年8月27日閲覧。
- ^ Larabel, Michael (2015年7月9日). 「Unvanquished Alpha 41リリース、NaCl VMへの移行は継続中」 . Phoronix . 2024年12月3日閲覧。
彼らはオープンソースのゲームとデーモンエンジンの開発を続けています。[…] libRocket実装はNaCl VMに移行しました。
- ^ 「Unvanquished、PNaClサポートの作業を継続」。Phoronix 。 2014年3月15日。 2024年12月3日閲覧。
オープンソースのUnvanquished開発者は、Quake III QVMの代替としてGoogleのPortable Native Client(PNaCl)のサポートに引き続き取り組んでいます。
- ^ 「Unvanquished Alpha 34 が修正をリリース、PNaCl への移植作業は継続中」。Phoronix 。 2014年12月8日。2024年12月3日閲覧。
彼らは、ゲームロジックを QVM から Portable Native Client (PNaCl) に移植する作業を、今も懸命に続けている。
- ^ Austin, Chad (2011年1月8日). 「チャド・オースティン:言語民主主義の擁護(あるいは:ブラウザに仮想マシンが必要な理由)」 Chadaustin.me . 2012年4月25日閲覧。
- ^ Carmack, John (2012年8月3日). 「QuakeCon 2012」 . youtube.com . 2012年8月26日閲覧。
- ^ Metz, Cade (2010年6月24日). 「Mozilla: 私たちのブラウザはネイティブコードを実行しません」 . The Register . 2012年4月25日閲覧。
- ^ 「Google App Engine 標準環境での PHP 7.2 のベータ リリース | Hacker News」。
- ^ “Google/Gvisor” . GitHub . 2021年10月15日.
- ^ Avram, Abel (2017年5月31日). 「GoogleがPNaClのサポートを削除へ」 . InfoQ . 2020年8月1日閲覧。
代替として、Googleは現在WebAssemblyを推進している。
外部リンク
- 公式サイト

- 「問題 - NativeClient」 . bugs.chromium.org . 2022年7月2日閲覧。
- Google I/O 2013 - YouTubeでのPortable Native Client (PNaCl) の紹介
- Google I/O 2009 ネイティブコードによる計算集約型ウェブアプリのYouTube公開– Google I/O 2009
- Native Clientに移植されたOSSプロジェクトの一覧
- Git 内のネイティブ クライアント ソース コード
- ゲームエンジンに焦点を当てたNative Client入門。Quake3仮想マシンとPNaCLの比較も紹介。Wallez , Corentin (2014年3月15日). 「サーバーサイドゲームロジックをPNaClに移行する」 。 2024年12月3日閲覧。
例
- 折りたたみ@ホーム
- PNaCl の例(Chrome 31 以降、PNaCl で実行、つまりインストールは不要)
- ネイティブクライアントSDKギャラリー
- torapp.info、ベクター エディター、特にセキュリティ印刷に強力 (PNaCl ではありません)
- NACLBox、DOSBoxをネイティブ クライアント (PNaCl) に移植したもの
- SodaSynth、Native Client 用のシンセサイザー(PNaCl ではありません)
- Abadía del crimen、SDL バージョンの Vigasoco ( La Abadía del Crimenのリメイク) をネイティブ クライアント (PNaCl) に移植したもの
- Bennugd、Bennugd ビデオゲームの例を Native Client (PNaCl) に移植したものです。