作曲・浄書・指導・音響

金沢音楽制作

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

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

Rosettaを解除したにもかかわらず、アーキテクチャがx86_64のままになってしまう場合の対処法。環境:macOS 11.0.1、Apple M1

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

$ uname -m
x86_64

原因は親プロセスがx86_64

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

プロセスの親子関係はpstreeコマンドで確認できる。たとえばPID 20065のtmuxが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(以降M1 brew)のみを使うのが安全だろう。というのも、x86_64のコマンドをパイプしてしまったがために、不本意な結果になる可能性が十分にあるからだ。現状、M1 brewのリポジトリにアプリケーションが揃っていないが、将来的にはある程度揃うのでないか。

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

愚痴

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

更新情報

  • 公開日:2020-12-31