The problems start when you have one symbol with multiple versions: this
is worse than just renaming the symbol because while old *binaries*
continue to work, if you then compile the same sources on a newer system
they get the new semantics automatically which could break them.
Eg take the example of regexec, which has a new overloaded version of
GLIBC_2.3.4 - the new version was introduced because now if you specify
unknown eflags it returns with error whereas before I guess it didn't.
That keeps old binaries working, but what if you then take old code
and compile it on a newer system? Well now the code doesn't get the
semantics it expects and breaks.