Rosettaの限界と底力
先日はcrispy-doomのコンパイルにおいてRosettaの限界を感じたのだが、今回はRosettaの底力を感じたので、それを書いておこう。
試したのは、このあいだ、MojaveでコンパイルしたNanosaurとNanosaur2である。SDL2ライブラリを利用した現代風の改良が加えられた、この2つのゲームソフトは、現在githubでソースコードが公開され、オープンソフトウェアとして生き返った。ちょっと苦労した点もあったが、私もソースコードのコンパイルに成功し、このクラシックなゲームをMojaveやCatalinaで再び楽しめるようになった。
先日から、メインマシンをIntel-mac(mojave)からM1-mac(monterey)に移行する作業を実施しているが、MojaveでコンパイルしたNanosaurが果たしてRosettaによってM1-macbook proでそのまま起動できるか試してみた。その結果は、NanosaurもNanosaur2も両方とも(なんの修正もやり直しも不要で)問題なく起動し作動したということになった!コードは当然ながらx86_64のはずである。これがarm64で動いたというのだから、Rosettaの底力を見せつけられた、ということになるだろう。
しかし、crispy-doomはダメで、NanosaurはOKというのはどういうことなんだろうか?どうも、Rosettaが力を発揮するのは、アプリ名がXXX.appとなっているタイプのアプリケーション、つまりXcodeのプロジェクトとして完成したアプリだけのようである。crispy-doomはmakeによって実行ファイル単体に全てが固められてしまったが、NanosaurはNanosaur.appというディレクトリがその正体であり、その中には設定ファイル*.plistやその他のデータがバイナリとともに配置されている。
そういえば、Mojaveからコピーして持ってきたAtom editorもM1-MBPで動いているが、その正体はAtom.appである。ディレクトリの中に入ってみるとContentsというディレクトリがあり、その中にInfo.plistなどさまざまなファイルが収められている。実行ファイルの本体は、MacOS/Atomであり、そのファイル形式を調べると、予想通りx86_64であった。
$ cd Atom.app/Contents/MacOS $ file Atom Atom: Mach-O 64-bit executable x86_64