> then externally the system can determine which most-recent version of the library is still compatible
This is great until a more recent version of a library still has the same interface but a completely different behaviour or seriously breaking bug in the implementation.
That's exactly what I'm talking about. That compatibility information is what needs to be captured, and is outside any future preference that the program was originally built to.
Instead, most automatic systems just blindly say "this version number is newer, so use that" and break everything. Programs were built to a specific version which worked, and only those versions compatible to that specific version should be used.
This is great until a more recent version of a library still has the same interface but a completely different behaviour or seriously breaking bug in the implementation.