Application bundles coming to Linux!

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.

Beware of machines bearing votes

Johannes Schmid forwarded this very disturbing video from YouTube:

Why a company with shady political connections and a disreputable security track record continues to be contracted to supply voting machines, I don’t know.

Technology is neutral. But belief in the infallibility of it is irresponsible, misguided, and .. perhaps actively encouraged by people with vested interest. Big Brother is watching YOU!

Happy Thanksgiving

Happy Thanksgiving, all!

It’s Thanksgiving today in this part of North America (the Canadians had theirs last month [rfmcdpei]). Our Thanksgiving dinner has been postponed to tomorrow evening, which makes today more a day of reflection than of gluttony, not a bad thing at all.

I saw the YouTube video of the Helsinki Complaints Choir yesterday, as linked from insanecats.com, and it set the mood for today. Most of us in the developed world, and the middle classes of emerging market economies, really live in abundance, relative to our ancestors or to most of the rest of the world. The video made me smile – the seriousness of the facial expression of the choir members really made a point: of what importance is our personal complaints, when compared to the important things in life?

Here’s the video for those who have not seen it:

Severina Vuckovic’s Eurovision 2006 contest entry

From Bruce Sterling’s post:

Courageously undaunted by her colossally embarrassing Internet sex-video scandal, Croatian sensation Severina Vuckovic performs here in the coolest turbofolk video I’ve ever seen. And I’ve seen plenty.

I’ve been wondering whether she can actually sing, but never thought of hitting YouTube to find out (I did check Amazon to see if they carry .. um .. Croatian Christian pop, which they don’t). So now we know for sure.

Here’s the video:

Bruce links to another video, of an Elvis impersonation, and there are some more on YouTube. Fun stuff! I must say Eurovision is as hilarious as ever. The songwriters must be having giggle loops (or stacks) 😛

One patch a day…

… keeps the bugs away. And what’s this patch, you might ask? Why, it fixes Liferea’s font selection (Liferea’s a feed reader for the GNOME desktop). Previously it would use the application font setting for its HTML viewer, with this patch it uses the document font setting instead, bringing it in line with other applications.

No more squinting when looking at small text, or finding your desktop space taken up by extra-large application menus!

Stream module for Lua

“Be not afraid of greatness: some are born great, some achieve greatness and some have greatness thrust upon them”.
– (Shakespeare, W., Twelfth Night, Quote Act II, Scene V).

“Some men are born mediocre, some men achieve mediocrity, and some men have mediocrity thrust upon them. With Major Major it had been all three”.
– (Heller, J., Catch-22, Quote Page 94 (paperback)).

“Some languages are born lazy, some languages achieve laziness, and some languages have laziness thrust upon them”.
– (Salim, M., unpublished)

So you can probably guess what this is about. A stream library for Lua, that allows you to do things like running the Sieve of Eratosthenes without specifying an upper bound, lazily filtering the set of all positive integers as you go along.

Continue reading