“Hello. My name is Kevin, and I’m a dpkg addict. Its been 3 days since my last apt-get…”
Dpkg is the package management system for the *buntu’s and for Debian. Don’t get me wrong here, its a great and versatile way to handle what programs are on your computer. Dpkg uses a binary based distribution system, which means that the standard package you get has some precompiled code placed within it that is then extracted and then set up. This is fine for most users. As long as the package works and runs as expected, this is sufficient. I however, have had an itch for a little while to move away from downloading prebuilt packages. Why? Building the package yourself, that is, compiling the source code for the program allows for the maximum amount of customization and the maximum amount of optimization for the machine that you are working with. When an Ubuntu developer, (which I am still planning on working towards becoming) makes a package, the goal is to make the package usable by as many people as possible, and with as many features as possible. The upside of this is that a lot of people can use the binary, while the downside is that machine optimization and compilation customization is lost. For instance, a binary distributed media player may support DV (a format used by camcorders). I don’t own a camcorder, so why would I want to waste the space on my machine with a feature I wouldn’t use? Also, say that a 3d program can use the 3DNOW instruction set to speed up graphics rendering. To be able to be run on the most amount of machines as possible, the binary has to be built without these functions, so that processors without this instruction set can run this program also. Why should I let my computer’s abilities be crippled by another computer’s lack of functionality? These are the two biggest reasons for using a code based package management technique. A code based package management system allows for the maximum control over the code in your machine, while still having a manageable system.
What is a code based package management system? It is a system for retrieving and compiling source code for your computer and the way you want it compiled. The most notable code based package management system in use today is the Portage/Emerge system used by Gentoo (and its derivatives, like Sabayon). While I am still a newbie to this system, I appreciate the fine-tuned control that Portage gives me over what exactly is on my computer. Once I find out enough about the system to be proficient, I’m likely to write a brief, comprehensive tutorial, as I’m having a little trouble finding one right now.
For most people, I would say that the level of control you get with Gentoo might be construed as over-the-top. When I was trying to set up my kernel-hacking system, various frustrations in installing the vanilla kernel on Debian and Ubuntu made me decide that I needed more granulated control over exactly the way that my system was set up. Hence I popped in a Gentoo install CD and really like it. I still plan on using Ubuntu on my laptop, but my desktop is running a brand new installation of Gentoo. A lot of my experience with Linux has revolved around dpkg based system, and its good to broaden my horizons, plus hopefully it will make me a more effective programmer!