Hacker News new | ask | show | jobs
by grishka 1650 days ago
I've always liked Apple's approach more. There are public APIs that are mostly guaranteed to work across system versions. Then there are private ones. You can reverse engineer them. You can use them in your apps. They might even do what you wanted. But you're on your own with them, as Apple rightfully considers itself free to break anything that isn't part of the public SDK.

Microsoft, on the other hand, sees that some app calls an undocumented internal function, or has a bug that causes it to misuse an API call that just happens to still work correctly, or even worse, hooks into a system library or something, and considers that now to be a part of the public SDK that is to be maintained and made compatible with everything that might use it, forever.

3 comments

I worked on macOS for many years. Apple's policy is more like Microsoft's than you describe. It was commonplace to have to revert changes that broke a "must-not-break" application that was dependent on undocumented APIs or behavior, and the source of certain projects is littered with app-specific workarounds.
Maybe that’s part of why Windows owns the enterprise and Apple isn’t really a thing in that market.
I've never understood this desire to run everything 100% natively all the time AND keep your system up to date. Just put a Windows 95/98/2000/XP VM into Windows 11, integrate its window manager with the host desktop, and be done with it forever. Start it transparently for apps that need it. IIRC Apple did a similar thing when transitioning from classic Mac OS to OS X, and it worked pretty well.
How do the various Linux flavors handle this kind of thing?
I did a bit of cross-platform development in C++, and I'm glad to report that Linux is an API clusterfuck in regard to anything going beyond system calls. None of the desktop-related stuff is part of the system and there's always more than one way to do something, and you have to support all of them because else someone would complain that your thing doesn't work on their particular configuration.
They just break everything and tell users/devs to suck on it.