#アナタノミカタ 

ARMアーキテクチャMac登場前に知っておきたい、Macと仮想環境との長〜い歴史
AI.

いろいろな意味で、Macほど大きな変遷を経てきたパーソナルコンピューターはほかに類がない。CPUを含む内部のアーキテクチャも、度重なる変化を受けてきたし、それと呼応して、あるいはまったく独立に、外観のスタイルも多岐にわたるバリエーションを提示してきた。

またその過程で、さまざまなサブブランドの製品が生み出された。そして、サブブランドに分化した後も、それぞれ少なからぬ変化を経験している。例えば「iMac」という製品1つをとってみても、長期に渡ってどれだけ大きな変遷を経てきたことか。すべてを正確に思い出せる人は少ないかもしれないが、一部を思い浮かべてみるだけでも、そのバラエティの豊かさは驚異的なことに思える。

そして今また、Macの世界が大きく動き出そうとしている。言うまでもなく、そのきっかけとなるのは、MacのCPUがApple Siliconに変更されること。一般に普及しているパソコンのCPUの系列が大きく変更されて、直接実行可能な機械語コードに互換性がなくなる場合、その移行ができるだけスムーズなものとなるよう、さまざまな対策が必要となる。それは主に、CPUの変更を主導するメーカーとしてのアップルの仕事だ。サードパーティのデベロッパーやユーザーは、アップルが提供する施策を利用することで、CPUの変更による影響を最小限に留めることができると期待される。しかし中には、アップルが提供する方法では吸収できないような大きなインパクトを受ける種類のソフトウェアもある。その代表が、WindowsやLinuxなどのほかのOSや、その上のアプリをMacで利用可能にする仮想環境を実現するアプリだ。

ここでは、多岐にわたるMacの仮想環境ソフトウェアの歴史をざっとたどってみる。それが、今後のMac上の仮想環境がどのようなものになっていくのか、考えるヒントになるかもしれない。ただその前に、仮想環境にも大きな影響を与える、これまでのMacのCPUの変遷と、それに対してアップルが提供した施策について確認しておこう。

3回のCPU変更に3回とも判で押したように同じ手で対応

パソコンのCPUの移行期に有効な方策が、主として2種類あることは、拙稿の「Apple Siliconへの移行のキモとなるUniversal 2とRosetta 2とは何か?」で述べた。簡単に要約すると、1つのアプリが移行前後のCPU、両方に対応するコードを持てるようにするバイナリフォーマットを用意することと、旧CPU用のアプリのコードをその場で変換して新CPUで動かす機能を提供することだ。今回アップルは、前者にはUniversal 2、後者としてはRosetta 2と呼ばれるものを提供することを明らかにしている。

いずれも名前に「2」が付いていることからわかるように、これらの方策はほぼ同様のものを以前にも採用したことがある。つまり以前には、それぞれ「Universal Binary」と呼ばれるフォーマットと、「Rosetta」と呼ばれるコード変換機能を提供していた。具体的には、2006年にPowerPCからインテル系CPUへの変更を断行した際のものだ。

しかし、それだけではない。名前こそ異なるが、もっと以前、1994年に68K(68系)CPUからPowerPCに移行する際に、同様の方策を実施している。その際には、2つのCPUのコードを含むアプリのファイルフォーマットは「Fat Binary」、コードの自動変換実行機能は「Mac 68K emulator」と呼ばれた。いずれも面白みのない名前だが、当時は、その部分に何かしらのブランディングを適用しようという気はさらさらなかったのだろう。

以上に述べた3回のCPU変更と、それぞれの変更の際にアップルが提供してきた、そしてする予定の方策を図で確認しておこう。

現在までにMacが採用してきたCPUは3種類、そこにApple Siliconも入れれば4種類となる。そのいずれの時代にも、サードパーティが提供した一種の仮想環境ソフトウェアが存在した。もちろんApple Siliconを搭載したMacにも登場するはずだ。次に、その歴史をたどってみよう。

パーソナルコンピューター黎明期からあった野心的な試み

パソコンに限らず、コンピューターが搭載するCPUとは異なるCPUのプログラムをなんとかして動かしてみたいという欲求は、かなり昔からあったように思える。おそらくそれは、この世に存在するCPUというものの種類が1を超えた瞬間に発生したのではないかとさえ思われる。コンピューター自体の処理能力が今よりもずっと低く、使えるリソースも限られていた時代には、もっぱら「エミュレーター」として実現されることになる。この言葉には、なんとなく趣味の領域の匂いや、グレーゾーンの雰囲気も漂うが、それはある種の偏見だろう。業務上の用途でも重要な役割を果たしたものは少なくない。

MacがエミュレーターによってDOSやWindowsを動作させるようになったのは、CPUが当初の68系からPowerPCに移行してからのこと。確かにPowerPCのようなRISCプロセッサーは、少ないクロック数で実行できる単純な命令を備えているので、エミュレーターを実現するのに向いている。とはいえ、もちろん68KのようなCISCでエミュレーターが作れないわけではない。そのようなものの中で、おそらく史上初ではないかと考えられるのが「][ in a Mac」だ。名前から想像できるように、Mac上でApple IIのソフトウェアを動作させるもの。Macとしては正確に言うと2世代目だが、オリジナルMacのメモリ容量を128KBから512KBに増設しただけの、いわゆるFat Mac上で動作した。

Apple IIはカラー表示が可能だったので、初期のMacのモノクロディスプレイでは十分に表現できないソフトウェアも多かったが、CPUもアーキテクチャもまったく異なり、何の互換性もないApple IIのプログラムが、曲がりなりにもMacで動くというインパクトは強かった。

このようなことが可能だったのは、1MHzで動作するApple IIの8ビットCPUである6502よりも、約8MHzで動作する16/32ビットCPU(製造元のモトローラでは「MPU」と呼んでいた)の68000のほうが、大幅に処理能力が高かったからだ。仮にもしApple IIで何かのエミュレーターを動かすとすれば、常識的に考えて、それよりもさらに大幅に処理能力の低いCPUをターゲットにしなければ実用にならないと思われるだろう。

しかしここに1つの重要な例外がある。Apple IIのファームウェアの1つ、といってもたった6KBしかない整数BASICのインタープリタの一部として組み込まれていた「Sweet16」と呼ばれる仮想16ビットCPUのエミュレーターだ。これはApple IIの作者、スティーブ・ウォズニアク氏が、BASICインタープリタのコード量をできるだけ少なくする目的で開発したもの。16本の16ビットのレジスターを備え、16ビットの加減算が可能な、れっきとした16ビットCPUだった。

この仮想CPUのエミュレーターでの実行は、6502のネイティブコードを実行する場合に比べて10倍ほど遅かったそうだが、コード量を削減する効果は大きく、そのトレードオフの結果として導入したと考えられる。パーソナルコンピューターの原点の1つと考えられているApple IIに、最初からこのような機構が組み込まれていたのは、その後の発展を考えると非常に興味深い。

時代が前後したが、また話をMacに戻そう。68K時代のMacでは、CPUを搭載する他のコンピューターをソフトウェアでエミュレートするのは荷が重かった。上に挙げた][ in a Macのようなソリューションもあったが、初期のMacではカラー表示ができないという問題もあった。このことは、Apple IIという製品が、膨大なソフトウェア資産を市場に残しながら寿命を終えようとするころには、アップルとしても捨て置けない問題と考えられるようになった。

そこでアップルは1991年になって、自ら「Apple IIe Card」というハードウェア製品をMacintosh LCシリーズ用に発売した。これを装着することで、カラー表示が可能で、しかも低価格のMacが、最も普及したApple IIeとしても動作するようになったのだ。このカードは、Apple IIeのハードウェアそのものを、当時の技術を使って小さな基板上に縮小したようなもので、純正だけに高い互換性を実現していた。

引用:Wikimedia Commons

これと同じようなハードウェアによるソリューションは、実はPowerPCの時代になっても存在した。やはりアップルが1996年に発売した純正の「PC Compatibility Card」だ。これは、インテルのPentiumや、他社の80×86互換CPUを搭載した、ある意味本物のPCであり、拡張スロットを備えたPower Macに装着して、MS-DOSやWindowsをインストールして利用することができた。このころになると、少なくともアプリケーションの多彩さという点では、DOSやWindowsに対するMacの優位性もだいぶ陰りが見えていた。この製品は、PC用ソフトウェアを利用可能にすることで、ユーザーをMacに引き止めることを狙った、まさに苦肉の策だったと言える。

一方で、ソフトウェアだけで、PCのCPUとハードウェアのエミュレーションに果敢に挑んだ製品も、サードパーティから何種類も登場した。中でも最も有名なのは、Connectix(コネクティックス)社の「Virtual PC」だろう。これは、PCのハードウェアを忠実に再現するもので、後の仮想環境ソフトウェアの走りと見ることもできる。市販のWindowsパッケージは、もちろん、x86プロセッサーを搭載するPC用のさまざまなOSを、そのままインストールして利用することが可能だった。なお、このVirtual PCは、MacのCPUがインテルに移行してからはMicrosoft(マイクロソフト)に買収され、同社純正のWindows Virtual PCとしてWindows 7に組み込まれることになった。

ほかにも、当時かなり豊富に市場に出回っていたDOSゲームを主なターゲットとした、Insignia Solutions(インシグニア・ソリューションズ)の「Real PC」という製品もあった。もともとは、各社のUnixワークステーション上でDOSを実行するための小規模なものだったが、のちにMacだけでなく、NeXTSTEPにも移植された。このReal PCは、やがて「SoftPC」と名前を改め、DOSに加えてWindowsも実行可能になった。市販のWindowsパッケージをそのままインストールして使うことも可能だったが、特にSoftPC用にチューンして動作性能を向上させたWindowsの特別なバージョンをバンドルした「SoftWindows」という製品も登場した。

CPUの変更で再びチャレンジングな世界に踏み込む仮想化ソフト

MacのCPUがインテル系に変更されると、それまでエミュレーションの最大のターゲットだったWindows PCのアプリケーションを利用するために、CPUの機械語コードの変換やエミュレーションを実行する必要がなくなった。そこでもっぱら利用されるようになったのが、いわゆる仮想環境ソフトウェアだ。CPUのコードは同じだが、周辺のハードウェアの違いを仮想化することで吸収するためのソフトウェアということになる。機能としては、以前にPC Compatibility Cardを装着したMacに求められたものに近いのかもしれない。

そんな中で、最初にリリースされたのは、ドイツのInnotek(イノテック)がオープンソースソフトウェアとして開発した「VirtualBox」だった。Innotekは、その後Sun Microsystems(サン・マイクロシステムズ)によって買収され、さらにOracle(オラクル)がSunを買収したため、現在の正式な名称は「Oracle VM VirtualBox」となっている。同種の商用アプリのような派手な機能は少ないが、地道に開発が続けられている。

VirtualBox自体が動作するホストOSとして、macOSだけでなくWindows、Linux、Soraisと4種類がサポートされているのも大きな特徴だ。仮想化マシンを作成可能なOSのタイプとしては、Windows、Linux、Solaris、BSD、IBM OS/2、macOSなどをサポートする。MacがApple Siliconに移行すると、残念ながらこのアプリはMacでは動作しなくなり、サポートもなくなる可能性が高い気がする。

VirtualBoxより先に発表されながら、実際に製品としてリリースされたのは少し後になったのが、Parallels社の「Parallels Desktop」だった。少なくとも人的資源としては、PowerPC時代のVirtualPCを引き継ぐ部分もあって、基本的なユーザーインターフェースにもVirtualPC譲りの雰囲気が感じられる。現在では名実ともにMacを代表する仮想化ソフトウェアとなっている。WWDC20でも、いち早くApple Silicon上で動作するデモが取り上げられた。このソフトウェアが、今後どうなっていくかについては、少し後で再び考える。

製品の発売時期もParallels Desktopとさほど変わらず、その後も互いに速度と機能を競い合いながら発展してきた仮想化ソフトウェアにVMware(ヴイエムウェア)の「VMware Fusion」がある。ただし残念ながら、最近では開発にかける力が衰えてきたように感じられる。それは最近ではクラウド製品に注力しているVMwareの方針に沿ったものなのかもしれない。このアプリも、Apple Silicon以降どうなるのか、やはり残念ながら見通しは明るくないように思える。

以上挙げたようなアプリとしての仮想化ソフトウェアとは一線を画するものとして、国産の「vThrii Seamless Provisioning」も挙げておこう。これは数年前に、iMacとともに大量に東京大学の教育用計算機システムとして導入されたことで話題にもなった。いわゆるハイパーバイザー型(ベアメタル型とも呼ばれる)の仮想環境で、ソフトウェアのレイヤーとしてはかなり薄い。東大に納入されたシステムでは、iMacの起動時にOSとしてMac OS X(当時)かWindows 10を選択するようになっていたが、Mac OS Xですら仮想環境上で動作するという特徴的な機能を実現したもの。これについても、今後の展開は不明だが、MacのCPUが変更されれば、当然ながらこれまでと同じ構成で動作することはできなくなる。

こうして現在のMac上の仮想環境を見渡してみると、MacがApple Siliconを採用した後、少なくとも短期間で対応してくるのはParallelsだけではないかと思われる。それでも、今と同じような機能をサポートし、インテル用のWindowsを動作させるとしたら、内部はかなり変更せざるを得ない。WWDC20では、Parallels Desktop上でLinuxが動作するのをデモしていたが、おそらくはARM版のLinuxだろう。現状では、CPUの機械語コードの変換やエミュレーション機能を備えていないからだ。いくらアップルがRosetta 2をサポートしても、WindowsのようなOS全体を事前に変換するのには無理があるように思える。

ARM版Windows 10を搭載するマイクロソフトのSurface X

多くの人は、ほとんど記憶にないかもしれないがARM版のWindowsというものも確かにある。Windows 8の時代に「Windows RT」という名前で登場したバージョンだ。その名前なら聞き覚えがあるという人も多いかもしれない。Windows RTでは、インテル版Windowsとの互換性も考慮し、ARM系のコードだけでなく、x86、つまり32ビット版のインテル用Windowsアプリも動作させることができた。しかしWindows RTはパッケージや、ダウンロード版として販売されたものではなく、ARM系のCPUを搭載するモバイル系のマシンにライセンスによって搭載されただけ。つまり、マイクロソフトがApple Siliconを搭載したMac用にライセンスしない限り、Parallels Desktopのような仮想環境ソフトウェア上でも動かすことはできない。少なくとも製品化は無理だ。

しかし、それでParallelsが、64ビット版を含むインテル版WindowsをApple Silicon搭載Mac上で動かすことを諦めるとは思えない。正攻法としては、ソフトウェアによるエミュレーションでインテルCPUの機械語コードを動かすことになり、パフォーマンスの問題はしばらくつきまとうかもしれない。やがてそれも何らかの方策によって改善できるだろう。WWDC20のRosetta 2のデモを見れば、けっして期待の薄いこととは思えない。あるいは、他社からも含めて、まったく別のアプローチによる解決策が登場するかもしれない。MacのCPUの変更は、仮想環境にとっては1つの大きな試練には違いない。しかし無責任なユーザーの目で見れば、現在のソフトウェア技術が、それをどのように乗り越えるのか、見守る楽しみができたというものだ。

引用先はこちら:ARMアーキテクチャMac登場前に知っておきたい、Macと仮想環境との長〜い歴史

#アナタノミカタ