Building Hell
Brandon Warhurst <[email protected]> Thu, 10 Mar 2005 21:46:04 +0000
| Newsgroups | gmane.linux.usability.annoyances |
|---|---|
| Message-ID | <roboknight-0j1kMA3/[email protected]> |
Hi, I've seen several things related to "dependency hell" on your archive, however, I've got a slight variation on dependency hell. Well, it may be part of what actually causes dependency hell, but here goes. Let me state, before I start, that I've used linux for quite a long time, before modules, when a kernel compile resulted in a monolithic beast. So I've compiled my share of packages, and suffered through dependency hell all through my use of linux. In fact, for those that want to put a date to it, I started using linux when you still had to install from several diskettes... around '94... linux was around before that, but before that, I'd been using SunOS 4.1.3 and 4.1.4... So I'm no newbie to general dependency hell. In fact, it really started with source distributions. You'd get some distributions of some great new software package, you'd explode the source, try to make it, and it would fail. You'd find out you needed package Z to complete your install... and so on and so forth... Sounds like general dependency hell so far. Well, the thing I find annoying about linux, is that while back then, this was an "annoying" task, it was feasible. Now, linux has succeeded in making this much less feasible. Why Linux? Well, mainly because it was the impetus for the Open Source Movement. While I love the OSM like the next geek, the biggest problem is the fact that it *IS* free and open. People are free to choose whatever language suits them, choose whatever libraries are convenient, and build in whatever way they feel like. All this freedom sounds good. And in general, it is good. The problem comes when you want or need to muck about in someone else's code for yourself. So you get the source distribution. Its written in a language you don't use regularly, so you have to download the language. Then, once the language is downloaded, you find out that the package still won't run because it depends on some *EXTENSION*. And this is where dependency hell ends and "extensionitis" begins. So, you get the first extension to the language, you find out it depends on a number of things, and you get those... more dependency hell... But, once you get *THAT* language extension installed, you find out that the language has *ANOTHER* extension you need for something else you don't use. Perfect example is BitPim. BitPim is written in Python. Python is a nice little language. But if you think you'll be able to run BitPim from the source with just Python, you're mistaken! Here's the dependency list for just the *FIRST* language extension: BitPim - Requires wxPython.... wxPython - requires GTK and PyOpenGL GTK - requires pango, atk, glib, freetype2 and others glib - mercifully compiles mostly on its own pango - requires freetype2 atk - again mercifully compiles mostly on its own. PyOpenGL - requires Mesa Looks like normal dependency hell.. but as I stated, that was just the *FIRST* language extension. BitPim ALSO requires you use APSW, a thing that links python to SQLite. So why is this more of an annoyance that dependency hell? Well, I've now tried to run bp.py NUMEROUS times without success. At first, I got unfamiliar errors about finding wx... What was wx? How was I to find out? Fortunately (or unfortunately), I ran across some stuff about wxPython and figured that must be the wx that was being referred to. Once I finally installed wxPython, I tried running it again. I found out I had conflicting versions of wxPython in place. I finally got rid of one. Now I'm a bit further, but I need yet another extension! In addition to the above, installing wxPython was no picnic either. Not only is there dependency hell, but "build hell" which refers to the different ways in which people like to package source code. I was perfectly happy with makefiles. I could fix those when they didn't work. Then people switched to configure... they seemed okay at first because they just about always worked. It was when they broke that I started to get white-knuckled. But now, because someone wanted to write BitPim in Python, its "setup.py"... much less robust that the configure scripts I must say, and much harder to trace when you can't find out why the compiler can't find the header files you've just installed. All of these can be traced back to the "do it the way *YOU* want to do it" attitude of open source. It makes for a terrific development environment because you truly have the freedom to develop anyway you want. So if I don't like setup.py, configure, or anything else, I can stick with makefiles. But it doesn't allow the users of the software any freedom at all. Particularly if they want or need to install from source instead of from RPM. They become locked into the developers world almost immediately. While I can understand this notion for libraries (part of the reason dependency hell comes along in the first place), some of these other languages have extended this notion further by adding language extensions that link the language to a particular piece of software. So now, not only do I have to worry about which libraries I've got installed, but I have to install additional, full blown pieces of software that I'll never use except with this one package. Finally, before someone flames me for picking on BitPim (I'm not trying to target any particular software, and I don't even dislike BitPim, but this one is a great example of everything I've said), try taking a fresh install of Fedora Core 3 (or any other fresh install for that matter) and after the installation, download the BitPim source and see if it runs. Regardless of whether FC3 is a broken installation (I know some will feel it is and they'll want me to switch to Gentoo, or GNU/Linux or something else), this "extensionitis"/"build hell"/"extreme dependency hell" really needs to end. It just gets worse with so many supported languages and new extensions being added to each. Its almost another Tower of Babel out there. All the freedom is great, but no one seems to want to clean up the mess that's left over in the aftermath of all the unconstrained freedom.