2013-11-01

WebView Hell

現在の(ちゃんと開発されている)OSってのは、だいたいが組み込みのHTMLレンダリングエンジンを持っていたりする。こういう流れは、Internet Explorer 3以降やAppleのCyberDog (誰も知らないと思うけど) が最初だと記憶してるけどね。iOSのおかげでWebViewという表現がよく使われるのでWebViewって言葉を使って書いてる。

Trident

独禁法の裁判でもOSなのかアプリなのかという点で争ったこともあるけど、現在の判断だとOSという判断で差し控えないと思う。Internet Explorer 4にShell Update (Active Desktopと呼んでたけど) が含まれていた関係上シェルの動作に支障がきたすことがあったが、このShell Updateをインストールしなかったとしてもいろんな問題が生じてた。

例えばOS初回起動時に表示される"ようこそ画面"はHTMLで書かれてて、HTML Component (HTC)を使って動いていたのだけど、これがInternet Explorerのバージョンアップでスクリプトエラーになるとか、OS側でWebViewを使ってるコードは結構問題を引き起こしてた。(Windows 2000以降のExplorerのビューもHTML使っててみたいな話があってだな、動作が変わってしまう機能が存在してた)

OSとWeb Browserは切り離してバージョンアップ可能な仕組みを持ってたのにも関わらず、OSモジュールとしてメンテナンスされている古いバージョンのモジュールを残す仕組みを持っていないためにいろんな問題を引き起こしてた。Windows XP移行は Side-by-Side (SxS) が導入されているので古いバージョンのモジュールを残すことはできるようにはなったけど、Internet Explorerはいまだにこれを利用してない (はず)。

その変わりといってはなんだけど、Shellに関するモジュールだけはInternet Explorer 7以降ではアップデートしないような構造にはなった (IEFRAME.DLLというバカでかいモジュールがその役目)。

レンダリングエンジンが変わってしまうってところに関しては解消されなかったけどね。

そんな感じでOS内蔵のレンダリングエンジンをOSとは別にアップデート可能にするといろんな問題を引き起こすのをMicrosoftは証明したわけだ。

Chrome + blink

Android上で利用できるWebViewはシステム組み込みのものを利用することになっている。これがAndroid 4.4からは独自WebKitベースのものからChromeのBlinkベースに変わりはするけども同じような問題を持つ。標準ブラウザがChromeになるっぽいってことからこれで非互換からおさらばできるって考えてる人が結構いるみたいなんだけど、それは無理だと思う。それはChromeのバージョンアップがシステムのWebViewのバージョンアップを含めることができるかどうかなんだ。

そもそもアプリケーションパッケージのインストール機構でOSのファイルを置換できる仕組みをGoogleは取らないだろうし、一つのアプリケーション (この例でいえばChrome) のバージョンアップでシステムのフラッシュに入ってるモジュールを置換できるような方式をとることができることを許すとなれば、それはある種の脱獄の穴を作ることになる。Playストアからアップデートさせるんじゃなくて、6週間ごとに新バージョンのChromeを含む新しいシステムアップデートが全端末にOTAされるとかって方式になるんだったら、その限りではないけどね!。

また一番重要なのはシステムのWebViewはChromeベースになったとしてもその使ってるコードはおそらくベンダがカスタマイズしたコードでしかなくなる。そのカスタマイズさがフラグメントの理由になるんだ。しかもApache 2とかBSDライセンスだと変更点は公開する必要がないから変更点はベンダしか知らないからブラックボックスでしかない。しかも独自のバグがあってもそれはGoogleがやったことではないからGoogleが直せないんだ。

だからハッピーになるかと言えば、まぁならないんじゃないかな?。回避策はえっと、Android認証のテストツールにBlinkのテストツールをすべてパスするようなことを要求するしかないんじゃない?そうすればマシになると思うよ。

Firefox OS

OSとブラウザが完全統合されている場合で一番いい例がFirefox OSになると思うからそこも最後に書く。

個人的にはFirefox OSはフラグメントはAndroidほどひどいものは起きないと予測してる。なぜかというとGecko部分のソースコードはMPL2ライセンスであるってこと。MPL2だとソースコードの変更点は要求があれば公開しないといけない。各ベンダでカスタマイズってのは今後起きるとは思うけど、変更点がわかる以上ブラックボックス化しないから、どうにか対処可能じゃないかと。

もちろんフラグメントは起きるだろうけど、Androidほどはひどくならないんじゃないかな。まぁ今後はどうなるかは興味ある。

0 件のコメント: