作曲・指導・C言語・Linux

金沢音楽制作

金沢音楽制作では、楽曲・楽譜の制作と、作曲や写譜などレッスンを行っています。

Rosettaを解除したのにarm64にならない原因

Rosettaを解除したにもかかわらず、アーキテクチャがx86_64のままになってしまう場合の対処法です。具体的には次のような症状です。

ターミナルアプリを右クリックし、Get Info > Open using Rosettaのチェックを外します。再度ターミナルを開いてunameでアーキテクチャを確認すると、本来ならばarm64と表示されるはずが、x86_64と表示されます。

$ uname -m
x86_64

環境:macOS 11.0.1、Apple M1

原因は親プロセスがx86_64

原因は、親プロセスがx86_64で作動してしまっているからです。親プロセスがx86_64で作動していた場合、そこから発生するコマンドの全てがx86_64で作動します(システムコールのfork())。筆者は、bashtmuxをx86_64のbrewでインストールしたものを使っていたので、そこから作動するコマンド(子プロセス)が、全てx86_64になってしまいました。

プロセスの親子関係はpstreeコマンド(要インストール)で確認できます。たとえばPID 20065tmuxがarm64だったとしても、派生した子プロセスのbashがx86_64だった場合、その上で実行されるプロセスは全てx86_64になってしまいます。

$ pstree | less
-+= 00001 root /sbin/launchd
 |-+= 20065 hase tmux -u new-session
 | |-+= 46720 hase -bash
 | | |-+= 65249 hase pstree
 | | | \--- 65251 root ps -axwwo user,pid,ppid,pgid,command
 | | \--- 65250 hase less
 | |-+= 64023 hase -bash
 | | \--= 65145 hase /usr/bin/vim main.rs
 | \-+= 55951 hase -bash
 |   \--= 56038 hase /usr/bin/vim not_become_arm64.html

解決法はx86_64を使わないこと

解決法は、x86_64のbrewを完全に捨てることです。そして、M1対応のbrewのみを使うようにします。というのも、x86_64のコマンドをパイプしてしまったがために、不本意な結果になる可能性が十分にあるからです。

2020年12月現在、bashとtmuxはM1brewにある。しかし、Neovim(以後、vimと書く)がまだないので困っている。vimでは外部コマンドを多用している。もし、vimがx86_64で作動していた場合、呼び出されたコマンドはvimの子プロセスになるので、x86_64で作動してしまうのである。

追記:2022年4月現在、問題がかなりなくなったように感じます。

愚痴

率直にいって、Apple M1のmacOSが開発環境として成立するとは思えない。arm64とx86_64を使い分けるなんて異常である。そしてやっていることといえば、表面だけでもGNU/Linuxに接近させよう、という無駄な努力である。そんなことなら最初からGNU/Linuxを使えばよいのだ。なお、ラズパイのARMは、M1ほど問題がないことを付け加えておく。

更新情報

  • 公開日:2020-12-31
  • 更新日:2022-02-30