The GIMP: the GNU Image Manipulation Program
--------------------------------------------

This is version 0.99.10 of the GIMP. For the most part it contains all
of the features that will be in version 1.0 of the GIMP. It does,
however, lack a) documentation, b) robustness and c) many of the
plug-ins found in earlier versions.

The main difference between v0.99.10 and earlier versions is the use of
a tile based memory management for images. This allows the GIMP to
work with images much larger than physical memory in a usable
fashion. Before such memory management, the GIMP was nearly unusable
for large images. (Large being something on the order of
4000x3000). With the tile memory management, image size is effectively
limited by disk space. It is due to the switch to a tile based memory
management system that old plug-ins will not work with this version of
the GIMP.

The GIMP uses GNU libtool in order to build shared libraries on a
variety of systems. While this is very nice for making usable
binaries, it can be a pain when trying to debug a program. For that
reason, compilation of shared libraries can be turned off by
specifying the "--disable-shared" option to "configure". Similarly,
compiling with "-O2" instead of "-g" can be specified by using
the "--disable-debug" option to "configure". We strongly recommend
compiling with the debugging flag as the GIMP appears to be much more
buggy when compiled with optimization turned on.

The plug-in API has changed drastically from previous versions. The
result is that it is now possible to access much of the GIMP's
internals through a database of procedures aptly named the procedure
database. Plug-ins fit into the procedure database by inserting
themselves into it. The result is that plug-ins can call GIMP internal
procedures and other plug-ins. There are several examples of plug-ins
running using the new API in the "plug-ins" directory.

The procedure database is self-documenting. To add a procedure to the
procedure database the programmer must specify a help string and help
strings for the arguments and return values. This allows us to
automatically create documentation for the procedures in the procedure
database. The documentation resides in "docs" and is provided in
texinfo format.

A new type of plug-in called an extension has been created. Extensions
are similar to plug-ins in that they are external program, but they
differ in when and how they are run. The essential difference is that
plug-ins are associated with a particular image/drawable, while
extensions are not. There currently exists a single extension for
scripting named "script-fu" which resides in the "plug-ins/script-fu"
directory. Script-fu provides simple additions to a scheme interpreter
so that it can call procedures in the procedure database.

Lastly, there is new file format (xcf) designed specifically for
saving GIMP images. It handles layers, channels and tiles as well as
saving all of the state information about the image, such as the
active channel, the selection, etc. The format needs testing to make
sure that it really is portable (we think we did it right) as well as
robust. It also will probably change sometime in (near) the future to
implement some form of compression for the tiles.


Spencer Kimball (spencer@xcf.berkeley.edu)
Peter Mattis (petm@xcf.berkeley.edu)
