This site has been retired. For up to date information, see handbook.gnome.org or gitlab.gnome.org.


[Home] [TitleIndex] [WordIndex

Mikkel's Gnome 3 Vision

<!> This document is a working draft and will be updated whenever I feel like it

In my blog post of June 12th 2008 I summarize a debate that has been held on Planet Gnome about the Decadence of Gnome 2.0 as well as the future of Gnome.

On this page I will try to summarize the problems and concerns raised and outline a strategy of how to address them in a Gnome 3.0 project.

Identified Problems

The below bullet point list is ordered by relevance. What I find most relevant is at the top. It is important to empathize that all I consider all items on the list important, the bottom ones are just less important.

What We Did Right

History to Keep in Mind

The Plan

Here follows an outline of a plan on how to address the identified problems.

The Very Quick Version

Realizing this is going to be a long and dull document I present a summary of the whole content for the lazy persons among us.

Not Desktop, Workspace

In order to make it clear that I am not addressing a desktop-centric solution I am going to be using the term workspace to mean a generic graphical workspace on some electronic device - being, a laptop, phone, mini-laptop, kiosk, whatnot.

The Plan

Gnome Flavors

Most people probably think of Gnome as a desktop system. People in-the-know knows that there is also Gnome Mobile. As stated by many people on Planet Gnome it is about time we look past the desktop. There are lots of other places in need of more specialized workspaces. Also the target audience of Gnome as a desktop distribution is also not entirely clear.

(!) Solution: Make official Gnome flavors. Currently we have two Desktop and Mobile. Others could include Legacy Desktop, Mini Desktop, Sandbox (with bleeding edge apps and lots of experimentation).

Core, Platform, and Flavor

I think we have a problem with our current Platform and Desktop split of our libraries. The core of the problem is that it is very hard to get into Platform which is the only place we make API and ABI guarantees. Because of this (and probably other reasons) Desktop has become more or less a heap of libraries for various purposes. Furthermore Platform contains some libs that we hardly ever use (or at least should not use), this may be because Platform was to widely scoped to begin with.

(!) Solution: Scope module sets by functionality and stability. We have two base modules shared by all flavors Core and Platform. Each flavor has a private additional module without any interface guarantees. For example the Desktop flavor would consist of the Core, Platform, and Desktop modules. Here follows a short description of each module. I do purposely not define what exactly each module should contain, that is besides the point for now.

Making Stability Guarantees Easier

It is a hard task to put on one self to maintain an API and ABI stable library (see P2). In addition to the Core/Platform split mentioned above official guidelines for the libs should be published. These should contain information to maintainers on how to most easily maintain stability (for example outlined in Imendio's Gtk+-3.0 paper).

Portability of Core and Platform

Underlying technologies such as X11 or other should not be exposed in any public API in Core or Platform. While actual ports need not exist, we should keep them portable to other achitectures and OSes. This is needed because all flavors are going to use both Core and Platform.

Extensibility and Specifications

The most visible way to extend the "desktop as a whole" is through Nautilus plugins or panel applets. To be frank this is weak and inflexible. Several alternatives exist or are being worked on (fx GDesklets and Moonlight). We need to work out more generic ways to augment the user experience.

(!) Solution: Specifications. At each point we want extensibility we write a specification. This spec should be language neutral and (in theory) implementable in any way a developer might desire. Examples of this could be:

The Gnome Platform module should contain libs to help implement these specs (not necessarily full implementations). This way Gnome flavors can easily replace either server or client side components as suiting to their needs.

New Features and Applications?

I imagine that we can get very close to 3.0 by working entirely within the 2.0 tree. Our focus should not be on developing any new specific features or applications, but building a framework where we can plug them in at any later point without breaking anything.

One (quite important) argument for adding a new bling feature or application would be to not let down users expectations. If we release 3.0 with a desktop that resembles the last 2.* 99.99% a lot of users would be disappointed. I would be perfectly happy though.

Now that I've said we don't need any new features let me add the "but" :-). There are two items that I feel our stack desperately needs (apart from a animation + scene graph framework in Gtk+ 3.0). Given that the Gnome community agrees on something close to my ideas here I am willing to work on both myself.

Both these items are directly related to the extensibility stuff I have been banging on about.

The Gnome Shell

As mentioned earlier the only way to extend the general desktop is via panel applets, nautilus extensions, and in special cases tray icons. This is very limiting. What is worse is that tray icons are by far the easiest to develop, this has lead to a great many apps exposing tray icons when they really should provide applets. On top of the coding difficulty issue we also have

(!) Solution: Enter the Gnome shell. The Gnome shell is a DBus service providing hooks to integrate into the workspace on many levels. The shell does not have a UI itself, but clients can expose themselves through it. In a Gnome Shell context the current panel would simply be a container in which clients (think: applets) can embed themselves. Another container could expose client UIs on the desktop.

FIXME: Finish spec for Gnome Shell and publish it and have a tool consume these.

OS Intergration

Expose interfaces for operating systems to implement PackageKit is the pioneer in this area. FIXME Elaborate on this

Execution

If it was not for a Gtk+ 3.0 requirement, all of which I have described could be done by extending our current code base, without breaking API and ABI. So let me make it crystal clear I don't believe in massive rewriting or huge API breaks, and I am sure the plan I've outlined will not cause it.

The Gnome Shell, GProxy, GPlugin can definitely be added in a Gnome 2.0 context (although having a panel applet vs Gnome shell split is a bit ugly, nothing is preventing it). We can write down exactly which libs will go away and which will go into Core, Platform, and Flavor modules. We already have this to some degree with the LibEgg and LibGnome* purging from our stack. When we have everything spec out formally and blessed by the higher powers, we can hack along on Gnome 2.* until we have aligned things to make a smooth transition to the new world order.

Plan Verification

FIXME: Explain how this takes into account all P, H, and Rs above.


2024-10-23 11:23