我々は「それ」をどう呼ぶべきか
本編へ進む前に、新しいARMベースのMacをどう呼ぶかについて触れておきたい。かつてPowerPCからIntelへと移行するときには、ごく自然に「Intel(-based) Mac」という呼び名が定着したものだが(x86 Macでもおかしくはなかった)、今回はどうだろう?
WWDCのビデオをあれこれ見ていると、「Apple Silicon('s) Mac」と呼ばれているようだ。WWDC前の巷の噂話では「ARM Mac」などと呼ばれていたものだが、Appleとしては(ARMアーキテクチャベースではあるものの)独自プロセッサという意識が強いはず。今後も公式にARM Macと呼ばれることはないだろう。
それにしてもアップルシリコンマック……我々日本人には発音しにくく、好みの4文字略語(ヘビーメタルを"ヘビメタ"、プログレッシブを"プログレ"とか)も作りにくい。適当に端折るとしても、アップルマックでは旧来のアーキテクチャと区別できないし、シリコンマックでは由来がわからない。
あれこれ考え、Appleの「A」とSiliconの「S」で「AS」、「AS Mac(アズマック)」という略語を思いついたが、それでは1万円札で汗を拭きそうな感じに響いてしまう。やはりARM Macしかないのか……?
初代と二代目の違い
Apple Silicon Macといえば気になるのが「Rosetta」。PowerPCからIntelへ移行するときに活躍したバイナリトランスコードシステムで、今度は「Rosetta 2」としてIntel x86_64からARMへの移行に一肌脱いでくれる段取りだ。
そのRosetta、PowerPC→Intelのバイナリ変換を行った初代と比べ、二代目は「モダンな」仕様に変更されている。内容について触れる前に、初代がどのようにして動作していたかをざっくり説明しておこう。
Rosettaは、カーネルから直接(必要に応じて/自動的に)呼び出される。実行されるアプリがGUIを備えているのかコマンドなのか、呼び出されたのがFinderなのかTerminalなのかは関係なく、あたかもそれがx86ネイティブアプリであるかのように処理される。起動されたアプリが実際に動き出すまでには若干のタイムラグがあり、Dockでアイコンの跳ねる回数がPowerPC Macに比べ増える傾向はあったものの、バイナリ変換が行われていることはほとんど意識させなかった。
Rosettaはトランスレータ本体(/usr/libexec/oah/translate)のほかに、システムに常駐し変換後のキャッシュを管理するプログラム(/usr/libexec/oah/translated)、そしてライブラリ群(/usr/libexec/oah/Shims以下)で構成されていた。もっとも、これら要素は通常ユーザの目に入ることはなく、当時のユーザにとっては無意識下の存在だったに違いない。
ただし、Snow Leopardのときには標準装備されなくなり、はじめてPowerPCバイナリが実行されたことをトリガーとしてインストーラを呼び出す仕掛けが施されていた。PowerPCからIntelへの移行は、当初予想を上回るペースで順調に進んだこともあり、インストーラを見ぬまま次のLionにアップデートしたユーザも多かったはずだ。
二代目Rosettaは、初代に比べ「キャッシュ」を積極的に活用する設計だ。WWDCのビデオの説明によれば、Mac App Storeまたは(OS標準の)インストーラが起動された段階で変換プロセスが始まり、すべてのx86_64バイナリをApple Siliconネイティブに変換する。オンザフライ方式の変換にも対応するため、インストール時に存在しなかったコードに遭遇したときにはその場で変換するそうだ。
それ以外の方法で入手されたアプリは、初回の起動時にバイナリ変換処理が行われるため、ドック上でアイコンが跳ねる回数が若干増えるとのことだが、2回目以降の起動ではストレージにキャッシュされたApple Siliconネイティブバイナリが使用されるため、変換に伴う待ち時間はほぼなくなるらしい。
初代Rosettaもキャッシュを活用していたが、二代目のキャッシュは長期保存される点で大きな差がある。となると気になるのがセキュリティだが(キャッシュを勝手に置き換えられたら大変なこと)、キャッシュには1台のマシンでのみ有効な署名が施され、OSアップデートの折にも更新されるという。Apple Siliconネイティブに変換されたからといって、一切セキュリティチェックなしの野良アプリに変わるわけではないのだ。
グラフィック処理や拡張命令への対応も、アップデートされている。初代もAltiVec(PowerPC G4に用意されていた浮動小数点演算の高速化に長けた機構)やOpenGLを解すことはできたが、二代目ではMetalがサポートされ、Metalを使用するアプリでは(Apple Silicon上の)GPU向けの適切なコマンドを生成してくれるそうだ。
前回も書いたとおり、実際のパフォーマンスについてはなんともいえないが、AOT(Ahead-Of-Time)コンパイラ的な性格が強くなった二代目Rosettaは、予想より快適なのではないか。資料を読み進めるにつれ、そう思えるようになってきた次第だ。