Wednesday, September 29, 2004

C++ GUI development is immature

I know there are plenty of C++ GUI libraries out there. Here is an incomplete but significant list:
  1. wxWidgets
  2. Qt
  3. FLTK
  4. gtkmm
  5. FOX
  6. TnFOX
  7. Notus
  8. Ultimate++
  9. Toad
  10. CxxGUI
  11. Inti
  12. VCF
  13. MFC
  14. WTL
  15. Win32
  16. Win32Gui
  17. SmartWIN
  18. WinForms
Whew! That's a fairly long list. But you know what? Although many of them are reasonably good none of them provide me with all of the features I want or need. Here's what I want:
  1. Cross platform
  2. Well documented
  3. Modern (and well designed) interface
  4. Easy to use
  5. Widely used
  6. GUI editor (RAD tool)
  7. Free
None of the aforementioned GUI libraries can satisfy all my needs and that sucks rocks.


Anonymous said...

I think it would be of great help to put up a chart of libraries versus how they fail your requirements. It would help the discussion immensely in my opinion.

Also, I think that for a gui library to be useful to me, it has to produce programs that look native and follows platform best-practices.


Matt said...

I also believe that it must support native look 'n' feel (or at the very least native widgets) and follow platform best practices. The first is easier than the second incidently.

I'll endeavour to create such a table when I get back from my New Years celebrations!


Anonymous said...

Regarding SmartWin I assume your main point is cross platform support.
We're as I'm sending this comment porting to two new platforms, Wine (xNix implementation of Windows API) and Windows CE.
So look us up again in some few weeks...

Though RAD is not prioritized since we want to keep the distros non-binary.

Though I would also add up lightweighted as a requirement, but then that's just me...
And I AM biased!


Matt said...

Heya Thomas,

I applaud what you guys are trying with SmartWin - keep pluggin away at it!

However, apart from the cross platform (great that you're looking at others BTW!) and RAD issues the documentation needs improving. In particular I found the tutorial lacking too many details and just not filled with enough examples. I also couldn't find any design document (ie an overview of how the library 'hangs together'). The (presumably) doxygen-generated docs are good but not enough.

There also doesn't seem to be any layout managers - is it me or is everything pixel-based? That will need to be addressed.

Lightweight is an interesting criteria. Being a C++ fan it's hard not to make it a priority and it's always on my mind. Yet the reality of GUI development is that it's far more important to be able to develop and maintain GUI code quickly than it is for the code to be light and efficient. Typically a _very_ small amount of processing power and memory is used in rendering or layout. So, while I try and design things to be lightweight, it's gotta be considered against the big one: Will this help me get my job done effectively.

But I'll definitely keep an eye out on SmartWin!! If you keep at it I'm sure you guys will come up with something spectacular! :)

Anonymous said...

Watch out for LGPL toolkits. They are very tricky regarding licensing (what 99% of developers assume about LGPL is simply wrong--because they've never bothered to read it).

For example, simply using LGPL'd header files can make the source code file containing the #include statement to become LGPL. Again, read the LGPL if you don't believe me, and ask someone at if you need further convincing directly from the GPL/LGPL experts.

Also, look into why Apache Foundation didn't allow LGPL Java .jar files to be accepted into their opensource Java projects. People thought Apache was insanely paranoid until their interpretation came to be largely confirmed later on.

For opensource projects, GPL/LGPL is very attractive and I recommend them. But for closed source commercial projects, try not to touch them unless you understand the patent, reverse-engineering, and other aspects instead of relying on assumptions.

Too bad Smartwin++ is modified GPL license. It would've been much more attractive to me if it was modified BSD or MIT license that simply requires any additions/modifications to any Smartwin++ files to be contributed back to Smartwin++ and that all other files are not subject to any conditions.

The possibility of a closed source project utilizing Smartwin++ and becoming subject to GPL for reasons not explicitely excluded by the Smartwin++ license is what scares me away from using it.

I hope the Smartwin++ developers reconsider their license and benefit by attracting a huge following by doing so. They wouldn't lose any rights, they'd gain more users simply by getting rid of GPL which makes sense on the Windows platform.

On Linux, it doesn't really matter for C++ projects because of the use of gcc header files. GPL/LGPL makes the most sense on that platform.

Long live Debian (my favorite distro) for GPL/LGPL stuff. And long live Windows for closed source stuff so I can pay my rent and feed my family.

Anonymous said...

The tutorials are updated (at least SOME) and the license is changed to BSD now !!

So I assume we're plugging holes for you guys every day!!

Anonymous said...

smatrwin++ has now moved to a bsd license.