Good karma: an in-depth review of Ubuntu 9.10

Ubuntu 9.10, codenamed Karmic Koala, was officially released last month. In …

Advantages of CouchDB

Using CouchDB to store desktop configuration data offers a number of advantages. CouchDB's JSON data model and HTTP interface are advantageous because they can be supported easily with native libraries in virtually any mainstream programming language. The only other requirement on Ubuntu is D-Bus bindings, which are needed to obtain the port number for Desktop Couch. Canonical supplies its own CouchDB convenience libraries for Python and C. It should be trivial to create similar libraries for other programming languages.

CouchDB's storage model takes advantage of multiversion concurrency control (MVCC) to support simultaneous read and write requests while avoiding the overhead incurred by locking. Pending write operations, which are performed in sequence, do not block read operations. When two conflicting write operations are performed, the most recent one will take precedence, but CouchDB's built-in versioning system will ensure that the other data and previous values are still accessible. Individual applications that consume the data can manually resolve conflicts later if there is a need to merge data between the two versions.

In general, CouchDB provides relatively strong guarantees for data integrity. CouchDB's storage model is a win on the desktop where a lot of programs could potentially be accessing the same configuration data at the same time.

CouchDB has powerful built-in replication capabilities that make it easy to sync database contents with the cloud. Canonical obviously values CouchDB's conduciveness to replication because it simplifies pushing configuration data into Ubuntu One. It's important to note that the replication features can be configured to work seamlessly with your own self-hosted servers, so it's still valuable to users who do not want to rely on Canonical's service.

CouchDB for universal configuration storage

Canonical's developers hope to see CouchDB adopted as the universal configuration storage system of the desktop Linux ecosystem. It clearly offers a lot of advantages that would make it well-suited for that role. Canonical developer Stuart Langridge made the case for CouchDB in a recent presentation on IRC during Ubuntu Developer Week:

I want all my stuff to collaborate. I don't want to have to "import" data from one program to another, if I switch from Thunderbird to Evolution to KMail to mutt. [...] When people say that the Ubuntu desktop is about choice, that shouldn't mean choosing between different incompatible data silos. [...] My choice should be how I use my applications, and how they work; I shouldn't have to choose between underlying data storage. With apps using desktopcouch I don't have to. All my data is stored in a unified place in a singular way—and I can look at my data any time I want, no matter which application put it there! Collaboration is what the open source desktop is good at, because we're all working together. It should be easy to collaborate on data.

Calling for universal adoption of a unified storage system for Linux is easy, but building consensus around any single technology is exceptionally difficult. The problem is that there is an overabundance of solutions, including some for specialized purposes, and a lot of disagreement about how to bring it all together. GNOME has GConf, evolution-data-server, and tracker. KDE has KConfig, Akonadi, and Soprano.

CouchDB has a fair shot at becoming the Chosen One. The GNOME community is discussing the possibility of transitioning away from GConf for GNOME 3 and could potentially adopt a new storage engine called dconf. Access to dconf will be mediated by a library called GSettings that is backend-neutral. GSettings developer Ryan Lortie explained in a blog entry earlier this year that support for many backends is one of the major design goals for GSettings. This will hopefully make it possible for applications that are built around GSettings to seamlessly use CouchDB as a backend instead of dconf.

Akonadi, KDE's impressive PIM storage framework, already has an experimental CouchDB backend. It was demonstrated at the recent Gran Canaria Desktop Summit. The Bindwood add-on for Firefox similarly serves as a proof-of-concept that data from Mozilla's ecosystem can be kept in sync with CouchDB. Mozilla itself recently adopted CouchDB for its new Raindrop messaging service.

CouchDB is clearly getting substantial buy-in from major players in the desktop Linux ecosystem and a lot of existing frameworks can be adapted to interoperate with it. I strongly suspect that we will see a lot more activity, and possibly serious convergence, around CouchDB in the future.

Ubuntu Software Center

One of the most important things that Ubuntu inherited from its Debian heritage is a robust package management system and an extremely broad selection of packaged third-party software. Making that pool of software easily accessible to regular end users is not a trivial task, however. It's extremely easy to find and install a package when you know its name, but users who aren't familiar with the platform will have a hard time determining which packages and programs they need to perform certain tasks. A well-designed graphical package management tool lowers the barriers and makes it easier for new users to explore the available software.

The Ubuntu Software Center is a new package management front-end that Canonical is developing to make software installation more intuitive and to streamline the functionality of existing package tools into a unified interface. The first version of the Software Center, which has replaced the Add/Remove Applications tool in Ubuntu 9.10, is intended to improve basic usability. More sophisticated capabilities will be introduced in later versions.

The new Software Center is functionally similar to the previous Add/Remove Applications tool, but it uses a very different presentation. It has two panes instead of three, and it introduces a breadcrumb navigation element in the main toolbar. When users first launch the program, they will see icons for each application category. You can click one of those categories to see the list of applications that it contains. The list shows an icon, title, and description for each program. Unlike its predecessor, however, it does not show application popularity ratings.

An application that is already installed will have a green checkmark emblem rendered as an overly on its icon. This replaces the dedicated checkbox column from the previous software management tool. When an application is selected, the program will show a description along with a screenshot and a button for easy installation. From there, you can install the package or use the breadcrumb bar to get back to the list or the category view.