GUI toolkits

20 August 2010
Lean
I currently develop embedded devices rather than desktop applications, so for me 100+MB of dependencies is actually a concern.
C-based
C is what I use, and as things stand I do not see any real advantage of object-orientation in the type of programming I do.
Cross-platform
No-brainer.
Closed-source compatible
Ditto. I am in the business of selling devices, so keeping the business logic closed-source is a predictable assumption.
Ideally BSD-style licensing
Discussed previously.
Reasonably popular
Subjective, but it does a good job of thinning out the
Clearly satisfying all of these at once is difficult at best, but having tried a cross-section of GUI APIs, I am getting a feel for what is good and what is bad. I often feel that GUIs are an area where object-orientation works well, which is why so few toolkits are C-based (GTK is an example of object-orientation in C, but if like me you tend to use -Wall -pedantic expect to have to do a lot of casting). So on to the APIs I have used..
Win32
Some parts of the Win32 API are pretty ghastly, but it is nice that experience of it from 1998 can still be used in 2010. And having limited parameters for messages meant that they became very predictable very quickly. I do think this model of event-based programming, where you have to process raw messages yourself rather than write a load of call-backs, is a bit of a dying art. If it was not Microsoft-only (note: Wine does not count), I would most likely not touch any other API..
Raw X-Windows
Raw X11 programming was something I semi-seriously looked at during the earlier part of my undergrad degree, and was partly due to my (then) desire to do everything from absolutely minimal base. A bit of a hangover from when 14 kilobyte/sec ISDN was still a bit of a luxery. These days I can just about envisage using X11 directly at some point, but under somewhat contrived circumstances (e.g. why not DirectFB and wxEmbedded).
Xaw, Athena, Motif, etc. I think at least some of these GUI toolkits have been a standard part of X-Windows for quite a long time, but even back in my Solaris-using days the X-Windows look felt like it was designed more for functionality than aesthetics. Today they are definitely very dated, if not outright arcane.
Gimp Toolkit.
If you want a featureful C-based GUI toolkit that is properly cross-platform (both Unix and Windows), GTK is just about the only major player. However, documentation is a pain, with most web-searches bringing up the C++ bindings. There is also virtually no information regarding which versions have which functions which stung badly when I was using Ubuntu 10.04 to write an application destined for a Slackware 13.0 install.
wxPython (wxWidgets)
My use of wxWindows (now wxWidgets) is somewhat rose-tinted because I was using the wxPython bindings. However it was nevertheless quite pleasant to use, and on the whole its various versions (GTK/Win32 backends, embedded version, etc) seems to cater for any likley future requirements I may have from a toolkit. These days I consider it better choose my poison and settle down with it rather than speculatively try any more new technologies.
Qt
In the past, if there was any prospect of your program being non-open-source, you had to buy a commercial licence. These days the L-GPL is now a licence option, but I have already long decided to avoid Qt.