Dependencies.

Published March 3, 2008. Filed under: Misc, Usability.

Once upon a time, I was doing a server setup at work, installing all the various prerequisites and utilities to support the things we use. One part of that involves installing Jing, which we use for XML validation; Jing is written in Java, and so we use gcj (the GNU Java compiler) to compile it for use, ending up with a nice little binary we can call from anywhere.

Now, we’ve standardized on Ubuntu for our servers, so installing gcj should be as simple as apt-get install gcj (or, more often, aptitude install gcj, since aptitude is a bit nicer). But when I did that I was greeted with a dizzying array of required dependencies, including an X11 window server and a whole raft of graphical toolkit libraries; all told, gcj had, at that time, 44 required dependencies, and around 60 when “recommended” packages were included.

Yes, you read that right: 44 required packages, including a full graphical user environment, just to get a compiler.

Recently I’ve been doing a bit of fiddling with LaTeX; I used to be semi-proficient with it, but a few years of not using it have left me rather rusty. I’ve got a Thinkpad running Linux which, naturally, has an insanely high-powered TeX-based text-processing system ready to go out of the box, but since the Apple laptop is my primary machine these days I wanted to have an environment set up there as well. I didn’t have MacPorts installed (I used to, but nuked it a while back when I realized I wasn’t really using anything from it), but I’d had good experiences with it in the past and figured that’d be an easy way to get everything set up.

Once I had MacPorts installed, I went looking through the “tex” category in its package listing to figure out what I’d need; the XeTeX package looked like the right one, so I popped open a new window in screen and dutifully typed sudo port install XeTeX. I was rewarded with:

$ sudo port install XeTeX
--->  Fetching XFree86
--->  Attempting to fetch XFree86-4.7.0-src-1.tgz from http://ftp-stud.fht-esslingen.de/pub/Mirrors/ftp.xfree86.org/XFree86/4.7.0/source/

That was a bit unexpected. It turns out that MacPorts’ TeX packages have a hard-wired dependency on XFree86.

Yes, you read that right: TeX, which can be and often is used exclusively from console-based environments, has a hard dependency on an X11 window server. There is a nox11 variant of the base teTeX package (which, amazingly, is not in the “tex” category), but after some time looking at the package lists I’m a bit wary; far too many things in MacPorts seem to have lurking XFree86 dependencies, and I’m honestly not sure I could get a productive environment without finally giving in to it.

Maybe I’m just getting old and crotchety, but lately I seem to be running into these sorts of things with increasing frequency: tools that I know and love, and can use fluently from a command line, aren’t installable without boatloads of unnecessary GUI crap that a package maintainer has decided to force down my throat. I’ve got better uses for that disk space, thank you very much.

So if you happen to be someone who makes software packages, and you happen to have some influence over the dependency chain of those packages, I’d like to send out an earnest plea for mercy: if the software doesn’t really, truly, absolutely depend on a GUI for its basic functionality, leave the GUI out of the dependencies. If I decide I want the graphical bells and whistles, I’ll hunt them up myself.