Don't get me started on Linux and binary packages. Compared to Linux, the Windows "DLL hell" is a nice vacation.
Suppose I'm running Loonix 11 with AVT (advanced versioning technology) and LTS (long trauma support).
Suppose it shipped with GCC version 4.0, but I now need version 4.2, because the C++ constitution/bible was magically re-interpreted, and suddenly all code on the planet is broken. Suppose Loonix uses the latest and greatest "loop" package manager. (could be rpm, dpkg, apt or any other binary manager).
Turns out, the distro maintainers were all so excited about releasing version 13, that they built GCC 4.2 against the version of libc that ships with 13. If I try to just "loop upgradeizeate gcc-4.2" then I'll get back a note that I need to upgrade libc. And if I try to upgradeizeate libc, it turns out that needs a new kernel. Which needs new drivers. Which break compatibility with the old applications. Meanwhile, I was using Long Trauma Support to avoid having that kind of problem -- if it works, don't break it.
Imagine what Windows would work like if you had to buy "Adobe Photoshop for Windows XP SP2," or "Adobe Photoshop for Windows XP SP3," or "Adobe Photoshop for Windows Vista Home US Language Build 6603," depending on what OS you were running. That's insane!
The root problem is autoconf, which is too aggressive at detecting "dependencies" on "versions" of libraries, where no such dependency actually physically exists, and that in turn pushes out to all the package managers.
Linux on the desktop? Yeah, right.
(Btw: I've been a Linux user since 1.3 or so; doing LFS until recently when I jumped on the Ubuntu bandwagon)