Those using Mac OS X or ROX Desktop might wonder what all the fuss is about. After all, they have had application bundles since the beginning. Everyone else will probably be wondering “what are application bundles anyway?”. First, then, a primer.
If you think of an application as an object, a thing, then you want to be able to treat it like any other object (say, a document): you can copy it by drag-and-drop, move it to another location, run it by double-clicking, and when you don’t need it anymore, drag it to the trash. This works if you’re on the aforementioned system, but not for everyone else:
- Windows applications write to system directories, and the default Registry setting is normally set up only once, during installation
- Unix applications are installed all over the file system
Even with package management (e.g. RPM+yum, DEB+apt, Smart, emerge) the situation is far from ideal:
- application still cannot be dragged-and-dropped
- can’t run an application without installing (for trying it out, for example)
- if you don’t have the original package you can’t recover it from the installed files (I don’t believe the package database holds the pre-/post-install scripts, only the pre- and post-uninstall ones)
And even OS X’s implementation is not ideal: there’s no way to declare dependencies, so a lot of applications just bundle all the libraries they can’t expect the user to have installed already. ROX is ahead here with their integration of the 0install system: you first download an almost-empty application bundle, and the first time you run it it triggers 0install, which can pull in the main body of the application, and install the dependencies too.
For some reason ROX’s installation system has not caught on yet with the major desktops (neither Nautilus nor Konqueror, the two main desktops’ file managers, handle launching ROX AppDirs, the most basic prerequisite for interoperability; for some reason the talks with the XFCE project did not go anywhere either). But now at least another project is picking up the idea, and were it to be successful, would see application bundles available to millions of users. Who? Why, the One Laptop per Child project.
(J5 blogged about it several weeks ago, but I didn’t get to that post until now. Mea culpa.)
I don’t know how it’s implemented there, but as I commented, it could possibly go like this:
App.xo |– deps.xml |– info.xml |– binary |– icons/ |– libs/ |– share/
with the application directory monitored for changes; drop a new application in and Nautilus will scan deps.xml for any prerequisites that’s not yet installed and offer to install it.
That way we can have OS X-style ease-of-use without their application bloat (since a lot of the .app bundles there just ship all the libraries they can’t assume the use.
2006-11-25 19:09 EST Update: Here is the specification for the bundles. No dependency tracking yet, unfortunately.