Native Clientの仕組みはどうなっているのか?


Googleが、Webブラウザ上でネイティブバイナリコードを実行する「Native Client」を公開した。


 Native Client
 http://code.google.com/p/nativeclient/


Google Earth,Quakeなどがすでに動いているようだ。


 これはすごい!ブラウザ上でX86バイナリを動かす「Native Client」
 http://www.moongift.jp/2008/12/native_client/


 サンドボックスで安全性確保、オーバーヘッド5%
 ブラウザでx86バイナリ実行、グーグルが新技術
 http://www.atmarkit.co.jp/news/200812/09/nacl.html


あと、サンプルのlife.ccにSDL_surfaceと書いてあるのでSDLの描画まわりが既に動いているのだろうから、今後、たくさんのアプリがNative Clientに移植されると思う。Native ClientはActiveXの再来とかなんとか方々で散々叩かれているのだが、sandboxの仕組みがあるのがActiveXとは大きな違いだろう。


Native Clientは現在のところx86のバイナリをブラウザベースで実行できる。「C/C++で書いたコードに対してどうやればsandbox環境を提供できるのか?」について興味のある人も多いと思う。


そもそもそんなことが技術的に可能なら、docomoFOMAシリーズにCPUリソースを食いまくるJavaなんて搭載しなかっただろうし、auだってBREWなんてうんこの漏る音のような採用しなかったかも知れないし、Android携帯にしてもJavaなんかではなくC/C++で書かせてくれたほうがよっぽど処理速度面においてiPhoneに対抗出来たはずだ。


さて、Native Clientはどのような仕組みでこのsandbox環境を実現しているのだろう?
本当にこのsandboxは安全なのか?ActiveXと本当に大きく違うのか?


論文をざっと追いかけていこう。


 Native Client: A Sandbox for Portable, Untrusted x86 Native Code
 http://nativeclient.googlecode.com/svn/trunk/nacl/googleclient/native_client/documentation/nacl_paper.pdf

続きを読む