Qt 6: Ein steiler Weg zur neuen Hauptversion
Seite 4: Schwere Entscheidung
Wer Anwendungen mit Qt 5.x erstellt hat, steht vor der Frage, wie er damit in Zukunft umgehen soll. Eine Portierung zu Qt 6 ist aus technischer Sicht nicht immer möglich, beispielsweise für die von Qt 6.0 nicht mehr oder noch nicht unterstützten Plattformen.
Hinzu kommt, dass der von Nokia im Rahmen der Einbindung diverser Mobilfunktionen losgetretene Wildwuchs bei den Modulen in Qt 6.0 nur teilweise zur VerfĂĽgung steht. Von Haus aus bringt das Framework folgende Pakete mit: Qt Concurrent, Qt Core, Qt Core Compatability APIs, Qt D-Bus, Qt GUI, Qt Help, Qt Network, Qt OpenGL, Qt Print Support, Qt QML, Qt Quick, Qt Quick 3D, Qt Quick Controls, Qt Quick Layouts, Qt Quick Timeline, Qt Quick Widgets, Qt Shader Tools, Qt SQL, Qt SVG, Qt Test, Qt UI Tools, Qt Wayland, Qt Wayland Compositor, Qt Widgets und Qt XML.
Im Installer lassen sich zusätzlich sechs weitere Pakete nachinstallieren: Qt 3D, Qt Image Formats, Qt Network Authorization, M2M package: Qt CoAP, M2M package: Qt MQTT und M2M package: Qt OpcUA.
Programme, die nicht gelistete Packages verwenden, lassen sich derzeit nicht portieren. Wer umgekehrt ĂĽberprĂĽfen will, welche Module nicht in Qt 6.0 enthalten sind, findet eine Liste in der Dokumentation.
Immerhin möchte die Qt Company einige Module in Folgeversionen nachreichen. Für Version 6.1 sind fünf geplant: Active Qt, Qt Charts, Qt Quick Dialogs (File dialog), Qt ScXML und Qt Virtual Keyboard.
Version 6.2 ergänzt nach jetzigem Planungsstand fünfzehn zusätzliche Module: Qt Bluetooth, Qt Data Visualization, Qt Lottie Animation, Qt Multimedia, Qt NFC, Qt Positioning, Qt Quick Dialogs, Qt Remote Objects, Qt Sensors, Qt SerialBus, Qt SerialPort, Qt WebChannel, Qt WebEngine, Qt WebSockets und Qt WebView.
Obwohl die Vorhersage zu Releasedaten selten exakt ist, existieren Zielvorgaben: Laut dem offiziellen Fahrplan soll Qt 6.1 Ende April erscheinen. FĂĽr Qt 6.2 ist Ende September als Auslieferungsdatum avisiert.
Lizenz zum Ärgern
Ein weiteres Ärgernis beim Umstieg sind sogenannte Enhancements im Bereich der Lizenzierung. Die Qt Company stellt neben der für kommerzielle Anwendungen im Allgemeinen nicht tragbaren GPL-Lizenz zusätzlich eine LGPL-Variante zur Verfügung. Allerdings setzt das Unternehmen seit einiger Zeit auf die LGPL v3, was insbesondere für Embedded-Systeme eine lästige Einschränkung bedeutet, da die Lizenz Entwickler dazu zwingt, Endanwendern das Installieren der kompilierten Binärdateien auf die Zielhardware zu ermöglichen.
Hintergrund ist die sogenannte Tivoisierung: Der Hersteller der Festplatten-Set-Top Box TiVo stellte Software bereit, die Nutzer zwar neu kompilieren, aber nicht auf der Box installieren konnten.
Seit Jahr und Tag existiert eine kommerzielle Version von Qt ohne die in der LGPL formulierten Einschränkungen. Die negative Neuerung dabei ist, dass die Qt Company sie ab Qt 6 ausschließlich im Abonnement anbietet und Kunden das Framework nach der Abokündigung nicht mehr benutzen dürfen.
Das bedeutet, dass sie anschließend keine Anpassungen der Applikation mehr vornehmen dürfen. In der Lizenz-Erklärung ist sogar die Verbreitung der Applikation explizit untersagt:
Can I continue to distribute my application after my commercial license has expired?
No. You are not permitted to further distribute your applications.
Besitzer einer Perpetual License von Qt 5 sind daher – insbesondere aufgrund der langen Supportdauer des LTS-Release Qt 5.15 – gut beraten, dem Umstieg eine geringe Priorität zuzuweisen. Aufgrund der zahlreichen negativen Reaktionen auf die geänderten Lizenzbedingungen ist nach Meinung des Autors mit Nachbesserungen zu rechnen.
Mit dem "New start-up/small business Qt offering" kehrt die einst als "Indie Licence" bezeichnete Minimalversion der kommerziellen Lizenz zurĂĽck. Sie kostet 499 US-Doller im Jahr, ist aber nur fĂĽr Unternehmen mit weniger als fĂĽnf Angestellten und einem Jahresumsatz unter 100.000 US-Dollar nutzbar.
Vorsichtiger Umstieg
Diejenigen, die sich nach Analyse der Ausschlusskriterien für das Umstellen ihrer Anwendungen auf Qt 6.0 entscheiden, erwartet ein umfangreicher Portierungsprozess. Empfehlenswert ist, zunächst auf Qt 5.15 umzustellen. Da das Release im Vergleich zu den Vorgängern strenger mit veralteten APIs umgeht, ist der Schritt ein erster Test für den Sprung zur nächsten Hauptversion.
Entwickler sollten mit Unit-Tests alle Deprecation-Warnungen von Qt 5.15 entfernen, bevor sie sich an die Umstellung auf Qt 6.0 wagen. Dabei sei die von Diomidis Spinellis in "Code Reading" [1] vorgeschlagene Vorgehensweise empfohlen. Entwickler sollten im ersten Schritt davon ausgehen, eine funktionierende Anwendung vor sich zu haben, und sie mit Qt 6.0 kompilieren. Der Compiler liefert mit den Fehlerhinweisen Breadcrumbs, die bei der Anpassung der APIs helfen. Wer keine zusätzlichen Funktionen hinzufügt, sollte einen ungestörten Weg zu einer funktionierenden Anwendung haben.
Erfahrungsgemäß entfällt ein großer Teil der Anpassung auf Kernel-Funktionsklassen des Frameworks. Die Qt Company bietet aus diesem Grund analog zur Umstellung von Qt 4 auf Qt 5 ein als Qt 5 Core Compatibility bezeichnetes Modul an, das weitgehend abwärtskompatible Versionen der häufigsten Logikklassen bereitstellt. In QMake erfolgt seine Einbindung durch das Hinzufügen der Moduldeklaration: QT += core5compat.
Dort finden sich zum Start gut 25 Klassen, darunter einige zur Textverarbeitung und eine Neuimplementierung der QLinkedList. Daneben existieren QRegex und ein XML-Parser. Eine vollständige Inhaltsangabe findet sich in der Dokumentation des Kompatibilitätsmoduls.