What's confusing to me is that this way of handling versioning
doesn't seem to pay attention to ABI. It mentions bumping numbers for
interface changes (API) but not for changing size of data structures,
editing the contents of inline functions, etc. But this is the sort of
thing Linux distributions need to deal with all the time, when I get an
update for a library I don't usually have to redownload everything that
depends on it too, so I figure somewhere ABI has to be paid attention to. Is
libtool not part of this process or am I misinterpreting how the
versioning works? In C++ at least adding a private member to a class
isn't considered an interface change in the usual parlance, but perhaps
libtool considers this to be an interface change since it would be in C
(where you only have structs so all members are public)? Though if that
were the case it seems like you'd have to pessimistically assume ABI is
always broken which doesn't sound right either..