Is Ubuntu an operating system? Last week at EuroOSCON, Mark Shuttleworth gave the closing keynote outlining what he believes are the major struggles faced by the open-source/free-software community. During his talk, it became clear that Ubuntu is trying to achieve a radical shift in the software world. Ubuntu isn’t trying to be a platform for mass-market application software: it is trying to be the primary provider of both the operating system and all the application software that a typical user would want to run on his machine. Most Linux distributions are like this, and I think it is a dangerous trend that will stifle innovation and usability, or even worse make the desktop irrelevant.
Mr. Shuttleworth’s initial point was one that few people disagree with: that software installers are bad for users and usability. Indeed, the typical method of installing Windows software (downloading a setup.exe file from a website or running it from a CD) manages the software very poorly. Each vendor must construct its own scheme for where to install, how to update, and most of all how to manage dependencies between pieces of software. Of course, Windows has guidelines about installing to C:\Program Files\Vendor\Application Name, but even Microsoft does not consistantly follow the rules. Everyone recognizes that installers are not good for users, even Microsoft, who in an effort to fix the mess invented the (complicated and poorly-tooled) MSI installer format. Apple uses disk images, application bundles, and relocatable software to avoid the problem. It is good to see a major Linux distribution thinking through the problems that installers present.
Mr. Shuttleworth’s statements, however, go much deeper than the technical deficiencies of Windows installers. He talked about how Ubuntu was leading a paradigm shift away from “users installing software” towards a system where all the software a user needs is provided by the operating system. Ubuntu should provide all the software a users needs or wants in the packages. Does that mean that users should not be installing software directly? According to Mr. Shuttleworth, the way to provide a good user experience is for users’ software should be provided by the central Ubuntu repository and managed through the Ubuntu update system.
Granted, Ubuntu has done a good job of making the Linux desktop usable1. A properly managed centralized software repository can make it a lot easier for users to confidently choose software that is tested and compatible with their system. By releasing an entire set of software that has been tested together, Ubuntu can provide the necessary support to guarantee the suite will work together more seamlessly and provide a better user experience.
Users must be able to make their own software installation decisions.
People use Windows because the software they want uses Windows2. People have an amazing variety of wants. There are those who cannot install Linux because a particular piece of software they need is not available, be it InDesign or a specialized accounting program, or any number of new products that have yet to be conceived.
Free-software fundamentalists and practicalists often loudly disagree whether encouraging proprietary software on Linux is irresponsible or essential. It is either misguided or arrogant, however, to think that all users’ needs can be met by a central software repository, even if all software were open-source and free. Some of the best software available today started out small, was distributed on the internet, and made popular by word of mouth. The impetus of “Download Now” is strong, and promotes healthy competition and diversity. Whether a video player by a startup company or a newly-released version of Firefox that hasn’t yet made it to the central repository, stumbling blocks in the software distribution process caused by this centralization will reduce the ability for small projects to promote new software through viral marketing.
This is not an absolute restriction. Authors could provide the download as a .tar.bz2 archive or even .deb package, but those types of packages require the user to perform complicated actions such as opening a terminal and knowing the magic incantation. Ubuntu cannot prevent users from installing software, but it does intentionally make installation difficult. If Ubuntu achieves mainstream status, an alternative packaging format that allows users an easy way to install software will inevitably emerge (e.g. AutoPackage). Instead of fighting this tendency, Ubuntu should embrace the world of “external” software, and provide a simple and standard way for users to install these packages.
If application developers can’t attract users to the desktop, the only alternative is for new applications to be deployed entirely on the web. Although some people believe that the trend of applications moving onto the web is irreversable, I’m more optimistic. There is value, power, and security in the desktop. But without cooperation, I certainly wouldn’t plan to deploy my next application on Linux.
Allowing users to install their own software does have some consequences. Unfortunately, the discussion of how the software should be packaged and distributed quickly devolves into flamewars over the relative merits of RPMs, dpkg, or <insert technology here>. This is counterproductive, ignoring the fundamental issue: Linux software is typically not a self-contained package that could be placed in a single directory. A collection of files that are variously placed in /usr/bin, /usr/share/man, and perhaps many other locations, making it very difficult to relocate binary software because library dependencies are resolved to a fixed set of paths, and never relative to the binary location.
I do not pretend to have a solution in hand for installing software on Linux. I think that Mac-style application bundles could be made to work, but supporting them would require additional features in the dynamic linker, along with something like mac Launch Services to provide good cross-application integration. In addition, since regular software updates are an essential part of modern system security, it is important to have a good and simple way to update software. If distributing software in relocatable packages is completely impractical for technical or social reasons, the same problem could perhaps be solved by allowing users to easily install packages from non-default software repositories.
The final (and perhaps most pernicious) problem when thinking about redistributable software is the ongoing binary incompatibility between various Linux distributions and between versions of the same Linux distribution. While it is important not to hold back development of new features, it is a problem that every major operating system has had to face, and has faced (more or less) successfully. This is a problem that needs to be faced at all levels of the software stack, from the compiler to final packaging. Perhaps, if Linux in general and Ubuntu in particular continue to disclaim responsibility for ABI changes, software will use managed runtimes or scripting languages out of necessity to isolate itself from the shenanigans of the underlying OS. As it is, creating software that is compatible with multiple Linux distributions in multiple flavors is a nightmare.
This attitude is not unique to Ubuntu. Although this essay is inspired by an Ubuntu keynote, it applies to all the Linux distributions. Ubuntu should not be marked for special criticism, except that I hoped their focus on users and usability would lead to better appreciation of and support for user-installed software. Since Linux vendors are typically in the support business, they can define a set of software that they package and support; they have little financial incentive to do serious work on binary compatibility or software installation.
Free-software zealots may be also to blame: “users have the software source code, they are free to compile and install it themselves!”, mixing a philosophy and a technical decision which are not inherently related. Human nature wants software that works, and this includes software which can be installed and tried without the technical prowess needed to unpack software and run “configure && make && make install” and interpret the resulting console spew to figure out whether it succeeded or not and then figure out that you really needed make 3.80, and your gnome headers are too old, or too new, etc.. The issues of licensing software freely should be divorced from the ability of users to install and use the software.
In the process of creating a usable and supportable Linux, Ubuntu has created a software cathedral with “more than 16,000 pieces of software”3. I do not wish to disparage this effort; this cathedral has produced a usable Linux desktop. But the Linux desktop must also provide a method for users to install software from the bazaar. Unless Linux provides a software installation mechanism, the central Ubuntu software repository will stifle the development of the software it is designed to distribute and protect.
- # Why did Ubuntu choose the obnoxiously self-gratifying motto “linux for human beings”? Of course it’s for human beings; the question is whether those humans can use it.
- # For the purposes of this essay, it’s not important why developers write software for Windows, or whether the application/OS cycle is vicious or virtuous.
- # http://www.ubuntu.com/, 2-Oct-2006