That's the curse of backwards compatibility. AFAIK, on BSDs not only are the kernel and the C library developed together (so neither needs to stay compatible with older versions of the other), but also programs are expected to be recompiled for every major release of the operating system (so there's no need to stay compatible with binary-only software from the 90s).
Yet Linux broke things several times around those times. I recall Linux 2.0 was very breaking. gcc 3.1 -> 3.2 also broke almost everything a few years later.
Linux has had plenty of opportunity to fix stuff, all wasted.
They're still working on it now, and not fully prepared.
The BSDs fare much better on that, as most of them have done this a long time ago.