How Healthy is the Qt Ecosystem?
As 2018 draws to a close, it's time to take the pulse of the Qt ecosystem and review some of the significant events and milestones of this year.
Qt Releases
The Qt project continued with its practice of releasing two major versions per year, as well as a number of maintenance releases. First released in 2017, the Qt 5.9 series is an LTS (Long Term Support) version, which will be supported for three years. This year saw maintenance releases of Qt 5.9.4 (Jan), Qt 5.9.5 (Apr), Qt 5.9.6 (Jun), and Qt 5.9.7 (Oct).
Shortly after the release of Qt 5.10.0 in late 2017, this year started off with the maintenance release of Qt 5.10.1 (Feb). This was the "recommended" release of Qt, until the release of Qt 5.11.0 in May. This was followed by maintenance releases of Qt 5.11.1 (Jun), 5.11.2 (Sep), and 5.11.3 (Dec).
The second major release of the year was Qt 5.12.0 in December. This is also an LTS release. Note that support for the Qt 5.6 series, the earliest supported LTS series, will end in March 2019.
The other major software component of the project, the Qt Creator IDE, saw no less than nine releases this year: 4.5.1 (Feb), 4.5.2 (Mar), 4.6.0 (Mar), 4.6.1 (May), 4.6.2 (Jun), 4.7.0 (Jul), 4.7.1 (Sep), 4.7.2 (Oct), and Qt Creator 4.8.0 (Dec).
For developers who prefer using Microsoft Visual Studio as their IDE, the Qt Visual Studio Tools, which provides support for Qt development in Visual Studio, saw a 2.2.0 release in February and a 2.3.0 release in November.
A significant new offering was Qt for Python, the Python language bindings for Qt formerly known as PySide2. This revitalized project saw a Tech Preview release with Qt 5.11 and was then officially released for Qt 5.12.
The 3D-authoring tool Qt 3D Studio saw a 2.0 release in June, 2.1 in October, and 2.2 in December.
Another new development offering was Qt Design Studio, an advanced development tool for QML, which had its initial 1.0 release this year.
One of several options for developing a graphical installer, the Qt Installer Framework, saw a 3.0.4 release in March.
Qbs, an alternative build system to qmake, saw a 1.11 release in March and a 1.12 release in July. At the Qt World Summit it was announced that Qbs was deprecated and would not be supported after the end of 2019. (More on this later.)
And finally, 2018 saw the release of a new module, the Qt Safe Renderer. This is a rendering back end developed from scratch using a process that allowed it to be certified to meet a number of functional safety standards that are often requirements in the automotive, medical, and automation industries.
Significant New Qt Features
Probably the most significant new feature this year was official support for writing Qt applications in the Python language using Qt for Python (formerly PySide2). While this was possible in the past using PyQt, Python is now officially supported by The Qt Company and provides another alternative to using C++.
This year also saw the release of two new rendering back ends for Qt to support web technologies: Qt Quick WebGL and Qt for WebAssembly. While still new, this is an area that I will be following closely as it could potentially expand Qt's use into areas where traditional web and HTML technologies (or hybrid native and web) would have been used.
As mentioned earlier, the deprecation of Qbs signaled a change of direction. Support for qmake will continue but future efforts will focus on CMake, which has become a defacto industry standard build system, possibly with CMake replacing qmake in Qt 6.
The cost of hardware continues to decrease while performance increases, particularly on the low end. Some lost-cost microcontrollers (MCUs) and now able to run an embedded operating system like Linux. Some preliminary work was demonstrated this year showing Qt running on microcontrollers in conjunction with a tool to provide finer grained configuration of Qt, dubbed Qt Lite.
Qt Events
The annual Qt Contributors Summit took place in June at The Qt Company offices in Oslo, Norway. These annual meetings are the forum where much of the future direction of Qt is decided.
This year's developer conference, Qt World Summit, was held twice: in Boston, USA and Berlin, Germany. This was the first time in many years that the North American conference was held on the East Coast (convenient for ICS with its head office in the Boston area). Both shows were successes, and afforded new and experienced Qt developers the opportunity to learn about project success stories, future plans, and other relevant information, as well as provided a forum for companies in the Qt ecosystem to show off their goods and services.
Industry Trends
This year showed a continuation of several trends I've observed over the past year or two. Python is becoming the most popular and fastest growing programming language (helped in part by the Raspberry Pi platform, which uses it as the main language for teaching computing to young people). It is even making inroads into embedded systems. With the release of Qt For Python, Qt is well-positioned to take advantage of this trend, while still supporting traditional C++ programming.
And speaking of C++, the language continues to evolve with the C++14 and C++17 language standards. The recommended release of Qt now requires at least C++11 support to build, and many developers are working hard to get up to speed on all the "modern C++" features, and thinking about how to leverage them in their applications.
Qt 5.0.0 was released in 2012. The roadmap for the next major release, Qt 6, is now starting to become clearer. Qt 5.12 is expected to be the last release of the series, and a Qt 6 release is expected at the end of 2020. The general consensus is that it will not be a major change like the one from Qt 3 to 4, but rather one that is mostly source compatible like the much smoother transition from Qt 4 to 5. It will be an opportunity to make changes and remove old baggage (e.g. deprecated code and modules) that could not be done in Qt 5 without breaking binary compatibility.
We can expect to see more use of the latest C++17 language and standard library features in Qt, possibly including some interesting changes to containers. Eventually, leveraging new introspection features of C++, we might even see the removal of the need for the UIC tool. Some proofs of concept for implementing Qt's meta-object system at run time have already been done.
Given that, the goal of Qt 6 is really to be a "boring" release that will make it easy to port existing Qt 5 code. Around that time, we can plan to celebrate the 25-year Silver Anniversary since the first public release of Qt 0.9 in 1995. As you can see, the Qt ecosystem is healthy and vibrant, a trend we expect to continue in 2019.