macOSの仮想化とその提供の歴史 – Xcode Cloudリリースに添えて
こんにちは、whywrite.it macOS班の @whywaita です。
AppleがWWDC22にてXcode Cloudを正式版としてリリースしました。(執筆時点では日本語のページだとベータ版になっていますが、英語版は今すぐ使えることになっています)
これはApple製品向けのアプリケーションをビルド、テスト、リリースなどをする環境を提供するツールであるとされています。Xcodeは現状macOS上でしか動作しないので、仮想化されたmacOSがバックエンドで用意されていると考えられます。
Xcode Cloudのような「仮想化環境上で動作するmacOS」という需要をとりまく環境はここ数年で大きく変動しているため、前後関係を含めて歴史をまとめておきます。
諸注意
本記事ではApple等が提供する規約について言及していますが、あくまで私の現時点の解釈であり、内容の正確さを保証するものではありません。
Mac OS X 時代
OS Xを利用する場合はAppleが定める「ソフトウェアライセンス契約」に同意する必要があります。OS Xであれば各リリースバージョンごとにPDFが公開されています。
2010年に書かれたブログを参照すると、当時からOS Xを仮想化できるソリューションが提供されていたようです。
当初から存在する制約として、「macOSはAppleのハードウェア上でのみ、2つ起動させることが可能」と記載されています。
例えばmacOS上でソフトウェアを開発しているときに、VirtualBoxやVMware Fusionを利用してVMとしてmacOSを起動させ、VM上でソフトウェアのテストを行う事は許可されています。
また、VMware ESXiのようにハイパーバイザとして別のOSを立ち上げた上でゲストのOS Xを2つ起動させることも許可されています。実際にVMware Compatibility Guide (ゲストOSのサポートリスト)にはOS X (現 macOS)が記載されています。
私が以前調査したメモによると、GitHub ActionsのGitHubが提供するmacOS runnerはMac Pro (2018) いわゆるゴミ箱Mac ProとCPUの型番は一致しますが、コア数は1/2になっていました。プロセスを見るとvmware-toolsも起動しているようなので、ESXiなどを利用しているのではないかと思われます。
余談ですが、OS Xが無料になったのは2013年にリリースされたOS X 10.9 Mavericksです。
OS X 10.10 Yosemite リリース
2014年にOS X Yosemiteがリリースされ、Hypervisor.Framework が追加されました。
これはmacOSのユーザランドでVMを起動されるためのAPIで、これ以前にVMを作成する場合は3rd party Kernel Extention必須だったものが改善されました。
Hypervisor.Frameworkを利用したxhyveなどがリリースされDocker for Macなどでは利用されていたようです(詳細は割愛)。
時系列が前後しますが、2021/12 にリリースされたQEMU 6.2.0ではhvf
として対応(-accel=kvm
のかわりに -accel=hvf
と書く)、2022/03 リリースされたlibvirt 8.1.0でhvf domainに対応しました。どちらもApple Silicon (aarch64)をホストとした場合のみの対応です。
macOS Big Sur 11 リリース
2020年にmacOS Big Surがリリースされ、 Virtualization.Framework が追加されました。
Hypervisor.Framework と対比すると高レベルAPIに当たります。Hypervisor.FrameworkはIntel版とApple Silicon版で利用できるAPIが異なるのですが、Virtualization.Frameworkはどちらも同じAPIです。便利ですね。
この時点ではゲストOSとしてはLinuxのみに対応しています。
また、Big Surと同時に発表されたのがApple Silicon (M1)です。
以前はもっともゲストmacOSの扱いに長けていたVMwareですが、M1の対応には2022年の現在でも苦労しているようです(CPUのアーキテクチャから変わっているので当たり前ですが)。
macOS上でゲストmacOSを起動させるVMware Fusionは執筆時点の最新版である12.2.3時点でもIntel Macモデルのみ対応しています。2021/09にPublic Tech Previewと銘打ったバージョンが公開されており、動くらしい(筆者は確認していません)ですが公式リリースにはまだ載らないようです。
また、ハイパーバイザであるESXiはM1対応どころか2019年に発売されたMac Pro (2019) いわゆるおろし金Mac Proにも対応していません。
いくつか調べた限り、OSSにおいてもホストマシンをLinuxにした上でゲストmacOSが安定して起動するソフトウェアは見つかりませんでした。Virtualization.Frameworkなどを利用しホストmacOS上でゲストmacOSを起動するソフトウェアはいくつか存在するようです。
macOS Big Sur 11 におけるライセンスアップデート
そして、macOS Big Surソフトウェアライセンス契約から「許諾されたデベロッパサービスのためのリース」という項目が追加されました。
リースする際にはリース先の利用者もライセンス同意する必要があるという条項もありますが、もっとも気になるのは「(ii) 各リース期間は連続する24時間以上とする必要があります」という条文です。
この変更による大きな影響を受けたのはCIサービスを提供するSaaS事業者です。彼らは基本的に1分などの短い単位でクリーンなmacOSを提供し、従量課金で請求を行っていました。
CircleCIは2022/02にDedicated Hosts for macOSをリリースしており、このホストの最低利用時間は24時間です。ドキュメントにもAppleによる規約の変更によるものであることが記載されています。
Q: Why is there a 24-hour minimum?
Dedicated Hosts for macOS – https://circleci.com/docs/2.0/dedicated-hosts-macos/
A: Apple released an updated end-user license agreement(EULA) along with the release of Big Sur in November 2020, which requires cloud providers to lease Apple hardware to no more than one customer for a minimum of 24 hours.
AWSが提供しているAmazon EC2 Macインスタンスも「Apple の macOS ソフトウェアライセンス契約を遵守するために、24 時間を最小割当期間として、1 秒あたりで請求されます。」と記載されています。
しかし、上記の条件に現状では当てはまっていないサービスも存在します。
BitriseはBitrise Gen2というものを2021/07にリリースしており、Apple Siliconにも対応しているようですが、24時間の制限などは見当たりません。
GitHub Actionsは当該の規約について質問するIssueが存在するのですが、「NDAのため回答できない」としています。
macOS Monterey 12 リリース
Big SurではゲストOSとしてLinuxのみに対応していた Virtualization.Framework がゲストmacOSに対応しました。ただしIntel Macでは動作せずApple Silicon (M1) Macでのみ動作します。
UTMやAnkaなどはこのAPIを利用していることを公開しています。
まとめ
2020年リリースのBig SurアップデートからXcode Cloudのリリースまでで起こった仮想化周りの出来事についてまとめてみました。
今年のWWDC22ではXcode Cloud登場以外にも “Create macOS or Linux virtual machines” と銘打った映像も公開されており、AppleとしてはBig Surから仕込んでいた諸々がようやく花開いたといったところでしょうか。
利用者としてはプラットフォーマーの言う事に従うしかないので各位やっていきましょう。