>"Binary compatibility" is routinely applied to libraries as well
Wrongly. Only the lower lever is or is not "binary compatible", basically only how the code is loaded and how functions are called.
All the other stuff (libraries, apps) just take advantage of that, and whether higher level libraries exist or not has no bearing on whether a system is binary compatible with another.
Not only that, but a system can have all the libraries that another has, but still NOT be binary compatible with it.
For example, a simple OS X QT app can be ported to Windows with just a recompile, but the two environments are not binary compatible.
Availability of the same APIs and binary compatibillity are two things are what hackers (as in "Hacker News") call "orthogonal".
What you're trying to describe in the first paragraph is "having the same ABI". But that's not the only context where "binary compatibility" is used. In fact, in the fourth paragraph you are referencing the difference between source compatibility and binary compatibility: but in this case, binary compatibility requires not only a compatible ABI, but also the right set of system calls, libraries and assorted machinery that allows the compiled program to run.
Wrongly. Only the lower lever is or is not "binary compatible", basically only how the code is loaded and how functions are called.
All the other stuff (libraries, apps) just take advantage of that, and whether higher level libraries exist or not has no bearing on whether a system is binary compatible with another.
Not only that, but a system can have all the libraries that another has, but still NOT be binary compatible with it.
For example, a simple OS X QT app can be ported to Windows with just a recompile, but the two environments are not binary compatible.
Availability of the same APIs and binary compatibillity are two things are what hackers (as in "Hacker News") call "orthogonal".