誠ブログは2015年4月6日に「オルタナティブ・ブログ」になりました。
各ブロガーの新規エントリーは「オルタナティブ・ブログ」でご覧ください。
Androidスマホが簡単に動かなくなる理由と、ITエンジニアの志向性
当ブログ「ビジネスライターという仕事」は、2015年4月6日から新しいURL「http://blogs.itmedia.co.jp/toppakoh/」 に移動しました。引き続きご愛読ください。
先日誠ブロガーの島田徹さんとお会いしたときに、彼のDocomoのスマホも動作が重たいので、僕のREGZA Phone T-01Cだけじゃないんだと安心した。僕だけなら嫌だが、みんなが不便なら許せる。
島田さんの機種が何だったかは忘れたのだが、ある程度サクサク動くのは、うちのヨメのGalaxy-Sぐらい。ただ、これも突然リブートしたりするのは言うまでもない。
まあ、1年も経たないうちに新機種が出るので、だんだん良くはなっているのだろうけど、あまり芳しい噂は聞かない。バッテリーがすぐになくなるのは相変わらずのようだし。
Androidは、なぜこうなるのか?
まず、Androidのアーキテクチャーを調べてみた。
「日本Androidの会」というのがある。これがどの程度の集まりなのか調べ切れなかった、そう名乗るだけのことはある、技術的には正しそうな資料を見つけた。
▼Androidアーキテクチャの特徴
http://www.android-group.jp/index.php?plugin=attach&pcmd=open&file=RIA-Android.pdf&refer=%B5%BB%BD%D1%BB%F1%CE%C1
技術者向け資料(技術的に難しくはなく、単にターゲットの話)なので、技術者以外の人は読まないでいいと思います。
僕なりに、技術者以外の人(といってもIT Mediaのサイトにくるレベルの人)向けにまとめると下の図のようになる(なお、「Android概要」という資料も参考にした)。
細かいところはいいので、Androidというのはこのような構造になっているということを何となく押さえてほしい。
核心部分だけを説明する。以下、参照した資料は記事に挙げたものだけなので、筆者の想像が入っていることには留意されたい。
上から、3つ目以下の層(CPUからライブラリまで)については、基本的にスマホを売っている業者が提供するものだ。ここをAndroidのインフラ部分と呼ぶことにする。
なお、僕にはGoogleが何を提供しているのかは実はよく分かっていない。多分ライブラリ、ランタイム、アプリケーション・フレームワークの3つの雛形程度だと思う。違ったとしても、今日の論点とはあまり関係はない。
アプリは、作成する能力さえあれば、誰でも提供できる。
NTT Docomoが提供しているSPモードメールという、レベルの低いプログラマが書いているのではないかと想像されるアプリが世の中にはある。SPモードメール以外では、facebookアプリとGmailあたりはかなりひどい。よく使われるアプリばっかり、なんでこんなにおざなりなんだろう・・・(いつも、腹立たしい思いをしているので、ついきつい言い方になった)。
しかし、まともなアプリももちろんある。というか、そちらが普通である。まともなアプリがあるからには、アプリケーション・フレームワークの部分は、ある程度よくできているということになる。
そうすると、インフラ部分に根本的な問題があるということになる。たぶん、ライブラリ・ランタイム・Linuxカーネルの3つともに問題があるはずだ。どれかだけがダメということは考えづらい。
ただ、その中でもA級戦犯とそれ以外に分けることは可能だ。
僕は、Androidのインフラ部分を作っているわけではないので以下は想像である。しかし、理屈としては大きく間違ってはいないはずだ。
Androidの最大の問題点、すなわちA級戦犯は、CPUを何種類も許していることだ(逆の言い方をすれば、問題点ではなく、オープンですばらしいということにもなる。ただ、以下は実装の観点から言っている)。
LinuxというOSは、Intel(およびその互換)のCPUで動作するOSとして設計されている。
ところが、Androidスマホの世界では、Intelは巨人どころかその他大勢だ。
では、Andoroidスマホの世界では、どんなCPUが使われているかというと下記のリンクのようになる。
▼いろいろありすぎて分からん!!最新のモバイル向けCPUをまとめてみました。
http://smarter-jp.net/newsetc/17677/
読んでも読まなくてもいい。肝心なのは、Androidスマホ用のCPUは多種多様だということだ。
上は2011年2月19日の記事だ。その後、AndroidスマホのCPUが整理統合されたという話は聞かないので、ますます増えているように思われる(想像ですみません。ただ、減ってはいないと思う)。
AndroidのOSのコア部分は、Linuxのカーネルバージョン2.6というものだ。繰り返すが、これはIntelのCPUに特化したOSだ。
ところが、スマホの世界には多種多様のCPUがある。スマホを提供しているメーカーは、Intelに特化したOSを、自社が採用しているCPU用に移植しなければならない。
CPU用にOSを移植するという作業は実にプリミティブ(原始的)な作業であり、いろいろな不具合が起こる。起こらないとおかしい。そのうえ、そんな技術を持っている技術者は限られている。
技術者が少ない証拠に、たとえば僕のREGZA Phone T-01CはAndroid2.2までしかサポートしていない。新製品でもないスマホに、Androidの最新バージョンを提供するほど、技術者は暇ではないのである。作るのは簡単でもテストしないといけないし、提供したからには不具合にも対応しないといけないからね。
Androidスマホは、多種多様なCPU(注)を許している時点で、きちっと動作するのが期待できないものなのだ。
MicrosoftがWindowsの新バージョンを出すたびに、こういうスペックのPCじゃないと動きませんよと一生懸命に喧伝していたことを思い出してほしい。そして、Appleに至っては、自社製のハードウェアでしか動作しないOSを作っているということも。
GoogleおよびAndroidの採用企業がやっていることは、1970年代のマイコン時代ならともかく、現代では正気とは思えないようなことなのである(個人の意見です)。
(注)ここではCPUと単純化しているが、デバイス(画像や音声の入出力装置など)も当然ながら各社独自である。デバイスを動作させるためのソフトウェアをデバイスドライバと言う。デバイスドライバも多種多様になる。そのことも念頭においてください。
多種多様のCPUに移植するということは、それだけの数のバリエーションのOSができるということだ。
それを吸収するために、冒頭の図のように階層に分けるのは、コンピュータの世界では常套手段だ。カーネルが違っていても、ライブラリのインタフェース(コマンドの書き方や戻り値の受け取り方など)を統一することで、アプリケーションはどの機種でも動くようになる。
ただし、ちょっとミドルウェア(図で言うとアプリケーション・フレームワークのようなソフト)を開発した経験のある人なら分かると思うが、そんなにきれいに分けられるものではない。
カーネル部分の違いが、アプリの不具合になる可能性はゼロではない(そして、今のAndroidスマホではゼロどころかかなりありそうに思えてならない)。
なぜかというと、カーネルが違えば、ライブラリ部分も当然違ってくるからだ。同じインタフェースでプログラムできても、ライブラリに不具合があれば、それにしたがってアプリにも不具合が発生する。
まあ、こんな感じで、機種ごとに様々な不具合が起きているというのが、Androidスマホの現状と言って差し支えはないだろう。
しかも、既に販売した機種に搭載している古いバージョンのAndroidにも、数年間は対応が必要なので、ますます大変なことになっている。
Android、Window、iOSの3つのOSについて違いをまとめたのが下の表である。
なお、iOSについては、Appleが出している技術資料(ホワイトペーパー)を参考にさせてもらった。
▼iOSテクノロジの概要
https://developer.apple.com/jp/devcenter/ios/library/documentation/iPhoneOSTechOverview.pdf
いずれも大雑把なレベルでは間違いはないと思う。ざくっと調べて書いただけなので、細かいレベルでの間違いはあると思う。ご指摘とご容赦の両方をいただければ幸いである。
表で一番表現したかったのは、左から右にいくほど品質が高くなるが、自由度は逆に低くなるということである。
さて、以上を踏まえたうえで、Androidスマホがすぐに動かなくなる理由をまとめれば、以下のようになる。
自由度が高すぎて、いろいろなことに対応しなければならない。ところが対応できる技術者が足りないと思われる。具体的に言うと、Androidのインフラ部分を実装する技術者、つまりLinuxカーネルを自社が採用したCPU向けに移植する人と、カーネル上で動作するライブラリを作成する人が足りない。
たぶん、これが一番の問題なのだと思う。
先ほどの日本アンドロイドの会の資料には、「組込製品の非ブラックボックス化」が良いことのように書いてある。昔気質の技術者である僕には理解できることだが、生産性の観点からはお勧めできることではない。
では、AndroidとWindows(モバイルにも本格参戦、選択肢が増えるという意味で多少期待している)とiOSのどれがいいのだろうか。
上の表で分かるように、品質では、Android<Windows<iOSである。逆に自由度では、Android>Windows>iOSである。
だから、どれが一番いいとは言えない。
ただ、どれを好むかでITエンジニアの分類はできる(血液型占い程度の分類だが)。
Androidを好むITエンジニアは、ワイルドで失敗を恐れない。ソフトウェアなどは動かないのが当たり前で、ときどきダウンするからかわいいんだ。ミッションクリティカルな銀行のオンラインシステムを開発するなんて御免だぜ、と思っている(はずだ)。
Windowsを好むITエンジニアは、中庸で人間的バランスが取れている。可もなく不可もないというのが処世術としては大切なんだ。どうせユーザーはそれなりのものしか求めていないのだから、それに答えるのがプロフェッショナルなんだ、と思っている(人がいても、僕はそれでいいと思ったりもしている)。
iOSを好むITエンジニアは、手軽に品質もよくユーザインタフェースもかっこよければそれに越したことはない。Appleがいろいろ細かいことを言ってくるのはうざいが、iPhoneやiPadのアプリを作っているほうが女にモテるのだからまあいっか、と思っている(人もいるかもしれない)。
ちょっとマンガ的に書いた。該当する方や実際に作っている方は、自分のことだなどと思わず、周りにこういうやつがいるなと笑ってもらえれば幸いです。
モバイル用のアプリを作っているITエンジニアなんてロクなやつがいないと勘違いした人がいたら、これは私のせいである。実際にAndroid用のアプリを作っている人たちは、このような大変さの中で一生懸命やってくれているのだと思う。感謝している。
何しろ、技術的には世界最高峰の会社の一つと思われるAdobeでさえ、苦労しているのだから。彼らでさえ、Android上でまともに動くPDF Readerを作れないのだ。大変だと思う。
ところで。
大昔のMacユーザーは、爆弾マークが出ると喜んでいた。それがMacで、Appleだと思っていた。今のAppleの製品にはそのようなユーザーはいなくなった。iPadなどは全然トラブルがない。
今は、寛容な人々が、Androidを使っている(喜んではいないのだが、やれやれと肩をすくめる程度で許している)。 時代の変化と思うべきだろうか。
この記事を読んで、CPUメーカーがカーネルの移植をすればいいのではと思った人がいたのだが、完全に想定外の反応だった。
発想としては面白いと思った。常識だと思っていたが、なぜやらないのかはふだんあまり考えなかった。
汎用機の頃は、IBMはCPUもOSも作っていた。しかし、PC生産に乗り出したとたんにOSもCPUも自社で作らないことにした。
IntelはWindowsも独自OSも作ろうとはしない。
MicrosoftもCPUを作ろうとはしない。
AppleもCPUには手を出さない。
完全に分業が成立している。
両方をやるのは技術的に難しいし、それゆえ採算も合わないし、それぞれ選択肢も狭まるからだ。その他、いろいろとリスクもあるのだろう。
とはいえ、儲かるとならばやるかもしれない。
--
自社の考えをインタビューして文書化してほしい方は↓