The ABI is a function of backwards compatibility. You might even say that it helps to enforce aspects of backwards compatibility and linkability. The reason so many languages followed the C ABI is because they rarely change it. Now, that's not to say that new ABI's haven't been created, but old ones do not defunct old functionality lightly (if they did then again it would break backwards compatibility and old code would require old libraries and new code would need new libraries which was my point). But an ABI is more of a decision on a compiler/OS level than a language level. I'm pretty sure gcc on 64 bit linux defaults to System V ABI and you can ask gcc to change an ABI for a function at compile time using preprocessor commands, and gcc uses a different abi for 32 bit compiles.
{
As an example:
https://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.7.2-1/
"Binary incompatibility notice!
------------------------------
The C and C++ ABI changed in GCC 4.7.0, which means in general you can't
link together binaries compiled with this version of the compiler and
with versions before GCC 4.7.0."
}
They say "In general" because you are right, you could do some deep work to hack your way around the changes in linkage, but for the average user using the default settings, things just broke between new compiles and old ones.
As far as backwards compatibility in a language:
C++ makes backwards compatibility easier to maintain because it has name mangling. C without name mangling means that you can't overload a function. If a language didn't care about backwards compatibility then they could defunct functions whenever they want. If a function took two arguments yesterday, and one argument today, then yesterday's code is broken. A CD program that you bought last year would not be able to relink to newer libraries without being updated (to be fair, many if not most professional programs do provide a copy of all libs required in order to future proof their code rather than depend on system installed libraries). I was expanding this problem into a theoretical world where no backwards compatibility existed, sorry for the ad absurdum argument in my previous post, but I don't think what I said was wrong.