This leads to problems in binary packaging. You end up makeing either several different packages or one generic one that you hope will work on all versions of Linux. Each distribution can thus be very different. RPM is the most commonly used package method for distributions, but it is not the defined standard. There is deb for Debian and tgz for Slackware.
Some libraries change and cause major incompatabilities.
Between libc1 and libc2 there should have been a way to make them more compatable. Most software will compile on libc2 which is good, but the upgrade from libc1 to libc2 can be hairy. Between gtk 1.0 and 1.2 these are minor revision numbers, and there should not have been that much change between the two. However you can install gtk1.0 and gtk1.2 and still use the old programs and possible compile against the old lib. There have also been some kernel related issues.