2006-11-13

I like GoboLinux's approach to program organization

I love how OS X bundles applications. Keeping all app-specific files in a directory that the file browser displays as a single icon makes program management easy. If I no longer like an app, I just delete a single icon. Clean and simple.

Macs do have the issue of spewing configuration files in a couple of places, though. And frameworks (Apple's answer to packaging up header library files) are in a separate part of the system from the app they might be associated with. But overall I know that an app installed has its application code in Applications, configuration stuff in Library/Preferences and/or Library/Application Support, and Library/Frameworks.

But this just is not the case on UNIX. When I installed something I end up with stuff all tossed together in bin, lib, share, man, and include. There is no separation by application except by file name. That is not a good way to manage stuff.

Yes, there are app management systems (Macs have Fink and MacPorts, for instance). But the biggest pet peeve I have with those systems is that they don't keep track as to why you installed something. When I uninstall a program that required dependencies, then damn it ditch the dependencies as well if nothing else depends on them (assuming I didn't flagged it as something I wanted to keep around)!

I was reading Reddit Programming and I came across a page for GoboLinux. There they explained their application layout. I have to say it sounds very nice! They obviously were inspired by OS X. And by symlinking into a universal spot for backwards-compatibility they make sure that everything keeps working.

And this can even work for Python code. All you would need is to put a .pth file for each package you wanted a Python installation to know about in the proper site-packages directory.

Maybe I will get inspired enough to write some Pythons scripts to help manage such a directory layout. It mostly would come down to handling the symlinks; creating them after a ``make install`` and then tearing them down upon a program being deleted. Would have to figure out the best way to handle compiling against packages (e.g., do you use Current just to tell what the newest version is, but then symlink directly against directory of the current version directly, or do you symlink against Current?). I might be able to use the GoboLinux Compile package, but it seems to be set up a like package system and I want something more like a post-install setup.