With Qt 5.7 and 5.8 released we have a completely new baseline for Qt 5 based applications and devices. In this blog, I want to provide a roadmap update on what we are currently working on in the Qt R&D and what the future directions are.
About a year ago I provided a roadmap update for 2016. Looking back the past year, I am very happy and proud that we have been able to develop and deliver all those great features and improvements. I would like to thank each and every Qt developer for their input. While most of the functionality is created by The Qt Company, we also have many community contributors who have provided multiple extremely valuable contributions throughout the years. In addition to those contributing code, we have also a large number of people active in the Qt Project forums, on mailing lists, as well as reviewing code and testing the Qt development releases. Together we create the Qt framework. Thanks!
Throughout the lifetime of Qt 5 we have been steadily providing a new feature release of Qt every six months. While it has taken a bit longer than anticipated to release some versions, we have been able to keep this heartbeat steadily. Our plan is to continue to do so in the future. Therefore, after Qt 5.8 we will release Qt 5.9, Qt 5.10 and Qt 5.11 with roughly six month intervals.
Despite Qt 5.8 just being released, we already have the features of Qt 5.9 frozen and the alpha release will be available very soon. For those interested in taking a closer look into Qt 5.9 features, please check out the New Features of Qt 5.9 wiki page. Our target is to release Qt 5.9 in May 2017. Parallel to finalization of Qt 5.9, the development of Qt 5.10 is ongoing. Everything that is merged now to the dev branch of Qt is to become part of the Qt 5.10 release planned for November 2017. After Qt 5.10 is branched from dev, development of Qt 5.11 starts with planned release in May 2018.
New Features in Qt 5.9
Qt 3D was first released with Qt 5.7 and in Qt 5.8 the focus was mostly on stability and performance. With Qt 5.9 we are providing many new features which significantly improve the functionality of Qt 3D. Notable new features include support for mesh morphing and keyframe animations, using Qt Quick items as a texture for 3D elements, as well as support for physically based rendering and particles. There are also multiple smaller features and improvements throughout the Qt 3D module.
We are continuously focusing into improving graphics performance and Qt 5.9 brings new graphics features focusing especially on performance optimization. Applications utilizing OpenGL shaders will benefit from new shader disk cache, which will significantly reduce the initialization time of OpenGL shaders. With our measurements we have seen up to 10x improvement in shader performance compared to Qt 5.6 and up to 8x improvement compared to Qt 5.8 in some commonly used embedded devices. Other graphics related improvements in Qt 5.9 include sharing of resources such as bitmaps between processes reducing memory consumption in multiprocess systems, support for Wayland XDG Shell version 6 and support for Wayland IVI extensions.
We have further tuned Qt Quick Controls functionality and added many new features improving the usage across desktop, mobile and embedded platforms. With Qt 5.9 we are adding ScrollView, an editable ComboBox and multi-touch support, to name a few of the most interesting new features. The new ScrollView provides flicking and non-interactive scroll indicators on touch and switches to interactive scroll bars when interacted with a mouse pointer. The editable ComboBox allows typing in auto-completed values using keyboard and multi-touch support allows interacting with multiple buttons and sliders at the same time.
Qt Network and especially QNetworkAccessManager (QNAM) have been improved in Qt 5.9. Previously, the behavior when encountering an HTTP redirect had to be defined per HTTP request by setting an attribute. Now there is also a new redirect policy that can be set globally in QNAM. If redirect behavior is to be specified in multiple ways, the first priority is defined per request with a policy, the second is per request with an attribute and finally the global QNAM policy takes control. Another major improvement is the HTTP Strict Transport Security (HSTS) support. HSTS is a web security policy, described in RFC6797, that allows a web server to declare that user agents should only interact with it using secure HTTPS connections.
We have some platform specific improvements as well as support for new platforms and compilers coming with Qt 5.9. Especially macOS is receiving many improvements, as we are updating the macOS platform plugin in order to support modern and future features of the operating system, especially on the graphics side. For Windows users, Qt 5.9 targets to bring support for the new VS2017 compiler. We may also be offering pre-built binaries for VS2017 with Qt 5.9 (depending on when VS2017 is released). With Qt 5.9 we are re-introducing support for INTEGRITY allowing creation of safety critical systems with Qt on top of the INTEGRITY RTOS.
These are examples of some of the new things coming with Qt 5.9, for full list of features please check http://wiki.qt.io/New_Features_in_Qt_5.9.
Directions for Qt 5.10 and Beyond
After the branching of Qt 5.9 the dev branch now contains what will become Qt 5.10. It is planned to be released in November 2017 and its development has already started. We are currently finalizing the development priorities and here are some items we have been considering to do for Qt 5.10.
Qt is very widely used with over one million developers and a vibrant ecosystem. Sometimes a user just starting with Qt may find it a bit challenging to get going. One reason for this challenge is the fact that Qt is so versatile – we often offer multiple ways of developing applications. Sometimes it may also happen that parts of our documentation and examples are slightly outdated or do not clearly highlight what is the best approach for the user. While the work with documentation and examples is a constant effort, with Qt 5.10 we are planning to have a further push to improve the experience of getting started with development of Qt application and devices.
Running Qt applications in a browser via Native Client (NaCl) has been possible since 2009 and since Qt 5.8 VNC can be used for remote control of Qt applications. However these options are often not as convenient as desired. With Qt 5.10 we are planning to support streaming of Qt Quick application UIs over a network to a browser using WebGL. This streaming of OpenGL commands will allow using a common browser as a remote display of a Qt application running e.g. in a nearby embedded system or far across a network. Input from touch/mouse as well as keyboard is transmitted back to the Qt application. WebGL streaming will be implemented as a platform plugin in Qt 5.10. The streaming plugin converts all painting commands to WebGL commands and transmits the streams to clients. In turn those clients transmit user input back. Clients can be Qt applications or any web browser capable of showing WebGL 1.0.
On the graphics domain we are working with some nice additions targeting Qt 5.10. The first one being support for arbitrary path rendering (i.e. shapes) in Qt Quick. This allows declaratively specifying complex shapes built from lines, curves and arcs directly in QML and rendering them in an accelerated manner. Continuing on the approach started with the scenegraph modularization in Qt 5.8, the solution is expected to have multiple backends internally. For instance, NVIDIA-based systems will be able to utilize the GL_NV_path_rendering OpenGL extension transparently to the applications. The second new item is to provide basic Vulkan enablers in Qt. These allow creating Vulkan-capable windows and integrating code performing rendering with Vulkan into Qt C++ applications on multiple platforms, while abstracting and hiding the platform and windowing system specific bits. The third item we are researching is to use modern OpenGL features in Qt. Especially those offered by OpenGL ES 3.2 are quite interesting to improve the Qt Quick scenegraph performance and to potentially introduce new features like e.g. built-in support for compressed textures.
In the 3D area, we recently received a major contribution from NVIDIA, who contributed their complete 3D UI development tooling to Qt. During the coming year we will develop the tooling and its Qt integration further to enable smooth creation of 3D UIs for Qt applications. We will improve the existing integration into Qt and introduce more Qt functionality within the tooling itself. In the long term, we are also aiming to port the tooling to fully leverage Qt to support Mac and Linux hosts for development (initially the tool is for Windows only). For deployment the tool will support all desktop, embedded and mobile platforms generally supported by Qt. To check out what is already possible with the tool, please read the the recent announcement blog post for Qt 3D Studio.
Patch Releases and Long-Term Support
In addition to feature releases we make patch releases providing improvements to functionality introduced in those new feature releases. The primary purpose of a patch release is to provide a collection of bug fixes to issues found in the .0 feature release. Typically, the first patch release contains many fixes which were already completed at the time of the .0 release, but were not considered critical. The bug fixes done after the .0 release will end up in the next patch level release, as well as merged up to the next feature release.
Unfortunately, we have not been as efficient in providing the patch releases as we would like to. For Qt 5.7 we only created one patch release in December, almost 6 months after the Qt 5.7.0 release. We are currently renewing the CI system infrastructure, which will increase the capacity of the Qt CI system and allows us to make more patch releases from Qt 5.9 onwards. Unless there are significant security or other issues found, we are not planning to provide any patch releases for Qt 5.8 to make sure that we release Qt 5.9.0 with the planned schedule. Qt Support will assist customers to overcome possible issues found in Qt 5.8.0 release.
For Qt 5.6 LTS we have already provided two patch level releases adding quite a lot of improvements. Going forward we will make less changes to the Qt 5.6 LTS version. Since Q4/2016 we have already reduced the number of fixes going into the 5.6 branch. While each fix as such is beneficial, they are also possible risks for behavior changes and regressions, which we want to avoid in LTS releases. Next patch release, Qt 5.6.3 LTS, is planned to contain only fixes for critical bugs and security issues. The planned timing of Qt 5.6.3 is after Qt 5.9 has been released.
We are considering possibilities to extend support of Qt 5.9. The decision has not yet been made whether it should be a generic LTS or something that is provided only for selected platforms (e.g. embedded only). In any case we intend to create more patch releases for it than we have been able to do for Qt 5.7 and 5.8. The ongoing improvements and increasing the capacity of our CI system will help achieve this.
During the coming months we will be hosting several webinars about key features in Qt 5.8. There will also be many blog posts about the new innovations in Qt targeting Qt 5.9 and Qt 5.10. If you want to learn more about Qt, please contact our sales teams or join the discussion in the Qt mailing lists and developer forums. We are always delighted to see new contributors in the Qt Project as well as feedback to the pre-releases of Qt via bugreports.
If you are interested in working with us to shape the future of Qt, we have many open positions at The Qt Company.