iPhone が Flash をサポートしない本当の理由を考える

はじめに

周知のとおり、AppleiPhone 上での Flash Player を延々サポートしないため、Adobe は Package for iPhone を Flash CS5 に用意して Flash/AS プログラマーに iPhone アプリケーション開発の戸を開こうとした。
そんな中 Adobe が CS5 を発表する直前、AppleiPhone OS 4.0 の登場とともに iPhone Developer Program を改訂して Package for iPhone などのサードパーティーツールを締め出しました。
Adobe は結局この機能の今後の開発を諦めて、Android へのシフトを発表しました。。
様々な議論が行われる中、スティーブ・ジョブズThoughts on Flash の声明を出しました。

ただこれでも真意の探求は止まらず、The real reason why Steve Jobs hates Flash - Charlie's Diary など様々憶測を呼んでいます。

今回の件について自分も何か裏があるのではないかと思い、色々と頭を巡らしてみました。

iPhone の Flash サポートについて考える

まず整理しておきたいのは、iPhone の Flash サポートには二つの事柄があるということです。

  • iPhone 上のブラウザで Flash Player がサポートされること
  • Package for iPhone による Flash アプリの iPhone アプリケーションヘの変換

前者については、Thoughts on Flash に挙げられた理由でとりあえず自分は納得しました。
Flash が使われるのは、動画配信、クールなフルFlashサイトもしくは広告であり、動画はHTML5で足りるし、フルFlashなサイトはそもそもロールオーバーのサポートがないと動作しないためPC用ユーザーインターフェイスのままでは閲覧が困難だろうし、広告は見られなくても問題がない。

どうしても不可解だったのは後者です。Thoughts on Flash の最後の一番重要な理由であるサードパーティのクロスコンパイラがあると最新のSDKで提供される機能が使われなくなるといった話は、結果的に問題にはならないと自分は思いました。

  • Flash はシングルスレッドであるため、今後のマルチタスクアプリケーションの開発には向かないし、マルチタスクアプリを作ろうとする開発者が出ないわけがないこと
  • 利用者がストレスなく反応するアプリケーションを使おうとすれば、結果的によりネイティブに最適化されたアプリケーションが求められためFlash変換アプリに偏ると思えないこと

これらの理由から、プログラマーが Flash アプリケーションに向かってしまうとはどうしても思えませんでした。

ガベージコレクションとメモリ管理

そこで改めて iPhone Developer Program を改訂内容を見ると、Objective-C, C, C++ に限定しているわけです。これらに共通することとは何か、ガベージコレクション (GC) がないことです。Objective-C はバージョン 2.0 で GC をサポートしていますが iPhone OS ではサポートされません。

つまり、最適化されたメモリ管理を iPhone アプリの必須条件としている訳です。本来、GC 依存でメモリ管理が行われる言語で書かれたコードであれば、ネイティブアプリケーションに変換したところで何かしらの GC 機構が必要となるでしょう。その性能はその変換ツールを提供するベンダーの能力に依ります。

GC はメモリ消費もさることながら、不要なメモリ領域を回収するときにアルゴリズムにも左右されますが CPU をそこそこ消費します。だからリソースが限られたモバイルアプリケーションでは使わなくて済むならその方が良いでしょう。

ジョブズAdobe プロダクトのメモリ管理とその改善への取り組みを信用していないようにも思います。Mac が頻繁にクラッシュする原因が Flash Player だというのも、メモリアクセスエラーに依るものかもしれません。

(Package for iPhone を実際に使ったことはないですが)直接メモリリソースを操作できない ActionScript でコーディングして、ネイティブアプリに変換するので、Adobe 製の何かしらの GC がそこにはあるわけでしょう。

ちなみに iPhone OS にも Safari 上で JavaScript を実行するときに GC は使われています。そう考えると Opera Mini Browser はなぜ OK だったのか HTML5 + JavaScript ならば良いのかということになりますが、あればリモートサーバー上で JavaScript を走らせることで回避している訳です。

ここで今一度、iPhone での Flash Player のサポートに話を戻すと、Flash Player では AVM による GC 機構が動いています。それゆえサポートしないとすれば、上記の方針と一致します。

自分の結論

ということで結論ですが、「サードパーティ製の GC 機構を iPhone 上で動作させたくない」というのが理由ではないでしょうか。マルチタスクアプリが増えれば、ただでさえメモリは使われますし、ガベージコレクト時によるストップタイムも望まれたものではありません。自分はこの考え方には賛同します。

面白いのは対照的に Android アプリケーションは Java で作られます。今後のバッテリーの保ちや動作スピードなど両スマートモバイルの評価がどうなっていくのか注目したいと思います。

上記の内容には憶測の部分があるため、あくまでも一個人の考察としてお読みください。