19
意見:iOS 4.3のWebパフォーマンスの違いはセキュリティの問題

iOS 4.3アップデートにおけるあまり知られていない改善点の一つは、SafariのJavaScriptパフォーマンスが大幅に向上したことです。これは、AppleのWebブラウザのMac OS X版で使用されているNitroエンジンの採用によるものです。しかし、最近の複数の報道によると、iOS 4.3のWebアプリやWebブラウザを組み込んだアプリのパフォーマンスは、Apple独自のMobile Safari Webブラウザよりも大幅に劣っているとのことです。

陰謀論者たちは勢いを増し、これはウェブアプリをネイティブアプリより遅く見せかけるアップルの巧妙な策略に過ぎず、開発者をApp Storeの魔の手の中に閉じ込めておくための策略だと主張している。

Appleはこの食い違いを認め、The Register紙に対し「埋め込みウェブビューアーはSafariのウェブパフォーマンス最適化を活用していない」と述べたものの、一部のパフォーマンスベンチマークには「欠陥」があると述べている。しかし、これはAppleの圧力によるものなのだろうか?確かなことは誰にも分からないが、ジョン・グルーバー氏が木曜日に自身のウェブサイト「Daring Fireball」で指摘したように、現状には正当な技術的理由があり、iOSの仕組みや、Appleが自社のモバイルOS上でセキュリティを確保するためにどれほどの努力を払ってきたかについて、興味深い光を当てている。

JavaScriptの仕組み

この問題の根底にあるのは、Nitroと呼ばれる技術です。当初はSquirrelfish Extremeと呼ばれ、2008年に発表されたNitroは、WebページでJavaScriptコードを実行できるようにする基盤エンジンです。これは、Webページがアニメーションやアプリケーションのような機能といった複雑なインタラクティブ機能を提供する手段の一つです。

JavaScriptはインタプリタ型言語です。つまり、JavaScriptコードを含むWebページが読み込まれるたびに、ブラウザはコードを評価し、コンピュータが実行できる一連のアクションに変換する必要があります。人間に例えると、ハンドルから手を離した瞬間に運転の仕方を忘れてしまうため、車に乗るたびに運転教習を全てやり直さなければならないようなものです。

明らかに、これはコード実行方法としては極めて非効率です。Nitroは数々の革新技術の中でも、ジャス​​トインタイムコンパイルと呼ばれる手法を活用するように設計されており、JavaScriptを効率的にバイナリコードに変換します。これはコンパイルプロセスを省略するものではありませんが、従来のJavaScript実装のステップバイステップ実行よりもはるかに効率的なコードを生成します。車のアナロジーを続けると、Nitroを使うことは、映画『マトリックス』のような神経デバイスを脳に埋め込み、F1のプロのように車を運転するために必要な知識をすべて瞬時に教えてくれるようなものです。言い換えれば、Nitroを有効にすると、ブラウザが「カンフーを知っている」ことになります。

データとコード

iOSの場合、ここが少し厄介な点です。モバイルデバイスの整合性を保つため、Appleのモバイルオペレーティングシステムが動作する環境全体は、Appleが(デジタル暗号署名によって)承認したバイナリコードのみが実行できるように設計されているのです。

通常、これは問題にはなりません。なぜなら、すべてのアプリは承認プロセスを経る必要があるからです。承認プロセスによって、Apple はアプリを一般に公開する前にその信頼性とセキュリティを検査する機会が与えられます。また、悪意のあるコードが含まれていることが判明した場合は、アプリの実行を停止することもできます (悪名高い「キル スイッチ」)。

残念ながら、Nitroはこの綿密に構築された環境に支障をきたします。ジャストインタイムコンパイラが起動すると、JavaScript(プレーンテキスト)がデータ使用用にマークされたメモリ領域にバイナリコードに変換されます。この領域は通常、ドキュメント、グラフィック、サウンドなどの用途に使用されるため、実行コードを含めることはできません。

Nitro は、生成したコードを実行するために、コードが格納されているメモリをコード実行用に切り替える必要があります。しかし iOS では、このためには特別な権限が必要です。サードパーティ製アプリには、通常この権限が許可されません。その理由は単純で、サードパーティ製アプリの使用を許可するとオペレーティングシステムの基盤そのものが否定されてしまうからです。まるで、囚人を独房の鍵で閉じ込めるようなものでしょうメモリ領域を任意のアプリに任意に実行可能としてマークできる可能性が開かれていれば、開発者がインターネットからコードをダウンロードして実行することを、Apple やエンドユーザーに知られずに阻止することは不可能です。

Safariはできて、他社はできない理由

Safariがサードパーティ製アプリのWeb表示よりも高速な理由は、Appleが自社のコードがiOSのセキュリティ原則に違反しないと信じているため、通常のセキュリティポリシーの例外として認められているからです。Nitroはコンパイルしたコードを実行できるため、ブラウザ上のWebアプリのパフォーマンスが向上します。

ホーム画面に追加されたWebアプリはどうでしょうか? 実は、これらのアプリはSafari内では動作しません。Webという別のアプリ内で実行されますこのアプリは動的なコードの実行を許可されていないのは明らかですが、その理由は現時点では明らかではありません。

Apple はサードパーティ製アプリによる Nitro の使用を許可するのでしょうか?

将来的には、Appleは分割処理と呼ばれる手法を用いてこの問題を解決する可能性が高いでしょう。この手法では、ブラウザのレンダリングエンジンを、それをホストするアプリとは実質的に完全に独立した実行空間に保持します。Appleが開発中の次期Webkit 2エンジンの一部であるこのアプローチにより、ブラウザに適切な権限を付与しながらも、ホスティングアプリケーションに権限が及ぶことを防ぎます。これが実現すれば、Nitroとその高速化機能がすべての開発者に利用可能になるはずです。

もちろん、Appleが全く異なる解決策に取り組んでいる可能性も十分にあります。しかし、ご覧の通り、現状の理由には完全に論理的な説明があり、しかも、Appleに悪意があるとする理由も全くありません。いずれにせよ、Appleの秘密主義的な姿勢は、今後何年も陰謀論者たちを魅了し続けるでしょう。