Un de mes plus vieux projets pour GIMP est la création d’un système de gestion d’extensions. Le plus vieux message à ce sujet que j’ai pu trouver date de 2013, à peine un an après mes premières contributions.
J’ai commencé à travailler dessus, il y a quelques semaines.
J’ai en fait de nombreux projets concernant les façons d’étendre GIMP: une meilleure interface de plug-ins, la communication bidirectionnelle entre le cœur de GIMP et les plug-ins, et même la possibilité de hacker l’interface graphique de GIMP avec les plug-ins! Mais la priorité: à l’heure actuelle, installer un plug-in ou d’autres ressources est chiant et complexe.
Avant toute chose, un petit rappel:
Vous pouvez financer ZeMarmot/GIMP!
Tout ce que nous faisons pour GIMP, sous licence libre pour tous, est fait grâce au projet ZeMarmot. Ce projet paie notamment le développement de GIMP, puisque cela fait partie des améliorations nécessaires pour notre propre pipeline de production.
Cependant à ce jour, notre financement n’est même pas suffisant pour payer une seule personne à temps plein. Notre studio à but non lucratif a pourtant survécu avec 2 personnes jusque là pendant quelques années, avec des périodes de petites dépressions et de burnouts (un peu-beaucoup dernièrement).
Nous continuons à espérer financer collaborativement assez pour payer 2 salaires pleins et justes. Cela nécessite environ 4 fois le financement actuel. C’est pourquoi nous essayons cette nouvelle approche: parler de nos plans de développement en avance (plutôt qu’une fois faits, comme tout ce que nous avons déjà fait dans GIMP et d’autres logiciels libres), et donc pour une fois, je fais cet appel au financement avant de rentrer dans le détail, car on a vraiment besoin de vous!
Vous aimez les évolutions récentes de GIMP? Souhaitez-vous voir cela continuer dans cette lancée? Si tel est le cas, vous pouvez nous aider! Le projet est financé participativement actuellement sur ces 2 plateformes:
» Patreon crowdfunding (USD) «
Qu’est-ce qu’une extension?
Ce que j’appelle une extension dans cet article est toute ressource pouvant être installée dans GIMP. Dans mon code actuel, une extension peut inclure:
- des plug-ins
- des brosses (brosses natives ou pour le nouvel outil MyPaint)
- des dynamiques de peinture
- des dégradés
- des motifs
- des palettes
- des préréglages d’outil
Dans le futur, cela sera étendu pour inclure:
- des scripts
- des modèles d’image
- des thèmes
- des icônes
- … et toute autre ressource à laquelle je ne pense pas encore.
Qu’est ce que la gestion d’extension?
Tout simplement, “gérer” des extensions signifier pouvoir:
- chercher de nouvelles extensions (mises à disposition dans des dépôts distants);
- installer de nouvelles extensions;
- désinstaller des extensions;
- désactiver des extensions (les rendre inactives sans les supprimer);
- mettre à jour les extensions: quand un créateur d’extension en met une nouvelle version à disposition, GIMP devrait vous en avertir et vous donner la possibilité de mettre à jour en un clic.
Vous avez sûrement déjà une idée du type de fonctionnalité dont je parle. Par exemple, votre navigateur web (Firefox, Chrome, etc.) a probablement une telle fonctionnalité, et il est fort probable que vous ayiez déjà cherché/installé des extensions pour votre navigateurs dans votre vie. En gros, je souhaite que GIMP propose la même chose.
À ce jour “installer” une extension dans GIMP impliquait en général une recherche sur le web qui vous emmène sur une page quelconque (parfois dans des sites pas forcément fréquentables) avec des instructions bizarres vous demandant de télécharger une archive, et de la décompresser dans un répertoire caché au fin fond de votre disque. Parfois cela marchait, parfois non, et vous ne compreniez pas forcément ce que vous faisiez. En un mot: c’est la merde.
Pour le créateur d’extensions
Si vous créez des ressources pour GIMP, par exemple des brosses, des plug-ins, des images de démarrage ou autre, voici ce que ce projet vise pour vous: nous souhaitons mettre en place un site web où vous pourrez uploader vos extensions (nous recyclerons peut-être le vieux domaine registry.gimp.org ou en ferons un nouveau, tel que extensions.gimp.org).
Le code pour ce site sera sur gitlab.gnome.org, bien que le dépôt soit vide pour l’instant (je travaille sur le core code de GIMP en premier) comme je viens à peine d’en demander la création.
Techniquement une extension n’est rien de plus compliquée que l’ajout de métadonnées à votre travail: un nom d’extension, une description, des captures d’écran si votre extension s’y prête, etc. Votre adresse de site web est aussi bienvenue ainsi que celle de votre suivi de bugs, nous permettant de rediriger les gens dans la bonne direction au besoin (rendant votre travail plus efficace). Dans l’implémentation en cours, j’ai choisi le format AppStream de méta-données, bien connu des développeurs de Logiciels Libres, et simple à écrire (nous avons encore des détails à régler pour la prise en charge de Windows et peut-être même non-Linux en général, mais rien d’insurmontable). Les méta-données sont vraiment le composant principal permettant la recherche et la gestion correctes d’extensions!
Nous étendrons ce format avec quelques tags spécifiques vous permettant de décrire le contenu de votre extension. Par exemple, voici un squelette de méta-données pour une extension fournissant un set de brosses à installer (dans l’implémentation en cours, qui pourra changer):
<?xml version="1.0" encoding="UTF-8"?> <component type="addon"> <id>info.libreart.brushset</id> <extends>org.gimp.GIMP</extends> <name>My cool brush set</name> <summary>A collection of brushes for GIMP</summary> <url type="homepage">https://libreart.info</url> <metadata_license>CC0-1.0</metadata_license> <project_license>GPL-3.0+</project_license> <releases> <release version="0.1" date="2018-06-07" /> </releases> <requires> <id version="2.10" compare="ge">org.gimp.GIMP</id> </requires> <metadata> <value key="GIMP::brush-path">brushes</value> </metadata> </component>
C’est pas plus compliqué. Vous mettez vos brosses dans le répertoire brushes/
(tel que décrit par la clé “GIMP::brush-path
“) et voilà!
Ce que ça change pour GIMP
Deux autres conséquences vraiment sympa si nous transformons certaines de nos données ou plug-ins fournis par défaut avec GIMP:
- Il vous sera possible de désactiver des fonctionnalités ou données dont vous n’avez que faire. J’ai entendu dire que certains supprimaient même des fichiers pour rendre les menus moins toufus, tellement GIMP a de plug-ins pr défaut. Maintenant cela ne sera peut-être plus nécessaire.
- Des mises-à-jour de fonctionnalités de base pourraient se faire hors-sorties: une sortie de GIMP est un travail lourd qui demande beaucoup de temps et de préparation. Avez-vous d’ailleurs remarqué que nous sommes maintenant plus rapide pour sortir GIMP (3 sorties en 2 mois!)? Nous allons bien sûr continuer dans cette lancée. Cependant avec des extensions qui peuvent être mises-à-jour par un canal moins contraignant, nous pourrions nous simplifier la tâche, faire moins de grosses sortie de logiciels, tout en ayant encore plus de mises-à-jour!
Et la sécurité, dans tout ça?
Soyons clair: côté sécurité, à l’heure actuelle, le système de plug-in de GIMP est une véritable passoire.
Toutefois on peut travailler sur certains aspects: le système devra comparer les fichiers listés dans les méta-données avec ceux présents dans l’extension. Une extension annonçant être un set de brosses uniquement ne devrait ainsi pas contenir d’exécutable par exemple.
Et bien sûr, tout fichier exécutable (c’est à dire plug-ins ou scripts) devrait passer par de la revue de sécurité. Cela signifie que nous devrons trouver ceux dans la communauté capable d’effectuer une telle revue. Je le prédis: cela prendra un peu de temps pour se mettre en place. Mais c’est ce par quoi on doit passer.
Enfin on ne pourra accepter les exécutables compilés dans un premier temps. Un exécutable compilé n’est de confiance que si nous l’avons compilé nous-même, sur nos serveurs. Cela rajoute de manière évidente tout un monde de complexité (encore plus sachant que GIMP tourne sous Linux, Windows, macOS, BSDs…). Au début, il paraît donc évident que nous ne pourrons autoriser les extensions C et C++ sur notre dépôt. Je sais qu’on va me rétorquer que cela signifie se passer des certaines des extensions les plus connues. G’Mic est le plug-in qui vient immédiatement à l’esprit! Je ne suis pas fou, et il me paraît évident que l’on devra mettre en place des exceptions dès le début pour des créateurs de plug-in de confiance (avec un parcours connu et des développeurs reconnus dans le Libre), pour les autoriser à uploader des plug-ins compilés dans ce nouveau système d’extensions. Notons que ceux-ci seront vraiment des exceptions.
Quoiqu’il en soit, rentrer dans le monde des extensions est un chemin difficile. On le sait tous, la sécurité est importante, surtout de nos jours, et GIMP n’est pas un si bon élève sur ce point. Un jour, ce serait bien d’ailleurs si les extensions pouvaient être lancées dans un environnement bac à sable par exemple. Comme disent certains: le chemin est long, mais la voie est libre!
Le code
Je l’ai dit, j’ai déjà commencé. Mon code actuel peut déjà charger et démarrer les extensions, lire et lister les métadonnées, et (dés)activer des extensions. Ce sont les bases. Mais cela ne fait que commencer.
Après les bases, il restera beaucoup à faire, tel qu’obtenir la liste des extensions depuis les dépôts, et travailler sur le site web (Patrick David devrait m’aider sur cet aspect; on rappelle qu’il a déjà fait notre nouveau site web et Pixls.us, la communauté à la mode pour les photographes utilisant du Logiciel Libre).
Je ne sais quand je finirai, notamment car je travaille sur plusieurs projets à la fois dans GIMP (comme une meilleure prise en charge des écrans haute densité, et bien sûr notre plug-in pour l’animation; mais aussi beaucoup beaucoup plus!). J’espère tout de même pouvoir avoir quelque chose à sortir pour le grand public d’ici la fin d’année. 🙂
Merci à tous!
Et n’oubliez pas: votre financement est plus que jamais nécessaire, sur Tipeee ou Patreon (ou regardez encore notre page générique de dons pour ZeMarmot ). Cela nous permet d’avancer nous-même et de faire avancer GIMP!