FreeBSDにおけるunameの挙動

Facebookにある FreeBSD研究部で話題になった話を転載。

amd64カーネルで、i386バイナリのjailを動かしてて気づきましたが、i386バイナリのunameはアーキテクチャにi386を返すのですね。ま、良いんですが、、。
% uname -a
FreeBSD fw2 11.3-RELEASE FreeBSD 11.3-RELEASE #0 r349754: Fri Jul 5 04:45:24 UTC 2019
root@releng2.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64
% /export/jail/jail1/usr/bin/uname -a
FreeBSD fw2 11.3-RELEASE FreeBSD 11.3-RELEASE #0 r349754: Fri Jul 5 04:45:24 UTC 2019
root@releng2.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC i386

に関して以下のような返答が出ていました。

jail 環境かどうかは特に関係なく、デフォルトは実行しているバイナリのABIに対応するアーキテクチャ名を返します。
この挙動が困るようなら、sysctl debug.adaptive_machine_arch=0 を設定してください。
こうすると、ネイティブなアーキテクチャ名を返すように変わります。