KDE Plasma Is About To Fix Desktop Theming
Union est un projet de système de style unifié pour KDE, visant à résoudre la fragmentation historique des multiples frameworks de rendu (SVG, QtQuick, QtWidgets, Kirigami) en introduisant une couche intermédiaire abstraite, avec CSS comme format d’entrée principal.

SYNTHÈSE STRUCTURÉE
Le problème historique de la fragmentation des styles dans KDE
KDE souffre d’une accumulation de systèmes de style indépendants, chacun développé pour répondre à des besoins spécifiques à différentes époques. L’intervenant illustre ce chaos avec quatre applications (Kate, Plasma, NeoChat, KClock) qui, bien que toutes « KDE », utilisent des frameworks de rendu totalement différents. Il résume la situation par une référence à la bande dessinée XKCD 927 : « Il y avait d’anciens systèmes. Les gens voulaient corriger leurs problèmes. Ils ont créé un nouveau système. Puis ils ont réalisé qu’il avait des problèmes, et ont créé un autre système. Et encore un autre. Et maintenant nous avons 70 frameworks différents. » Ce n’est pas une exagération : chaque couche (SVG Plasma, QtWidgets, QtQuick Controls, Kirigami) a sa propre logique de rendu, rendant la cohérence visuelle extrêmement difficile à maintenir.
Pourquoi une unification directe est impossible
L’intervenant explique que le problème n’est pas un manque de puissance, mais une incompatibilité fondamentale entre les piles de rendu. « Certains types de design sont soit plus faciles, soit uniquement possibles dans certains frameworks. » Par exemple, l’effet de flou radial du thème Oxygen (qui nécessite des opérations de rendu complexes) est quasiment impossible à reproduire à l’identique sur toutes les technologies. Actuellement, KDE utilise une couche de compatibilité qui fonctionne, mais qui bride les performances et empêche d’exploiter pleinement chaque moteur de rendu. L’intervenant précise : « En essayant de faire fonctionner ces choses ensemble, on retient tout le monde. »
L’architecture en trois couches de Union
Union repose sur trois composants distincts :
- Couche d’entrée (Input Layer) : des plugins lisent un format de description de style (initialement SVG Plasma, désormais CSS) et le transforment en une description abstraite.
- Couche intermédiaire (Intermediate Layer) : un modèle de données universel, comparable à du bytecode Java. Il contient la description de ce qui doit être rendu, sans dépendre d’une technologie spécifique. C’est le cœur du projet.
- Couche de sortie (Output Layer) : des plugins convertissent cette description abstraite en commandes de rendu adaptées à chaque pile (QtQuick, QtWidgets, SVG Plasma, Kirigami, etc.).
L’intervenant insiste sur le rôle crucial de la couche intermédiaire : « Tout dépend de la couche intermédiaire. Quelles informations sont conservées, lesquelles sont perdues. Et comment créer un système qui permette de convertir facilement entre différents formats, tout en gardant la liberté de faire le style que l’on souhaite. »
Le passage du SVG au CSS comme format d’entrée
Initialement, Union utilisait le SVG Plasma comme format d’entrée, car il était familier aux développeurs KDE. Mais les retours des designers ont été négatifs : « Obtenir un SVG parfait pour que tout fonctionne correctement est beaucoup plus difficile qu’il n’y paraît, avec un certain nombre de bizarreries spécifiques à Plasma. » L’intervenant a donc basculé vers le CSS, qu’il avait envisagé dès le départ. Le CSS est bien connu, a une syntaxe raisonnable et est déjà utilisé pour le style dans d’autres contextes (navigateurs, toolkits). Pour l’implémenter en C++, il a créé une bibliothèque spécifique : CXS Rust parser library, qui enrobe le parseur CSS du projet Servo (Rust) et expose une interface C++.
L’implémentation de Breeze en CSS comme preuve de concept
Pour valider l’approche, l’équipe a développé une version complète du thème Breeze en utilisant Union et CSS. L’intervenant justifie ce choix : « Nous voulions une base de référence connue pour travailler, similaire à ce que nous avions fait avec l’entrée SVG Plasma. » Cela ne signifie pas que Breeze sera le seul thème supporté, mais cela permet de limiter le périmètre initial et d’éviter de « supporter tout dès le départ, ce qui n’aurait jamais abouti ». L’objectif est de sortir rapidement une version testable, puis d’étendre les capacités.
Les différences subtiles entre les implémentations actuelles de Breeze
L’intervenant montre un exemple frappant : quatre implémentations différentes du bouton Breeze (QtWidgets, QtQuick Controls 1, QtQuick Controls 2, Kirigami) présentent des variations visuelles, certaines intentionnelles (comme le style de spinbox différent entre QQC2 et le widget style), d’autres non. « Tous ces boutons sont très légèrement différents. Certains beaucoup plus que d’autres. C’est un problème. » Union vise à réduire ces écarts en fournissant une source unique de description, même si l’intervenant admet que « des incohérences subsisteront probablement toujours, mais au moins un peu moins. »
L’état d’avancement et les prochaines étapes
Le projet prévoit une première version avec Plasma 6.7, qui sera « la meilleure version depuis très, très longtemps » selon l’intervenant. Actuellement, l’implémentation de Breeze avec Union est « difficile à distinguer de la version originale ». Cependant, cette première version ne couvrira que la sortie QtQuick. Les priorités suivantes sont :
- Finaliser un prototype de sortie QtWidgets (un
QStylecomplet). - Étendre le support au style de Plasma lui-même (actuellement en SVG), avec l’ambition que le CSS devienne le format principal à long terme.
- Permettre aux créateurs de thèmes tiers de travailler plus facilement, sans avoir à maîtriser toutes les piles technologiques.
CONCEPTS CLÉS
- Couche intermédiaire (Intermediate Layer) : Modèle de données abstrait qui décrit l’apparence d’un élément sans référence à une technologie de rendu spécifique. C’est le point central de Union qui permet la conversion entre formats d’entrée et de sortie.
- Pile de rendu (Rendering stack) : Ensemble des technologies utilisées pour afficher une interface (ex : QtQuick avec OpenGL, QtWidgets avec le moteur de style natif, SVG Plasma avec le rendu vectoriel). Chaque pile a ses propres capacités et limitations.
- QStyle : Classe de base de Qt permettant de personnaliser l’apparence des widgets. Union vise à produire un
QStylecomplet à partir de sa description CSS. - Plasma SVG styling : Système de thème historique de Plasma utilisant des fichiers SVG pour décrire l’apparence des éléments de l’interface (panneaux, fenêtres, etc.). Union ne le remplace pas, mais propose une alternative CSS plus moderne.
CONCLUSION
Union n’est pas un énième framework de style, mais une tentative pragmatique de résoudre la fragmentation historique de KDE en introduisant une couche d’abstraction. L’approche est réaliste : elle ne cherche pas à remplacer les systèmes existants, mais à les unifier via un langage commun (CSS) et un modèle de données partagé. Le passage du SVG au CSS, motivé par les retours des designers, montre une volonté d’écouter les utilisateurs finaux du système (les créateurs de thèmes). Si Union tient ses promesses, il pourrait considérablement simplifier la création de thèmes cohérents pour KDE, tout en préservant la liberté de personnalisation qui fait la force de l’écosystème. Comme le dit l’intervenant : « Personne ne veut voir disparaître les thèmes Windows 7, Windows 98, Mac OS ou Oxygen. Ni même le th