I know I’m supposed to continue with my series of posts on 2D geometry algorithms but I’ve been busy (mostly lazy, but I’ll blame being busy . Infact this post is about what I’ve been wasting time on. And that’s Software Installation and Configuration.
First a little background. I routinely use 3 different computers. My home desktop computer, work laptop, and home laptop. I also have server space that I use at hostmonster.com. I do software develop on all 4 systems.
This means that I have 4 systems to configure. The pain of installing and configuring the software becomes a huge annoyance. I estimate that I spend at least 20% of my time just installing or configuring software (this includes installing new versions of packages such as ruby on rails). When you think about it, this is a huge problem. That 20% of my time is completely wasted. I’m not doing creative or productive work. It’s the part of my work that I hate the most (actually the only part that I dislike about my work). I’m writing this blog because I just upgraded my home desktop computer and it’s taken me almost two days to get everything configured (this does include some time I spent on hardware issues).
I know of several other people that have written about this problem (or very similar problems). Steve Yegge cites someone here (search for “configuration”). Part of the ruby on rails philosophy is convention over configuration.
This is part of the reason why web apps have grown so popular. With web apps you don’t have to reinstall or configure software when switching computers (except for the web browser but that’s only one app). You don’t even have to worry about lugging your data around. It’s all stored on the server and available anywhere.
I don’t know of any really good solutions to this problem for thick client apps (it’d be great if people in the comments would link to possible solutions). One method is to create a set of unattended scripts to automate the installation and configuration of my development tools. But then there’s the problem that my home desktop computer runs Ubuntu and unattended is for windows.
One solution is to copy squeak’s model of keeping all your development tools inside one big binary blog that you can cart around. You can do this via virtual machines (squeak runs on its own virtual machine). That is create one disk image that you use on every computer and run that disk image using your favorite virtual machine (I use VMware). The downside to this solution is that you have to cart around an at least 20GB file. Also you need a disk image for every operating system you use.
Another possibility is to follow Mac OS X’s use of apps as directories. This is where each application resides entirely in one directory. So to copy the app you just copy its folder. There exists a Linux program ROX that also uses the apps as directories philosophy. There’s another Linux program Zero Install that largely eliminates software installation. Here’s a Zero Install example (stolen from Wikipedia):
The above will run “vim textfile.txt”. More importantly you don’t have to worry if vim is already installed or not. If vim is not installed it gets automatically installed with I believe no user interaction. Too bad zero install doesn’t exist for windows. There is still the problem of configuration that I don’t believe Zero Install fixes.
One partial solution to the configuration problem is to set up a git repository of all your configuration files and then on each computer do a “git pull” (or “git clone” if it’s the first time) to fetch the configuration files (you’d also need to write some scripts to copy the files to the appropriate places).
I imagine that with a lot (probably an enormous amount) of engineering it would be possible to use a git like repository for the whole operating system. Then for each computer you’d do a “git pull” to get the most recent version of all you programs and configuration files.
Too bad I don’t have the resources to execute that idea. Because I really hate software installation and configuration.
Feel free point out anything that would alleviate my pain.