macOS Catalina is said to have dropped support for 32-bit apps. It’s not clear how much support is dropped.
Is there any supported way for a 64-bit app to request the kernel to create a 32-bit code segment?
Ask Different is a question and answer site for power users of Apple hardware and software. It only takes a minute to sign up.Sign up to join this community
netkas has experimented with this here. It seems like Apple has not removed 32-bit capability from the Darwin kernel itself, but merely disabled it as well as removing all the 32-bit libraries from the system.
To re-enable 32-bit processing from the kernel, just disable Apple's disabling function by adding
no32exec=0 to your boot-args (
sudo nvram boot-args="no32exec=0" if SIP is disabled, if not run the same command from Recovery mode).
To get the 32-bit libraries back, just copy them from Mojave
Sources: Bringing back 32-bit apps to life
Thanks to Ken Thomases from CodeWeavers, who has posted quite a bit of information on
wine-devel mailing list on how CrossOver runs Win32 apps on macOS Catalina, we now know that Apple enabled
i386_set_ldt syscall for 64-bit processes.
So, aside from doing hack described in Max Coplan's answer, it's possible to create 32-bit segments in 64-bit processes.
An excerpt from Ken's mail:
Speaking of code segments, the big thing that Catalina provides that enables this all to work is the ability to create 32-bit code segments in a 64-bit process. For that, they enabled the use of i386_set_ldt() in 64-bit processes. The big caveat though, is that this functionality is restricted by System Integrity Protection (SIP). For now, your best bet to get this working for yourself is to disable SIP. (CrossOver doesn't require that, but the mechanism by which we accomplish that is in flux internally to Apple. When it settles down, I'll update this thread.)