There are many factors that go into a choice like this, but some of them are:
- Does the application need to run on Windows or MacOS?
- Does the GUI need to be viewed remotely over a network?
- Are dynamic effects (think iPhone) desired?
- Does the application need to run on low end CPU’s (ones without a GPU)?
Putting some effort into selecting the right GUI technology is important for the following reasons:
- Most of the development effort for the product will likely be in the graphical application, so it makes sense to maximize the productivity of the application developers. Typically there might be 3-10 application developers on a project for every system software developer.
- You want a technology that will scale with new revisions and improvements of the product.
- You want a technology that will be supported and improved long term.
With Open Source software, things are always changing. Leading technologies change. This can be illustrated by following Intel’s support for their open source software platforms. While some of this may be driven by politics, we can also see clear technical and licensing reasons why these shifts were made.
- Moblin (GTK+), became public around 2007, merged into MeeGo in 2010
- MeeGo (Qt), announced in 2010-02, cancelled 2011-09
We can see similar shifts in other companies:
- Nokia started with GTK+ as the GUI technology for their tablet computers, and then shifted to Qt
- Many phone manufactures are producing Android products
- Palm moved from a proprietary GUI to HTML in webOS
GTK+ is part of the GNOME desktop project and is perhaps the most used graphical library for desktop Linux applications, and in the past has been very popular in Embedded systems. Nokia has invested heavily in GTK+ in the past with its early tablet products (N770, N800, N900, etc). However, with the advent of the iPhone and faster processors with GPUs, everything has changed. The standard is now dynamic GUI’s with sliding effects, etc. The Clutter project is a library that can be used to build dynamic GUIs and fits in with the GNOME stack. GTK+ supports Windows and MacOS, but probably not as well as Qt.
Qt is a very mature project that is also extensively used for desktop projects, and recently is being used on some of Nokia’s phones. Qt was originally developed by the Norwegian company Trolltech. Originally, Qt was only offered with either a proprietary license or the GPL license. This meant if you wanted to write a proprietary application using Qt, you had to purchase Trolltech’s commercial license. This factor alone probably made GTK+ a much more popular solution for many years for Embedded Linux GUI’s, including most cell phone stacks. In 2008, Trolltech was acquired by Nokia, and shortly after that, Qt was offered under the LPGL license, giving it the same license as GTK+.
In the future, Qt 5.0 will require OpenGL, and hence be relegated to high end ARM CPU’s with a GPU, or desktop systems.
Qt’s cross platform support is excellent, and provides good native support for Linux, MacOS, and Windows.
Recently, Nokia has made efforts to set up Qt as more of a community project, instead of retaining exclusive control over it.
EFL (Enlightenment Foundation Libraries) is a project that started out as the Enlightenment window manager, and grew into a set of general purpose libraries. It claims to be to be more efficient than GTK+ and Qt, and work with or without hardware acceleration. Recently, EFL seems to have garnered the commercial interest of Samsung, Intel, and others involved in the Tizen project. According to a presentation by Carsten Haitzler (one of EFL’s founders and developers), Samsung was using GTK+ and DirectFB, but switched to EFL after seeing the performance. Perhaps the most compelling story for EFL is the high performance over a range of hardware capabilities (from simple phones with low end processors, to high end smart-phones running OpenGL). Parts of EFL are also used in the commercial GUI FancyPants.
Android is an interesting GUI solution, especially as many developers have experience working on Android applications. Android now seems to be used in many applications where Windows CE was used in the past, probably due to its polished application development tool-set.
Each of the above technologies has benefits and drawbacks. Understanding your project’s requirements, and what each solution offers is key to making the best decision.