どうもマミーです。

長いこと組み込みプログラマとして、サーバやweb、アプリ(PCやAndroid, iOS)など一通りのプログラムを経験して現在はチーフアーキテクトとして設計をメインにした業務を日々行なっております。

 

さて、本日はAdventCalenderの2日目、 “Android”をテーマにブログを、とのことで

どのようなテーマにしようかと色々と悩んだのですが、、、

 

あ、、、しばらくAndroidプログラム書いてない

 

ということに気がついてしまいました。

 

そこで、

本日のテーマは表題の通り、話題(?)の Windows11ではAndroidアプリが動くらしいよ ということについて、「どうやってWindowsで動くのか」、「そもそもなんでAndroidアプリを動かすことがそんなに話題になるのか」など、色々とその仕組みから調べてみましたので、ご紹介したいと思います。

 

Windows11でAndroidアプリが動作する?!

これについては各メディアで既出の通りです。

https://atmarkit.itmedia.co.jp/ait/articles/2110/26/news135.html

ただし、これには制約があり、Google Play Storeに上がっているアプリが動作するわけではありません。

今回のWindows11で動作するのは、Amazon kindle storeに上がっているものだけになります。

https://iphone-mania.jp/news-414110/

とはいえ、WindowsでAndroidアプリが動くことがなんでそんなにすごいの? と思う人もいらっしゃると思いますので、ちょっと深掘りしてみます。

 

実はかなりすごい

Windows11に限らず、Microsoft社製のWindows OSは、intel社が提供するX86系というCPUでのみ動作します。ちなみにMacの場合は、Apple社が独自に開発した(*1)CPU(M1チップ)に最近変更されましたが、少し前まではintelのX86系でした。

それに対して、Android OSが動作するのは、ARM社系(*2)のCPUでのみ動作します。

intel と ARM とそれぞれ製造会社は違うものの、同じCPUであることは変わらないのですが、この2つのCPU、処理を動かすための命令やアーキテクチャに一部違いがあります。

なので、実際にOSから、「この計算をしてー」と依頼するときに「やれ」「お願いだからやってもらえますか?」くらい、実際の動作をさせるための命令が違うケースがあります。また、そもそも仕組みが違うところもあるので、翻訳すれば良い、という話でもないのです。

 

なのに、今回はintelのCPUの上でAndroidのアプリが動作する、ということで、

すげーじゃんそれ。

ということになっています。

もうちょっと深いところも知りたいわがままさんのために

エンジニアの方々であれば「要はX86側の処理のwrappingをしてARMを動かしてるんでしょ?」ってお察しすることはできるのではないかと思いますが、ことはCPU命令になりますので、その部分のWrappingともなると、プログラムの根っこの部分なので、かなりシビアです。

どれだけシビアかというと、APIの応答性能とかそんなレベルではなく、相当リアルタイム性が問われる部分なので、単純なソフト制御だけで賄うことが難しいのです。

ちなみに今回のWindows11では、Dynamic Binary Translator という仕組みを使っています。これは、JIT(Just-in-time)Compilerによって、ARM命令がX86命令にリアルタイムにコンパイルされて実行されることで処理されています。また、1回でも動作していたら2回目以降をキャッシュする仕掛けもあり、高速処理が可能になっています。

詳細は下図の「WOW Abstraction Layer」のところで、「X86-to-ARM CPU Emulator」の部分になります。オレンジの部分のDLLのところも一部X86のOS依存があるものはwrappingしてるようです。

あれ?

勘の良い方は気が付かれたかもですが、

これならGoogle Playストアのアプリ、全部動くんじゃね?

って思いますよね?

 

そう。実は理論上動作するそうなのです。

 

ですが、どうしても越えられない壁があって、IME(入力言語の切り替え)と、一部のUI/UXの整合 になるとのことです。

※IMEはWindows OSの根っこまで入り込んだ闇なので、一朝一夕ではどうにもできない高い壁のようです。。。

 

ただ、今後改善は継続していくようですので、近い将来ほぼ全てのGoogleアプリがWindowsで動く日も遠くないかもしれません。

 

ということで、今回Androidの話よりは、Windowsのシステムアーキテクチャ寄りの話になってしまいましたが、チーフアーキテクトからの話なのでということでご容赦ください。

次のAdventCalendarもどうぞよろしくお願いします!!

 

(*1) 独自という表現をしてますが、実際はARM系のプロセッサです。

(*2) ARM社系と記載してますが、正確にはARM系のCPUは、プロセッサの設計のみARM社が実施、それを開示していて、そのルールに則って作られたCPUの総称を指します。