PNaClのドキュメントを電車の中で読んだ。
http://nativeclient.googlecode.com/svn/data/site/pnacl.pdf
PNaClとはCPUの依存性を廃したNaClである。NaClはOSに非依存だがCPUに依存する。そのため、マニフェスト(.nmf)にCPU毎のバイナリを書いておき、PCがnexeを読み込むとき、マニフェストを見て自分のCPUにあったものを読み込むようになっている。それに対してPNaClはバイナリをCPUに依存しないLLVMフォーマットで生成し、読み込んだ後でPCが持つCPU用のネイティブコードに翻訳して実行する。
PNaClは完全にネイティブコードに翻訳した後実行するところがJavaとかと異なるところ。あくまでブラウザ上でネイティブ・コードを実行することが目的であり、その可搬性を向上させるためにLLVMフォーマットを採用しているのである。
PNaClはCPUに特化した命令を埋め込むことができる。ターゲットCPUがx64の時だけは埋め込んだ命令を実行させるといったこともできるようである。