Way back in the good old 90s, we had very different versions of various unix systems. SunOS/Solaris, Irix, AIX, HP/UX, this upstart Linux, and some BSD things floating about. Of course, windows NT and others were starting to peek out then, and they had a “POSIX subsystem”.
Cross platform builds were generally speaking, a nightmare. While POSIX is a spec, writing to it didn’t guarantee that your application would work on a range of machines and OSes. Each system had their own little annoyances, and this caused developers additional time, effort, cost in order to support.
The net result of this was that developers focused on the platforms which got them the most revenue for their products. Databases developed primarily on SunOS/Solaris, Graphics and HPC stuff on Irix and AIX, and so forth. That is, there was a rather large bit of friction to overcome in order to build applications on other-than-default platforms.
Backwards compatibility, the effort not to break the OS interface from the app developers point of view, was fairly important. Some things broke, but folks at each company worked on fixes to enable critical apps to work.
So … during this time, people realized that they needed build environments that abstracted what the OS had, and what they could use. If you write to the higher level abstraction, and a common compiler, you should be able to reduce the impact of the system upon the application.
No decision comes without a price, and the price for this was you needed to use tools like autoconf, and gcc, and …
Over time, these became more accepted ways to handle software dev. It wasn’t optimal, but it wasn’t terrible as before. What many had learned from the “bad old days” was that OS versions and their distribution mechanisms were actually quite bad for application deployment. They were great for imaging a system. Not so great for other stuff.
So people took to the abstraction as a necessary evil, as a way to develop code that worked, even if it was atop a somewhat rickety infrastructure.
Of course, companies like Apple build differentiated hardware (great screens, great battery life), and want to carry this differentiation forward into their OSes. Their primary OS has a long history itself, but as a Unix-like system, it should be compatible with that abstraction layer.
Every single release of OSX I have updated to over the last 3 years or so, have broken some of my build systems. Not the high level build per se, but because of choices to move, remove, etc. key libraries, headers, and so forth.
What this amounts to is a moving target at best. It takes me time and effort to fix. These sort of choices may in some way help their native Xcode folks, but for people like me using common cross platform tools … no … they introduce more friction.
And as with 20 or so years ago, make me question whether or not this is worth my time/efforts.
Not all applications are distributed/installed/containerized the way I want. So I want to build my own toolchest, and make sure everything functions. But if I suddenly can’t use fltk, or libreadline, or libssl or … because, hey, the headers have moved, and the libraries are no longer distributed …
… this only increases friction. Given that I want to be able to use the same tools I use on my linux machines on my mac … how does this increased friction help?
FWIW: my mac also runs linux. Battery life isn’t as good, but everything else works. And my builds work. So there’s that.
Yes, I use homebrew. Yes, this fixes some of the issues. But not all. And with the update to Mojave, now my octave build doesn’t have native working readline anymore. So I have to use rlwrap or similar. Assuming that they still work.
This isn’t better. Don’t break the ability of people to use this abstraction mechanism. Linux on power mac is always an option. I don’t mind trading lower battery effectiveness for better interop.
Note: the tools I am talking about are specifically here https://github.com/joelandman/nlytiq-base . I just spent 2 days fixing the builds for Mojave. Worked on High Sierra after I spent 2 days fixing from Sierra, which I also spent days hunting down lots of changes.