Matthias Warkus, The Official GNOME 2 Developer’s Guide

The Official GNOME 2 Developers Guide
Install Linux and the chances are you’ll be given the choice between a GNOME or KDE desktop. GNOME is the better known of the two, but if you want to development applications that use the GNOME environment where do you start? Well a good place would be Matthias Warkus’ new book, The Official GNOME 2 Developers Guide. I talk to Matthias and ask him about the GNOME system and environment, along with one or two other topics.

Could you describe to us what GNOME is?

GNOME is one of the leading projects developing user-friendly free software. The GNOME community effort includes the GNOME Desktop & Developer Platform, probably the most advanced free desktop environment around, translations, documentation and many third-party applications.

What you actually see on a computer said to be "running GNOME" is a tightly integrated, no-frills desktop system, on par with any commercial offering.

What is the benefit of the GNOME system over more traditional window managers, like Motif?

Actually, neither GNOME nor Motif are window managers, though both include one :)

The difference is so huge it’s hard to decide where to start. Not only is GNOME’s basic GUI technology (GTK+) much more advanced than the Motif toolkit (it can, for example, display right-to-left scripts such as Hebrew or CJK scripts such as Chinese), but the overall goal of the system is much more ambitious. What GNOME is trying to do is to integrate all system components well, and not in the traditional Unix way of providing a default that will work in 90% of all cases, whereas in all other cases, something has to be fixed by hand; GNOME intends to completely and "Just Work" in all supported environments.

You can witness this sort of integration in the new GNOME support for removable media. Whatever you insert or plug into the system, be it a CD, DVD, digital camera or USB stick, it will instantly be recognised and an appropriate window to access it will be opened.

GNOME seems to encompass a lot more than window dressing. Using your book I was able to create quite complex applications with some fairly advanced widgets with less than a hundred lines of code. Is this fairly common of the GNOME environment?

The GTK+ library stack, which sits at the core of GNOME, includes very powerful widgets, such as the file chooser, colour picker etc., but especially the text and tree/column view widgets based on the model-view-controller paradigm.

Other GNOME libraries bring even higher-level functionality. GNOME tries as much as possible to prevent programmers from reinventing the wheel.

You’ve managed to get a good balance in the book between the examples and the reference material. Do you have a favourite example from the book?

I suppose my favourite example would be the GdkPixbuf demo (pp. 132-136), a little thingy that lets you can change the scale and saturation of an image with two sliders. I think it’s less than 300 lines, half of which is comments and whitespace. Very neat example, and impressively small in size considering it’s pure C and not something higher-level such as Python or Java.

Could you tell us a bit more about gconf?

GConf is the solution to the recurring problem of where to store and how to sensibly process configuration values. It’s a self-documenting, typesafe database with a tree structure that is usually saved in XML. Applications connect handlers to GConf keys, and any changes to a key, whether from the app itself, another instance of it or an external configuration tool, will at once apply to all running instances. There is a GConf editor to centrally change all system settings. Default settings can be provided and mandatory settings can be enforced centrally, for all users. The new GConf editor includes special administrator functions to do this. This is essential for the large installations where GNOME is getting popular these days: There are organisations rolling out GNOME on several tens of thousands of desktop computers.

I suppose you could call GConf the Windows registry done right. People used to hate central configuration databases because the nightmare that is the Windows registry was the only one they knew. GConf is starting to change that. It’s really a good idea.

I’ll admit to being new to GnomeVFS. Is this something that could be adopted wider amongst the Linux community?

Actually, because GNOME is not Linux-only, it would need to be adopted across a broader set of platforms. Perhaps the people working on cross-desktop standards specifications at freedesktop.org will make this real one day, who knows?

Anyway, GNOME-VFS is a very nice interface to access files in a network-transparent and asynchronous way. I think it’s performance has improved a lot over the last months, too. Writing a GNOME application, there’s no reason to use the old libc file access functions anymore; using GNOME-VFS, your application will, at no extra cost, be able to process remote files as well as local files.

Your book focuses on the C API. Are there any other alternatives?

GNOME has officially supported language bindings for C++ (making use of all C++ features in the canonical way, unlike, for example, Qt), for Java, Perl and Python. Especially Python is popular as an RAD language; in combination with the Glade user interface builder, you can write productive GNOME applications in no time flat.

Unofficial language bindings exist for many languages, including exotic ones; there are bindings for (at least) C#, D, Eiffel, Erlang, Euphoria, Felix, Gauche, Guile, Haskell, JavaScript, Objective-Caml, Pascal, Pike, PHP, Ruby, Scheme, S-Lang, Smalltalk, Tcl, TOM and XBase, though the degree of support varies widely.

Programming GNOME in C# is becoming popular, and the Ruby bindings do also seem to have some success.

What do you think of KDE?

GNOME would not exist without KDE. Probably free software’s desktop ambitions wouldn’t be as visible as they are today. We all owe a great deal to the KDE project.

Being used to GNOME, most KDE applications look confusing to me. I like GNOME’s philosophy of keeping user interfaces as lean as possible. One example: In the default setting, KDE’s file manager presents so many toolbar, sidebar and status bar icons to me that I instinctively want it to just go away again.

I also like GNOME’s way of keeping the number of distinct user-visible components low by integrating new functionality into existing applications. Work is currently being done on a CD/DVD burning framework that will integrate audio CD burning into the audio player etc.; unlike KDE, we don’t think writing an all-singing, all-dancing Nero clone with four different configuration dialogues, several toolbars and theme-able icons is the way to go. Don’t get me wrong - I seriously love the job they did on the underlying functionality and I use K3B all the time. But I don’t really think the interface is appropriate.

Is there a future for both alternatives, or do you seem some kind of merging in the future?

GNOMEs well-integrated, no-nonsense desktop with the excellent Evolution groupware client and several administration and lockdown features seems to be better suited to the large-scale free software desktop deployments we are seeing at the moment than KDE.

I don’t think that KDE will ever go away. Neither will GNOME, for that matter. Some years ago, many KDEers kept telling GNOME to just fold and merge with KDE; I don’t hear this anymore. With different views on how user interfaces should look and work and how functionality should be distributed across the system, there is a place in the world for both.

What’s your favourite cartoon character?

Hard question. I suppose that would be Piro from MegaTokyo, with Warren from Absurd Notions and Cerulean the Dragon from "Why the long face" a close second and third.

What are you working on at the moment?

I’m not really working on any GNOME-related things at the moment. My focus is on getting on with my studies; I’m in my fifth semester of philosophy, sociology and French, and my main activity is to learn ancient Greek, which is taking up much of my spare time.

I intend to review the original German edition of my book for an eventual revised and extended second edition, but it seems it’ll be hard to find a publisher, and I haven’t got the time at the moment anyway. I hope someday I’ll have more time to consecrate to working and writing on GNOME.

Matthias Warkus Bio

Matthias Warkus was born and raised in one of the most rural regions of Germany. He started using Linux out of sheer boredom at the age of sixteen. Shortly afterwards, he got involved with GNOME, first as a translator, later also doing promotional work, holding many GNOME-related talks in Germany. He considers himself to be better at writing than at coding, and thus went on to write the Official GNOME 2 Developer’s Manual. Currently, he is a student of philosophy. When he’s not struggling with lofty theories in class or discussing them with his friends in one of Marburg’s countless pubs, he enjoys reading, writing and playing the piano.