ユニバーサル
バイナリは、
Appleが開発した技術で、異なる
CPUアーキテクチャを持つ環境で
ソフトウェアを動作させるための
バイナリ形式です。これにより、例えば
PowerPCとx86、あるいはx64とARM64のように、互換性のない複数の
CPU上で同一のアプリケーションを動かすことが可能になります。
ユニバーサルバイナリの登場背景
AppleがMacintoshに搭載する
CPUを
PowerPCから
インテルのx86へ移行した際、この技術が導入されました。また、macOS(当時はMac OS X)における
32ビットから64ビットへの移行期にも、
32ビットバイナリと64ビット
バイナリの混在を可能にするために利用されました。
ユニバーサルバイナリの利点
ユニバーサル
バイナリに対応したアプリケーションを利用する際、ユーザーは実行環境の
CPUアーキテクチャを意識する必要がありません。
CPUに合わせた個別のパッケージをダウンロードすることなく、単一のアプリケーションパッケージで動作します。また、Rosettaのような変換層を介さずに
CPUのネイティブ性能を最大限に引き出すことができます。
ユニバーサルバイナリの欠点
一方で、ユニバーサル
バイナリには、各アーキテクチャに対応する複数の
バイナリを内包するため、単一のアーキテクチャ専用の
バイナリと比べてファイルサイズが大きくなるという欠点があります。
Universal 2
インテル系プロセッサ向けのx86_64と
Appleシリコン向けのarm64のネイティブコードを格納する
バイナリフォーマットは「Universal 2」と呼ばれています。この技術はWWDC 2020で「Rosetta 2」と共に発表されました。
lipoコマンド
macOSには、`lipo`というコマンドラインツールが標準で提供されています。このツールを使うことで、以下の操作が可能です。
異なるアーキテクチャ向けのバイナリを結合し、ユニバーサルバイナリを生成する
ユニバーサル
バイナリに格納されているアーキテクチャの種類を確認する
特定のアーキテクチャ向けのバイナリのみを抽出または削除する
lipoコマンドの活用例
例えば、開発者はlipoコマンドを利用して、特定のCPUアーキテクチャ向けに最適化されたバイナリを生成したり、既存のユニバーサルバイナリを分析したりできます。これにより、アプリケーションのパフォーマンスを最適化したり、ファイルサイズを調整したりすることが可能です。
まとめ
ユニバーサルバイナリは、Apple製品のエコシステムにおいて、異なるアーキテクチャ間のソフトウェア互換性を保つための重要な技術です。ユーザーは、意識することなく、自身の環境に最適なパフォーマンスでアプリケーションを利用できます。lipoコマンドは、開発者がユニバーサルバイナリを効率的に管理するための強力なツールです。
脚注
関連項目
Rosetta
ファットバイナリ
Mach-O
Classic (ソフトウェア))
外部リンク
Universalアプリケーション