The future of The GIMP

        
           December 2000 by Sven Neumann & Michael Natterer


This document is meant to be a RFC (Request For Comments). Nothing described
in here is a fixed decision, everything can and should be discussed. The
reason for writing this document now is that the final release of gimp-1.2
is very close and we need a roadmap for the time thereafter. We will propose
our ideas for the future of The GIMP here. A lot of these ideas are based
upon the discussions we had at the 1st GIMP Developers Conference which was
held in Berlin earlier this year (see http://www.gimp.org/gimpcon/). 


Our core proposal is to have three branches after the 1.2 release. We'll
tell you later why we think this is a good idea. First let's have a look at
the branches and see what they provide:


The 1.2.x "Maintainance" branch
-------------------------------
This is the usual maintainance branch. Only bug-fixes go in here and 
only if serious bugs are found and fixed, there will be a gimp-1.2.x
release. We will also consider putting upcoming stable releases of
important plug-ins (like Gimp-Print) into the stable branch. Hopefully not
too many releases will be necessary. Probably someone will port GIMP-1.2
to GTK+-2.0 once this becomes available and an 1.2.x release will be made
supporting GTK+-2.0. This would be similar to what happended with gimp-1.0.3.
Actually we think that it makes more sense to do the port to GTK+-2.0
entirely in the 1.3.x branch as described below.


The 1.3.x "Cleanup for 2.0" branch 
----------------------------------
This is a development branch, which means that new features go in here.
As the name suggests, we would like not to include too many new features
here but to focus on other goals:

 o Port gimp to gtk+-2.0

   As soon as the GTK+-1.3 branch stabilizes and the API has settled (which 
   seems to happen right now), the gimp-1.3 branch will start to require this
   development version of GTK+.

 o Cleanup some internal structures

   As explained in more detail below, the gimp-1.2 codebase is full of crap.
   The main goal of the 1.3 branch should therefore be to cleanup the 
   internal structures without changing the external functionality and look
   and feel of the application. All data objects have to be converted to 
   real GTK+ objects and all dialogs that provide a view on these data
   structures (think of brushes, layers, ...) should make use of a clean
   model-view concept. A proper controller interface needs to be provided
   to enable changes to the underlying data structures via a clean interface,
   no matter if the request comes from the main application's dialog or
   from some plug-in.

 o Implement a few, well defined, new features

   A lot of nice ideas have come up in the meantime (have a look at the
   wishlist on our bug database for some examples) and some of them should
   be comparibly easy to implement. We will need to make a well-defined
   list of features and accept new features only after thoughtful discussion
   on the mailing-list. Only if we limit ourselves to a short list here,
   we will be able to have an 1.4 release within the next year.

 o Think about a new way to handle plug-in distribution

   As more and more plug-ins go into the main gimp distribution (and a lot
   of plug-ins are wating to be included), it becomes difficult to maintain
   them all. Core developers are busy enough with the core application and
   shouldn't have to fiddle with all those plug-ins. If we can think of a
   better model for plug-in maintainance and distribution, we should try to
   implement it in this branch.

Once this work is done there will be an 1.4 release. This release will
work with GTK+-2.0 and will provide a backwards-compatible plug-in API.
Probably we can not achieve this goal due to unavoidable changes to the
plug-ins' Gtk+-code but it shouldn't be hard to port plug-ins to gimp-1.4.


The 1.9.x "Building GIMP 2.0" branch 
------------------------------------

This branch will start in a clean gimp-2.0 module on CVS. After setting up
a directory structure (which should be much finer grained than what we work
with now), work will begin to implement the design as discussed at the
GIMP developers conference. Fortunately some work has already been done:

o GEGL -- Gimp 'E' Graphical Library

  GEGL is an image processing library based on GtkObjects written mainly
  by Caroline Dahllof and Calvin Williamson. This library will provide the 
  core gfx engine for gimp-2.0. It is available with lots of documentation
  in the gegl module on gnomecvs.

o GCim -- The convergence integrated media object and utility library.  

  We can't tell you too much about this yet, since this library has not
  yet been released to the public. This is something we (Mitch and Sven)
  and others have worked on during the last months at our employer, the
  convergence integrated media GmbH. We will release this as open source
  very soon. Basically it's an XML enhancement library for GTK+. It will
  allow us to write serializable and deserializable GObjects with little
  effort and it provides a mechanism to transparently send GTK+ signals
  to other applications via XML-RPC. Expect more info to be available soon.

Since we haven't yet managed to write down all our ideas developed at the
conference this June, I can only point you to the gimpcon website located
at http://www.gimp.org/gimpcon/ which has a review that explains some of
our ideas. We will certainly have to outline the new design in more
details before we can actually start to implement it.


Our reasons
-----------

It's now time to explain why we think that having three branches is a good
idea and why we think development should continue as outlined above:

We believe that the gimp-1.2 codebase is very hard to understand and to work 
with. A lot of the internal structures date back to a time when the GTK+ 
object system was not available. During the last years some code has been 
migrated to make use of the GTK+ object system and at some place you can 
even notice some design principles like model-view (only if you look very 
close). Most of the code however is still pretty crappy and full of 
side-effects. This has led to a lot of problems and unexpected bugs during 
the last development cycle. We have learned that adding new features to this 
codebase most likely breaks code at places you didn't (and probably couldn't) 
think of. This is the main reason why we propose to develop gimp-2.0 from a 
clean tree. On the other hand, starting from scratch will mean that for some 
time there will be no real application to test changes in. That's why we 
believe it makes sense to perform a lot of the code cleanup in the old tree. 
By limiting ourselves to a small set of new features we could manage to bring
out gimp-1.4 not too long after GTK+-2.0 was released.



Links
-----

http://www.gimp.org/            GIMP homepage
http://www.gimp.org/gimpcon/    GIMP Developers Conference
http://www.gegl.org/            GIMP 'E' Graphical Library
http://www.convergence.de/      convergence integrated media GmbH



Feel free to send updates/comments/fixes/flames/whatever.  We will keep this
document up-to-date and post new versions when neccessary.

Sven & Mitch

Reply via email to