Table of Contents
There are lots of libraries, tools, special filenames and so forth that one runs across when wanting to develop with Gnome. Often times, these have a name which does not fully explain (or does not even explain at all) what they do. I try to list these in this chapter. This chapter is meant more as a reference guide than a tutorial, though it can serve to introduce someone who has learned the basics of developing with Gnome what other tools and libraries are available.
FIXME: I also want to list things users may run across in files (e.g. gettext macros)
Warning: There are libraries I may have overlooked altogether, and I am not sure about all my descriptions. Also, I need to find out which other libraries are considered unstable (I have a list of some, but there's a lot where I just don't know whether they're considered stable or not). Also, it'd be nice to include more libraries from freedesktop.org that Gnome makes heavy use of, and also add two more special categories--outside libraries (those that are part of other projects, such as Mozilla or freedesktop.org), and "official" libraries (those that are part of the official Developer Platform). But I'm adding what I have so far...
Gnome is comprised of many libraries, only some of which contain obvious names. The section provides a brief overview of these libraries as well as some related ones (especially ones from freedesktop.org) that Gnome uses.
ATK (Accessibility ToolKit) provides a set of interfaces for accessiblity, and provides information about the interface to assistive technologies (voice interfaces, screen readers, alternate input devices, etc.). Providing accessibility means to enable people with disabilities to use the system. Because ATK is built into GTK+ and GNOME widgets, programs built with widgets from these libraries should automatically function well with assistive technologies and not require any extra work. However, there are a variety of small things that can be done to make a program work more smoothly with assistive technologies.
AT-SPI (Assistive Technology Service Provider Interface). AT-SPI is similar to ATK in what it does, the main difference being that AT-SPI worries about process to process issues while ATK is an in-process API that does not cross process boundaries. AT-SPI exposes the internals of applications for automation, so that tools such as screen readers, magnifiers, or even scripting interfaces can query and interact with GUI controls.
Eel (the Eazel Extensions Library) is a collection of widgets and extensions that were developed while building Nautilus that could be of use to other applications. These are intended to be part of glib, gtk+, or one of the other gnome platform libraries some day. (Note: Eazel is the name of a company which no longer exists)
GAIL (the GNOME Accessibility Implementation Library) implements the abstract interfaces found in ATK for GTK+ and libgnomecanvas. It is an optional runtime library and it simply implements the ATK API for these core widgets.
GAL (the Gnome Application Library) contains library functions that will hopefully be useful to a wide range of other Gnome applications. These functions mostly have come from Gnumeric and Evolution. However, the API is not considered frozen.
GConf is both a library which provides a simple configuration data storage interface to applications and an architecture to make things easier for system administrators. It exists to provide a central location for system administrators to set preferences, to enable mandatory settings to be employed, to provide default settings (and a method to reset all values to their default), to document each setting, and to provide a mechanism for applications to be notified when certain preferences change (this is the Gnome mechanism that enables automatic application of preferences).
GDK (GTK Drawing Kit) is an intermediate layer between GTK and the windowing system, allowing GTK+ to support multiple windowing systems. It currently supports X11, Win32, and the Linux framebuffer device. As a bit of trivia, if you expand all acronyms contained in GDK, then modulo recursion, you get the GNU's Not Unix Image Manipulation Program ToolKit Drawing Kit. GDK is included in GTK.
GdkPixbuf is a library for loading and manipulating images. It provides facilities for rendering a GdkPixBuf into various formats and provides a cache interface. It is included in GTK.
Gecko is an full featured and standards compliant HTML rendering engines (HTML rendering is the main job of web browsers). It is used by web browsers such as Mozilla, Epiphany, and Galeon. It is also beginning to appear in other Gnome applications, such as devhelp (devhelp is an API documentation browser for Gnome).
GLib is a lower-level library that provides many common, useful data structures and functions. Many of the things included tend to be provided by default in higher level languages such as Perl or Python, so those programming in languages other than C may not make as much use of GLib functionality. Examples of things included are timers, string utilities, linked lists, hash tables, balanced binary trees, and a lexical scanner. GLib also provides some other functionality as well such as portability wrappers, a threading abstraction, and a runtime event loop.
The library is actually called libgnome-desktop, but it is distributed as part of gnome-desktop. The libgnome-desktop library contains APIs that are not yet stable enough to be placed into libgnome(ui). (The other stuff distributed with gnome-desktop are some core documents (such as the GPL), Gnome's .desktop files, the gnome-about program, some manpages, and some core graphics files and icons.)
libgnome-keyring is currently considered to be limited to internal use in the gnome desktop since it has not been tested enough yet. As such, it is shipped along with the gnome-keyring application. libgnome-keyring provides the ability for application to integrate with the gnome-keyring system. gnome-keyring is a program that keeps passwords and other secrets for users.
GnomeVFS is a library that enables applications to transparently access a variety of filesystems, from local filesystems, to ftp, to digital cameras. It supports asynchronous file operations. It also provides a MIME type manipulation library.
GObject provides an object oriented framework for C. GObject was designed with wrappers for other languages in mind and was created to make API bindings for other languages (both compiled and interpreted) as automatic and straightforward as possible. Cross-language interoperability has many difficulties associated with it, and it is only because of the focus of GTK on making wrappers for other languages easy that the many language bindings to GTK are so clean and seamless. GObject is included in GLib.
GStreamer is a framework for streaming media. It enables applications to do real-time sound processing, playing videos, and just about anything else media related. It has a plugin-based architecture to enable simple addition of further processing capabilites. "The interface hopefully is generic enough for various companies (ahem, Apple) to release binary codecs for Linux, until such time as they get a clue and release the source." Its main competition is Xine, a non-Gnome library which is older and more mature but does not have as many cool features.
GTK (the GIMP ToolKit) is the library that contains the actual widgets, i.e. the actual interface components such as buttons, scrollbars, viewports, toolbars, menus, etc.
GTK+ is a toolkit for creating graphical user interfaces. GTK+ is not a library itself, but is a set of libraries consisting of GLib, GObject, Pango, ATK, GdkPixbuf, GDK, and GTK. The collection is sometimes, perhaps confusingly, referred to as GTK.
GtkHTML is a lightweight html rendering engine (html rendering is the main job of web browsers). GtkHTML is currently used, for example, by Yelp (The Gnome help and documentation browser) and Evolution (an email, calendar, contact manager, and communication program). Unfortunately, there are currently two different versions of GtkHTML -- GtkHTML2 and GtkHTML3. GtkHTML3 is basically a continuation of GtkHTML1 which was forked from KHTML and has support for editing, while GtkHTML2 was a complete rewrite and is read only. Applications that use GtkHTML currently may move to Gecko in the future. Some already have.
gtksourceview is a text widget that extends GtkTextView (the standard text widget) in order to provide syntax highlighting and other features typical of a source editor.
libart_lgpl is a library that can be used in many 2D imaging applications that is licensed under the LGPL. It renders graphics in a raster format, and has advanced features such as anti-aliasing and alpha compositing built in. It handles the drawing capabilities in Gnome.
libbacon is a prototype library that is designed to hold multimedia features that are intended to end up in a one of the stable multimedia libraries at some point, but is not quite ready yet. It is similar in nature to libegg, though the maintainer has said he may remove this library at some point.
These libraries provide the framework for creating reusable components and applications that can be used to form more complex documents. This provides abilities such as embedding a spreadsheet or graphics in a word-processing document, or using a word processor within an email editor window.
libcroco is a CSS2 parsing and manipulation library. CSS (Cascading Style Sheets) is a simple mechanism (as well as a format for instructios in a file to implement that mechanism) for making webpages very stylish.
libegg is a prototype library that is designed to hold features that are intended to end up in a stable platform with a clear maintainer, but which are not quite ready yet. It is also different in that this library is not installed or linked to, but rather code is simply cut-and-pasted from it into other locations. This would be a maintainence headache, except that things are only supposed to stay in libegg for a short time and those who use code from it do so realizing that it may change frequently and perhaps even drastically.
libgda is a data base abstraction layer that provides unfiorm access to different kind of data sources (databases, XML files, mail spools, etc.). It has been separated from the rest of the GNOME-DB project in order to allow non-GNOME applications to use it.
Libglade is a small library that takes an XML description of an interface (usually built by a graphical program called Glade, but can also be written by hand), parses it at runtime, and generates the appropriate widgets and connects those widgets to callback functions.
LibGNetwork is designed to provide a useful and easy-to-develop-against networking library. It is not recommended or intended for high load server situations, but rather for applications which need basic TCP/IP networking. One of its goals is to unify various other networking libraries: Link, GNet, and libsoup.
libgnome contians non-GUI-related libraries used in Gnome. It has a variety of high level application management functions such as program initialization and help support. Libgnomeui contains a variety of extra widgets that are not currently available in GTK+ or that require extra dependencies above GTK+. GTK+ 2.6 plans to include many if not all of the features in these two libraries, so they may disappear in the future.
libgnomecanvas provides a hierarchical, object oriented drawing space. It gives more direct control than layout done in usual gtk way, and operates in terms of objects (e.g. shapes and colors) instead of widgets. It has two rendering backends available--one based on Xlib for fast display, and one based on Libart for a sophisticated, antialiased, alpha-compositing abilities.
libgnomedb is a database widget library. It is part of the GNOME-DB project.
libgnomeprint contains the non-GUI portion of the implementation of the GNOME Printing Architecture, while libgnomeprintui contains the GTK+ widgets related to printing.
libgsf (The G Structured File Library) provides an i/o abstraction library for reading or writing structured formats that provide file-system-in-a-file semantics (such as OLE2, zip, tar, etc.).
libpanel-applet (included with the gnome-panel application) is a library that allows one to develop applets (small applications which may be embedded in the panel).
LibRSVG is a library for rendering of SVG (Scalable Vector Graphics) images.
libsoup is an HTTP library. (Mostly a client library, but libsoup also contains some code to implement an HTTP/1.1 server, i.e. a webserver)
libwnck (pronounced "libwink") is a Window Navigator Construction Kit. It is a library to use for writing pagers (applications that move windows between virtual desktops or allow you to switch virtual desktops) and tasklists. It also allows applications to monitor information about open windows, workspace, application names and icons, etc.
These libraries provide blazing fast parsing of XML (Extensible Markup Language) files. XML is a file format, which is often used for configuration files, documentation, and many other things.
ORBit2 is a CORBA (Common Object Request Broker Architecture) ORB (Object Request Broker). It focuses on high performance, low resource usage, and security and is engineered for the desktop workstation environment. CORBA is an architecture that allows computer applications to communicate regardless of the programming language they are written in (or even the operating system they are on or the network they are communicating over). libbonobo is an example of a library that makes use of ORBit2.
Pango provides a framework for the layout and rendering of text (including the handling of fonts) and specifically focuses on internationalization. It usually does all the rendering without any extra work required from the application developer.
Popt is a library for parsing command line options.
VTE is an embeddable terminal emulation widget. It is what does most of the work for gnome-terminal (gnome-terminal is just a vte widget in a window with a menu bar).
It is also helpful to be aware of special categories of libraries. These are listed below.
There are a number of different networking libraries. In addition to libsoup and LibGNetwork (mentioned above), there is also GNet and Link. LibGNetwork was designed to unify all the others into one. From its FAQ: "1) Link doesn't return specific errors, cache DNS returns, or handle proxies. All these features are useful to applications; 2) GNet doesn't use GObject, or cache DNS return, or do a whole lot of things in a non-blocking way. It also doesn't support non-SOCKS proxies. 3.) Libsoup doesn't use GObject."
Eel, GAL, gnome-desktop, libegg, and libbacon are all prototype libraries. It is confusing that there are more than one of these, but since they came about from different situations and each have different (mostly unwritten) policies, no one cares enough to fix this.
There are a number of libraries that are either considered experimental (due to lack of testing or time) or that might be subject to API or ABI changes. These libraries include Eel, GAL, gnome-desktop, libgnome-keyring, libegg, and perhaps others that I've missed (FIXME: find out if I have missed any).
gtkhtml, gtksourceview, vte are really more of an implementation of a specialized or advanced widget than they are of a library.
You may also find references to libraries that are now obsolete, especially since distributions tend to continue to ship them for older applications. Some of these obsolete libraries are the following:
imlib has been replaced by GdkPixbuf.
gnome-libs was used in Gnome 1.x. It has been replaced in Gnome 2.x by libgnome.
gnome-print was used in Gnome 1.x. It has been replaced in Gnome 2.x by libgnomeprint and libgnomeprintui.