GTK+ uses the C programming language, although its designers use an object-oriented paradigm. The GNOME platform bindings provide for C++ (gtkmm), Perl, Ruby, Java and Python (PyGTK) bindings; others have written bindings for many other programming languages (including Ada, D, Haskell, PHP, and all .NET programming languages).
Unlike a number of other widget toolkits, GTK+ isn't based on Xt. There are pros and cons about this. On the pro side, it allows GTK+ to be available on other systems and to be much more flexible. On the con, it doesn't have access to the X resource database, which is the traditional way for customizing X11 applications.
Look and feel
The end-user can configure the look of the toolkit, down to offering a number of different display engines. Engines exist which emulate the look of other popular toolkits or platforms, like Windows 95, Motif, Qt or NEXTSTEP.
GTK+ initially contained some utility routines that did not strictly relate to graphics, for instance providing such data structures as linked lists and binary trees. Such general utilities, along with the object system called GObject, have now migrated into a separate library, Glib, which programmers use regularly to develop code that does not require a graphical interface.
GTK+ 2 is being developed with the intention of succeeding GTK+. Its new features include improved text rendering using Pango, a new theme engine, improved accessibility using ATK, complete transition to Unicode using UTF-8 strings and a more flexible API. However, GTK+ 2 lacks compatibility with GTK+ 1, and programmers must port applications to it. Some programs continue to use GTK+ 1, as the original version remains in use, is faster, offers less complexity than GTK+ 2, and is more suitable for embedded applications than GTK+ 2. Starting with version 2.8 GTK+ 2 relies on the Cairo library for rendering which introduced vector-graphics in GTK+ 2.