I would like to highlight one of the reasons why Linux did not get its way into the desktops yet — though it’s free, have good drivers coverage and tons of applications: installing software is a pain. Actually, it starts well: typical distribution has an update manager with GUI where you can check applications you need and hit OK to install them. Updates also work fine. But what if this distribution does not have the tool you need in its list? That’s where it breaks…

You may try another packages system; maybe they have what you need. But this would typically require messing with command line, finding all the required libraries and resolving possible configuration conflicts. And something of course won’t be available as a package and you will need to take the code from CVS and compile locally. It is all painful and really scares off 99% of users.

Mac OSX is a Unix too but they made applications management really simple. All application files are placed in one folder — application bundle. Finder even shows this folder as a single file to hide this fact from you; it’s an opaque structure. So you download an archive with this bundle (typically zip or dmg), extract it and drop inside Applications or any other folder. Easy! Need to remove the application? Just delete the bundle like other files. Need to replace it? Delete the old bundle and extract the new one. Very simple, no dedicated tool, all users can do.

If installation requires extra actions the software is packed in pkg file, but they are really rare and typically are system tools. OSX has a built-in utility that extracts pkg content in appropriate places and executes the required actions. Some applications, like MS Office, tend to abuse it but still such packages are self-contained: they don’t require you to find and install other packages so the experience is like you run a wizard. Still possible to do by most users.

The chasm in usability is made by decision in Mac OSX to distribute application libraries with application itself. Linux is an OS written by programmers for programmers — extra copies of files are considered bad. It’s a typical programmer’s decision: if you have a reusable piece of code you should reuse it wherever possible. Copy-paste is a big no-no in this field so every reusable component is packaged and distributed as a shared library. Now they win on space but users — they have to manage this huge dependency tree!

Hard drives are enormous nowadays; libraries are still very small. Typical library is smaller than one photo produced by my DSLR. My time spent on CVS and gcc costs much more than disk space. And that’s why (partially) my OS of choice is Mac OSX and not Linux.

P.S. If you are writing an application for Linux, please, don’t make a package for your favorite distribution: make a folder with all files you need so I can just download it as archive, extract and use. All users of all distributions will praise you!