Comment by heavyset_go
3 months ago
Wine works because Microsoft spends billions on backwards compatibility and APIs are stable over time.
Apple regularly deprecates frameworks and adds new ones at rapid rates. It's a moving target with the added complication of moving build targets.
If you implement your own version of Apple's XyzKit, that might only be used in macOS 12 to 14, and not before or after that, so you put in a lot of work to essentially support binaries that were released between X date and Y date and that's it. And you have to do that for a sliding window of dates, macOS versions and framework releases and deprecations.
Wine works, because it doesn't cover many modern APIs, I would assess.
New Microsoft under Satya has a different stance on anything WinRT related, or even newer Win32/COM APIs since Windows 8.
Also .NET Framework is the Python 2 of .NET, the breaking changes are a reason there are still new projects being done in .NET Framework 4.8.x.
You can desugar all the modern stuff to windows api with first party DLLs
First party DLLs have copyright.
6 replies →
The solution for that is to decide which period do you want to build support for.
Trying to be binary-compatible with Tahoe may not be worth it. But you could make a distro binary-compatible with Snow Leopard.
Or better, make it compatible with Ventura apps without the bloat of MacOS Ventura.
That could give new life to old Macs. It can also give a PC a MacOS-like environment without having to deal with Hackintosh.
This won't work simply because majority of apps follow "the new trend". Take calibre, for example. I found myself having to OCLP my calibre server, simply because the hardware won't "take" the new macOS version required by the app, but the app new features are only available in the new versions.
I don’t think it’s as fast breaking as you suggest but certainly big changes like 32Bit support dropping, OpenGL deprecation, and move to arm64 are huge breaks.
Generally their “availability” macros in swift and objc keep things working across versions in a forward compatible way.