My tech diary

ソフトウェアエンジニアをやっています。技術的内容を中心に調べたことを書いていきます。

macOS Legacy System Extensions

What's that?

macOS Catalina のバージョンを 10.15.4 (19E287) に上げたタイミングで、表題の "Legacy System Extension" っていうダイアログが出現した。

Apple 公式のお知らせに出ている通り、 system extensions (システム機能拡張) の一種ではあるが、古い手法である kernel extensions (KEXT: カーネル機能拡張) のサポートを Catalina を最後に打ち切るそうで、そのことの啓蒙のためにこのようなダイアログを出すことになったらしい。

つまり、一部の App (主に driver?) が kernel extensions を使っている場合に、このダイアログをユーザに表示することで、それらの App の開発元にアップグレードを促す施策のようだ。

How should we do?

ダイアログの文言の中に、 App 開発元の情報が含まれているので、これを元に調べてみる。

自分の場合は、前に使った j5create JUE120 USB™ 2.0 Ethernet Adapter という製品を利用するためにインストールした ドライバ が原因だったようだ。 (今見たら macOS Catalina support と書いてあるので、既にアップデートされているのかな?)

この製品に組み込まれている ASIX Electronics の AX88772 っていう IC chip のドライバが対象になってしまっているらしい。 このことは以下のコマンドでも確認できる。

# List only third party kernel extensions.
$ kextstat | grep -v com.apple
Index Refs Address            Size       Wired      Name (Version) UUID <Linked Against>
  161    3 0xffffff7f83d86000 0xef000    0xef000    org.virtualbox.kext.VBoxDrv (6.0.2) 23F2E3C8-C38A-3339-9A6E-08F8AD6CA635 <8 6 5 3 1>
  164    0 0xffffff7f83e75000 0x8000     0x8000     org.virtualbox.kext.VBoxUSB (6.0.2) E73ADEDC-4A15-36FB-B741-2373408F514B <163 161 59 8 6 5 3 1>
  166    0 0xffffff7f83e7d000 0x5000     0x5000     org.virtualbox.kext.VBoxNetFlt (6.0.2) 016CC2E0-4FB7-3DBA-A725-D353DF9D7DC9 <161 8 6 5 3 1>
  167    0 0xffffff7f83e82000 0x6000     0x6000     org.virtualbox.kext.VBoxNetAdp (6.0.2) 5044F02A-8CCC-36A9-A1B5-E31D27F69B62 <161 6 5 1>
  181    0 0xffffff7f83e8b000 0xa000     0xa000     com.asix.driver.ax88772 (1.6.0) 4094EF2F-D3D7-346E-B162-5D0EA479B99F <59 18 8 6 5 3 1>
# Print a list of kernel extensions which include `asix` text.
$ kextfind -bundle-id -substring  'asix' -print
/System/Library/Extensions/AppleUSBEthernet.kext
/Library/Extensions/AX88179_178A.kext
/Library/Extensions/AX88772.kext

見つかった KEXT は、以下のようなコマンドによって "無効化" することができるらしい。 (危険なコマンドであるようなので、実行には注意してください)

$ sudo kextunload /Library/Extensions/AX88772.kext

コマンド実行後は、以下のように ASIX の KEXT が出てこなくなる。

$ kextstat | grep -v com.apple
Index Refs Address            Size       Wired      Name (Version) UUID <Linked Against>
  161    3 0xffffff7f83d86000 0xef000    0xef000    org.virtualbox.kext.VBoxDrv (6.0.2) 23F2E3C8-C38A-3339-9A6E-08F8AD6CA635 <8 6 5 3 1>
  164    0 0xffffff7f83e75000 0x8000     0x8000     org.virtualbox.kext.VBoxUSB (6.0.2) E73ADEDC-4A15-36FB-B741-2373408F514B <163 161 59 8 6 5 3 1>
  166    0 0xffffff7f83e7d000 0x5000     0x5000     org.virtualbox.kext.VBoxNetFlt (6.0.2) 016CC2E0-4FB7-3DBA-A725-D353DF9D7DC9 <161 8 6 5 3 1>
  167    0 0xffffff7f83e82000 0x6000     0x6000     org.virtualbox.kext.VBoxNetAdp (6.0.2) 5044F02A-8CCC-36A9-A1B5-E31D27F69B62 <161 6 5 1>

ただ、上記コマンドの実行は危険なので、ドライバにアンインストーラが付いている場合は、それを実行することが推奨される。 (JUE120 のドライバもちゃんとアンインストーラが付いているようです)

また、もちろん、単にドライバをアンロードするだけだと、その機能を使えなくなってしまうので、引き続き使いたい場合で、アップデートされたドライバがあるなら、それをインストールする必要がある。

References