Androidがあまりにも高いスペックが必要で、ローエンドマシンに向かないという話

昨日もFirefox OS関連のブログを書き、その中でAndroid 4.0があまりにも高いスペック(iOS 6を越える)を必要としていることについて紹介しました。その関連で、以下の記事を見つけましたので紹介します。

tsuchitani氏による「【メモリ256MB】この軽さが実現するとは…Firefox OSが示すスマートフォンOSの新機軸」

Androidは元々組み込み機器で広く用いられているARMやMIPS、そしてパソコンで用いられているx86、と異なった命令セットを備えた機種で同じアプリが動作するように、Dalvik VMという仮想マシンをOS本体に内蔵し、その上で様々なアプリを動作させる一方で、それぞれのハードウェアに搭載されているCPUの命令セットを直接実行して高速動作するアプリも許容するなど、込み入った構造になっていて、しかもOSの進化の過程で様々な新機能や、アプリが新しい機能を利用可能とするための新APIを追加するなど、元々複雑なOS構造をさらに複雑化させるような方向で機能強化が進められてきた結果、高機能化の代償として必要となるメモリ容量はOSのバージョンアップの度にどんどん増大してきました。

Android搭載スマートフォンの場合、搭載されるメインメモリ(RAM)はバージョン1.xで256メガバイト、バージョン2.xで512メガバイト、バージョン4.0.xで1ギガバイト、バージョン4.1/4.2で2ギガバイトといったところで、事実上バージョン4.x搭載端末のみとなっている現行製品では、1ギガバイトあるいは2ギガバイト搭載(※ごく一部に継続販売中の製品でバージョン2.3搭載でメモリ512メガバイト搭載の機種が残っています)となっています。
つまり、Android バージョン1.x搭載の現行製品がまず「ありえない」現状では、端末に搭載されるRAMはどんなに削ってもバージョン2.x搭載端末で512メガバイト、バージョン4.0.xへのバージョンアップを考慮すると、せめて1ギガバイトは欲しい、ということになります。

そんなわけで、メモリ容量削減は結構スマートフォンの端末価格低減に「効く」のですが、既に記してきたように、最新版のAndroidが今更512メガバイトやそこらのメモリで動作するようになるとも思えず、512メガバイトのRAMで済ませるには「Androidではない」、RAM容量を余計に消費しない他のOSが必要になります。

画面の解像度を下げても、プロセッサグレードを下げても、OSそのものの稼動に必要なメモリ容量はそれほど変わるわけではありませんから、わずか256メガバイトのメインメモリでHTML 5対応Webブラウザまで動いてしまうこのFirefox OSは、本当にコンパクトにできていることがわかります。

未だ世界中で膨大な数の端末が稼動し続けているフィーチャーフォンを完全駆逐するとしたら、それはこのOSを搭載する端末になるのかも知れません。

結論としては私が昨日書いたブログと同じです。

Androidは進化の方向を間違えたのか?

以上のように、私は発展途上国でAndroidが下火になり、一気にFirefox OSやTizenが盛り上がってくると予想しています。もし本当にそうなったとき、Androidはなぜ失敗したのかという問題が当然ながら気になります。ずいぶん気が早いのですが、Androidの問題点は現時点で既に見えてきていますので、これについて考えたいと思います。

Java VM (Dalvik VM)という選択の誤り

AndroidはJava VM、正確には亜流のDalvik VMの上で動作します。JavaのJITコンパイラの性能が向上し、スピード的にはCで書いたプログラムに匹敵するようになったという議論はありますが、多くの場合これはRAMの使用量を犠牲になり立っている話です。確かにJava VMのJITコンパイラは高速です。しかしそれを実現するために、Cで書いたプログラムよりも遙かに多くのRAMを消費してしまいます。

携帯電話のようにハードウェアリソースが非常に制限されている状況では、Java VMという選択はある程度スペックを犠牲にしてもよいというものです。AndroidがそもそもJava VMという選択を採ったのは、その前に携帯電話の開発言語としてJava MEが使われていたことの名残だとも言えます。またハードウェアメーカーではないGoogleとしては、様々なCPUでも動作する開発環境が必要だったのかも知れません。いずれにしてもJava VMという選択はスペックを犠牲にしても良いという判断の上に成り立っていたと想像されます。

それではどうしてスペックを犠牲にしても良いという判断をしたのか?それはiPhoneを想定していなかったからです。OracleとGoogleのJavaに関する法廷闘争の中で、Androidの初期プロトタイプが公開されました。このプロトタイプは2006年のもので、iPhoneではなく、当時はやっていたBlackBerry様のデザインです。このことからわかるのは、Androidは2006年まではグラフィックス処理などをあまり必要としないBlackberry様のデバイスを想定していて、そのためならば処理能力は犠牲にしても良い判断したのだろうと思われます。

iPhoneは最初からグラフィックスをふんだんに使い、マルチタッチのUIを想定して開発されました。そのためには高い計算処理能力が必要と最初から考え、最適化された開発環境(Objective-C)を用意しました。

その一方でAndroidはガラケー並みの処理能力しか必要としないUIを想定して開発されました。一方で数多くのメーカーに採用してもらう必要がありました。そこで高い処理能力よりも移植性の高さを優先し、Java VMを採用したと思われます。

このようにAndroidがJava VMを採用した判断は、現在のスマートフォンを全く想定していない頃のものであり、今では足かせになっている感じがあります。

iPhoneと戦うことの誤り

Androidは完全にiPhoneに追いつき追い越せとやってきています。何とかiPhoneと同等のUIを手に入れたい、何とかiPhoneと同等の動作の滑らかさを手に入れたい、何とかiPhoneと同じ数だけのアプリをそろえたい、と完全にiPhoneを追いかけています。

そのためにローエンドに向けた製品を用意していません。Androidが低スペックデバイスで動作するようにはしていません。ローエンド市場は古いバージョンのAndroidでカバーするという状況になっています。

戦略としてこれは正しかったのでしょうか?

ポイントは

  1. iPhoneに果たして勝てるのか?本当にトップのブランドになれるのか?トップブランドになるのと2番手ブランドになるのとでは大きな違いがあります。業界をリードするトップブランドだけが本当のブランド力を手にすることは珍しくありません。Androidでそこまで勝ち切れるか、まだまだかなり疑問があります。
  2. ローエンド市場をガラ空きにしてしまっているのは大丈夫か?Androidのマーケットシェアが高いのは、かなりの部分ローエンド市場のおかげです。しかしそれをいつまでも古いバージョンのAndroidでカバーするのは危険です。
  3. ガラ空きにしてしまっているローエンド市場でAndroidがFirefox OSやTizenに負け始めるようなことがあるとどうなるでしょうか?

ここ1−2年のシナリオとして、Androidにとって最悪のシナリオはこうです。トップブランドでiPhoneに勝ちきれず、その一方でローエンド市場でFirefox OSやTizenが成功を収めはじめるシナリオです。そうなるとAndroidは中途半端な立場になってしまいます。おそらくは引き続きiPhoneに勝とうとハイエンド市場での勝負を仕掛けると思いますが、そうなるとAndroidをこれまで支えてきたローエンド市場を完全に失ってしまう危険性があります。

Clayton Christensen氏のInnovator’s Dilemma風に考えれば、上記の状況が続いているうちにFirefox OSやTizenの機能が増えて、アプリも増えてきて、そしてローエンドだけでなくハイエンドを伺うだけの能力を身につけてくるでしょう。Androidがこの時点でトップブランドになっていなければ、行き場を失います。

  • 矢部 雄二

    元記事もそうですが、実機の動作も見ずになぜFirefox OSやTizenがローエンドで大丈夫と思えるのか、これらのOSの推進者や支持者にしてもなぜそうした明らかに間違った(詐欺的といってもいいです)宣伝がなぜできるのか、首を傾げざるを得ません。AndroidがモバイルにJavaを採用したことが失敗だったとすれば、JavaScriptも同じでしょう。Firefox OSの低スペック端末での動作を実際にご覧になったことはありますか? Tizenも先のMobile World Congress 2013では酷い動作だったとの報告が多数ありますよ。

    そもそも、どんなOSを採用したところで、ブラウザの動作がCPUの性能以上に速くなることはありません。WebKitもGeckoもV8もIonSpiderも、結局C++ネイティブで書かれ、基本的には最大限高速に動作しています。Androidでも、ブラウザの動作にDalvikはあまり関係ありません。バイパスしていますので。

    自己紹介を拝見するとネイティブ開発の経験があまりないようですが、そのせいか、根本的なところですさまじい誤認をされているな、という印象です。ちなみにObjective-Cも実は遅いです(http://www.anlyznews.com/2011/02/objective-c.html)。ではなぜiOSが軽快に動作するのか、それが分からないうちは根本的な誤りを犯していると考えたほうがいいです。

  • 矢部さん、コメントありがとうございます。

    今回はJava VMのことを書きましたが、ちょっと蛇足でした。本題にとって大切なのは、最新のAndroid OSが高いハードウェアスペックを要求することだけです。これは各社のハードスペックとベンチマーク結果や使用感を比較すれば、明確な事実です。

    なぜそうなるかという詳細な原因は、本題とは直接関係ありません。Objective-C, Java VM, C++, Javascriptの比較だけの問題ではないでしょうし、そこを議論しても本題の結論に変わりは無いと思っています。Java VMの話をしたのは、それがAndroidの生い立ち、つまりRIMクローンを目指して生まれた頃の戦略を良く反映しているからです。

    一方でFirefox OSで興味深いのは、ローエンドを最初から狙っている点です。

    技術論ではなく、戦略論です。

    矢部さんはFirefox OSがローエンド機で果たしてまともに動作するかどうかを危惧されているように思います。技術論としてはもっともな意見です。

    私はそれとは別に、Firefox OSがローエンド機できっとうまく動くようになるだろうと考えています。最初からそれを最大の目標にしていますので、Androidよりもきっとうまく動くようになるだろうと思っています。技術論も多少ありますが、むしろ戦略論で考えています。

    もしそれが現実になると、世の中はかなり面白くなります。

  • Pingback: Androidの方向転換予想:Andy Rubin氏の降格を受けて | バイオの買物.com 制作者の頭の中()

  • Goro Hayakawa

    Android端末は高速なゲームエンジンを使いJava + DalvikVMを極力使わず、C++ネイティブで作る方向性を模索してます