I.a.1.: Dealing with non-packaged applications
There is still the problem of applications not included as packages of your current distribution. Finding software is still much easier than on Windows, because you can look for it on Freshmeat or SourceForge or on Savannah, that is, on centralized repositories. The problem is installing tarballs. There are solutions for this problem, that this time belong to the Linux community instead of the end user maybe, but they’re don’t require any massive rewriting of core components.
First solution, write a compiling packages helper. This requires not much more than being a simple text-based and/or GUI-based thing that gently unpackages the tarball, executes “./configure”, “make” and “make install” (or,better,”checkinstall”), and gently prompts any error encountered in a comprehensible way. (Hey, I just found the Python project I was looking for to cut my teeth on!) This still requires advanced feedback from the end user if something goes wrong, or if customization is needed, but if everything is right it would be nothing harder than an apt-get or a double-click installer.
Second solution, distribute static binaries. If dependency hell is your problem, this is perhaps the best solution. I actually love the shared library concept, but I can see that has drawbacks. For big, common libraries like GTK or QT, they can actually be something that the user don’t want to install properly, because he/she won’t need them except than for one single app, and he/she wants to be sure that single app just works (so we don’t want to go into things like “it works with GTK 2.2.3 but not 2.4.1”). For obscure, little dependencies it can be a hell to find them, and it’s sad many good apps fall into oblivion just because they depend on a bunch of libnotinstalledonanysystem .so. Building static binaries would solve it: moreover static binaries will run happily compiled with their older libs if newer, not retro-compatible ones are already installed, allowing to avoid contorsionisms like installing KDE 2 libs on a KDE 3 system, for instance. I think it would be foolish to install and distribute static binaries only, but they should be presented as an option by all free software developers (and commercial too).