Windows on ARM で Microsoft が実現したいこととは
私はここ1年以上、Windows on ARMに注目してきました。Win32アプリが動かずに失敗したWindows RTではなく、Win32アプリがそのまま動くとされるARM版Windowsです。このブログでも何回か取り上げてきましたが、
実機が発表され、出荷が開始されたのは良いのですが、その後、レビュー記事なども出ず、日本では入手できない状況が続いており、どうしたのかと思っていました。
ここへきて、やっとレビュー記事が出たのと、Microsoftからも新しい発表がありました。
遅い。。のか?
レビュー記事はこれです。
なんかもう、タイトルからしてWin32に正面から向き合っていませんね。。電池持久力じゃ無いだろ! と言いたいのですが。。しかし、中を読んでみると、Win32にはあえて触れたくなかったのかな、と思いました。
ラップトップのテストによく使うベンチマークを複数使ったところ、Nova Goはここ最近見ないような低スコアを出してしまいました。
ということです。うーん、厳しいな、これ。
携帯と同じプロセッサである以上、リソースを激しく使うWindows OSのパフォーマンスは決して最高とは言えません。
とも書いてあります。やはり、どこかに無理があったんでしょうか。なんか残念。一応、
本来はMicrosoft Storeで購入できるネイティブのWindows Universal Platform(UWP)アプリで性能を発揮できるようにデザインされている
とフォローはされていますが、つまりはネイティブでないアプリは使い物にならない、ということのようです。Win32アプリについては書かれていませんが、この状況だと速いわけがありませんよね。暗雲が立ちこめてきました。。
Microsoft Buildでの発表
実は上のレビューは先月見つけていたのですが、別に「MicrosoftがBuild 2018でWindows on ARMについての発表を行う」という情報があり、様子を見ていたのです。実際、先週(5/7-9)行われたBuildでのWIndows on ARMに関するメインの発表は、Win64アプリのサポートを開始した、という話でした。
Win64で再コンパイルが必要なことはわかっていましたので、そのための環境が整備されたということですね。とにかく、Microsoftが引き続きWindows on ARMに取り組んでいるというのは朗報です。(ひょっとしてやめちゃうんじゃ無いか、とも思っていましたので)
そして、今回のBuildのセッションに「Windows 10 on ARM for developers」というのがあったのですが、そのビデオの中に、以下のスライドがありました。
Win32アプリのパフォーマンスが「Emulation」になっています。これはEmulation並のパフォーマンスですよ、ということでしょう。Bestではないことは仕方ないですが、昨年のBuildでは、少なくとも単なるEmulation以上のパフォーマンスが出ると行っていたはず。。
Win32のバイナリをARM上で「動かす」だけであれば、これは実は簡単なんです。何十年も前から「エミュレーション」という技術があります。これは、あるハードウェア(A)上で別のハードウェア(B)を「真似る」ソフトウェアを動かすことで、本当はAなんだけど、Bの振りをして、B用のソフトウェア(バイナリ)を実行させるというものです。しかし、これの問題は「実行速度がめちゃくちゃ遅くなる」ことです。B用のプログラムをいちいちA用のプログラムに翻訳しながら実行するからで、1/10とか1/100とかの実行速度になってしまいます。もちろんそれでも「動かないよりは良い」と思えるなら、やる価値はあるわけですが、多くの場合は「使い物にならないくらい遅い」のですよね。
昨年のBuildで、MicrosoftはWindows on ARMのアーキテクチャについて、Windows 10 on ARMというセッションを行っていますが、その中でWin32のエミュレーションの構造が解説されています。
単なるエミュレーションであれば、X86-to-ARM CPU Emulatorがあれば良いのですが、このスライドではWOW(Windows on Windows)とSystem Services(NTDLL)、そしてCHPE DLLというコンポーネントが書かれていて、「普通の」エミュレーションとは違う、という説明になっています。この時点では、「near native or very close to native performance」が期待できると解説しています。これを見て、「結構期待できる」と思っていたのですが、今出てきている情報を見る限り、あまりうまく行かなかったようです。これは、今後良くなっていく可能性はあるのでしょうか?
「プロセッサ」に依存しないOS!?
この試みが重要なのは、過去のWin32アプリの有効利用ということだけでは無いのではないかと考えています。Microsoftは、特定のプロセッサへの頸木(くびき)から逃れたいのでは無いでしょうか。クラウドはプラットフォームを抽象化し、プロセッサやOSの違いはユーザーからは見えなくなりました。しかし、OSそのものは、そうはいきません。今、クラウドのサーバーはIntel(とAMD)が主流ですが、今後IoTなどを睨んでARMになるかも知れませんし、その先に違うアーキテクチャがあるかもしれないのです。(量子コンピュータがそれに当たるのかどうかはわかりませんが)
そのときに、同じ騒ぎを繰り返さないよう、あらゆるプロセッサに対応できる技術の開発に取り組む、というのがMicrosoftの真の狙いでは無いでしょうか。実際、これまでもMicrosoftはWindowsをIntel以外のプロセッサにも対応させてきましたが、どれもあまりうまくは行きませんでした。いろいろなプロセッサ上でWindowsが動く「だけ」では、メリットが少ないということなんでしょう。
Microsoftの最大の強みはアプリケーションの蓄積です。どのようなプロセッサにも簡単に移植可能で最高のパフォーマンスを出せるWindows、そしてその上で、過去の資産であるWin32/64アプリがそのまま動いてこそ、Microsoftの強みが活かせるということではないでしょうか。その意味で、Intelよりも非力なARM上でWin32アプリを「ネイティブに近い」パフォーマンスで動作させることができるかどうかは重要な試金石です。この技術にはこれからも注目していきたいと思います。