AndroidプラットフォームアーキテクチャでJavaが採用されている理由は、エンジニア人口が多いから
前書き:何故AndroidはC/C++がメインではないのか
AndroidでJavaを採用した理由が気になって夜しか眠れなかったので、調べました。
まず、前提をおさらいします。Androidプラットフォームは、ハードウェアを制御するためにLinux Kernelを採用しています。その上にハードウェアを抽象化するためのHALレイヤーがあり、C/C++とJavaランタイム(Android Runtime)がHALの上にあります。最近では、NativeライブラリにRustも採用され始めたと聞いています。
そして、Java API Framework(Oracle Javaとは別物)がAndroidのコアな機能を提供する形になっています。私達がAndroidアプリを開発する場合は、JavaやKotlinでJava API Frameworkを呼び出す形になっています。
![](https://debimate.jp/wp-content/uploads/2023/04/android-stack_2x-695x1024.png)
Android公式ドキュメント:プラットフォーム アーキテクチャより引用
組み込みLinuxの流れで考えると、「何故、全てC/C++で書かなかったのか」「Android 1.0開発当初(2005年〜2008年)は、組み込み環境が貧弱なのでJavaで書くと遅かったのではないか」と疑問に感じました。
Javaを採用した理由は訴訟で語られていた
答えは意外なところで語られていました。
GoogleとOracleとJava著作権侵害訴訟(GoogleがOracleのJava SE APIを1万1500行コピーしてAndroidに使用したため起きた訴訟)で、Andy Rubin氏が証人として次のようなことを語っていました。
When prompted by Google counsel Robert Van Nest if there were other programming languages that could have worked for Android, Rubin affirmed there could have been. Some of the other languages considered for Android were Javascript, Python and Lua.
Nevertheless, describing his experience from his first startup, Danger, Rubin highlighted the benefits of using Java for a smartphone — primarily the well-known brand name as well as compatibility being that it is a common language taught at universities worldwide.
Googleの顧問弁護士であるロバート・ヴァン・ネストから、Androidで使えるプログラミング言語が他にあったかと尋ねた。ルービンは、「あったかもしれない」と肯定した。Android用に検討された他の言語には、Javascript、Python、Luaがある。
しかし、ルービンは最初の起業であるDangerでの経験を語りながら、スマートフォンにJavaを使うことの利点を次のように強調した。Javaは、世界中の大学で教えられている共通言語であり、知名度の高さで知られている
上記の文章を読む限り、実行速度よりもエンジニア人口を優先したように読み取れます。他のプログラミング言語候補が、JavascriptやPython、Luaのようなスクリプト言語だったことにも驚きです。遅そう。
私なら、Linux Kernelを採用した段階で「GUIにはQtかGTKやな!」と考えると思いますが、優れたエンジニアはそんな甘いことは考えないのですね
AndroidがJavaを採用した理由は、Javaが世界中の大学で学べ、知名度があったかららしい。Linux Kernelが下にいると、GUIはC++でQtやGTKを動かすのが順当だと考えてしまうが、そもそもガラケーもJava MEを採用してるケースがあったのね。
— nchika@Database Removal Newbie (@ARC_AED) April 16, 2023
00年代のソフト事情を知らないから、歴史を紐解くと面白い
おまけ:ガラケーはどんな世界だったのか
この段落は、全て推測で書いています。
私が高校生の頃(2006年ぐらい)は、まだiPhoneがありませんでした。ガラケーがガラケーと呼ばれていなかった時代です。ガラパゴスと揶揄されることもなく、ケータイ(movaとかFOMA)と呼ばれていました。
今思えば、ガラケーのOS事情はどのようになっていたのか。今更ながら疑問が芽生えました。
今思えば、2005年ぐらいのガラケーは、各社で異なるOSを搭載してたのだろうか
— nchika@Database Removal Newbie (@ARC_AED) April 17, 2023
国産機種でSymbianを搭載したと思えないので、Tron系か独自RTOSを載せていた?少なくとも組み込みLinux Kernelが載るだけのパワーがあったとは思えない
独自OSの上で内製ライブラリを動かしながら開発だと…面倒そうだ
「日本製のOSといえばTRONだろ」と雑に調べると、WikipediaにTRON系がガラケーに採用されていた旨の記載がありました(ソースがWikipediaという恥ずかしさ)
一般消費者の見えるところのOS、つまりGUIを搭載したOSとしては、2000年代前半から後半にかけて日本で普及した高機能携帯電話(ガラケー)のOSとして広く使われていた。
引用元:ITRON
ITRONでは開発が厳しかったのか、2000年代後半からは汎用OSとして、Symbian OSや組み込みLinuxが採用されていたようです。SymbianはNokiaが開発していたOSであり、2010年ぐらいにシェアトップだったらしいです。C++、Python、Java MEを使える環境でしたが、規制か法律の影響で確認ダイアログをウザいぐらい出していると書籍に書かれていました(記憶違いがあるかもしれない)
組み込みLinuxはKernelがチューニングされていると言えど基本的にはLinuxですから、端末性能に合わせたrootfsを何パターンか用意して、各社お好みでライブラリをインストールしてカスタマイズしてくださいという感じだったのだろうと推測してます。BuildrootやYoctoで自分好みのLinuxを作っていたと思われます。
Symbianにしても組み込みLinuxにしても、各社の内製ライブラリが外部に公開されることが少なかったでしょうから、AndroidやiOSを開発するよりも実装量が多かったのではないかと思われます。
思い返せば、ガラケー時代は1社で年に数台の新機種ケータイをリリースしていた訳ですから、「さぞかし開発現場は修羅場であっただろう」と容易に想像できてしまう。大企業のことだからファームもミドルもアプリも外注して、短い開発期間で下請け業者が悲鳴を上げていたのではないかと(名高いYRP野比とガラケーは関係があった気がします。調べないけど)
最後に
自分が大学生の頃は、「Javaと英語をやっておけばエンジニアとして食いっぱぐれない」と聞いた記憶があります。しかし、その10年後の2023年現在、Javaと英語だけで生き残れるのかが怪しい時代になってきました。エンジニア業界は怖いところです。
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。