URL: https://linuxfr.org/news/sortie-de-kde-frameworks-5 Title: Sortie de KDE Frameworks 5 Authors: ariasuni BAud, bubarđŠ„, Nils Ratusznik, Gof, palm123, esdeem, Mali, Nicolas Casanova, ChetManley, Axone, NĂżco, claudex et Xavier Vello Date: 2014ćčŽ06æ18æ„T10:39:37+02:00 License: CC By-SA Tags: kde, kde5 et cadriciel Score: 81 KDE Frameworks 5 (KF5) est sorti le 7 juillet 2014 ! Pour rappel, KF5 câest le rĂ©sultat de 3 ans dâefforts pour modulariser les KDElibs, les bibliothĂšques utilisĂ©es par la plupart des logiciels KDE. Ă cette occasion, elles ont Ă©tĂ© migrĂ©es vers Qt5 et amĂ©liorĂ©es. Une itĂ©ration majeure donc, mais une Ă©volution et pas une rĂ©volution, ce qui facilite la transition. La modularisation est un objectif de longue date pour rendre les KDElibs utiles aux dĂ©veloppeurs Qt. En effet, les bibliothĂšques KDE sont, au fur et Ă mesure de leur Ă©volution, devenues un vĂ©ritable cadriciel (_framework_) ou, plutĂŽt, un ensemble de bibliothĂšques interdĂ©pendantes ; ce cĂŽtĂ© monolithique souvent reprochĂ© aux KDElibs limitait son utilitĂ© en dehors de KDE.  _Note: Cette dĂ©pĂȘche est essentiellement une traduction des notes de versions et d'un choix de documentations sur les API de KF5 issus du [planet KDE](http://planetkde.org/), notamment [ces](http://vizzzion.org/blog/2014/06/five-musings-on-frameworks-quality/) [trois](http://dot.kde.org/2013/09/25/frameworks-5) [lĂ ](http://www.proli.net/2014/06/21/porting-your-project-to-qt5kf5/)._ ---- [Page «Frameworks» sur le wiki de KDE](http://community.kde.org/Frameworks) [Annonce de la sortie sur le site officiel de KDE](http://kde.org/announcements/kde-frameworks-5.0.php) ---- # Historique Quand KDE a Ă©tĂ© lancĂ©, il y a 15 ans, le dĂ©veloppement Ă©tait centrĂ© sur les applications et les bibliothĂšques arrivaient ensuite, lorsquâune fonctionnalitĂ© Ă©tait utilisĂ©e dans plusieurs applications. Aujourdâhui, les bibliothĂšques KDE sont la base commune de presque toutes les applications KDE, fournissant des fonctionnalitĂ©s haut niveau comme les barres dâoutils ou les menus, la vĂ©rification orthographique et lâaccĂšs aux fichiers. Ă lâheure actuelle, « KDELibs » est distribuĂ© comme un ensemble de bibliothĂšques interconnectĂ©es. Dans le cadre du travail sur KDE Frameworks 5, ces bibliothĂšques ont Ă©tĂ© mĂ©thodiquement rĂ©usinĂ©es en un ensemble de modules indĂ©pendants et multiplateformes qui seront accessibles Ă tous les dĂ©veloppeurs Qt. KDE Frameworks, conçu comme une extension Ă Qt, va enrichir lâenvironnement de dĂ©veloppement de Qt avec des fonctions qui simplifient, accĂ©lĂšrent et rĂ©duisent le coĂ»t du dĂ©veloppement Qt. Par exemple, KArchive (un des premiers cadriciels disponibles) offre la prise en charge de nombreux algorithmes de compression dans une bibliothĂšque indĂ©pendante et simple Ă utiliser. Envoyez-lui simplement des fichiers ; il nây a pas besoin de rĂ©inventer une fonction dâarchivage. La transition de plateforme Ă Frameworks est en cours depuis presque 3 ans et est menĂ©e par les meilleurs contributeurs KDE. Il a Ă©tĂ© dĂ©cidĂ© que les versions de KF5 sortiraient avec un cycle plus adaptĂ© au dĂ©veloppement des cadriciels de KF5, diffĂ©rent de celui de lâespace de travail Plasma. KF5 devient donc un projet Ă part de la communautĂ© KDE. # DĂ©coupage et dĂ©pendances  Les cadriciels de KF5 sont classĂ©s selon deux axes : - Tiers : - tiers 1 : aucune dĂ©pendance aux autres composants KF5 ; - tiers 2 : dĂ©pendance possible aux tiers 1 ; - tiers 3 : dĂ©pendance possible Ă un autre tiers 3 et aux tiers en-dessous. - Type (voir plus bas) : - fonctionnel ; - intĂ©gration ; - solution. ## Cadriciels fonctionnels Ces cadriciels sont indĂ©pendants. Ils nâont pas de dĂ©pendance Ă lâexĂ©cution, mais offrent une fonctionnalitĂ© de haut niveau. La liste suivante n'est pas exhaustive quant au nombre de cadriciels disponibles, elle en prĂ©sente les principales nouveautĂ©s. [**KArchive**](http://api.kde.org/frameworks-api/frameworks5-apidocs/karchive/html/index.html) est un cadriciel qui prend en charge les archives compressĂ©es dans des formats populaires tels zip, 7z et tar, et propose une compression QIODevice pour gzip, bzip2 et xz. KArchive peut extraire nâimporte quel fichier dans lâun des formats prĂ©-citĂ©s. [**KPlotting**](http://api.kde.org/frameworks-api/frameworks5-apidocs/kplotting/html/index.html) est un cadriciel de graphe simple qui gĂšre lâanti-crĂ©nelage (_anti-aliasing_), lâempilage et la mise Ă jour. Il sâoccupe de transformer les donnĂ©es soumises en un graphique avec ses axes et ses Ă©tiquettes (il prend en compte le passage de lâunitĂ© de dĂ©part vers les coordonnĂ©es en pixels Ă lâĂ©cran). [**Threadweaver**](http://api.kde.org/frameworks-api/frameworks5-apidocs/threadweaver/html/index.html) rend lâĂ©criture de code multithreadĂ© plus facile en utilisant des tĂąches de fond. Contrairement Ă QThreadPool, il prend en compte les dĂ©pendances entre tĂąches, les signaux `done` (rĂ©alisĂ©), ainsi que les signaux globaux `jobsDone`. Il permet aux fils dâexĂ©cution dâĂȘtre suspendus et arrĂȘtĂ©s facilement et ne dĂ©pend que de QtCore. [**KConfig**](http://api.kde.org/frameworks-api/frameworks5-apidocs/kconfig/html/index.html) enregistre et restitue des paramĂštres de configuration. Il prĂ©sente une API orientĂ©e groupe. Il utilise des fichiers INI et des rĂ©pertoires/annuaires conformes Ă la norme XDG. Il gĂ©nĂšre du code en se basant sur les fichiers XML. **[KItemModels](http://api.kde.org/frameworks-api/frameworks5-apidocs/kitemmodels/html/index.html)** contient (entre autres) : - un modĂšle de filtrage rĂ©cursif pour les vues en arbre ; - un modĂšle de proxy vĂ©rifiable pour les arbres et les listes ; - et un second modĂšle de proxy, pour restructurer un arbre en liste. **[KCoreAddons](http://api.kde.org/frameworks-api/frameworks5-apidocs/kcoreaddons/html/index.html)** dispose des Ă©lĂ©ments suivants (entre autres) : - KJob : une classe de base pour faire des API asynchrones ; - file handling classes: directory watching, backup handling, auto save files ; - Partage des donnĂ©es en cache sur le disque entre applications ; - des classes de gestion de texte: sĂ©parer des chaines de caractĂšres entre les mots et ajouter des points de suspension. ## Cadriciels dâintĂ©gration Ceux-ci ont des dĂ©pendances en fonction de la plateforme pour lâintĂ©gration systĂšme. [**Sonnet**](http://api.kde.org/frameworks-api/frameworks5-apidocs/sonnet/html/index.html) a un correcteur orthographique dâarriĂšre-plan, ainsi que des widgets et des dialogues de configuration. Il fonctionne via des extensions et peut fonctionner avec aspell, hspell, hunspell et enchant. [**Solid**](http://api.kde.org/frameworks-api/frameworks5-apidocs/solid/html/index.html) peut dĂ©tecter le matĂ©riel et informer une application sur les pĂ©riphĂ©riques de stockage et les volumes, le CPU, le statut de la batterie, la gestion dâĂ©nergie, le statut de la connexion Internet et des interfaces rĂ©seau, et le Bluetooth. Pour les partitions chiffrĂ©es, lâĂ©nergie et le rĂ©seau, des dĂ©mons en fonctionnement sont nĂ©cessaires. ## Cadriciels solution Ceux-lĂ nĂ©cessitent que leurs propres dĂ©mons fonctionnent correctement. [**KIO**](http://api.kde.org/frameworks-api/frameworks5-apidocs/kio/html/index.html) permet Ă lâutilisateur de parcourir et modifier des fichiers indĂ©pendamment du fait quâils soient locaux ou distants. Il prend en charge un grand nombre de protocoles (incluant ftp, samba, webdav et nfs), de nombreux formats de fichiers compressĂ©s, les miniatures, lâextraction de la musique audio, la corbeille et [fish](http://en.wikipedia.org/wiki/Files_transferred_over_shell_protocol), une vue de gestion de fichiers au travers d'une connexion ssh. [**KService**](http://api.kde.org/frameworks-api/frameworks5-apidocs/kservice/html/index.html) est un cadriciel qui fournit des fonctionnalitĂ©s avancĂ©es de gestion des greffons, y compris la recherche sur le disque de ceux-ci Ă la demande. Il est utile pour les architectures Ă base de composants, oĂč il permet de charger lors de lâexĂ©cution les dĂ©pendances nĂ©cessaires. Il offre Ă©galement des fonctions pour trouver les applications associĂ©es Ă un type de fichiers, telles que lâidentification de lâapplication prĂ©fĂ©rĂ©e de lâutilisateur pour visualiser les PDF. # Migrer vers KF5 Il existe pas mal de ressources pour migrer sans douleur une application fondĂ©e sur les bibliothĂšques de KDE. On peut : - lire lâ[API](http://api.kde.org/frameworks-api/frameworks5-apidocs/) ; - examiner les [notes de portage](http://community.kde.org/Frameworks/Porting_Notes) ; - sâaider des projets dĂ©jĂ portĂ©s ; - obtenir de lâaide sur le canal IRC `#kde-devel` et la liste de diffusion `kde-frameworks-devel@kde.org`. Il y a aussi un [exemple de projet utilisant KF5](http://quickgit.kde.org/?p=kdeexamples.git&a=tree&h=afc8ec926bea4810e3784c8a6db87a9e8830fb04&hb=17cfcee8f3e627194116b3a7008f56b1e09fdef0&f=framework-template). ## CMake A noter, l'adoption des idiomes de CMake : les macros `kde4_*` ne sont plus utilisĂ©es pour crĂ©er des cibles, mais les macros CMake, par exemple `kde4_add_executable` â `add_executable`. Attention aux dĂ©pendances : `${KDE4_KDEUI_LIBS}` est remplacĂ© par `KF5::WidgetAddons`. Notez que ça nâest plus une variable et que, si vous utilisez CMake 3.0, vous obtiendrez un avertissement si elle nâa pas Ă©tĂ© trouvĂ©e. De plus, il nâest plus nĂ©cessaire dâutiliser `include_directories()` pour chaque dĂ©pendance, ce sont maintenant les cibles qui sâoccupent de ça. Jetez un Ćil Ă [Extra-cmake-modules](http://quickgit.kde.org/?p=extra-cmake-modules.git) : il y a des choses intĂ©ressantes dont vous pourriez avoir besoin un jour, de plus câest une extension CMake, vous pouvez lâutiliser mĂȘme si Qt ou C++ nâest pas utilisĂ© dans votre projet. Laurent Montel, dĂ©veloppeur KDE â notamment de KDEPIM â a dĂ©veloppĂ© [des scripts pour faciliter la migration](http://www.aegiap.eu/kdeblog/2014/05/semaine-17-18-19/). ## C++ Problablement la partie la plus facile, il suffit dâessayer de le faire compiler et de regarder lâAPI quand cela ne fonctionne pas, puis de recommencer. Pour commencer le port, câest en gĂ©nĂ©ral mieux de sâappuyer sur le cadriciel KDELibs4Support au dĂ©but. Câest un cadriciel qui contient tous les modules obsolĂštes, parce que ce sont des fonctionnalitĂ©s qui ont Ă©tĂ© dĂ©placĂ©es dans Qt5 pour la plupart. Ăa aidera Ă avoir un projet qui compile et, ensuite, vous pouvez supprimer les dĂ©pendances obsolĂštes une par une. Si vous souhaitez dĂ©velopper en Qt4 pour un moment encore, il peut ĂȘtre utile de faire quelques portages dâabord, par exemple la migration KIcon â QIcon::fromTheme, ce qui rĂ©duira la divergence entre la branche Qt4 et la branche Qt5. Ăa peut aussi vous aider de faire des tests unitaires avant de migrer, pour Ă©viter de tester toutes les fonctionnalitĂ©s Ă la main pendant le portage. ## QML Porter du QML nâest pas trivial, mais il nây a que quelques projets qui lâutilisent sĂ©rieusement. Toutes les technologies sous-jacentes ont changĂ©, ça peut donc devenir Ă©pineux. Pour le moment, dans Qt5, il y a deux implĂ©mentations de QML. QtQuick 1, qui est celle que nous utilisions dans Qt4 et QtQuick 2 qui est celle que vous voulez utiliser, qui utilise le graphe de scĂšne Qt (_Qt Scene Graph_) et qui fait de la magie avec le GPU. Vous pouvez tout dâabord dĂ©cider de rester en QtQuick 1. NĂ©anmoins, PlasmaComponents a Ă©tĂ© portĂ© Ă QtQuick 2, vous devrez donc faire le changement complet pour les plasmoĂŻdes. Si vous avez avez besoin de faire un port vers QtQuick 2, il y a aussi quelques scripts que vous pouvez utiliser pour faciliter la transition. Pour commencer, vous devez simplement renommer toutes les classes commençant par QDeclarative* vers QQml* et QQuick* ; elles gardent en gĂ©nĂ©ral le mĂȘme nom. Par contre, si vous utilisiez les fonctionnalitĂ©s de QGraphicsView, vous vous ĂȘtes fait avoir ! Pour porter le code QML/Javascript vers QtQuick 2, il faut mettre Ă jour tous les imports. Tous les imports Qt sont montĂ©s de version, vous devez donc changer `import QtQuick 1.1` pour `import QtQuick 2.2`, et â dans la mĂȘme logique â remplacer `import org.kde.plasma.components 0.1` par `import org.kde.plasma.components 2.0`. ## Apports Qt 5 apporte de nombreux nouveaux concepts intĂ©ressants, comme QtWebSockets, QtWayland, QtWebEngine ou Qt3D. De plus, cela permet Ă votre projet dâintĂ©grer correctement le code Qt avec les nouveaux concepts de C++11. Porter votre projet vers KF5 va lâaider Ă devenir plus portable et Ă cibler diffĂ©rentes plateformes. # AmĂ©lioration de lâoutillage SĂ©parer les bibliothĂšques et faire en sorte que le systĂšme de compilation fonctionne a provoquĂ© de nombreux cassage de compatibilitĂ©. Pour ĂȘtre sĂ»r que tout fonctionne et obtenir des cadriciels compilables et fonctionnels, il Ă©tait nĂ©cessaire dâavoir de meilleurs outils. Une Ă©norme amĂ©lioration est lâarrivĂ©e dâun systĂšme dâintĂ©gration continue. Pousser du code pour un cadriciel signifie dĂ©sormais quâil est compilĂ© dans un environnement propre et que des tests automatisĂ©s sont lancĂ©s. Câest aussi utilisĂ© pour construire ses dĂ©pendances, donc les problĂšmes dans le code qui ont pu Ă©chapper Ă lâattention du dĂ©veloppeur sont la plupart du temps dĂ©tectĂ©s automatiquement. Les rĂ©sultats du systĂšme dâintĂ©gration continue sont souvent disponibles aprĂšs quelques minutes et, si quelque chose casse, les dĂ©veloppeurs reçoivent des notifications sur IRC ou par courriel. Ces courts cycles permettent de rĂ©soudre les problĂšmes quand les modifications effectuĂ©es sont encore fraiches dans la tĂȘte du dĂ©veloppeur. On gagne Ă©galement du temps, car en rĂ©cupĂ©rant le dernier code en dĂ©veloppement, il y a moins de risque dâavoir un code qui ne compile pas. La compilation dĂ©clenche aussi les tests automatisĂ©s, qui ont dĂ©jĂ Ă©tĂ© amĂ©liorĂ©es rĂ©cemment, mais restent encore assez loin dâune couverture complĂšte. Avoir des tests automatisĂ©s permet de trouver plus facilement les problĂšmes et amĂ©liore la confiance dans le fait quâun changement particulier ne cause de dĂ©sastre nulle part. Ni les compilations continues, ni les tests automatisĂ©s ne permettent dâĂȘtre Ă 100% sĂ»r que quelque chose ne cassera pas un jour, mais câest beaucoup moins probable et cela Ă©conomise du travail aux dĂ©veloppeurs. Si un script dĂ©tecte un problĂšme, câest probablement beaucoup plus efficace que le test manuel (qui reste nĂ©cessaire, Ă©videmment). Un aspect social de cela est que si quelque chose casse dans les compilations ou tests automatisĂ©s, il nây a pas qu'une seule personne qui est en charge du problĂšme ; ça doit au contraire ĂȘtre un Ă©vĂšnement oĂč on « arrĂȘte la chaine » et nĂ©cessite une attention immĂ©diate â de tout le monde. # Conclusion La migration vers Qt5, la modularisation et lâamĂ©lioration du code des fondations est une avancĂ©e technique majeure dans lâhistoire de KDE. Mais les avancĂ©es ne sont pas uniquement techniques, lâorganisation du projet sâamĂ©liore notamment avec plus de relecture de code, une meilleure organisation des dĂ©pĂŽts et une unification du flux de travail avec notamment une migration vers [GitLab](https://plus.google.com/+AaronSeigo/posts/Qdhhpzg5tyx). La prochaine version de Plasma sera la premiĂšre Ă utiliser KDE Frameworks 5 et cela promet dâĂȘtre intĂ©ressant, car, lĂ oĂč le passage de KDE 3 Ă KDE 4 et de GNOME 2 Ă GNOME 3 ont Ă©tĂ© un gros changement de paradigme et technique, il nâest pas prĂ©vu de gros changements niveau utilisateur. 