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. ![Logo KDE en cours de construction — CC-By-Sa 3.0/GFDL 1.2](https://community.kde.org/images.community/5/5f/Kde-in-progress.png) _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 ![SchĂ©ma des relations entre les composants de KF5 — CC-By 3.0 unported](http://dot.kde.org/sites/dot.kde.org/files/kf5_no_tier4.png) 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. ![Nouveau Konqui](https://dot.kde.org/sites/dot.kde.org/files/konqui-framework_small.png)

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /