»
S
I
D
E
B
A
R
«
Native Client
December 9th, 2008 by mootoh

今朝目覚めたら、Google が Native Client という面白そうなものを出していたので、論文 (PDF) をざっと読んでみました。で思ったのは、これは Google の 分散 OS ミドルウェア なのだな、ということ。

以下、自分が受け取ったことを書きます。ちゃんと知りたい方は、論文をあたってください。(参考: id:amachang による実践エントリ)

かんたんなおさらい

Native Client とは?

ブラウザの中で、x86のネイティブコードを実行できるようにする仕組みです。

何がうれしいの?

  • 実行速度。スピード! とにかくもっとスピードを!!
  • マシンの機能をフルに使える。ファイルアクセスも、マルチスレッドも、SIMDでさえも書けるよ!
  • それでいてセキュア: 多段サンドボックス方式で、危険なことができないようになってます。

例として挙げられているのは、写真をあつかうWebアプリ。JS+HTMLでユーザインターフェイスを書いておいて、スピードが必要な画像処理はローカルのネイティブコードでやるという処理分担です。 ユーザは JS/HTML/ネイティブコード の3つを書くことになりますね。

それに加えて、Native Client 間の通信もサポートされています。先ほどの写真アプリだと、画像処理に加えてローカルストレージへのアクセスを提供するライブラリと組み合わせる、なんてことも難なくできるという。

みどころ

ランタイムシステムのところでは、とにかく OSっぽさ が随所にでてきますね。マイクロカーネルみたいなもんだよ、とか IPC とか UDP ライクな通信とかマルチスレッドとか。sbrk(), mmap(), malloc(), free() みたいな API を提供するとか。それでいて、 Windows/Mac/Linux といったマルチプラットフォームで動きますと。なので、ぼくはこれこそが Google OS なのだと思いました。下位に存在する OS レイヤをラップするような、それでいて低レベルなタスクをこなすミドルウェア

NativeClient-1

Intel TBB (Threading Building Blocks) でさえ移植できたよ! というのもおもしろかったです。

どうやってセキュアにするのか

2段階のサンドボックスでアプリを閉じ込めます (3) 。Inner (HW, x86 アーキテクチャの機能を利用) と Outer (SW, ptrace とか使う) の2つ。ここの実装がバイナリハックス的に面白いですね。実行できる命令の種類に制限をつけるとか、GCCに手を入れて出力する機械語をサンドボックス用にするとかそういうあたり。論文読む方はこのへんを重点的にどうぞ。

3.1 の Inner Sandbox の性能について述べてるとこが楽しいですね。ユーザのコードがSandbox規約に違反してないかをチェックする Validator が、たった 500 statements の C コードであり、コンパイルすると 6000 バイトでしかないよ、と胸を張っているあたりにぐっときます。

Java とか Flash とかとどう違うの?

より低レイヤなことができる、ということなのかと思いました。 Java は思想的に近いだろうけど、さらに泥臭いことができるという。あと、 Java とか Flash だと、中間に VM というレイヤがあるのですが、 Native Client ではそこをすっとばしていきなりネイティブをさわりにいくというあたりが Google っぽいなと (参考: Google Chrome)。

そもそも、記述言語として使えるのが GCC toolchain が提供するものなので (3.6) 、まあ C/C++ になりますよね。そんなレベルでゴリゴリ書いたコードが Web アプリで動かせるという。データベースと回線の太さに律速されるようなふつうの Web アプリ屋さんにはオーバースペックになるかもしれませんが、 Goolge みたいな用途ではバリバリ使うのかしら。

疑問が残るところ

2.1 では、 UI を書く JS+HTML コードと .nacl なネイティブコードはプラットフォーム間でポータブルとあるのですが、その後の章でそれについて触れられていないのが気になりました。gcc toolchain を使うんだし、 Windows とかどうするんだろうな、と。そのままのバイナリでいけるのかな。

2008-12-10 01:33 追記: takuma104さんのブコメ によると、同じバイナリ (ELF フォーマット) が Mac でも Windows でもそのまま動いたとのこと。3.2 で書かれている、セキュア ELF ローダ (sel_ldr) とその先にあるランタイムで、プラットフォーム間の差異を吸収しているのでしょう。

あと、評価のところ (4.3) で、 H.264 decoder を Native Client のコードと元々のコードとで比較しているのですが、実測値がでてこず

Performance of the original and NaCl versions were comparable and limited by video frame-rate

としか書かれていなかったのが寂しかったです。

思うところ

  • ブラウザの中で動く言語処理系とかを簡単につくれるのではないでしょうか。これまで JavaScript で実装した処理系とかいくつかありましたけれど、そういうのがもっと簡単につくれる (というか、移植できる) ようになる気が。
  • GPGPUと組み合わせてみてもおもしろそうですね。ちょうど OpenCL 1.0 も出たところだし。
  • 練習問題: Gears との関係は?

Native Client が流行るかといわれるとそうでもないかなーと思うんですが、やはり Google のインフラ技術はおもしろいですね。


9 Responses  
word-iteration writes:
December 9th, 2008 at 11:32 pm

Native Client早速…

試してみました。もうすでにやってみた報告とか論文を読んでしまう猛者もいますね。

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

私もクライアントサイドプログラミングは青春の…

次なるもの » Blog Archive » mootoh.log - Native Client writes:
December 10th, 2008 at 12:57 am

[...] original article [...]

SQ writes:
December 10th, 2008 at 5:32 am

javaかなーと思いました。 javaがVMを持っているのは明示的にハードをモデル化していて、 異なるハードにまたがるには本質的にそういう構造は不可欠だと思います。 Native Clientも同じなので。。 もしNative ClientがVMを切ったとすれば得たものはスピードだけど、失ったものはなんでしょうか?

クラウドコンピューティング.jp» ブログアーカイブ » mootoh.log - Native Client writes:
December 10th, 2008 at 6:19 pm

[...] mootoh.log – Native Client. [...]

mootoh writes:
December 10th, 2008 at 8:21 pm

SQさん:

Java は近いですよね。 Native Client は、アーキテクチャにどっぷり依存した仕組みですね。 ふつうだったら VM でアーキテクチャ間の差異を吸収するのですが、そのポータビリティよりもスピードをとったと。 もうみんな x86 でいいじゃん、みたいな割り切りを感じます。8割のクライアントがx86だとしたら、そこを最適化するぜ、というような。

失ったもの… いちばん大きなデメリットは、開発者の手間が増えたことでしょうか。 それぞれのアーキテクチャ用にネイティブコード部分は書かないといけなくなるので。

SQ writes:
December 10th, 2008 at 9:07 pm

mootohさん、

返答どうもです。 なにか、勘違いをしていたかも。Native Client はOSの上にのらなそうですね。OSに穴を開けるのかw

links for 2008-12-10 « 個人的な雑記 writes:
December 11th, 2008 at 7:02 am

[...] mootoh.log – Native Client (tags: nativeclient firefox) [...]

links for 2008-12-10 « tscpannex writes:
December 11th, 2008 at 9:33 am

[...] mootoh.log – Native Client 互換性とかってどうなんだろ。よくわからないもので。 (tags: google nativeclient nacl firefox) [...]

mootoh.log - 2008年をふりかえる writes:
December 31st, 2008 at 12:43 am

[...] Native Client [...]

Leave a Reply

»  Substance: WordPress   »  Style: Ahren Ahimsa