Linux's Dll hell?
I’ve been playing with Linux this week. The last time I played with Linux was back when it fitted on 15 floppy disks; I think I still have the 15 floppy disks in Dad’s office somewhere. It’s come a long way but I can’t help thinking that, much like Windows, it still has a long way to go…
Bear in mind I’m writing this from the point of view of someone who knows enough to get by and do some development work on the platform fairly quickly but not someone who knows, or wants to know, all the nitty gritty. I’m thinking that Linux makes you need to know more nitty gritty than, perhaps, Windows does. If I think that, god knows what my Dad or my sister would think… But then again perhaps I’m just ignoring the fact that I don’t notice the simialr problems on Windows because I’ve become immune to them after too much exposure.
I’ve been running Fedora Core 4 as my development system. I’ve no idea if this is a good distribution. I’m sure lots of people will say it is and lots will say that I should be using something else instead. Anyway, from a developer point of view it’s nice. It comes with all the tools you’d need, and I mean all of them, you can check a box and get subversion set up on your workstation along with all of the compilers and toolkits and what have you. The good thing about a pre-packaged Linux distribution is that it all works together…
In Windows-land we have a problem from time to time with shared code. Application A needs to use shared code B (version x) and all is good. Then along comes application C which needs shared code B (version ~x) and things can get more complex. The different version of B can sometimes break A. Removing A can sometimes break C. Removing C can sometimes break A. Etc.
On Linux, of couse, you generally have the source. So instead of A coming with B it simply says in the README of the source distribution that it requires it to be built/available/installed/whatever before you can build A. So, you need to go and get B before you can build A. And then B needs C and D and E, etc. What’s more A will need B v1.2.4.5 or greater but not greater than v2.3.5.6 and B will need specific versions of its requirements, etc. There’s lots of code reuse going on, which is good, but it seems that there are X different ways to solve a problem and Y different versions of each way and each thing you want to build on top of these solutions will use a different version of a different way…
I suppose you’ve guessed by now that I’ve been trying to build a few things that at first looked easy and then became a nightmare of unexpected requirements and wierd and wonderful RPMs…
Dillo needs glib, but not the version I have on my system, an earlier version and the earlier version wont install because it says I have a later version. I guess that’s a bit like me not being able to install Ghost 2003 because although the platform is supposed to be supported the version of the installer has changed and now it’s confused… I guess at the fact that glib is part of the single check box in my ‘add remove programs’ that is ‘Gnome software development’ but although there’s a checkbox I can uncheck to get this uninstalled it doesn’t work because it seems there’s some wierdness about the ordering of the uninstall that means it keeps telling me that I need to install a package before it can uninstall the collection of packages (and the package it wants me to install is part of the collection that I’m trying to uninstall)… Thank heavens for VMWare snapshots…
I’m not sure what point I’m trying to make. I think I’ll settle with, software isn’t as good as it should be.