Package Mismanagers

There is something truly perverse about *nix package managers. Ideally, when installing a program, the installer either assumes all dependencies are covered (braindead, but acceptable in certain circumstances), or includes all dependent packages and installs them along with itself. In the case of dependents being present but of the wrong version, the installer should always defer to a higher or longer version number, and upgrade otherwise. It’s up to the writers of the dependents and other applications to make sure that they don’t use deprecated, obsolete, or ‘clever’ functionality.

However, there are no package managers which seem to follow these simple rules. Applications include SOME dependents but not others, link to other dependents (hard-links to FTPs, in the case of pygame, which means that if anything changes in the slightest about the FTP’s structure, the link fails), ignore / assume other dependents are installed, or at the worst, silently depend, giving no error message when the dependent isn’t found, and crashing and burning in unique and interesting ways.

Isn’t the point of a package manager to MANAGE packages so the user doesn’t have to? I should be able to type ‘install package-x’, enter my password, and go make a sandwich. When I come back, EVERYTHING should be installed and package-x should run, without bitching about missing dependencies, non-present configuration utilities, or bad version numbers of the former two.

When the system works correctly, which it does in about 50% of cases, it tends to behave bizarrely. Why does my text-mode IM client need to install an AUDIO package? Why does it need six different XML-parsing libraries? Why, in god’s name, does the compilation string look like THIS:

./configure —prefix=/opt/local —disable-avahi —disable-gtkui —disable-dbus —disable-gstreamer —disable-gtkspell —disable-meanwhile —disable-nm —disable-screensaver —disable-sm —disable-startup-notification —enable-nss —mandir=/opt/local/share/man —with-nspr-includes=/opt/local/include/nspr —with-nspr-libs=/opt/local/lib/nspr —with-nss-includes=/opt/local/include/nss —with-nss-libs=/opt/local/lib/nss —without-x

When you have to specify over 15 command-line switches to ensure something compiles correctly, something is wrong with either your compiler, your development tools, your development methodology, or your SKULL. For the latter, it may need to be resprayed with a coat of STUPID-OUT sealant.

In the interest of disclosure, many programs were harmed in the making of this post. Among them were finch, pygame… actually, pretty much anything I’ve tried to install through macports in the last two months.