Qt Automotive Suite : Qt se positionne dans le domaine automobile

Qt est un framework complet, qui s’adapte très bien à diverses situations, notamment les systèmes informatiques d’infodivertissement embarqués dans les voitures actuelles (IVI). Plusieurs sociétés ont posé ce constat, après plus d’une vingtaine de projets achevés dans le domaine et des millions de véhicules équipés (la plupart des véhicules récents, notamment chez Fiat et ses filiales et chez Tesla, ainsi que sur le système Ford Sync 3). Lors de ces projets, ces sociétés ont créé divers outils et composants bien pratiques, mais chacune dans son coin : pour pousser Qt plus loin dans le domaine de l’IVI, il devenait important de réutiliser ces outils, pour que chacun puisse se spécialiser sans perdre son temps à développer cet environnement de travail depuis zéro. C’est ainsi qu’est né le projet Qt Automotive Suite, en partenariat entre la Qt Company, Pelagicore et KDAB : en rassemblant ces outils et composants, actuellement développés à gauche, à droite, sous une licence libre pour une bonne partie.

Une de leurs observations a été l’évolution du secteur : en quelques années, ces systèmes d’infodivertissement sont passés d’un affichage d’une à deux lignes couplé avec l’autoradio à des systèmes multimédias complexes, avec plusieurs écrans répartis dans l’habitacle. Le cycle de développement s’en est vu chamboulé : la sous-traitance complète de cette partie n’est plus possible, les constructeurs automobiles doivent s’intégrer plus dans le processus de développement, notamment afin de corriger les défauts qui ne deviennent visibles qu’en situation réelle. Une partie des outils de Qt Automotive Suite facilitent donc ce processus d’itérations rapides pour tester divers changements dans les applications — ce qui aide à fournir un produit fini de meilleure qualité.

Architecturalement, cette suite d’outils se compose d’une série de modules Qt, d’extensions à Qt for Device Creation (un outil propriétaire), d’un gestionnaire d’applications, en plus d’outils de développement, notamment intégrés à Qt Creator.

Gestionnaire d’applications et compositeur

Vu la taille des systèmes actuels, tout développer dans une seule application n’a pas vraiment de sens : le processus serait trop fragile. Les architectures modernes sont plutôt orientées multiprocessus, l’interface complète étant divisée en unités fonctionnelles relativement indépendantes. Un autre avantage est la simplification des mises à jour, puisque seules les parties de l’interface qui ont été modifiées doivent être transmises.

Ainsi, la suite comprend un gestionnaire d’applications, qui gère le cycle de vie complet de chaque application : installation, permissions accordées pour les diverses API, lancement et fermeture des applications, notamment quand les ressources disponibles deviennent trop faibles. Ce gestionnaire est intégré dans un compositeur Wayland, qui arrive en préversion technologique avec Qt 5.7 : ainsi, les concepteurs des interfaces pourront choisir exactement ce qu’ils veulent pour la répartition des applications sur les différents écrans disponibles.

Qt IVI : un accès aux API automobiles

Comme d’autres modules de Qt, IVI est prévu pour l’accès aux API spécifiquement développées pour le domaine automobile. Cette couche d’abstraction favorise la réutilisation de code par-delà les plateformes utilisées. Le même système d’extensions est utilisé qu’ailleurs dans Qt pour fournir l’accès aux API disponibles sur la plateforme courante. Il est aussi intégré au gestionnaire d’applications pour la vérification des permissions. Pour le moment, des implémentations sont disponibles pour GENIVI, QNX et AGL. Un module multimédia est en cours de développement, il devrait arriver fin du mois.

Outillage

Pelagicore a contribué au Qt Project l’un de ses outils dans le cadre de cette suite : QML Live. Il sert à mettre à jour très rapidement, en temps réel, une interface Qt Quick dans le cadre du développement : ainsi, expérimenter de nouvelles interfaces devient très facile.

Pour faciliter le débogage d’applications, KDAB a développé GammaRay pour l’introspection et la visualisation d’applications Qt. Dans le cadre de Qt Automotive Suite, l’outil sera profondément intégré dans Qt Creator, avec des extensions pour les parties IVI.

Disponibilité

Qt 5.7 est prévu pour la semaine prochaine, Qt Automotive Suite 1.0 devrait arriver peu de temps après (à la fin de ce mois). Le développement a lieu en grande partie selon le même modèle collaboratif que Qt, avec des dépôts Git accessibles au grand public, un espace de revue de code et une liste de diffusion pour le développement.

Sources et images : Announcing The Qt Automotive Suite, Branding by UX – Announcing Qt Automotive Suite.

Sortie de Qt Creator 4.0.1

Parallèlement à Qt 5.6.1, une nouvelle version de maintenant de Qt Creator vient de voir le jour : la 4.0.1. L’un des grands axes des correctifs porte sur CMake : ce type de projet est nettement mieux intégré depuis Qt Creator 4.0. Maintenant, l’EDI affiche une notification quand le cache CMake est altéré depuis l’extérieur de Qt Creator et entre en conflit avec les paramètres de Qt Creator.

Du côté Windows, les binaires des compilateurs sont plus facilement trouvés : Qt Creator peut détecter automatiquement les Microsoft Visual C++ Build Tools ; l’analyse statique Clang n’échoue plus en cherchant le binaire du compilateur.

Cette nouvelle version de Qt Creator est notamment installée avec Qt 5.6.1, mais aussi de manière autonome.
Voir aussi : la liste des changements.
Source : Qt Creator 4.0.1 released.

Sortie de Qt 5.6.1

Pas loin de trois mois après la sortie de Qt 5.6, une version avec un support à long terme, la version 5.6.1 est arrivée. Elle n’apporte aucune nouvelle fonctionnalité, mais bien des corrections de défauts et de sécurité : pas moins de 800 améliorations ont eu lieu depuis Qt 5.6.0 — attendues depuis longtemps par certains. Les bibliothèques tierces ont notamment été mises à jour, comme libpng (pour la lecture d’images au format PNG) ou Chromium (à la base du module Qt WebEngine), afin de profiter de leurs dernières corrections, tant pour les fonctionnalités que la sécurité.

Bon nombre de tickets ouverts sur l’application de suivi restent ouverts pour Qt 5.6 (QTBUG-18009 pour les vues, QTBUG-52901 pour Android, etc.), mais ils seront étudiés pour les prochaines versions correctives de Qt 5.6 : avec ces 800 commits, la 5.6.1 est déjà relativement grosse et il valait mieux envoyer ces correctifs rapidement, plutôt que d’attendre de les avoir tous corrigés (ce qui aurait induit un délai de plusieurs mois supplémentaires).

Voir aussi : les changements apportés, module par module.
Télécharger Qt 5.6.1.
Source : Qt 5.6.1 Released.

Sortie de Qt 5.7 RC

Qt 5.7 RC vient d’être annoncé, avec un certain retard sur le planning (Qt 5.7 était attendu pour avril). La version finale devrait arriver dans les prochaines semaines, en fonction des défauts trouvés dans cette nouvelle préversion : idéalement, elle devrait être disponible le 15 juin, soit dans moins de deux semaines. Avec les retards de Qt 5.6 et 5.7, pour le moment, la prochaine version (qui sera numérotée 5.8) n’est pas encore précisément planifiée, mais elle devrait venir d’ici à la fin de l’année.

En quelques mots, cette version apporte beaucoup d’éléments au niveau de Qt. Par exemple, les compilateurs non compatibles avec C++11 ne sont plus pris en charge, ce qui permet de nettoyer certaines parties du code. De nouveaux modules sont disponibles, comme Qt 3D (un moteur 3D pour Qt et Qt Quick) ou Qt Quick Components 2. D’autres modules arrivent en préversion (Qt Wayland, Qt SCXML, Qt GamePad, Qt Serial Bus). Pour plus de détails, consultez l’annonce de début d’année.

Source : Qt 5.7.0 Release Candidate Available.
Voir aussi : New Features in Qt 5.7.

Verdigris : Qt sans générateur de métaobjets

Le générateur de métaobjets de Qt, moc, est l’objet de recherches et de débats, ces derniers temps. L’année dernière, CopperSpice a été annoncé comme une bifurcation de Qt 4, l’objectif premier étant de se débarrasser du moc, en le remplaçant par des macros bien plus longues à écrire dans le code. Il y a peu, le mainteneur actuel du moc l’a défendu, en mettant en avant ses nombreux avantages par rapport à l’approche de CopperSpice, notamment pour l’écriture du code ou sa performance. Ce dernier revient à la charge : après avoir proposé une implémentation du moc basée sur des extensions du compilateur Clang ou la réflexion, il présente une autre approche qui exploite exclusivement les mécanismes de base des compilateurs C++ modernes.

Sous le nom de Verdigris se cache une implémentation du moc exclusivement à base de macros et d’expressions constantes de C++11 (entièrement compatible avec Qt 5). Il utilise une syntaxe très similaire à CopperSpice, mais, contrairement à ce dernier, génère toutes les données des métaobjets lors de la compilation (CopperSpice le fait à l’exécution du programme). Les avantages en performance sont multiples : lors de la compilation, un programme Verdigris prendra un peu moins de temps que son équivalent Qt direct… mais beaucoup moins que la version CopperSpice ! De plus, à l’exécution, tant Qt que Verdigris ont des surcoûts très faibles par rapport à CopperSpice, puisqu’ils ont généré l’entièreté des métaobjets à la compilation.


Ces différences d’implémentation ont également des impacts sur la compatibilité binaire, que tente de garantir Qt : l’approche suivie tant par Qt et Verdigris a cet objectif en tête (ce qui permet de changer la version des bibliothèques utilisées sans casser l’application), ce qui les empêche de réaliser certaines optimisations. Au contraire, CopperSpice cherche à optimiser certains appels de fonction et copie in extenso les données nécessaires à plusieurs endroits. Effectivement, CopperSpice est plus rapide pour certaines fonctionnalités, comme l’émission de signaux ; par contre, ces avantages sont contrebalancés par des fichiers exécutables bien plus gros et par un temps de chargement plus élevé.

Côté développeur, tant CopperSpice que Verdigris ont des syntaxes bien plus compliquées que celles permises par l’emploi d’un générateur de code : pour déclarer un dérivé de QObject, là où Qt se satisfait d’une macro Q_OBJECT, insérée dans la définition de la classe, CopperSpice impose une certaine redondance en donnant le nom de la classe en argument, Verdigris utilise même deux macros (l’une pour déclarer l’objet, l’autre pour générer le métaobjet correspondant).

Ces nouveaux développements montrent une fois de plus qu’il est possible de se passer du moc, mais en réalisant certains compromis, toujours défavorables en termes de syntaxe pour le moment. Ensuite, les détails d’implémentation montrent des résultats très différents en termes de compatibilité avec Qt (CopperSpice reste au niveau de fonctionnalités de Qt 4.8) et de performance.

Source : Verdigris: Qt without moc.
Voir aussi : les sources de Verdigris, le tutoriel.

Sortie de Qt Creator 4.0

Peu de temps après la RC, Qt Creator est maintenant disponible en version 4.0. Comme pour Qt, Digia a mis à disposition certaines fonctionnalités qui étaient autrefois réservées aux clients commerciaux, comme un meilleur profileur QML et l’intégration des tests automatisés dans l’interface — des parties du Qt Quick Designer l’ont été dans Qt Creator 3.6, comme les éditeurs de connexions et de chemins.

Le profileur QML vient notamment avec un diagramme en flammes pour décortiquer les portions du code qui prennent le plus de temps à l’exécution. Le thème par défaut de Qt Creator est maintenant entièrement plat (le précédent est toujours disponible dans les options).

L’intégration des projets CMake se fait maintenant plus naturellement, puisque l’outil est appelé dès que cela est nécessaire. La configuration des kits, avec notamment la version de Qt, se fait automatiquement.

Le modèle de code Clang, utilisé pour analyser le code C++ et fournir notamment la coloration syntaxique et l’autocomplétion, est activé automatiquement dès que l’extension est chargée (cette extension est toujours marquée comme expérimentale : Qt Creator ne l’active pas par défaut).

Côté débogage, bon nombre de problèmes avec LLDB ont été corrigés, notamment avec la version livrée dans Xcode 7.3.

Le mode Analyse a complètement disparu : il est maintenant intégré au mode Débogage. Ce dernier donne maintenant accès à une pléthore d’outils, intégrant un débogueur, l’analyseur statique de Clang, memcheck, callgrind et les outils de profilage QML.

Télécharger Qt Creator 4.0
Source : Qt Creator 4.0.0 released.

Malaise dans la communauté Qt par rapport à l’édition commerciale

À ses débuts en 1991, Qt était un projet exclusivement commercial, avant de voir ses sources disponibles en 1995 sous une licence presque libre (la redistribution des sources modifiées n’était pas autorisée). La situation n’a posé de problème qu’en 1998, quand KDE est devenu un environnement de bureau majeur : la licence alors adoptée était la QPL, libre mais incompatible avec la GPL. En même temps, les développeurs de KDE ont obtenu que, si plus aucune version libre de Qt ne sortait en un an, la dernière tomberait automatiquement sous une licence très permissive, de type BSD — un accord toujours valable. L’histoire de Qt l’a alors porté vers la GPL, puis plus récemment vers la LGPL et, dernièrement, une mise à jour vers la dernière version de ces licences.

En d’autres termes, Qt a depuis longtemps baigné dans le logiciel libre, en acceptant les contributions de l’extérieur. Depuis cinq ans, cette organisation s’est même formalisée autour du Qt Project : tout le développement a lieu en public, toute personne externe peut prendre part au développement et même à la gouvernance du projet.

Digia a lancé un programme d’unification de l’offre Qt, en rapprochant les éditions libres et commerciales de Qt. Ce mouvement a notamment libéré bon nombre de fonctionnalités commerciales de Qt. Un autre impact a été la fusion des sites Web : qt.io est censé présenter les deux éditions. C’est actuellement la pierre d’achoppement : la partie libre est de moins en moins présente sur le site officiel, en présentant plus Qt pour les utilisateurs que pour les potentiels contributeurs.

Les griefs ne s’arrêtent pas à ce manque de visibilité : le site met en avant les éditions commerciales, en reléguant le côté libre de côté. Pire encore, quand les aspects libres se présentent, le site n’hésite pas à pointer du doigt les possibles problèmes légaux avec les licences libres… même si ces soucis ne pourraient concerner qu’une très faible minorité des utilisateurs.

Source : [Development] Qt-Project misrepresented on qt.io.

Sortie de PyQt 5.6

Riverbank a publié la dernière version de sa couche de liaison Qt pour Python, PyQt, en version 5.6. L’amélioration principale est une pleine compatibilité avec Qt 5.6. De plus, la distribution se fait maintenant préférentiellement par wheels, sur toutes les plateformes (les installateurs sous la forme d’EXE ne seront plus disponibles pour Windows après cette version).

Plus en détail, le module Qt WebEngine Core a été ajouté pour donner un accès plus direct au moteur Chromium de Qt WebEngine, avec une API de plus bas niveau. Quelques fonctions manquantes par rapport à Qt ont été ajoutées : qt_set_sequence_auto_mnemonic() dans Qt GUI, MouseLock dans QWebEnginePage.Feature, WA_DontShowOnScreen.

Plus intéressant pour les utilisateurs d’environnements de développement intégrés, des fichiers PEP 484 sont maintenant générés. Ils intègrent une indication sur les types attendus par les fonctions lors de leur appel, ce qui permet de détecter bon nombre d’erreurs avant même d’exécuter son application.

Source : PyQt v5.6 Released

PySide 2 : de retour sous l’ombrelle du Qt Project

Qt est un framework C++ principalement connu pour la création d’interfaces graphiques, c’est notamment ce qui lui a valu bon nombres de couches d’accès depuis d’autres langages, principalement Python. Il en existe deux : PyQt et PySide. Historiquement, PyQt est arrivé en premier, mais sous licence GPL ou commerciale — ce qui ne convient pas à bon nombre de projets, la famille de licences GPL étant prévue pour empoisonner tout le code qui l’utilise (copyleft). Nokia a donc lancé le développement de PySide, qui est disponible sous une licence bien plus permissive : la LGPL.

Cependant, dès 2011, les développeurs avaient des doutes sur la viabilité de PySide : Nokia venait d’arrêter de les financer. Le projet n’a plus pu avancer à un bon rythme les années d’après, même en rejoignant l’infrastructure du Qt Project. En 2015, il a été déclaré officiellement abandonné. Au niveau technique, PySide n’a jamais pu être porté tel quel vers Qt 5, il s’est limité à Qt 4, à cause notamment de la nouvelle architecture modulaire.

Peu après l’annonce de mort cérébrale, un développeur indépendant a repris le travail vers un PySide 2. Le projet revit petit à petit.

Depuis lors, la Qt Company a vu son intérêt grandir dans le projet et s’apprête à y consacrer plusieurs développeurs à temps plein, ainsi que d’investir dans l’infrastructure nécessaire, de telle sorte que PySide devienne une partie intégrante des nouvelles versions de Qt. L’intérêt principal est de fournir une couche de liaison Python sous une licence libre — la LGPL —, en accord avec les derniers changements à ce sujet dans Qt. Évidemment, l’objectif est aussi de fournir PySide sous une licence commerciale, ce qui nécessite l’accord des développeurs existants de PySide.

Pour la technique, l’avenir de PySide passera probablement par une grande réécriture de son code. En effet, une bonne partie utilise Shiboken, un générateur de code qui doit analyser une bonne partie de la syntaxe C++ du code de Qt, un exercice qui deviendra de plus en plus difficile avec Qt 5.7 et l’exploitation plus importante de C++11. Une possibilité serait d’exploiter Clang, plus particulièrement sa partie d’analyse syntaxique et sémantique du code C++.

Source : Bringing pyside back to Qt Project.

Sortie de Qt 5.7 Beta

Pas loin d’un mois et demi après la première préversion, Qt 5.7 Beta pointe le bout de son nez. En quelques mots, elle apporte bon nombre de nouveaux modules, exploite C++11 dans le code de Qt et dans son API, tout en proposant une unification au niveau des fonctionnalités entre les versions libre et commerciale.

Qt existe dans sa forme actuelle uniquement grâce à C++, tant dans ses fondations (parfois décriées) que dans sa performance à l’exécution. Le langage évolue, Qt le suit pour profiter des dernières fonctionnalités — avec un certain délai, pour ne pas abandonner en route ceux qui ne peuvent pas mettre à jour leur compilateur (notamment en gardant une version avec un support à long terme). Ainsi, dès Qt 5.7, la compatibilité avec C++98 est abandonnée, laissant place à un minimum de C++11. Des fonctionnalités comme le mot clé auto ou les fonctions anonymes trouvent maintenant place dans le code de Qt et dans son API.

Au niveau des modules, certains préversions technologiques atteignent leur maturité : Qt Quick Controls 2 et Qt 3D (pour ce dernier, après des années de développement !). De nouvelles préversions font également leur apparition : Qt Wayland Compositor, Qt SCXML, Qt SerialBus et Qt Gamepad.

Les changements de licence ont déjà fait couler pas mal d’encre. En résumé, la plupart du code de Qt sera disponible sous licence LGPLv3 ou GPLv2, les derniers modules libérés seront sous licence LGPLv3 ou GPLv3, Qt Creator et d’autres outils sous GPLv3 uniquement — ou, comme toujours, sous licence commerciale. Malgré la complexification de l’offre qui donnera du fil à retordre aux services juridiques, ces licences donnent suffisamment de garanties à Digia pour libérer plus de fonctionnalités dans l’édition libre de Qt.

Cette fois, contrairement à la précédente préversion, cette version est livrée avec des binaires prêts pour les tests. Elle est aussi intégrée aux installateurs de Qt Creator 4.0 RC.

Source : Qt 5.7 Beta Released.