Googleは、ChromeにLLVMのビットコードを走らせることでChromeにおけるネイティブアプリケーションのサポートを広げている。
Googleは、引き続きChromeでネイティブアプリケーションを走らせることを推し進めており、 予期された PNaClすなわち Portable NaCl - ‘pinnacle’と読む、をGoogle I/O 2013で発表した。 PNaClのツールチェーンは変則的である。C/C++アプリケーションを各ターゲットのハードウェアプラットフォーム向けにコンパイルするのではなく、開発者は、1つのLLVMビットコードを生成する必要がある。このビットコードがあらゆるChrome クライアントにロードされ、ネイティブコードに翻訳され、検証され、ローカルに実行される。
現在、PNaCl は、32-bit x86, 64-bit x86, ARM用のChrome 29 でサポートされている。クライアントは、あらゆるウェブページ上でネイティブモジュールを走らせることができる。 – それらをChrome Web Store用のアプリにパッケージ化する必要はない。 –それが完全にリリースされる時には。PNaCl モジュールは再コンパイル無しで将来のアーキテクチャ上で走らせることができる。もっと面白いのが現在サポートされている言語は、C/C++のみであるが、 PNaCl モジュールは理論的にどんな言語で書かれていてもLLVM ビットコードにコンパイルできる。たとえば、ActionScript, Ada, D, Fortran, Haskell, Javaバイトコード, Objective-C, Python, Ruby, Rust, Scala 、C# などの言語を使って、最低限の調整、あるいは全くの調整なしで、広範囲のレガシーそして新しいアプリをChromeで走らせることができる。
PNaCl は、2010年に4人のGoogleエンジニアによって提案された(PDF)。著者たちが実現しようとしている構想が以下である。
- ISA中立なフォーマットを提供し、コンパイルされたモジュールはソースコードからの再コンパイル無しで多種多様なターゲットプラットフォームをサポートする。
- NaCl開発者がポータブルな実行モジュールをビルド、テスト、デプロイするのを簡単にする。
- 当初、 x86-32, x86-64、ARM 命令セットをサポートし、将来他の人気のあるCPUをサポートするのを容易にする。
- ネイティブクライアントのセキュリティとパフォーマンス特性を維持する。
PNaCl は、元々のNaClサンドボックスメカニズムを尚使っているので、以下のグラフが示すように翻訳されたビットコードを走らせているときは、セキュリティを強いる。
PNaCl ツールチェーンは、 Windows, Mac, Linuxで動き、SDKは、プロジェクトのウェブサイトから入手できる。