エミュレーション、仮想化、そしてRosetta 2:古いものと新しいもの、そしてこれからのものが融合

エミュレーション、仮想化、そしてRosetta 2:古いものと新しいもの、そしてこれからのものが融合

Appleは数十年にわたり、エミュレーション仮想化を組み合わせることで、プロセッサとオペレーティングシステムの移行を数多く成功させてきました。エミュレーションとは、コンピュータが別のCPU向けのコードを実行できるようにする技術です。例えば、Intelプロセッサを搭載したMacで、Motorolaチップ向けに書かれたコードを実行するといった具合です。仮想化は、古いコードをネイティブに実行できるバブルを作り出すことで、Apple(および他の企業)が古いオペレーティングシステムをしばらく、あるいは無期限に存続させることを可能にします。これは、古いコードがハードウェアコンピュータを制御しているわけではないことを認識させることなく、ネイティブに実行できるバブルを作り出すためです。

Appleがエミュレーション分野に新たに参入したのは、IntelベースのアプリをAppleのM1チップ上で動作させるRosetta 2です。しかし、MacユーザーのIntelからApple Siliconへの移行をスムーズにする技術は他にもあります。例えば、10.15 Catalinaやそれ以前のIntel専用バージョンのmacOS、あるいはIntelベースのWindows、Linux、その他のOSを起動できる仮想化アプリなどです。では、何がその障壁となっているのでしょうか?

非常に似た機能を果たしているように見えるかもしれませんが、エミュレーションと仮想化の間には大きな隔たりがあります。Appleの限定的なRosetta 2エミュレータは、インディ・ジョーンズのロープの橋のように、その隔たりを越える役割を果たしています。誰かが高架橋を建設するでしょうか?まずは、その概念を探ってみましょう。

キャズムを越える:エミュレーションと仮想化

エミュレーションと仮想化はどちらも、ホストコンピュータ(実際のコンピューティングハードウェア)を管理するオペレーティングシステムとは完全に独立したオペレーティングシステム内で、1つまたは複数のアプリ、あるいはオペレーティングシステム全体を実行できます。このようなアプローチは、最新のハードウェアとオペレーティングシステムを使用しながら、以前購入したアプリ(利用できないマシン構成でのみ動作するもの)にもアクセスできるという、両方のメリットを享受できます。また、テストやトラブルシューティングのために複数のオペレーティングシステムバージョンを必要とすることが多いアプリ開発者やテクニカルサポートスタッフにとっても非常に便利です。

エミュレーションは一般的に命令レベルで機能します。エミュレータは通常、コンピュータプロセッサのほとんどまたはすべての機能をシミュレートしますが、実際のCPUが実行可能なすべての命令の一部しか処理できない場合もあります。アプリまたはオペレーティングシステムがエミュレータ内で読み込まれると、エミュレータはその命令を、エミュレータが動作しているプロセッサでネイティブに動作するバージョンに変換します。(電話網やその他の長期稼働システムでは、他のエミュレータ内にネストされたエミュレータも存在します。また、他のチップをエミュレートするように再構成するようにプログラムできるチップなど、ハードウェアエミュレータも存在します。)

エミュレーションは非常に基本的なレベルで動作するため、ホストプロセッサが模倣するプロセッサよりも大幅に高速でない場合、動作がかなり遅くなる可能性があります。Rosetta 2には、IntelプロセッサのコードをM1チップ上のApple Silicon命令に変換するという利点があり、macOSのニーズに合わせて最適化されているだけでなく、以前のIntel CPUよりも大幅に高速です。

エミュレーションは、例えば重要なビジネスソフトウェアを、必要なハードウェアが時代遅れになり入手できなくなっても継続して動作させるといった、真剣な目的にも活用できます。特に新しいソフトウェアが全く入手できない場合や、妥当なアップグレード料金で入手できない場合、個人や世界規模の企業にとって、ニーズを満たし続けるソフトウェアへの投資を保護することができます。また、コンピュータアーキビストや歴史的なマシンやゲームを愛する人々にとっても大きなメリットとなります。インターネットアーカイブには、例えば「オレゴントレイル」ゲームのMac版を起動できる初期のMacエミュレーターや、保存されたアニメーションやインタラクティブゲームのためにAdobe Flashを動作させ続けるエミュレーターが存在します。驚くべきことに、これらのエミュレーターはすべてWebブラウザで動作します。

対照的に、仮想化はより高レベルで機能します。仮想化アプリは仮想マシンを作成し、ホストコンピューターのオペレーティングシステムと同じプロセッサでアプリやオペレーティングシステムのコードをネイティブに実行するためのフレームワークを提供します。これらのアプリやオペレーティングシステムは、いわゆる「瓶詰めの脳」であるベアメタルプロセッサ上で動作していると認識しており、その環境ではわずかなオーバーヘッドによって動作速度が遅くなるだけです。

例えば、Intel ベース Mac 向けの Parallels Desktop と VMware Fusion は、ハイパーバイザーを利用して仮想マシン内で他の Intel ベース OS を実行する仮想化アプリです。(Parallels は自社製ハイパーバイザーまたは Apple 製ハイパーバイザーの選択肢も提供しており、Big Sur では Apple 製ハイパーバイザーを推奨しています。)仮想化により、macOS の旧バージョンだけでなく、Intel x86 コードを使用する Windows、Linux、その他の OS、そして macOS の 64 ビットアプリに対する Catalina 要件以前の 32 ビットアプリケーションも維持できます。1 つのアプリで複数の仮想マシンをセットアップし、それらを並べて実行できます。

(ちなみに、Boot Camp は仮想化ではありません。Boot Camp は、ホスト コンピュータの制御オペレーティング システムとして Windows を使用し、Intel ベースの Mac に Windows をインストールしてネイティブに起動する方法です。)

ハイパーバイザーは、データセンターや企業でも利用されており、単一の高性能サーバーで複数の仮想マシンを同時に実行することで、ハードウェアの性能を最大限に引き出します。私は仮想プライベートサーバー(ハイパーバイザー上で動作するマシンの一部)を運用していますが、これはラック内に自前のサーバーを設置するのとほぼ同じですが、はるかに安価です。ホストハードウェアが故障した場合でも、プロバイダーがディスクイメージのバックアップを数分で新しいホストに移行してくれます。また、現実的には、多くのデータセンターのハードウェアコンポーネントはホットスワップ対応に設計されているため、ダウンタイムの可能性はさらに低くなります。

Appleは、IntelプロセッサからApple Siliconへの移行ソリューションとして、仮想化は提供しないものの、エミュレーションを活用することを提案している。Rosetta 2は、AppleのMシリーズMac用の64ビットIntel x86エミュレーターだが、完全なエミュレーション環境ではなく、32ビットアプリはサポートしていない。仮想化アプリメーカーは、最終的には、AppleのARMベースのM1(およびそれ以降のMシリーズチップと推定される)と互換性のあるARMチップ向けに設計されたオペレーティングシステムを実行するApple Silicon用アプリを提供する予定だ。Parallelsはすでに、M1ベースMac向けのParallels Desktopベータ版をリリースしており、MicrosoftのARMネイティブWindowsプレビュー版をネイティブで実行できる。これは、AppleのARM実装と互換性があるためだ。(Parallels Desktopベータ版と、Windowsプレビュー版を無料でダウンロードできるWindows Insiderプログラムの両方にサインアップできる。)

ちょっと驚くかもしれませんが、Parallels Desktop for M1 内で Windows for ARM を実行すると、Microsoft は Intel 版 Windows 用に作成された 32 ビット アプリと 64 ビット アプリの両方を実行できる Intel エミュレーターを提供します。(Microsoft は 64 ビット版のアップデートを 2020 年 12 月にリリースしました。32 ビット版は 2017 年から存在しています。)

エミュレーションと仮想化のこれらの違いを念頭に置き、すべての Mac を Apple Silicon に移行する際の Apple のこれまでの道のりと、将来どこに向かう可能性があるのか​​を見てみましょう。

Appleのエミュレーションと仮想化の旅

AppleがハードウェアとOSの世代交代をいかに効果的に実現してきたかには、長年にわたり感銘を受けてきました。マイケル・スピンドラー、スティーブ・ジョブズ、そしてティム・クックの指揮下で、Appleは感傷的ではなく、常に前向きな姿勢を貫いてきました。

Apple のエミュレーションと仮想化のタイムラインは次のようになりますが、Wikipedia のページを埋め尽くすほどの小さなステップと細かい点がいくつかあります。

  • Motorola 68040 から PowerPC: Apple は、1994 年から 2001 年の Mac OS 9.2 まで、後期世代の 68040 プロセッサ用に作成されたソフトウェアを PowerPC ベースの Mac で実行できるようにするために、「68K」エミュレータを構築しました。
  • Mac OS 9 から Mac OS X: Mac OS 9.04 以降の Classic Mac ソフトウェアは、Mac OS X に付属の仮想マシン内で実行されていました。「Classic 環境」は、2000 年頃の Mac OS X のパブリック ベータ版から 2007 年の 10.4.11 Tiger まで利用可能でした。
  • PowerPCからIntelへ:オリジナルのRosettaエミュレータは、ほとんどのPowerPCソフトウェアをIntelベースのMacで動作させることができました。10.4.4 Tigerから10.6.8 Snow Leopardまで利用可能でした。
  • IntelからMシリーズへ: Rosetta 2エミュレーターにより、ほとんどの64ビットIntelソフトウェアがMシリーズプロセッサで動作できるようになります。終了日は発表されていませんが、少なくとも3~5年間は利用可能になると思われます。
  • Mシリーズ内でのiOS/iPadOS: M1ベースのMac上のmacOS内でiOSアプリとiPadOSアプリを実行できる機能は、一見通常のmacOSアプリのように動作するように見えますが、一種の仮想化と言えるかもしれません。しかし、同じオペレーティングシステムを使用していないため、そう表現するのが妥当でしょう。

64ビットIntel Macアプリを実行すると、Rosetta 2がバックグラウンドで自動的に起動します。(このようなアプリを初めて起動する際には、Rosetta 2のダウンロードとインストールを促すプロンプトが表示される場合がありますが、そのプロンプトが表示されなかったという人もいます。)アプリを初めて起動すると、エミュレーターは1回限りの翻訳プロセスを実行し、ネイティブコードに変換してキャッシュします。その後の起動は高速化されますが、Intelアプリを更新するたびに翻訳のキャッシュが再度実行されます。

開発者は、Intel版とM1ネイティブコードを1つのバンドルにまとめたユニバーサルアプリをリリースすることもできます。また、Finderの「情報を見る」機能を使って、ユニバーサルアプリをRosetta 2で強制的に起動させることもできます。このオプションは、一部の開発者がIntel版と機能的に同等でないユニバーサルアプリをリリースしているため、便利です。例えば、AdobeのM1向けPhotoshopの初期リリースでは、Intel版の機能がいくつか省略されています。また、拡張可能なアーキテクチャを持つアプリをお持ちの場合、それらのアプリ用のプラグインがまだM1ネイティブではない可能性があります。

一部の企業は、アプリの Intel バージョンと M1 ネイティブ バージョンを別々にリリースしています。Zoom と Cisco WebEx は、M1 ベースの MacBook Air にアプリの M1 バージョンを自動的にダウンロードしましたが、Google Chrome では選択できます。

Parallels Desktop、そして将来的にはVMware Fusionも、他のARMベースのOSをネイティブに実行できるようになる予定です。これは、現在IntelベースのMacでIntelベースのOSを実行できるのと同じです。これにはUnix、Linux、Windowsの各種が含まれます。ただし、M1ベースのMacでIntel OSをエミュレートおよび仮想化する方法がまだないため、Catalina以前のバージョンのmacOSを仮想化することはできません。これは変更される可能性があります。

Rosetta 2 を超えて完全なエミュレーションへ?

Appleの設計により、Rosetta 2はIntelプロセッサのあらゆる機能や操作に対応しているわけではありません。MacソフトウェアがmacOS内で実行するタスクのみをサポートしています。AppleはMacソフトウェアの設計とコンパイル環境全体を管理しているため、Rosetta 2は、限られたIntel CPU命令セットに依存するその環境内で開発者が実行できる操作のみをエミュレートするように構築されています。

Big Sur より前のバージョンの macOS、Intel 版 Windows、または Intel x86 チップ上で動作するように設計されたその他のオペレーティング システムをエミュレートするには、何らかのグループまたは企業が、回復力があり完全なプロセッサ エミュレーターを構築する必要があります。

そこが問題のようです。ARMチップ用の完全なx86エミュレータを企業が開発できない技術的な理由はありません。AppleとMicrosoftは既にそれぞれのOS向けに部分的なエミュレータを開発しています。皮肉なことに、汎用的なx86エミュレータが開発されれば、Catalina以前のmacOSで32ビットアプリを実行できるようにすることもそれほど難しくないでしょう。つまり、MシリーズMac上でエミュレーションと仮想化を組み合わせることで、これらの古いアプリを使い続けることができるのです。

Appleが完全なプロセッサエミュレータを開発しなかった正確な理由は不明です。AppleがCatalinaで32ビット互換性を廃止したのは、MシリーズMacでRosetta 2を実行することでパフォーマンスとテストの負担が増大することを懸念したためだと推測できます。しかし、これはほとんどの顧客に大きなメリットをもたらすものではありませんでした。Appleは長年にわたり、開発者とMacユーザーを32ビットアプリから離脱させようと努めてきました。さらに、同社の移行は通常、すべてのユーザーをできるだけ早く最新テクノロジーに移行させることを目的としているのです。

法的な懸念もあるかもしれない。インテルは2017年にマイクロソフトとクアルコムを批判し、一部のx86命令をエミュレートするクアルコム製チップ向けのARMベースWindowsは法的措置の対象となる可能性があると示唆した。インテルは数十年にわたりチップの世代を超えて命令セットを開発してきたため、一部のx86命令は特許保護下にあり、他の命令はもはや保護されていない。詳細は、間違いなく非常に面倒で長期にわたる民事訴訟で争われることになるだろう。(例えば、オラクルは最近、GoogleがAndroidでJavaの互換バージョンを使用していることをめぐり、11年に及ぶ知的財産訴訟で敗訴した。この訴訟は最高裁判所まで争われた。)

しかし、インテルのこの発言の後、訴訟は起こされなかった。マイクロソフトはARM版Windowsに32ビットx86エミュレーターをリリースし、2020年12月には64ビットx86エミュレーターも追加した。インテルの暗黙の脅迫は、数十億ドル規模の企業と衝突したくない中小企業やオープンソースプロジェクトを思いとどまらせる可能性もあるが、その証拠も見当たらない。オープンソース開発者は、こうした脅威に直面した場合、ためらうことなく警鐘を鳴らすので、実際に脅威が発生した場合には、私たちもその脅威について耳にすることになるだろう。

今のところ、Intel専用OSが必要な場合は、Intelハードウェアを稼働させ続ける必要があります。これには、ホストOS以外のOSを動かす仮想化ソフトウェアも含まれる可能性があります。過去、古いハードウェアを復活させたいという関心が寄せられたところでは、商用、オープンソース、あるいはその両方を問わず、エミュレーターを開発する十分な意欲がありました。それが再び実現するかどうかは、今後の展開を見守るしかありません。

Glenn 氏は最近、Apple Silicon Mac に特化した著書『Take Control of Your M-Series Mac 』を執筆し、macOS、リカバリモード、macOS 内での Mac 以外のアプリの実行における大きな違いについて説明しています。

MシリーズMacのカバー

Idfte
Contributing writer at Idfte. Passionate about sharing knowledge and keeping readers informed.