Isn't that more of a "solution" than a problem? If you want to write an app that runs across different platforms, you have to put an abstraction layer in somewhere. If it's inside your app, it's a maintenance headache. If it's outside, then that becomes the platform you're targeting.
> adopting the Linux ABI, or even running it virtualized, instead of caring for POSIX compatibility.
So what happens when you want to use a feature that's not in pure POSIX?
I remember that quite a lot of the ugliness and insecurity of the original OpenSSL code was attributed to having #ifdefs all over the place to deal with weird and eventually dead systems.