後藤弘茂のWeekly海外ニュース

ソフトウェア開発者にメッセージを打ち出すWindows Phone 8



●ハードウェアの進化が促したWindows Phone 8

 MicrosoftはWindows Phone 8を正式に発表、その概要を米サンフランシスコで6月20日に開催した「Windows Phone Summit」で明らかにした。大きな変更は、OSの“コア”部分をWindows 8と共通にしたこと。そのため、OSの機能が一気にリッチになり、プログラミング上はWindows 8とのネイティブコードでの互換性が増した。もちろん、Windows Phone 8は現状はARMベースなのでx86版Windowsとはバイナリ互換ではなく、その一方で、.NETのマネージドコードはWindows PhoneとWindowsで以前から互換だった。しかし、この変化によって、Microsoftがプログラマーをどこに誘おうとしているのか、その姿勢が変わった。

 そもそも、MicrosoftがOSのコアをこのタイミングで変更した背景には、モバイル機器側のハードウェアの進化がある。Windows Phone 7.xまでのモバイル向けWindowsのコアは、源流を辿るとWindows CE(Windows Embedded Compact)で、そもそもは組み込み向けリアルタイムOSとして開発された。

 つまり、プロセッシングパワーが低くメモリ容量も小さなマシンのためのOSであり、それは、スマートフォンの波の前の携帯電話には適合していた。ハード側の転換が始まった大元の原因はNANDフラッシュの成長だ。以前の携帯電話は、NORフラッシュをメインメモリ兼ストレージに使い、NOR上でプログラムを直接実行する「XIP(eXecute In Plane)」モデルを取っていた。それが、NANDの大容量化で、ストレージに大容量のNANDを積むようになり、そこからDRAMにプログラムを展開して実行するモデルへと変わった。メモリのハードウェア構成が変わり、プログラムサイズの制約が解き放たれたことで、ソフトウェアが進化をし、プロセッサがそれに合わせて進化を始めた。

 そして、ここ数年は、スマートフォンとタブレットで、CPUやGPUのパフォーマンスは2年で2倍かそれ以上のペース、メモリ転送帯域は2年で2倍以上(メモリインターフェイス幅も広げているため)、メモリ量も2年で倍々かそれ以上のペースで急増して来た。具体的にiPadを例に取ると1年毎にメモリ量とメモリ帯域が倍々、CPUは1~2年で倍、GPUパフォーマンスは1年で倍かそれ以上に増えた。

 現在のモバイルデバイスは、ハードウェアとしては立派なコンピュータであり、OSを制約する必要はなくなった。そして、アプリとサービスの発達は、よりリッチなOSを求めている。AppleとGoogleは、そうした時代に合わせたOSを載せているため、MicrosoftもOSコアを転換する必要があった。

●PC OSの基本サービスを全てWindows Phoneに移植

 ここで、MicrosoftがOSコアと言っているのは、移植したのがOSカーネルだけではないからだ。OSのファイルシステム、ネットワークスタック、マルチメディアモジュール、セキュリティサービス、ドライバフレームワークなど、Windows NT系のWindows 8のコア部分がそのまま持ち込まれた。新しいコアの上に、Windows Phone 7向けアプリケーションが通るレイヤーを載せた構造になっていると推測される。

 また、現在のWindows Phone 8がサポートしているのはARM命令セットのCPU。なので、バイナリ的にはWindows Phone 8は、ARM版Windows 8/WinRTに近いはずだ。ただし、MicrosoftはWindows Phone Summitでは、これについては明言していない。iOSとAndroidは、スマートフォンとタブレットが地続きであるのに対して、Microsoftの戦略ではそこに切れ目がある。Windows Phone 8の狙いが、そのギャップを近づけることにあるのかも知れない。

Kevin Gallo氏(Developer Platform, Microsoft)

 Windows Phone Summitでは、Kevin Gallo氏(Developer Platform, Microsoft)による、Windows Phone 8システムの概略説明も行なわれた。Gallo氏は、Windows 8と共通コアになったWindows Phone 8のプラットフォーム面での強味を6つに分けて説明した。

(1)カーネル:先進のカーネルによるスケーラビリティと安定性
(2)ドライバ:確立されたWindowsのドライバエコシステムとドライバの単一化
(3)セキュリティ:ハードウェアベースのセキュリティとアプリケーションの分離性
(4)ネットワーク:IPv6とNFCのサポートと拡張されたBluetooth
(5)グラフィックス&メディア:Direct3Dベースの3Dグラフィックスとメディアコーデック
(6)デベロッパプラットフォーム:WindowsとWindows Phoneでのコード共有、ネイティブコード、従来通りの.NETエンジン、クラウドベースのコンパイル

 Gallo氏は、Windows Phone 8のデベロッパプラットフォームとして、このほか、マルチタスキングの拡張と音声認識インターフェイスも紹介した。マルチタスキングは、カーネルが変わったことの恩恵だ。音声認識は、もちろんAppleのSiriを意識してのものだ。音声認識はWindows Phone 7.5にすでにダウンロードが可能となっている。

 MicrosoftはWindows Phone 8のSDKを晩夏に提供すると説明、これはVisual Studio 2012に統合され、SDKがリリースされた段階で開発者向けのイベントを開催するとしている。


●ゲームをC/C++へ誘導するMicrosoft

 Microsoftは、Windows Phone 8では、Microsoftは3階層のプログラミングレイヤーで、それぞれどういったアプリケーションに推奨するかを明らかにした。まず、Windows 8とWindows Phone 8の両方に一般的なアプリケーションを開発しようとするならXAML(Extensible Application Markup Language)とC#/V8のコード。ゲームを開発するならC/C++とDirect3D、Webアプリケーションを開発するならHTML5コードという切り分けだ。

 Windows Phone 8については、C/C++ネイティブコードは終始ゲーム向け的な説明を行なった。と言っても、Microsoftの従来のデバイス非依存なゲーム開発フレームワークであるXNAが切り捨てられたわけではない。XNAもWindows Phone 8ではWindows Phone 7系と同様に継続してサポートされる。これについては、Windows Phone Developer TeamのTwitterで明らかにされている。Summitでも、既存のWindows Phone 7アプリはWindows Phone 8で走ることが約束されており、XNAゲームも走ると見られる。さらにややこしいことに、MicrosoftはWindows Phone 8のInternet Explorer 10でのJavaScriptのパフォーマンスも誇っており、Webゲームももちろん走る。

 インディーズゲームの牙城となっていたXNA。今回のMicrosoftのスタンスは、ゲーム開発はDirect3DプラスC/C++を推奨しており、XNAについてカンファレンスで言及がなかったのは、XNAは下位互換性のために残すだけになるからかも知れない。Windows Phoneでも、XNAのはしご外しが始まるのかどうかは明かではないが、流れが変わりつつある。

●Microsoftもまたモバイルデバイスをゲームプラットフォームと位置づける

 MicrosoftがSummitカンファレンスで、ネイティブコードサポートをアナウンスした時に拍手が巻き起こった。Gallo氏は、Direct3Dを叩けることや、ゲームミドルウェアのサポートが容易になることなどを挙げた。また、Windows Phone 8に移植されるミドルウェアの例としてHavok物理エンジンやAutodeskなどを紹介した。

 ネイティブコードでライブラリが載ればというストーリーで、ゲーム関係者が誰もが考えるのはゲームエンジンに価格破壊を起こしてiOSとAndroidにも浸透している「Unity」だが、今回のアナウンスにはなかった。ゲームについては、ゲームパブッリシャのサポートが発表された。また「Halo」や「Assassin's Creed」といったビッグタイトルの登場も示唆された。

 Microsoftは、今回、Windows Phone 8が「完全なゲーミングプラットフォーム」になると位置づけた。モバイルゲーム機を持たない(モバイルゲーム機のプランはZuneに変わってしまった)Microsoftらしい位置づけだ。

 Microsoftだけでなく、AppleやGoogleも、みんながモバイルデバイスでのゲームについて力を入れる理由の1つのは、ゲームが一種のショウケースだからだ。そのプラットフォームが、いかにパワフルかを見せつけるための例となるため、各社とも力を入れる。そして、今回、MicrosoftがWindows Phone 8で、ゲームを盛り上げるテコにしようとしているのは標準的なDirect3DとC/C++のサポートというわけだ。

●C/C++サポートで最も重視しているのは他プラットフォームからの移植

 ネイティブコードで、Microsoftが一番の強味として挙げたのは、ゲームの移植性だ。もちろんダイレクトにAPIを叩くことでのパフォーマンスも利点ではあるのだが、それよりも移植性を強調した。移植は、Windows 8からと、iOS/Androidからの2つの方向がある。Windows 8からの移植では、APIベースが同じなのでコードの共通化ができる。ネイティブのAPIの上で書かれたC/C++コードは、Windows 8とWindows Phone 8の両方で完全に共有できるとMicrosoftは説明する。

 MicrosoftはiOS/AndroidからWindows Phone 8への移植でも、C/C++のサポートが重要だと説明した。その例として、Gallo氏はBig Fish GamesのiOSでのヒットタイトル「Fairway Solitaire」をWindows Phone 8でデモ。このゲームをiOSからWindows Phone 8へ移植するのに2週間しかかからなかったと語った。3DグラフィックスでもSolitaireに2週間は短いと言えるのかどうかという疑問は残るが、言いたいことは他OSからのポートが今までよりは楽になったということだ。現実的には、Windows PCからよりも、iOS/Androidからの移植の方がはるかにニーズが高いはずで、これは重要なポイントだ。もっとも、Direct3DはMicrosoft独自のAPIであるため、その部分では互換性はない。OpenGL ESに対応という噂もあったが、それは実現されなかった。

 また、MicrosoftはWindows Phone Marketplaceを通じて、クラウドコンパイルサービスも用意する。Marketplaceにアップすると、サーバー側で最適化コンパイルしてデバイスにダウンロードする。Windows Phone 7.xのアプリケーションも、サーバー側でコンパイルされ、Windows Phone 8では高速化すると言う。つまり、Windows Phoneがどう進化して行こうと、Microsoftが自動的にコンパイルして対応してくれるということになる。

 こうして大枠を見ると、Windows Phone 8がソフトウェア開発者を惹きつけるために作られたことがよくわかる。モバイルプラットフォームのエコシステム構築では、明らかにMicrosoftが一番出遅れている。そこをカバーしようと努力していることがわかる。