Wednesday, March 14, 2007

Mach-O

普段MacOSXを利用しているにも関わらず、あまり気にならないところがありました。Mach-Oというファイルフォーマット形式です。
http://ja.wikipedia.org/wiki/Mach-O

今はユニバーサルバイナリと呼ばれているものですが、複数のアーキテクチャのバイナリを保持することができる形式です(MAB)。例えば

% file `which Emacs` <= Carbon Emacsのバイナリファイルを指定する。
/usr/bin/Emacs: Mach-O universal binary with 2 architectures
/usr/bin/Emacs (for architecture i386): Mach-O executable i386
/usr/bin/Emacs (for architecture ppc): Mach-O executable ppc

i386(IA32), ppcに対応している事が分かります。
普段利用しているLinuxであればバイナリファイルはこんな感じに出力されています。

test.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped


Intel CPUにチェンジしたAppleには無くてはならない技術ですね。実はNEXTSTEPというOSで既に実現されていた様ですが。

http://journal.mycom.co.jp/column/osx/138/

MacOSXはNEXTSTEPの技術を採用している様です。その他にもNetinfoもNEXTSTEPが元です。