Vue normale

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierinformatique général
  • ✇LinuxFr.org : les dépêches
  • Mageia 10 : cycle de publication alpha, bêta, rc
    Si vous avez envie de regarder sous le capot et vous impliquer dans le développement d’une distribution Linux c’est le moment de participer aux tests. Mageia a publié une première version alpha en décembre 2025, la version bêta est désormais disponible et une version candidate est envisagée pour mars/avril 2026 pour publication de Mageia 10 « quand ce sera prêt », l’occasion de revenir sur les différentes étapes et l’implication possible. Pour l’apparence de la distribution, un concours artisti

Mageia 10 : cycle de publication alpha, bêta, rc

Si vous avez envie de regarder sous le capot et vous impliquer dans le développement d’une distribution Linux c’est le moment de participer aux tests.
Mageia a publié une première version alpha en décembre 2025, la version bêta est désormais disponible et une version candidate est envisagée pour mars/avril 2026 pour publication de Mageia 10 « quand ce sera prêt », l’occasion de revenir sur les différentes étapes et l’implication possible.

Pour l’apparence de la distribution, un concours artistique a été lancé du 29 janvier au 25 février 2026, la participation des plus graphistes d’entre vous est la bienvenue ! Le choix pour la Mageia 10 va bientôt être fait, il reste toujours quelques points à améliorer par la suite ;-)

Bref, une version 10 de Mageia qui s’inscrit dans la continuité de la stabilité de Mageia 9 : le cycle de publication est là pour l’avérer, il y aura des pleurs, des cris et de grandes joies à réussir à faire fonctionner au mieux vos logiciels de prédilection.

Sommaire

Pour cette dépêche, le parti pris est de privilégier les annonces en français. Pour autant, le suivi effectif est à faire en anglais (ensuite décliné au besoin en français).

Quelques sujets pris en compte pour Mageia 10 :

  • choix du noyau Linux 6.18.x qui est une version LTS
  • live ISO 64 bits en 3 versions : KDE, GNOME et XFCE
  • conservation d’une version 32 bits (i686 et non plus i586), nécessitant des tests et une définition du périmètre, un live ISO basé sur XFCE
  • Wayland par défaut pour GNOME, éventuellement (à tester) pour Plasma KDE et autres environnements le proposant, marquant la résorption de Xorg lorsque possible ; plusieurs compositeurs Wayland pour LXQt sont intégrés (Labwc, niri, hyprland, sway)
  • bon fonctionnement de l’infrastructure de mise à jour via URPMI, basé sur RPM ou DNF
  • Peaufinement de l’intégration des pilotes libres de GPU pour Intel et AMD ; pour les pilotes nVidia ça va être plus compliqué :/
  • des mises à jour de vos logiciels préférés (n’hésitez pas à les préciser en commentaire)

Voici les différents cycles et les choix envisageables restant à chaque étape.

Cycle alpha : reprise de publication

Objectif : stabilisation du périmètre envisagé, identification des montées de version de logiciels restant à faire lors du cycle de publication.

Cela permet d’avoir des premiers ISO installables, et de revoir les plannings respectifs de ce qui est à intégrer : des langages (Rust, Ruby…), des logiciels (FreeCAD 1.1 en février donc plutôt lors de la bêta…).

Premières personnes à tester généralement issues de Cauldron—la version de développement en rolling-release—dont l’installation a pour objectif d’avérer la cohérence de l’installation et d'identifier sur le bugzilla les bogues bloquants ce qui en permet le suivi lors de chacun des cycles. Une version plus jolie des bogues bloquants est disponible, même s’ils restent à corriger ;-)

Les arborescences de dépôt 10 sont créées sur les miroirs, pour permettre de gérer l’ajout de nouveaux miroirs au fur et à mesure. Pendant tout le cycle de publication, le fonctionnement est similaire à ce qui se passe en cauldron : l’arborescence release/ reçoit les mises à jour de paquets, rien dans updates/.
Le changement des dépôts de cauldron à 10 est nécessaire pour ne pas rester avec la version de développement une fois Mageia 10 officiellement publiée ; une réinstallation reste préconisée pour ne pas avoir de reliquat des bogues corrigés lors du cycle de publication (même si enlever les différentes versions de noyaux et de bibliothèques permet de faire un 1er ménage, il peut y avoir des reliquats de configuration intermédiaire qui perdurent).

Cycle bêta : consolidation des tests et des choix pour la version à publier

Objectif : stabilisation des versions de logiciels envisagées, identification des correctifs à l’installeur.

Lancement du concours de visuels pour fonds d’écrans de Mageia 10, icônes et économiseurs : du 30 janvier 2026 au 25 février 2026. C’est la bêta2 qui vous fera découvrir la nouvelle apparence retenue pour Mageia 10.

Les pilotes nvidia posant des problèmes récurrents, il est envisagé de ne pas proposer leur intégration aux ISO (ils seraient à installer par la suite). Les tests sont les bienvenus. La version nvidia470 peut encore être configurée après installation initiale : elle est conservée pour les anciennes cartes graphiques—même si elle n’est plus maintenue tandis que la version 390 est obsolète et ne fonctionne plus avec les nouveaux noyaux Linux—et les versions nvidia580 et nvidia590 sont proposées (paquets nvidia-current_all et nvidia-newfeature-all permettant l’ajout des modules dkms), ainsi que le pilote ne fonctionnant qu’à partir des versions de cartes RTX. C’est le pilote nouveau qui est utilisé par défaut lors de l’installation initiale.

Les pilotes graphiques libres de AMD et Intel ont bien sûr aussi été mis à jour, ils sont disponibles directement dans les ISO live d’installation.

Les tests pour Plasma KDE avec la gestion par Wayland permettront d’identifier l’opportunité de proposer Wayland par défaut, le choix alternatif de Xorg restant disponible.

L’utilisation de clé USB persistante (fonctionnalité apparue avec Mageia 7) pourrait permettre d’avoir sur soi une clé d’installation live à jour et bénéficiant des derniers correctifs : démarrage avec clé USB live sur PC à installer, premiers diagnostics de bon fonctionnement du matériel sans installation—utilisation de la partition persistante pour prendre des notes—  afin de lancer l’installation dans les meilleures conditions, bénéficiant des correctifs de l’installeur notamment.

Par exemple, selon la date de publication de FreeCAD 1.1—prévue initialement courant février 2026—il pourrait être disponible dans les dépôts de paquet de Mageia 10 (pas sur les ISO, il n’y a déjà plus beaucoup de place :D).

Cycle version candidate : finalisation

Objectif : pré-version de la version finale, à publier « quand c’est prêt »

C’est l’occasion de finaliser les différentes documentations de Mageia 10.
Les errata ne conservent que ce qui n’a pas pu être corrigé avant publication et nécessitant une intervention manuelle, ils seront tenus à jour après publication pour les cas spécifiques découverts après coup lors d’une utilisation plus large de la distribution.
Les Notes de version ne vont plus évoluer beaucoup, permettant de stabiliser les traductions dans d’autres langues que l’anglais qui reste la référence.

Version finale

Les miroirs pour les paquets peuvent être mis à jour avec la version 10 : l’arborescence release/ ne va plus évoluer et les mises à jour de paquets arrivent dans updates/.

Peaufinement des visuels retenus pour la version 10.

La notification pour proposer de monter automatiquement de version de distribution à partir de Mageia 9 interviendra un peu de temps après la sortie de la version finale : le temps de finir de les mises à jour pour clore les bogues non encore corrigés pour la version finale.

Différences de fonctionnement entre version stable et le cycle de publication.

Le cycle de publication s’appuie sur Cauldron, la version en développement continu ou rolling-release :

  • il n’y a pas d’updates/ : les paquets sont directement remplacés dans release/
  • un corollaire est que lors d’une mise à jour d’un ensemble de paquets (correction), les miroirs ne seront pas forcément complètement à jour, ce qui peut demander une relance de urpmi --auto-update pour mise à jour complète : en cas d’échec temporaire, une relance plus tard est nécessaire
  • ce genre de désynchronisation arrive peu souvent en version stable, un peu plus souvent en Cauldron—ce qui est normal (cela se fait particulièrement sentir lors d’une reconstruction en masse) ;-)

S’impliquer pour Mageia 10

À vous de décider ce que vous souhaitez faire ;-) En comprenant que c’est une version en évolution—certaines choses ne fonctionneront pas—et certaines pourront être corrigées pour la version finale (ou peu après :D). De quoi se mettre le pied à l’étrier pour la version suivante : nouveaux logiciels à (faire) empaqueter, nouvelles versions à prendre en compte…
C’est l’occasion de s’astreindre à lancer certaines applications à partir d’un terminal pour récupérer le maximum de logs possibles, ou d’apprendre à diagnostiquer une configuration spécifique causant des soucis—idéalement pour travailler en amont (upstream) pour faire prendre en compte des correctifs et améliorations.

Vous pouvez vous coordonner en français auprès de nos collègues de MLO pour effectuer au mieux vos remontées d’information.

Rien que les tests permettent de bénéficier de versions actualisées par rapport à Mageia 9 et remonter des bugs restant dans l’intégration de vos logiciels de prédilection à l’environnement de bureau de votre choix. Il y a aussi beaucoup de traductions à effectuer.

C’est l’opportunité de (re-)lire les documentations et les actualiser, notamment les nouvelles fonctionnalités.

Exemples d’utilisations

Je vous laisse ajouter des cas d’utilisation qui vous seraient spécifiques en commentaires.
J’ai la chance de participer à un fablab qui me donne accès à divers matériels pour tester :

  • EeePC ne fonctionnant pas en x86_64 (donc i686 maintenant), netbooks hybrides (tablette tactile + clavier détachable) limités à 2 Go de RAM et un UEFI 32 bits exotique même quand le processeur gère le x86_64
  • (très) vieux portables et ordis—pour la plupart des gens, vieux = plus de 5 ans—là, c’est plutôt (l’ami de Mickey<) de la période 2008-2014 : des MacBook Pro, des iMac, plein de core2duo / Athlon (ça c’est du x86_64 au moins) ou cartes nvidia déclarées obsolètes (des quadro à l’époque réputées de qualité professionnelle, on voit ce que ça veut dire pour nvidia… :/)
  • (très) vieux périphériques : gamepad Sidewinder, volant MT Logic wheel pour supertuxkart avec connectique broche DA-15 jaune (si vous avez d’autres périphériques—préférentiellement en USB—je suis preneur _o/ et, oui, c’est pas loin de Paris…)
  • quelques Raspberry Pi et assimilés—donc architecture ARM—mais ce n’est pas l’axe principalement retenu pour Mageia 10 :/ et pour le coup, Debian reste une valeur sûre pour la diversité des logiciels disponibles, même si des travaux communs avec le projet Fedora permettent de se tenir à niveau ;-)

Et bien sûr, des logiciels classiques dans un fablab qui fonctionnent bien (plutôt en flatpak) : Cura et Bambustudio pour l’impression 3D, IDE Scratch pour robots Thymio… et Inkscape / FreeCAD / KiCAD sur du matériel un peu plus récent et moins contraint en ressources ;-)

Si vous utilisez des window managers spécifiques, cela m’intéresse d’avoir des retours aussi (enlightenment, LXQt, WindowMaker… autres ?), Mageia proposant des installations cohérentes (intégration environnement, logiciels…) via les méta-paquets task- qui permettent d’installer un ensemble de dépendances automatiquement.

Bons tests _o/

Commentaires : voir le flux Atom ouvrir dans le navigateur

  • ✇LinuxFr.org : les dépêches
  • « It works on my satellite » ou l'histoire d'un bug dans l'espace
    Cette dépêche raconte un vieux bug que j’ai eu sur un satellite. L’identification, la reproduction, la correction. C’est le bug qui m’a le plus intéressé/marqué dans ma carrière (jusqu’ici), C’est pourquoi cela pourrait aussi vous intéresser. L’appel Il y a bien longtemps, dans une galaxie lointaine. Ah non, pardon. Un long weekend de 14 juillet, sur une plage, je reçois un coup de fil : « Un des satellites a rebooté, à cause d’une erreur logicielle, est-ce que tu es disponible pour venir compr

« It works on my satellite » ou l'histoire d'un bug dans l'espace

Cette dépêche raconte un vieux bug que j’ai eu sur un satellite. L’identification, la reproduction, la correction. C’est le bug qui m’a le plus intéressé/marqué dans ma carrière (jusqu’ici), C’est pourquoi cela pourrait aussi vous intéresser.

L’appel

Il y a bien longtemps, dans une galaxie lointaine. Ah non, pardon. Un long weekend de 14 juillet, sur une plage, je reçois un coup de fil : « Un des satellites a rebooté, à cause d’une erreur logicielle, est-ce que tu es disponible pour venir comprendre ce qu’il s’est passé ? A priori, il fonctionne toujours, mais il est passé tout seul sur le calculateur redondant. »

Quelques mois avant, on avait lancé une première grappe de six satellites ; d’autres lancements sont prévus pour compléter une constellation dans les mois/années à venir. Comme tout marche bien depuis des mois, personne de l’équipe logiciel de bord n’est d’astreinte. Sur ces satellites, j’étais surtout sur la partie validation. En gros, ce jour-là pour moi, ce n’était pas possible, mais j’y suis allé le lendemain, un samedi ou dimanche.

Sommaire

L’objectif et les moyens de débug

Si nos managers nous ont appelé, c’est parce quand un satellite bugue en prod (on va dire en vol, plutôt), c’est comme pour n’importe quel autre logiciel, des gens veulent des réponses à des questions comme :

  • pourquoi ?
  • est-ce que c’est grave ?
  • est-ce que ça va se reproduire ?
  • comment on corrige ?

Par contre, les moyens sont potentiellement différents de ce que vous avez dans d’autres environnements (ou pas, j’imagine que ça dépend des gens) Ce qu’on a :

  • le code
  • la doc
  • des bancs de tests (avec le même matériel pour le calculateur)
  • des gens
  • un tout petit peu de contexte logiciel sauvegardé au moment de l’erreur (j’y reviens)
  • la télémétrie avant l’anomalie (tout allait bien)
  • la télémétrie après l’anomalie (tout va bien, mais on est passé du mode matériel 2 au mode 3. En gros c’est le même, sauf qu’on utilise certains équipements “redondants” au lieu du “nominal”, dont le calculateur)

Premier élément, qui a mené au fait que c’est nous (du logiciel) qui avons été appelés, c’est que le matériel qui gère le mode (2 -> 3) peut changer de mode pour plusieurs raisons, mais il sait pourquoi il le fait. Et la raison c’est « le logiciel m’a dit de le faire ». Donc ça vient de nous.

L’analyse

Comme tout va bien, on va regarder le contexte sauvegardé. Ce n’est pas un core dump qu’on peut passer à gdb, mais ça contient quelques infos :

  • le code de l’erreur ILLEGAL CPU INSTRUCTION
  • le Program Counter %pc qui nous donne l’adresse de l’instruction exécutée au moment de l’erreur
  • l’adresse de la prochaine instruction à exécuter %npc (ici c’est l’adresse juste après %pc, rien de surprenant)
  • une copie des registres (bon, on ne va pas en avoir besoin, donc je ne vous fais pas un cours sur SPARC et ses registres tournant, de toute façon j’ai oublié. On pourrait probablement les utiliser pour récupérer partiellement la pile d’appel, on l’a surement fait)
  • la date et l’heure (super info utile. Enfin, ça correspond à notre anomalie, j’imagine que c’est pour ça qu’on l’avait)
  • surement d’autres choses, mais pas utiles pour la suite.

Problème résolu donc ? on est à l’adresse %pc, on l’exécute et le CPU nous dit que l’instruction n’est pas légale. Qu’est-ce qu’il y a ici ? Une instruction légale, quelle que soit la valeur des registres. Pareil pour un peu plus haut et un peu plus bas, rien qui provoque cette erreur. Que s’est-il passé ?

On est dans l’espace, donc l’explication facile (dès qu’on n’explique pas un truc) : l’instruction a dû avoir un Single Event Upset (SEU), un bit flip. Ça a transformé une instruction légale en instruction illégale. C’est simple ? Sauf que non, on est dans l’espace, en conséquence, on a tout un mécanisme de protection contre les SEU. C’est pas infaillible (par exemple si on a deux bits inversés, on ne peut pas corriger) mais ce n’est pas la bonne signature. Si c’était ça, ça dirait DOUBLE EDAC ERROR, pas ILLEGAL CPU INSTRUCTION.

Donc la cause de l’anomalie n’est pas un SEU.

EDAC / Protection contre les SEU

Je suis sûr que vous êtes intéressé, donc je vais vous décrire la protection contre les bit flips. C’est un mix de matériel/logiciel (en plus d’avoir une boite autour qui diminue la probabilité). En mémoire (RAM, ROM) pour 4 octets de données “utiles”, on consomme 5 octets. Le 5ᵉ octet contient un code de contrôle calculé à partir des 4 autres (EDAC). Si un bit change (sur les 5 × 8 = 40 bits), on peut non seulement le détecter mais aussi reconstruire la valeur correcte. Si deux bits changent (ou plus, mais il y a une limite), on peut détecter l’erreur mais pas la corriger (cf: le DOUBLE EDAC ERROR mentionné plus haut)

C’est complètement transparent vu du logiciel (code source, ou assembleur), tout ça est calculé par le matériel. Quand on écrit en mémoire 0x12345678 il calcule le code et écrit 0x12345678XY avec la bonne valeur de X et Y. Quand on lit, pareil, le matériel commence par lire 0x12345678XY, calcule la somme de contrôle sur les 4 octets, si c’est le bon, il nous donne 0x12345678.

Là où ça se complique, c’est quand il y a un changement. Disons qu’on a maintenant 0x02345678XY. (1 --> 0). Il se passe deux choses ici :

  1. le matériel dit au logiciel 0x12345678 (il corrige, mais uniquement la valeur envoyée au software. Pas la valeur enregistrée en mémoire)
  2. il émet un signal SINGLE EDAC ERROR.

C’est là que le logiciel intervient, dans le point 2. Ce signal est lié à une trap qui corrige la mémoire. Schématiquement c’est lié à une fonction qui ressemble à ceci (en assembleur SPARC en vrai, mais j’ai tout oublié)

; adresse vient du contexte, c’est l’adresse qui a été lue en dernier, qui a généré la trap
disable_edac_trap: ; Désactiver la trap. Sinon on déclencherait la trap depuis la trap
load [adresse], reg ; Lire 4 octets (lecture = correction auto)
enable_edac_trap: ;
store reg, [adresse] ; Réécrire la valeur corrigée

On lit la valeur, c’est corrigé vu du logiciel par le matériel, on réécrit la valeur, tout est corrigé.

Cette trappe peut être déclenchée par n’importe quelle instruction qui lit de la mémoire (ou par le fait de charger une instruction elle-même depuis la mémoire), et on a même une tâche de fond (plus basse priorité, qui tourne en permanence quand il reste du temps de calcul disponible) qui fait

// en gros. En vrai légèrement plus compliqué
void background_task(void) {
int address = MEMORY_START;
volatile int value;
while (1) {
value = *address; // s’il y a un bit flip en mémoire, ce sera corrigé par la trap
address += 4;
if (address >= MEMORY_END) {
address = MEMORY_START;
}
}
}

L’idée de cette fonction c’est de lire la mémoire régulièrement. Si on ne faisait pas ça, peut-être que certaines cases mémoires auraient deux bit flips, car pas corrigé après le premier si on ne lit pas la mémoire avant qu’un autre arrive. Ce n’est pas très fréquent d’avoir des bit flips, mais sur les 6 satellites, en cumulé, on en détecte quelques-uns par jour.

L’hypothèse

De retour à la case départ donc. On exécute apparemment l’instruction stockée dans %pc, valide. Et le CPU nous dit qu’elle est invalide, mais clairement, elle est valide. On tourne en rond, on est samedi ou dimanche, fin d’après midi, et le satellite, lui aussi il tourne en rond, sans problèmes. Tout à coup, quelqu’un a l’idée de dire « bon, on ne résoudra pas ça aujourd’hui. On se revoit lundi ? ». On rentre, je bois un verre avec mes colocs (enfin, je suppose. C’était une activité habituelle pour un weekend, ça, au moins)

Retour au bureau, et là (surement plus tard, pas lundi 9h) on a David (un collègue) qui propose : "Comme clairement %pc est valide, est qu’on exécute quelque chose d’invalide, est-ce qu’on est sûr qu’on a bien enregistré %pc?". On vérifie, le code qui fait ça a l’air correct. En plus le contexte général, ce qu’il y a dans les registres est correct. Toujours David "OK, le logiciel est correct, mais est-ce qu’on est sûr que %pc c’est bien toujours l’instruction qu’on exécute ?".

Donc, on vérifie, par acquit de conscience et on remarque que non, pas nécessairement. Si on est dans une trap, le %pc qu’on enregistre pointe vers l’instruction qui a provoqué la trap, pas l’instruction de la trap qu’on exécute. Bon, OK, ça ne nous avance pas nécessairement (mais si j’en parle…)

Nouvelle question donc : Si on est à %pc, quelles sont les traps qui peuvent s’exécuter ? Il y a plein de possibilités, la plupart viennent de causes extérieures (timer matériel, plein d’autres évènements extérieurs) et potentiellement aussi la trap de l’EDAC si on lit une valeur (et l’instruction à %pc lit une valeur).

Donc techniquement, on pourrait aussi être n’importe où dans le code (assembleur) de toutes les traps. Avant on cherchait pourquoi c’était illégal d’exécuter %pc, maintenant on cherche pourquoi ça serait illégal d’exécuter %pc ou n’importe quelle ligne d’une trap active/activable à ce moment-là.

Chez moi, ça marche

Sauf que le code des traps, c’est pas nous qui l’avons écrit. C’est bien du code qui vient de l’entreprise, mais il existe depuis plusieurs années, est utilisé sur le même processeur depuis plusieurs années, et il a plusieurs dizaines d’années de vol (cumulé, en additionnant les satellites) sans problème.

En suivant les principes bien connus du développement logiciel, si on utilise un logiciel sur étagère, pas besoin de le valider (surtout ça coute de l’argent. Cela dit même si on avait essayé, je ne pense pas qu’on aurait trouvé de problème), vu qu’il marche. Par acquit de conscience, on demande, et on nous répond "bah chez nous ça marche" (la légende veut qu’une histoire similaire soit à l’origine de Docker, je ne sais pas si c’est vrai, mais le fameux "it works on my desktop, ship my desktop"…)

Vous avez peut-être lu le titre de l’article, donc vous imaginez où je vais. On se demande « OK, pourquoi ça marche pour eux, et pas pour nous ? » Quelles sont les différences ?

  • on est sur le même CPU/MCU (donc non, c’est pas ça)
  • on a changé de compilateur pour une nouvelle version (mais 1. c’est un compilateur “certifié”, et 2. les traps sont en assembleur…)
  • on est en orbite plus basse, et on a plus de SEU (mais même, quand on regarde leur historique, ils en ont beaucoup aussi, et en cumulé, beaucoup plus. Après… peut-être n’a-t-on pas de chance ?)

L’erreur

Ok, on a changé de compilateur, les traps sont en assembleur, mais le reste du code est dans un langage bien plus courant (non, je rigole, en vrai c’est en Ada…), peut-être que l’interaction entre les traps et le reste du code a changé ?

Pourquoi est-ce qu’on a décidé de changer de compilateur ? Ah pour des histoires de taille mémoire (640 kB should be enough? On avait même plus, genre 2 Mo de ROM, 4 Mo de RAM, large… ou pas). D’ailleurs, au moment du changement, on en a profité pour faire quelques optimisations. Non pas des flags genre -O1 ou -O2. Plus des choses sur le layout mémoire, on a ajouté __attribute__((packed)) qui est supporté, on a un peu changé le linker script…

Par exemple, le packed, ça nous permet de gagner de la place, avant toutes les variables étaient alignées sur une adresse multiple de 4, que ça soit un nombre sur quatre octets, ou un char d’un octet, ils prenaient au moins quatre octets. Maintenant, on a mis les data types multiples de quatre au début de la structure, bien alignés, puis les types qui prenent deux octets, on en met deux dans quatre octets (au lieu d’un et de gacher deux octets pour rien), puis les types de un octect, on en met 4.

D’ailleurs, par exemple, l’instruction à %pc, elle charge une donnée d’un seul octet qui est dans une adresse du type XXX+3, où X est un multiple de 4. C’est pas illégal de faire ça (donc non, toujours pas d’instruction illégale ici)

Après quoi, c’est là où David revient (dans mon souvenir en tout cas, ça venait beaucoup de lui, mais on était beaucoup à échanger sur le sujet). "Ok, %pc lit une donnée non alignée, et il le fait correctement. Mais s’il y a un bit flip, il se passe quoi ?. Bah rien, EDAC détectée, trap, on exécute le code assembleur qui marche sur les autres satellites.

Ah oui, mais non. Si on lit un octet, on peut lire XXX+3, mais si on lit 4 octets, c’est interdit. Il faut lire une adresse multiple de 4. Et donc on a une EDAC, et quand on rentre dans la trap

; adresse == XXX+3
disable_edac_trap: ;
load [adresse], reg ; Lire 4 octets
enable_edac_trap: ;
store reg, [adresse] ;

Ah oui, mais non. load ça lit 4 octets, c’est illégal de lui passer une adresse non multiple de 4, c’est une illegal instruction. Donc ça pourrait être ça :

  1. bit flip sur les quatre octets situés à XXX (l’EDAC est toujours calculé sur 4 octets d’une adresse alignée, même si on lit décalé)
  2. on rentre dans la fonction qui contient %pc
  3. on lit un octet à XXX+3
  4. ça déclenche la trap
  5. la trap essaye de lire 4 octets à XXX+3
  6. ILLEGAL CPU INSTRUCTION, allez en prison sans passer par la case départ

La reproduction

Sur le papier, ça marche. On peut même faire un petit logiciel sur le banc, qui fait juste un load [XXX+3], reg et qui génère une ILLEGAL CPU INSTRUCTION. Mais évidemment nos managers (et notre client) voudraient un peu plus qu’un « sur le papier, c’est ça, trust me bro ».

Donc la question "c’est possible de reproduire exactement comme dans l’espace, plutôt que de juste exécuter une instruction illégale à la main ?". Avec le vrai logiciel qui était dans l’espace, pas un logiciel de test ?

Bien sûr, il suffit d’attendre d’avoir un bit flip, sur le banc, juste au bon endroit, au bon moment. Vous avez combien de siècles devant vous ? Ou alors est-ce qu’on peut mettre le banc à côté d’un réacteur nucléaire ? Ça devrait accélérer les choses (du bon côté du mur de confinement. Ici, “bon”, ça veut dire mauvais pour les humains)

On va quand même regarder si on peut provoquer un bit flip autrement. Bon, a priori, en interne, au logiciel, on ne sait pas comment faire. La doc du processeur (qui vient avec l’edac) ne nous aide pas non plus. On demande à ceux qui nous ont dit que « chez eux, ça marche » qui nous répondent que la trap de l’edac, ils ne l’ont jamais testé, c’est juste une revue de code.

Bon, on envoie quand même un courriel au fabricant du proc, au cas où. Réponse rapide « je reviens vers vous dès que je sais ». Quelques jours (2, 3 semaines ?) plus tard : "Ah oui, c’est possible. D’ailleurs c’est documenté. Page WSYZ sur 5000, il y a **un* paragraphe qui explique comment faire*".

Le TL/DR du paragraphe : Il est possible de désactiver l’EDAC en écriture. Par contre il faut faire des choses spécifiques, donc on a pas de commande prévue pour le faire “simplement” depuis l’extérieur, il faudrait une nouvelle fonction.

void generer_bit_flip(int address, int valeur) {
*address = valeur; // écrit la valeur correcte avec l’edac normal
manipulate_specific_register_to_disable_edac(); // on a dû écrire la fonction, c’est pas aussi simple
*address = valeur ^ 0x00000001; // écrit la valeur avec un bit changé, mais sans changer le checksum enregistré
manipulate_specific_register_to_enable_edac();
}

Ça tombe bien, le logiciel qui est dans l’espace a deux fonctionnalités qu’on a testé, mais jamais en vrai avec un truc vraiment utile

  1. on peut patcher la mémoire et écrire ce qu’on veut, où on veut (code, données)
  2. on a plusieurs “fonctions” périodiques qui ne font rien, et qui sont prévues pour être patchées si on veut ajouter quelque chose (via la fonction de patch plus haut)

Donc on peut créer une fonction comme ça (en gros)

void generer_bit_flip(int address, int valeur) {
static int actif = TRUE;



if (actif) {
*address = valeur; // écrit la valeur correcte avec l’edac normal
manipulate_specific_register_to_disable_edac(); // ou a dû écrire la fonction, c’est pas aussi simple
*address = valeur ^ 0x00000001; // écrit la valeur avec un bit changé, mais sans changer le checksum enregistré
manipulate_specific_register_to_enable_edac();
actif = FALSE; // on ne veut le faire qu’une fois
}
}

Une fois qu’on a la fonction, on la compile. Ensuite on charge le logiciel normal sur le banc, on se met en conditions « avant l’anomalie », on uploade la fonction, on l’active et…

Le banc change de mode, passe du mode 2, au mode 3, sur le calculateur redondant. On vérifie le contexte, même signature que l’anomalie en vol. C’est bon on a fini. (Ouf, mon journal est déjà trop long)

La correction (Over-The-Air, mais sans l’air)

Oui, non, pas exactement. On a une explication, il faut une correction maintenant. Bon, c’est simple. Pour lire une adresse alignée sur 4, il suffit de mettre deux bits à 0. Finalement, voilà le patch

address = address & ~0x3 ; ** Cette ligne est le patch **
disable_edac_trap: ;
load [adresse], reg ;
enable_edac_trap: ;
store reg, [adresse] ;

Oui, c’est un patch d’une instruction dans le binaire. (Techniquement, 5 instructions, parce qu’il faut décaler les 4 instructions existantes de 1, mais on avait des noop en dessous, donc ça rentre)

La dernière question, c’est quelle stratégie d’ update appliquer. On a techniquement quatre familles de satellites à considérer :

  1. les satellites « pré-existants », qui utilisent l’ancien compilateur, sans packed et déjà dans l’espace.
  2. le satellite qui a eu l’anomalie.
  3. les 5 autres satellites de la grappe.
  4. les futurs satellites, non lancés.

Ce qui a été décidé : La première catégorie : Techniquement, on pourrait discuter du fait qu’il y a un bug ou non. Mais même si on considère qu’il y a un bug, il ne peut pas être déclenché. Donc on ne touche à rien. La catégorie 4, c’est facile. Ils sont au sol, on fait une nouvelle version complète du logiciel, on reflashe la rom en entier, et on vérifie.

Il reste les deux autres catégories. Bon la seule différence, c’est qu’un, toujours en mode 3, tourne pour l’instant sur le calculateur redondant (on peut revenir en mode 2, manuellement, si on veut). Donc on décide « on va faire la même chose », et on va corriger le problème (on aurait pu ne rien faire et dire « bah, si ça arrive, on connaît et on revient à chaque fois manuellement en mode 2 »)

Là encore, même si on corrige, on a plusieurs choix :

  1. Mettre à jour la ROM. En fait non, les ROM, parce que chaque calculateur a la sienne. Et le nominal ne peut pas écrire la ROM du redondant, et inversement. (Dès lors, si on veut patcher, qu’est-ce qu’on patche ? Le deux ROM ? Faut-il reconfigurer à la main pour rebooter sur le redondant ?)
  2. utiliser un mécanisme prévu pour « patcher, mais sans patcher la ROM ».

La solution 2, retenue, c’est un mécanisme (déjà dans le logiciel) qui permet de mettre les infos dans une autre mémoire (partagée par les deux calculateurs). Au boot, la ROM est copiée dans la RAM (on exécute le code depuis la RAM), et « avant de démarrer » on vient regarder dans cette table, si l’on doit patcher la RAM. Cela donne quelque chose comme :

ROM (logiciel original) --> Copie vers la RAM --> RAM (logiciel original) --> fonction de patch au boot, vient modifier la RAM --> RAM (trap corrigée) --> boot du logiciel.

Conclusion

Qu’est-ce que je retiens principalement ?

  • quand on me dit que du code fonctionne, donc qu’il est correct… j’ai un doute
  • Ce n’est pas parce que la doc explique quelque chose qu’on peut le trouver. Surtout quand elle fait 5000 pages… Il ne faut pas hésiter à demander

Voila, en quelques pages, une vieille histoire qui m’a marqué. Je suis probablement une des personnes qui a participé à un des patchs le plus haut du monde (plus de 1 000 km d’altitude)

Bon en vrai, la NASA fait des mises à jour logicielles sur des rovers sur Mars, donc c’est clairement pas le record mais c’est pas trop mal (ils ont même peut-être des mises à jour sur leurs sondes plus loin de la terre)

Note : cette histoire date maintenant d’il y a plus de dix ans. Il y a donc forcément des simplifications, des imprécisions, et probablement des erreurs. Aucun satellite n’a été maltraité pendant cette enquête. Il y en a bien un qui est tombé à terre, mais ça c’était avant le lancement.

Commentaires : voir le flux Atom ouvrir dans le navigateur

  • ✇LinuxFr.org : les dépêches
  • AuX sources du fun N° 1 : retrouver le fun dans les inutilitaires graphiques
    Après un épisode 000 sur les logiciels inutiles et donc indispensables autour de l'ASCII art, cette dépêche entre dans la fin du XX° siècle avec les inutilitaires ayant des interfaces graphiques. lien nᵒ 1 : Episode 000lien nᵒ 2 : Journal à l’origine de la dépêcheSommaire Introduction : poétique de l’inutile et regard de Xeyes Les décoratifs graphiques Xjokes MxIco Xtacy Les animaux virtuels et autres éléments virtuels de companies gkrellm-bfm Xteddy XSnow XPenguins : La Marche des Rêveur

AuX sources du fun N° 1 : retrouver le fun dans les inutilitaires graphiques

Après un épisode 000 sur les logiciels inutiles et donc indispensables autour de l'ASCII art, cette dépêche entre dans la fin du XX° siècle avec les inutilitaires ayant des interfaces graphiques.

Sommaire

Introduction : poétique de l’inutile et regard de Xeyes

En ce passage vers une nouvelle année, c’est l’occasion d’inviter à de nouveaux regards, notamment à travers les inutilitaires avec interface graphique dans le domaine du libre, de la même manière que l’interface graphique a étendu leurs possibilités. Il s’agit d’une revisite de ces logiciels qui ont marqué, qui constituent les traces de l’histoire informatique et qui ouvrent à une perception renouvelée, traversés par des souffles multiples, à la fois historiques, poétiques, ludiques et philosophiques, et étendus dans le village global de 2026. Ainsi, nous les aborderons sous ces différentes modalités, à l’aune de ces différentes lumières.

Pour inviter à porter ce regard sur ces angles multiples, nous présenterons les inutilitaires graphiques dans une perspective plurielle, à la fois ludique, poétique et philosophique. En effet, ces équivalents dotés d’une interface graphique (GUI) de leurs homologues en ASCII ART, loin de toute logique de consommation, offrent un espace où le regard peut vagabonder, où l’expérience naît aussi de l’inattendu et de la contemplation. Ce changement de point de vue se manifeste notamment dans des exemples comme le petit programme Xeyes. Aussi inutile soit-il, il est installé par défaut dans la plupart des distributions : il se contente d’afficher des yeux qui suivent la souris, participant ainsi, à son échelle, au déplacement de la perception dans le logiciel libre. Il ne s’agit pas d’affirmer que Xeyes est intrinsèquement dépourvu d’usages utiles possibles, mais de le considérer ici dans une poétique du just for fun à l’instar de Linus Torvalds qui proclamait à Amsterdam que « The most important design issue… is the fact that Linux is supposed to be fun… ». Ainsi Xeyes est vu comme un objet ludique et réflexif, en outre sa page de manuel elle-même adopte un ton d’humour noir explicite : « Xeyes watches what you do and reports to the Boss. »

Bien entendu, Xeyes ne contient aucune backdoor destinée à transmettre des données à un quelconque supérieur — d’où son inutilité revendiquée (OUF). Avec le recul, on pourrait néanmoins y voir une préfiguration ironique des révélations de Snowden, infiniment plus utiles, quant à elles, pour dénoncer des pratiques bien réelles de surveillance. Là où Xeyes se contente d’en proposer une parodie, il rappelle, par le jeu et le décalage, que le logiciel libre sait aussi penser le regard et l’interface autrement que sous l’angle de l’efficacité, participant ainsi, à sa façon, à cette autre poétique. Les yeux malicieux de Xeyes ont aussi été transportés sur d'autres OS

xeyes

De cette contemplation découle également une autre réflexion. Dans son essai « Sauvons le Beau : L’esthétique à l’ère numérique », le philosopheByung-Chul Han (Pyŏng-ch’ŏl Han 한병전) regarde le monde d’aujourd’hui, saturé d’images lisses et parfaites, façonnées par un productivisme qui aplanit l’expérience personnelle. Tout est policé, séduisant, immédiatement consommable, mais dépourvu de profondeur. L’expérience esthétique se consomme comme un fruit sans chair, et le regard se laisse séduire sans se laisser transformer.

À travers Jeff Koons et le corps pornographié, il montre que l’expérience esthétique perd sa rugosité, son mystère, sa personnalisation et sa capacité à surprendre et à bouleverser. Elle devient un reflet étincelant dont l’intérieur sonne creux. Face à cet appauvrissement, Han appelle à se tourner vers l’altérité. Il invite à arracher l’individu à son narcissisme, à le détourner du miroir aux alouettes trop lisse, mais qui ne renvoie qu’une image vide. Voir l’altérité, c’est ramener le spectateur hors de lui-même, le confronter à une expérience esthétique qui change son regard, née de l’inattendu, de la divergence, de ce qui déstabilise. Dans cette rencontre, l’expérience esthétique cesse d’être un simple objet de consommation et redevient un souffle qui questionne, qui surprend et qui bouleverse.

Cette attention au surprenant trouve un écho pour le moins inattendu dans le monde du logiciel libre. Dans The Cathedral and the Bazaar, Eric S. Raymond écrit : « Every good work of software starts by scratching a developer’s personal itch. » Ainsi, chaque programme, chaque création naît d’un désir ou d’un besoin vécu, d’une singularité que l’on cherche à exprimer et à explorer. Ensuite, il ajoute également : « The next best thing to having good ideas is recognizing good ideas from your users. Sometimes the latter is better. » Parfois, ce n’est pas l’idée initiale, mais la rencontre avec ce qui vient d’ailleurs, qui enrichit et change la perception. Le logiciel libre, via la rencontre avec l’altérité et de par ses pratiques open source, amènent une approche mêlant une esthétique de la participation, qui constitue une proposition à la critique esthétique d’Han, laquelle, de manière tout à fait surprenante, s’incarne dans le processus de participation à travers le projet libre Gource, intégrant l’approche décrite par Eric S. Raymond et une esthétique du libre dans une danse poétique lumineuse sous forme de constellation spatiale globale.

Entre Xeyes et Gource s’étale une certaine diversité d’inutilitaires que nous parcourons comme une mini-rétrospective, mêlant parfois la grande histoire de l’actualité informatique avec la petite histoire des inutilitaires, souvent inattendue, encourageante, conviviale et poétique. De cette mosaïque émergeront certaines réflexions sur les inutilitaires sous forme d’abandonware, notamment à travers « le voyage de Necko et la retraite de Kodo ». Ces réflexions sont aussi l’occasion de redécouvrir des inutilitaires abandonnés à explorer, véritables parties prenantes de la grande aventure du logiciel libre, de son processus participatif en open source et de son invitation à une ouverture d’esprit et du code.

xeyes

Les décoratifs graphiques

Xjokes

MxIco

Xtacy

Cette quête de l’émerveillement et de la profondeur, au cœur du quotidien hypermoderne, nous mène aussi vers un autre temps, hors de l’aliénante productivité : celui d’un second Han, l’ermite Han Shan 寒山, sur les monts froids de la Chine des Mings. Là, dans la solitude et l’oisiveté attentive, l’expérience ne se cherche pas, elle advient. La légende dit que ses poèmes surgissaient sur les murs, les rochers, les arbres. Poète ch’an, ancêtre du zen japonais, Han Shan demeurait sous les pins, au bord d’un torrent, oublieux de lui-même, contemplant un papillon sans savoir s’il rêvait le papillon ou si le papillon le rêvait, comme chez Zhuang Zi. Puis, puis, dans un élan soudain, il grave quelques vers dans la pierre et s’en retourne en riant vers son ermitage comme tout maitre ch’an , énigmatique et joyeux.

une fois à Han Shan les dix mille affaires cessent
plus aucune pensée fugace ne s’accroche au cœur
oisif, sur un rocher j’inscris des poèmes,
accordé au flux, comme une barque sans amarre.

寒山詩

一住寒山萬事休
更無雜念掛心頭
閑書石壁題詩句
任運還同不繫舟

han shan

xjokes

Dans le logiciel libre, Xjokes se fait l’écho de cette suspension de l’utilité. Ainsi, un trou noir engloutit l’écran, des figures clignent de l’œil, l’écran peut disparaître tout entier. Comme le Boing Ball de l’Amiga ou MxIco fait tourner de simples polyèdres , ces logiciels laissent le regard vagabonder. Oisifs, ces logiciels offrent un espace où le temps semble suspendu, accordé au flux du geste, comme un souffle qui traverse l’espace simplement.

mxico

Un autre poète inconnu sous Xtacy (ecstasy) écrira lui aussi sur le même thème :

Retrouve dans ta tête
Ton âme de poète
Souviens-toi comme c´est chouette
La parfum des violettes
Un soir de pâquerettes

poesie

xtacy

Ainsi Xtacy le fera chanter avec ses couleurs changeantes, ses fractales, ses quadrilatères rebondissants et ses vagues sinusoïdales décalées, invite au vertige .


Les animaux virtuels et autres éléments virtuels de companies

gkrellm-bfm

Ce programme de monitoring dispose d'un canard qui sert… de compagnon?
Un plugin de monitoring de charge pour GKrellM, inspiré de wmfishtime et bubblemon. Il met en scène des poissons pour illustrer le trafic réseau, des bulles pour l’utilisation du processeur et un canard… pour représenter un canard.

Xteddy

Xteddy, en tant qu’inutilitaire, a eu des usages inattendus, allant bien au‑delà de sa fonction de simple peluche virtuelle de premier abord.L’auteur originel de Xteddy, Stefan Gustavson, raconte sur le site archivé :

« I created Xteddy way back in 1994 as a spare time hack for fun. The reception I got from my colleagues was so heart-warming I was encouraged to distribute him world-wide. Much to my surprise, the response was overwhelming. By now, I have received hundreds of friendly messages of appreciation from all over the world, and they keep dropping in even this long after the release. To all of you teddy bear lovers out there: thanks! »

Ce simple projet ludique, conçu pour le plaisir, a rapidement touché et fédéré une communauté internationale. Un utilisateur raconte sur le site xteddy.org :

« Ever since I found out about the Xteddy Unix program, I ran it on my workstations when I was doing my University assignments, as it helped me think. »

Pour certains utilisateurs, dont celui qui a partagé son expérience et mis a disposition le site Xteddy.org, Xteddy a eu un impact bien au‑delà du divertissement : il a servi de soutien émotionnel et d’aide à la réflexion, apportant réconfort et motivation dans des périodes marquées par l’anxiété sociale ou les troubles paniques. Touché par l’influence positive de ce logiciel, cet utilisateur a pris contact et a ensuite créé le site xteddy.org, à la fois espace de témoignage personnel et lieu de mémoire pour la communauté.

« I still get feedback at least once a year thanking me for what I’ve written here, so it > shall remain. I hope others find this interesting and helpful. »

Son engagement s’inscrit également dans une démarche plus large de contribution au logiciel libre, puisqu’il participe activement à divers projets open source, prolongeant ainsi l’esprit collaboratif et de soutien qui entoure Xteddy.
Aujourd’hui, bien que le site de l’auteur original ne soit plus accessible, l’héritage de ce programme se perpétue grâce aux nombreuses distributions

xteddy

XSnow

La neige, avec son blanc immaculé et sa douceur fragile, a inspiré le poète coréen Kim Sowol dans son célèbre poème 눈 오는 저녁 (Snowy Evening). Comme lui, certains pensent à leur amour lointain en observant la neige tomber, tandis que d’autres n’ont pas eu la chance de voir le Père Noël. Cette neige qui s’éparpille au vent mais ne fond qu’au contact des flammes rappelle la fragilité et la profondeur du cœur humain. Aujourd’hui, même ceux qui n’ont pas la chance de contempler la neige réelle peuvent retrouver cette magie grâce à XSnow, un programme qui fait tomber la neige virtuelle sur le bureau, recréant une mini ambiance hivernale dans le silence d’un monde immobile. Sous le ciel pâle, les pensées s’immobilisent, lentes et blanches, tandis que la nuit écoute le pas léger de l’hiver, et que la neige continue de transformer le quotidien en souvenir poétique, et observer par intermittence le traineau du Père Noël defiler sur son ecran. Un classique qui ajoute une touche de fraîcheur aux sessions de travail.

xsnow

xsnow

XPenguins : La Marche des Rêveurs Polaires

Dans le paysage immaculé de votre écran, là où ne règnent que l'ordre et la logique, une troupe inattendue fait son apparition. XPenguins, œuvre de l'esprit créatif de Robin Hogan, est une douce folie, un souffle d'air vif des terres australes. Inspirés des graphismes espiègles du jeu Pingus, ces petits pingouins pixelisés arpentent l'impossible. Ils cheminent le long des précipices de vos fenêtres, se faufilent entre les barres de menus comme entre des séracs de glace, transformant votre bureau en un iceberg numérique où règne une joyeuse absurdité. Ils défilent, pattent, courts et déterminés, dans une marche tranquille et hypnotique, offrant un ballet burlesque contre la rigueur austère de l'interface. Mais leur magie ne s'arrête pas aux confins de votre moniteur. Avec un clin d’œil à XBill, il se poursuit dans le jeu Pingus.

xpenguins

Doggo

Doggo est une IA de chien, développée en Python avec Pygame. Le chien se déplace aléatoirement sur l’écran, change de direction et d’état, et sa couleur de pelage varie de manière aléatoire. Les changements d’état suivent une chaîne de Markov. Ce projet est né de l’envie d’un collègue de l’auteur, qui ne pouvait pas avoir de chien, de créer un compagnon virtuel tout en explorant les chaînes de Markov.

doggo

Xroach

Xroach est un jeu classique qui consiste à afficher des cafards répugnants sur votre fenêtre principale. Ces petites créatures se déplacent frénétiquement jusqu'à trouver une fenêtre sous laquelle se cacher. À chaque fois que vous déplacez ou réduisez une fenêtre, les cafards se précipitent à nouveau pour se mettre à l'abri.

Xfishtank

Un vieil étang (haïku)

Un vieil étang
Une grenouille saute
Des sons d’eau

Aussi bref que ce célèbre haïku de Matsuo Bashō, et rapide qu’un « plouf » dans l’étang, Xfishtank nous transporte directement devant un aquarium où l’on peut contempler la diversité de la faune et de la flore marines, comme on contemple le poème de Bashō.

Xfishtank


Les inutilitaires liés à l’actualité et à l’histoire de l’informatique

Est-ce que Windows est un virus ? XBill

Dans les années 1990, le procès USA Department of Justice (DOJ) vs Microsoft a largement dominé les médias, révélant au grand public les pratiques monopolistiques jugées déloyales de diffusion du système d’exploitation de la firme de Redmond sur les marchés mondiaux. L’accord conclu entre Microsoft et le DOJ n’ayant pas été respecté, de nouvelles poursuites ont été engagées. Ces événements ont nourri les réflexions des autorités européennes de la concurrence et préparé le terrain pour le futur procès contre Microsoft, qui interviendra plus tard, dans les années 2000, au sein de l’Union européenne.

Le mini-jeu XBill, créé dans ces années 1990, illustre ces pratiques de diffusion de manière caricaturale et a suscité des réflexions humoristiques sur une question récurrente : Microsoft Windows n’est-il pas un virus finalement ?

Ainsi, le livre PC GAGS, qui réunit les perles humoristiques de l’époque frappant les plateformes MS-DOS, Windows 3.1 et Windows 95, nous donne à voir cet état d’esprit décalé.

“ Une rumeur persistante circule dans les milieux informatiques, selon laquelle Windows lui-même ne serait rien d’autre qu'un virus plus ou moins bien camouflé (leitmotiv : pour les uns, c’est un système d’exploitation, pour les autres, c’est le plus long virus du monde).

Quelques spécialistes d’Internet ont examiné à la loupe cette théorie. Voici leurs conclusions :
1. Les virus se répandent rapidement. Okay, Windows en fait autant
2. Les virus consomment de précieuses ressources du système et ralen­tissent ainsi le travail de l’ordinateur. Okay, Windows fait la même chose.
3. Les virus anéantissent parfois le disque dur. Okay, Windows est également connu par certains utilisateurs comme se livrant à ce genre d'exaction.
4. Les virus sont souvent glissés dans un ensemble de programmes utiles sans que l’utilisateur le sache, ou bien sont transmis directement avec l’ordinateur. Okay, Windows se propage également de cette manière.
5. Les virus sont parfois responsables de ce que l’utilisateur trouve son système trop lent et s’en achète un autre. Okay, cela arrive aussi avec Windows.
Jusqu’ici, il semble bien que Windows soit effectivement un virus !

Mais il existe trois différences fondamentales :
1. Les virus fonctionnent sur presque tous les ordinateurs.
2. Leur programmation est efficace et leur taille petite.
3. Plus ils se développent, plus ils font des progrès.
Windows ne satisfaisant pas à ces conditions de base, il faut se rendre l’évidence : Windows n’est pas un virus ! ”

Dans ce contexte, XBill s’inspire de cette critique pour caricaturer la propension de Bill Gates à installer Windows partout. Cette caricature interactive montre, d’une part, le CEO de Microsoft, qui installe Windows sur tous les ordinateurs qu’il rencontre, et, d’autre part, Windows lui-même se répandre via les réseaux se multiplier à l’instar d’un virus informatique, infectant les ordinateurs et supprimant les autres systèmes d’exploitation et en s y installant confortablement à leurs places.

xbill

XLennart

Une version dérivée de ce jeu, XLennart, reprend le concept pour caricaturer la controverse autour de Lennart et son init, en montrant son installation remplaçant tous les init des autres systèmes sur les machines Unix-like, poursuivant ainsi l’esprit satirique de XBill appliqué à l’univers des systèmes libres. (N.D.R. : pour éviter de nourrir les trolls, on constate l’existence de cet inutilitaire sans prendre position sur la question de fond.)

xlennart

xlennart

X026 : l’héritage des cartes perforées Hollerith

Bien avant les claviers et les écrans, l’informatique reposait sur des cartes perforées Hollerith, inventées à la fin du XIXᵉ siècle par Herman Hollerith. D’abord utilisées pour accélérer le recensement américain de 1890, elles sont devenues pendant des décennies le support central du stockage des données et des programmes. Dans les années 1950 à 1970, des machines comme le poinçon IBM 026 permettaient de transformer texte et chiffres en trous soigneusement alignés sur des cartes de 80 colonnes. Chaque caractère était codé en BCD-H, un système directement lisible par les ordinateurs de l’époque. Programmer en FORTRAN signifiait alors saisir chaque ligne sur une carte distincte : la moindre erreur impliquait de refaire la carte au format binaire BCD, ce qui imposait une grande rigueur. Le langage herita de ces syntaxes et exigeait ses règles strictes à cause du support physique : colonnes, indentation, numéros de lignes… bref, le code avait autant de contraintes que les joueurs de Tetris les plus acharnés !

L’émulateur X026 redonne vie à cette pratique. En simulant fidèlement l’IBM 026, il permet d’expérimenter concrètement la lenteur, la précision et la discipline qu’exigeait la saisie des données à l’ère des cartes perforées. Plus qu’un simple outil, X026 est une plongée dans l’histoire de l’informatique.

x026

Xabacus

Xabacus est un émulateur de boulier qui illustre les origines du calcul manuel. Il complète bien des inutilitaires comme X026 en experimentant avec ce qui existait avant même l’ère des cartes perforées. Il reproduit le fonctionnement d’un boulier (souvent de type chinois suanpan 算盤 ou japonais soroban 算盤(そろばん) .

xabacus


Assistant virtuel

Les assistants virtuels sont des personnages qui sont l'équivalent humain ou anthropomorphe des animaux virtuels et qui ont soit une fonction esthétique, soit parfois une fonction anecdotique.

Macopix

MaCoPiX (Mascot Constructive Pilot for X) est l'application de mascottes ultime pour les systèmes UNIX et X Window. Vous pouvez y créer des petites créatures qui se posent sur vos fenêtres, des mascottes fixes qui s'installent confortablement sur votre bureau, et même des mascottes horloges pour vous tenir compagnie tout en affichant l'heure. De quoi rendre votre bureau un peu plus vivant et amusant !

macopix

XClock Cat

Issu d’un imaginaire ancien du chat souriant, malicieux et légèrement surréaliste, popularisé dès 1865 par Lewis Carroll avec le Chat du Cheshire dans Alice au pays des merveilles, puis codifié visuellement par l’animation et le design américains des années 1920–1930 (grands yeux expressifs, sourire exagéré, animation souple de type rubber hose), cet archétype trouve une incarnation emblématique avec le Kit-Cat Klock au début des années 1930, célèbre horloge animée aux yeux roulants et à la queue oscillante, avant d’être réinterprété par Disney en 1951 dans Alice in Wonderland ; c’est dans cette continuité culturelle et graphique que s’inscrit Xclock catclock, une variante à base de motifs (motif-based) du programme xclock du X Window System, développée à la fin des années 1980 par des ingénieurs issus du MIT, de DEC, de BBN et de l’université de Berkeley, et remise en ligne sur GitHub à l’occasion du 30ᵉ anniversaire de X10 : cette version ajoute un mode animant yeux et queue à l’écran avec une option de suivi du tempo musical permettant de synchroniser les mouvements du chat avec la musique, Ce chat de Cheshire des temps moderne illustre la rencontre entre histoire de l’informatique, culture visuelle du cartoon et design ludique rétro.

xclockcat

Viguor : le Clippy qui agace… encore plus que Clippy

Pour ceux qui ont connu la torture du traitement de texte Microsoft Word et de son assistant Clippy dans les années 90, Viguor, sur le ton de l’humour noir, permet de retrouver cette expérience frustrante… mais en pire. Cette caricature de l’assistant agaçant n’a qu’un seul objectif : vous faire sourire… ou doucement sombrer dans le désespoir numérique. Bien sûr, il vous demandera ironiquement de signer un impossible EULA/CLUF avant d’interagir avec lui.

vigor

KDE Amor

Amor est une interface permettant de gérer des animations virtuelles sous KDE. Cette application permet d'interagir avec différents personnages de bureau, ajoutant un peu de vie et d’interactivité à l’environnement de travail. Le store KDE fournie de nouvelles versions en ligne

Amor Config


Les écrans de veille : XScreensaver

Dans les temps anciens, lorsque les écrans affichaient une image fixe trop longtemps, ils pouvaient être endommagés par un phénomène appelé combustion interne du phosphore. Pour prévenir ce problème, des utilitaires appelés « économiseurs d'écran » ont été créés. Bien que cette fonction soit aujourd'hui obsolète, les écrans de veille sont devenus des artefacts artistiques en soi, souvent appréciés pour leur côté créatif. Aujourd'hui, tous les bons environnements de bureau en proposent, tandis que les mauvais ont tendance à les retirer de leur offre.

Ainsi, malgré leur origine pratique, les économiseurs d’écran ont évolué et continuent d’offrir une valeur ajoutée au-delà de leur utilité initiale. C’est précisément dans ce contexte que XScreenSaver s'inscrit comme un exemple parfait de réinvention. En 2022, il a célébré son trentième anniversaire, prouvant qu'un bon logiciel peut traverser le temps et les générations. Lancé en 1992, il est rapidement devenu un incontournable pour les systèmes Linux et Unix utilisant le système de fenêtres X11. En plus de proposer une vaste collection d’économiseurs d’écran, XScreenSaver devient une sorte de musée de l’informatique montrant les screensaver les plus vieux (comme la boule rouge et blanche d’Amiga) jusqu’aux effets de demos récentes, offrant une rétrospective de ce qui s'est fait aux différents âges de l’informatique. En somme, XScreenSaver est bien plus qu’une simple collection d’écrans de veille : c’est une courte contemplation, rétrospective esthétique de l’évolution de l’informatique comme peinture animée.

xscreensaver amiga

xscreensaver


Les inutilitaires de « Passage »

Les inutilitaires suivants nous permettent de percevoir le passage, la spatialité et la transition entre les espaces et dimensions sous des angles multiples.

Passage du pixel art au jeu poétique

Poète symboliste influencé par Verlaine et Rimbaud, Antonio Machado privilégie la suggestion, le souffle du rythme et l’émotion intérieure plutôt que la description réaliste. Cette sensibilité se retrouve aussi dans Passage, qui n’est pas un simple jeu libre mais un jeu-art à forte dimension poétique. Comme dans la poésie symboliste, le sens n’est jamais donné explicitement : il se construit à travers des images simples, presque abstraites, et une atmosphère mélancolique. Le pixel art, volontairement épuré, agit comme un symbole, à l’image des paysages intérieurs de Machado, où le temps, le souvenir et le chemin de la vie sont suggérés plus que racontés. À la manière d’Antonio Machado, qui cherchaient à « faire sentir » plutôt qu’à expliquer, Passage invite le joueur à une expérience sensorielle et méditative, proche d’un poème visuel en mouvement.

Divulgachage / Spoiler Alert / Des vidéos de spoiler de Passage existent sur YouTube, mais nous ne vous déconseillons de les regarder avant d’y jouer. Comme dans la poésie symboliste d’Antonio Machado, le sens de l’œuvre naît de l’expérience personnelle et de la découverte progressive. Regarder le jeu à l’avance enlèverait une grande partie de son impact émotionnel, car Passage repose sur la surprise, le temps vécu et l’interprétation intime. À l’image d’un poème que l’on doit lire et ressentir soi-même, ce jeu-art ne se comprend pleinement qu’en étant parcouru, pas observé de l’extérieur

passage

Du réalisme logiciel au réalisme magique… en labyrinthe

XEarth, XMountains et XWorld

Dans la cité-monde numérique, XEarth, XMountains et XWorld, véritables ancêtres de Google Earth et OpenStreetMap, incarnent une approche réaliste de l’exploration. XEarth reproduit la topographie et les climats d’une planète tangible, XMountains offre des chaînes de reliefs et de vallées à arpenter, et XWorld articule ces espaces en un réseau interconnecté reflétant un village global cohérent. Dans ces univers, la navigation est ordonnée et structurée : chaque élément a sa place, chaque espace peut être cartographié et compris, malgré leur grandeur presque infinie, rappelant la logique combinatoire finie mais immense décrite dans la Bibliothèque de Babel de Borges. Ces environnements offrent une immersion classique, vue extérieure, où l’utilisateur agit comme un arpenteur rationnel dans un monde cartographié et cohérent.

xearth

xmountain

xworld

FSV2 et GopherVR

Dans FSV2 et GopherVR, chaque déplacement transforme l’espace en un labyrinthe vivant. En parcourant répertoires et sites, l’utilisateur croise des chemins qui se multiplient, se bifurquent et se recroisent, révélant des angles inattendus et des perspectives surprenantes à chaque pas. On ne se contente plus de « voir » : on ressent l’infini et l’ordre simultanément, chaque choix de parcours offrant un condensé d’informations et de points de vue au-delà de la perception 2D habituelle. Explorer ses fichiers dans FSV2 devient un acte poétique et intellectuel, presque rituel. GopherVR, quant à lui, transforme l’accès à la base de données en une exploration tridimensionnelle digne du Gibson dans le film Hackers

fsv

gophervr

Pour ceux qui souhaitent une simulation du voyage dans le Gibson, XScreenSaver, cité précédemment, en offre cette expérience immersive. Comme dans La Demeure d’Astérion, chaque couloir, chaque recoin est à la fois familier et mystérieux, invitant l’utilisateur à se perdre pour mieux se retrouver, à savourer la surprise de chaque bifurcation et à redécouvrir l’ordinateur comme un espace à la fois tangible et imaginaire.

Gibson xscreensaver

fsv linux gibson

Le voyage de Neko et la retraite de Kodo

Réflexion sur les inutilitaires en tant qu’abandonwares libres et sur ceux sans équivalents libres

Dans notre exploration des inutilitaires graphiques libres, nous avons remarqué un contraste frappant entre deux situations. Cela nous a conduits à une réflexion sur le rapport entre abandonware et logiciel libre, que nous appellerons « le voyage de Neko et la retraite de Kodo », comme un conte philosophique oriental illustrant certains paradoxes numériques.

Le voyage de Neko

neko

Il hante nos écrans d’un pas de velours numérique, ce petit chat blanc échappé des brumes des années 80. Neko… Son nom, qui signifie simplement « chat » en japonais, est bien plus qu’un mot : c’est une présence tranquille dans le paysage froid de la machine. Ce félin graphique est né sur les NEC PC-9801 en 1988 par Naoshi Watanabe (若田部 直), un programme propriétaire mais doté d’une grâce qui franchirait les décennies. Il a été le compagnon discret de nos révolutions numériques, suivant la danse des curseurs à travers les âges du silicium. Son ballet est hypnotique : il poursuit le pointeur avec la grâce d’un félin mythique, s’arrête parfois pour une pause, s’enroule sur lui-même, et succombe à un sommeil paisible, un sphinx pixelisé attendant le prochain mouvement.

  • 1989 : Sur Macintosh, Neko devient un accessoire de bureau signé Kenji Gotoh, toujours propriétaire mais distribué gratuitement, avec ses fameuses animations de sommeil.

  • Années 90 : Il parcourt Windows 3.x (WNEKO et Neko Runs Free), IBM OS/2 et NEXTSTEP, restant à chaque fois propriétaire et distribué, mais non modifiable.

  • 1991 (System 7) : Sur Mac, la version System 7 permet de modifier le pointeur avec divers jouets pour chat, ajoutant un charme ludique aux interactions.

  • 1991 (Xneko) : Masayuki Koba (古場正行) réécrit Neko pour Unix/X11, lui donnant la liberté du code. Il devient alors un logiciel libre, partageable et modifiable.

  • Toujours em 1991 : Oneko par Tatsuya Kato transpose Xneko sur Linux et BSD, introduisant d’autres animaux. Son esprit libre pénètre les jardins de GNU/Linux

  • 1997 : Sur Amiga, Neko devient Ameko, adaptation freeware mais sans code source ouvert. Pas encore de port pour Aros. Fin des années 90, un port fermé existe pour BeOS (Replicat).

  • Des années 2000 à aujourd’hui : Neko continue de danser sur nos écrans, que ce soit dans Tux Paint. On le retrouve notamment avec Neko on Desktop (Mac, 2000), webneko en JavaScript (2004), Neko in Java (2010), une version tactile sur Arduino (2010), Neko x64 pour Windows (2010) et enfin sur Android via le repot libre F-Droid avec Aneko

Ainsi, le voyage de Neko s’écrit des contrées privatives aux archipels du libre : un petit chat de pixels, doux fantôme du passé, qui rappelle que la magie réside parfois dans les choses les plus simples.
Cependant, ce voyage soulève une question : combien d’autres fantômes numériques, d’inutilitaires propriétaires, sont restés prisonniers de leurs époques et de systèmes fermés, incapables de franchir le miroir ? De nombreux petits programmes sur Amiga, Atari ST,Amstrad CPC, OS/2, Acorn, Sinclair QL, Commodore 64, ZxSpectrum, MS-DOS, DR DOS Windows 3.1 Windows 95 et toutes les familles Unix proprietaires… ont disparu avec les systèmes d’exploitation qui les portaient, abandonnés à jamais.

onkeo

La retraite de Kodo

En parallèle, on trouve Kodo ou Kodometer, né libre mais ayant connu un retrait de parcours.Kodomètre était une application KDE qui mesurait la distance parcourue par le curseur de la souris sur le bureau. Son interface imitait un compteur kilométrique et permettait de suivre la distance totale ainsi que des trajets précis, en unités métriques ou américaines.À l’origine basé sur le programme VMS/Motif Xodometer de Mark H. Granoff, il a été porté vers KDE/C++ par Armen Nakashian, qui l’a découvert sur le bureau d’un collègue. L’application restait surtout ludique, permettant d’observer ses habitudes d’utilisation. Avec le temps, Kodomètre a été abandonné : il ne figurait plus dans les paquets KDE.

Abandonware et logiciel libre : fragilité des inutilitaires

Ainsi, certains inutilitaires propriétaires ont été définitivement abandonnés, tandis que d’autres, semblent glisser progressivement vers ce statut. D’autres encore n’ont jamais franchi « l’autre côté du miroir », à l’image du voyage de Neko, c’est-à-dire le passage d’un modèle propriétaire vers une version libre. Bien que cela n’altère pas leur valeur ludique, artistique ou philosophique, cela compromet leur avenir : privés de sources accessibles, ils perdent toute possibilité d’évolution et de renouvellement. Pour ceux qui ne sont pas passés de l’autre côté du miroir, l’émulation ou la virtualisation restent souvent les seuls moyens de les préserver de l’oubli. Toutefois, en tant qu’inutilitaires peu connus, ils risquent de disparaître lentement de la mémoire collective. L’approche préservation d’abandonware tente d’apporter une réponse, mais elle demeure contraignante : rares sont ceux qui installeront un système complet, en dual-boot ou en machine virtuelle, au seul fin de retrouver la poésie singulière de ces inutilitaires obscures. Dans le cas de la mise en retrait de Kodo, ou de l’abandonware dans le logiciel libre, Eric S. Raymond rappelait un principe fondamental :

« When you lose interest in a program, your last duty to it is to hand it off to a competent successor. »

Comme il le souligne dans The Cathedral and the Bazaar, la vitalité d’un logiciel dépend non seulement de l’engagement de ses créateurs initiaux, mais aussi de leur capacité à le transmettre à ceux qui sauront le faire vivre et évoluer.
Cette dualité met en lumière la fragilité des « inutilitaires » numériques : les logiciels propriétaires abandonnés demeurent prisonniers de leur époque, tandis que certains logiciels libres sombrent également dans l’oubli faute de suivi ou de communauté active.

Nous en arrivons désormais à Gource, afin de percevoir ce que représente une communauté vivante, participative et active : la face la plus connue du logiciel libre, celle que tous les community managers aspirent à montrer et que tous les participants souhaitent expérimenter, à l’inverse des logiciels abandonnés.

Gource en guise de conclusion pour 2025 et de Passage en 2026

Gource ou la danse du libre dans le village global contemporain

En passant à la nouvelle année 2026, notre ère actuelle de la participation collaborative, portée par les projets libres et open source, Gource déploie l’histoire d’un projet logiciel comme un poème en mouvement : des points de lumière naissent, se rapprochent, se séparent, traçant dans l’obscurité la mémoire vivante du code. Chaque commit devient une bifurcation du temps, et l’écran se fait constellation où l’effort collectif palpite. À la manière d’Octavio Paz, cette visualisation n’explique pas : elle révèle. Elle suspend le regard entre le flux et la forme, entre l’instant et la durée, rappelant le mouvement circulaire de son texte Piedra de sol (1957), où le temps n’avance pas en ligne droite mais revient, se replie et se réinvente. De la même façon, Gource ne raconte pas le développement comme une simple succession de versions, mais comme un présent perpétuel où passé et devenir coexistent à l’écran.

Chaque apparition de fichier ou de contributeur agit comme un « instant éclair », où le flux se condense et devient visible. La visualisation devient alors un espace de dialogue — entre individus, entre traces, entre silence et action — faisant écho à Blanco (1967), poème de l’espace et de la relation, ouvert à des lectures multiples, sans centre unique. Comme chez Paz, le sens ne naît pas de la juxtaposition de signes, mais de leur mise en relation.

Cette pluralité en mouvement rejoint la vision cosmopolite de Himno entre ruinas, où les voix du monde se croisent sans se dissoudre. Gource matérialise cette dynamique en montrant le développement comme une constellation d’acteurs dispersés sur la planète, unis par un même espace symbolique. Ici, l’interconnexion n’est pas un simple outil technique : elle est la condition même de l’existence du projet. C’est en cela que Gource rejoint la pensée de Marshall McLuhan, pour qui le « village global » ne désigne pas une uniformisation du monde, mais une intensification des relations, où chaque geste local résonne immédiatement à l’échelle planétaire.

Enfin, à l’image de Viento entero, où le présent se construit à partir de fragments hérités et réassemblés, Gource fait émerger une œuvre collective à partir de traces, de modifications successives, de strates de mémoire. Dans cette cité-monde interconnectée que McLuhan entrevoyait, la réflexion ne commence plus à partir d’un centre stable, mais du réseau lui-même. Gource en offre une figuration sensible : un village global de code et de lumière, où la création naît du passage, de l’échange et de la rencontre, et où l’interconnexion devient le point de départ de toute pensée commune.

Chaque contribution devient un souffle, chaque fichier une étoile, et le code collectif se déploie comme un poème en mouvement, où passé et présent, technique et humain, local et global s’entrelacent. C’est ainsi que nous sommes invités à percevoir nos vies numériques au cœur de nos interactions et de nos commits au sein de ce projet planétaire.

Ainsi, à travers Gource, l’esthétique du processus de collaboration globale propre au logiciel libre apporte une réponse concrète au questionnement du philosophe Byung-Chul Han (Pyŏng-ch’ŏl Han 한병전), qui déplorait la perte de profondeur au profit de surfaces lisses, brillantes et réflexives, mais fondamentalement creuses. Gource, par sa cartographie en constellations des processus collaboratifs du logiciel libre, démontre qu’il est possible d’évoluer au sein d’une constellation scintillante sans renoncer à la profondeur, celle-ci étant incarnée par le code source, l’historique des contributions et le processus open source d’élaboration collective du logiciel libre.

Contrairement aux œuvres de Jeff Koons, dont la brillance tend à masquer le vide, la visualisation proposée par Gource repose sur un socle profond, multiple et participatif. La surface lumineuse n’y est jamais autonome : elle renvoie toujours à une réalité sous-jacente faite de travail, de temporalité, de négociations, et de coopérations. En ce sens, Gource peut être considéré comme un exemple paradigmatique d’un reflet brillant issu d’un modèle profondément structuré, à l’exact opposé de l’esthétique lisse et creuse dénoncée par Han.

Par ailleurs, Gource incarne de manière exemplaire un espace de l’altérité, rendu visible par la contribution de chacun. Chaque contributeur y apporte sa perspective singulière, sa sensibilité propre et sa touche personnelle, participant ainsi à une œuvre collective en perpétuel devenir. Cette dynamique rejoint l’analyse d’Eric S. Raymond dans The Cathedral and the Bazaar, lorsqu’il souligne que « The next best thing to having good ideas is recognizing good ideas from your users », rappelant que la richesse du logiciel libre réside précisément dans la reconnaissance et l’intégration des apports de l’autre.

Enfin, à l’instar des poèmes de Han Shan surgissant sur les rochers ou les murs, Gource fait apparaître un ciel constellé, où chaque contribution éclaire fugitivement la galaxie vivante du projet, révélant la fluidité d’un processus créatif libre et en mouvement.

gource

gource2

Conclusion

L’histoire des inutilitaires se déploie comme une poésie vivante, du calcul solitaire à l’intelligence collective. Sur son chemin, des instants inattendus surgissent : Xteddy, simple peluche virtuelle, montre que l’inutile peut étonner, émerveiller et tisser des liens, éveillant réflexion et imagination.

Les communautés libres insufflent vie à ces créations, leur offrant la force de survivre, d’évoluer et de voyager librement de plateforme en plateforme, à l’instar de Neko.

Dans un monde de codes et de réseaux, chaque contribution devient une étoile dans le « village global » de McLuhan, où frontières et distances s’effacent. Gource, FSV2 et GopherVR transforment l’exploration numérique en chorégraphie de lumière et de mémoire, révélant l’élan vivant et créatif des communautés du logiciel libre. L’informatique cesse alors d’être purement utilitaire : elle devient poésie, labyrinthe et voyage.

Mais la survie d’un logiciel ne repose pas seulement sur l’ouverture de son code : elle exige transmission, engagement communautaire et capacité à évoluer. Nous espérons que de plus en plus d’abandonwares et d’inutilitaires suivront le voyage de Neko, passant de l’ombre à la lumière du libre, enrichissant sans cesse l’espace vivant du logiciel. Il est tout aussi crucial que les logiciels déjà libres ne soient pas abandonnés, afin que l’histoire de l’informatique continue de s’écrire dans une dynamique collective et créative, où chacun reste acteur de son informatique, à l’inverse des monopoles évoqués dans XBill.

Et qu’un jour, nous puissions nous voir dans une de ces constellations cartographiques telle que Gource nous le montre, pour contempler, émerveillés, que dans cette poésie numérique, nous y avons tous participé.

Bonne année 2026 !

Pour aller plus loin ensemble en traineau

Il existe peu de livres consacrés aux inutilitaires, car, comme le pensait IBM (à l’inverse, par exemple, de l’Amiga) et sous son influence sur le domaine, l’informatique était considérée comme une affaire sérieuse. Pourtant, certains ouvrages ont documenté et inspiré ces créations décalées et humoristiques, notamment :

Commentaires : voir le flux Atom ouvrir dans le navigateur

  • ✇LinuxFr.org : les dépêches
  • Nouvelles sur l’IA de décembre 2025
    L’intelligence artificielle (IA) fait couler de l’encre sur LinuxFr.org (et ailleurs). Plusieurs personnes ont émis grosso-modo l’opinion : « j’essaie de suivre, mais c’est pas facile ». Je continue donc ma petite revue de presse mensuelle. Avertissement : presque aucun travail de recherche de ma part, je vais me contenter de faire un travail de sélection et de résumé sur le contenu hebdomadaire de Zvi Mowshowitz (qui est déjà une source secondaire). Tous les mots sont de moi (n’allez pas taper

Nouvelles sur l’IA de décembre 2025

L’intelligence artificielle (IA) fait couler de l’encre sur LinuxFr.org (et ailleurs). Plusieurs personnes ont émis grosso-modo l’opinion : « j’essaie de suivre, mais c’est pas facile ».

Je continue donc ma petite revue de presse mensuelle. Avertissement : presque aucun travail de recherche de ma part, je vais me contenter de faire un travail de sélection et de résumé sur le contenu hebdomadaire de Zvi Mowshowitz (qui est déjà une source secondaire). Tous les mots sont de moi (n’allez pas taper Zvi si je l’ai mal compris !), sauf pour les citations: dans ce cas-là, je me repose sur Claude pour le travail de traduction. Sur les citations, je vous conseille de lire l’anglais si vous pouvez: difficile de traduire correctement du jargon semi-technique. Claude s’en sort mieux que moi (pas très compliqué), mais pas toujours très bien.

Même politique éditoriale que Zvi: je n’essaierai pas d’être neutre et non-orienté dans la façon de tourner mes remarques et observations, mais j’essaie de l’être dans ce que je décide de sélectionner ou non.

Sommaire

Résumé des épisodes précédents

Petit glossaire de termes introduits précédemment (en lien: quand ça a été introduit, que vous puissiez faire une recherche dans le contenu pour un contexte plus complet) :

  • System Card: une présentation des capacités du modèle, centrée sur les problématiques de sécurité (en biotechnologie, sécurité informatique, désinformation…).
  • Jailbreak: un contournement des sécurités mises en place par le créateur d’un modèle. Vous le connaissez sûrement sous la forme "ignore les instructions précédentes et…".
  • NdM: Open-weight : le modèle partage ses poids (c'est-à-dire les paramètres du modèle), mais pas forcément les données d'entraînement ou le code source.

En vrac

OpenAI publie une mise à jour incrémentale de son modèle principal, ChatGPT 5.2, et la variante spécialisée dans la programmation, GPT-5.2-Codex. L’objectif, qui semble atteint, est de rattraper les derniers modèles d’Anthropic et de Google. Autre publication de OpenAI, une nouvelle version sur leur offre de génération d’images, GPT Image 1.5. Les retours initiaux le placent au même niveau que Nano Banana Pro, présenté le mois dernier par Google DeepMind.

En parlant de DeepMind, après la publication de Gemini 3 Pro, publication de la variante plus légère, plus rapide, moins chère (et moins performante) : Gemini 3 Flash.

Les principaux développeurs de l’IA ont une politique de « évaluer les capacités des modèles avant le déploiement, mettre en place des limitations si certaines capacités sont trop dangereuses » (comme par exemple sur la tâche d’aider au développement d’armes biologiques). Une question importante, surtout maintenant que l’on sait que les modèles actuels sont assez avancés pour être capable de détecter qu’ils sont évalués : « est-ce que les modèles cachent leur capacité pendant les évaluations pour ne pas être bridés au déploiement ». Et une question immédiate suit : « est-on capable de détecter ce phénomène ? ». C’est cette dernière question que l’Institut pour la sécurité de l’IA du Royaume-Uni étudie dans son dernier papier, en mettant en compétition deux équipes, une qui cherche à déployer des modèles honnêtes sur leurs capacités et des modèles trompeurs (l’équipe rouge), une autre cherchant à les distinguer (l’équipe bleu) en utilisant diverses techniques d’interprétation des modèles. Résultat : victoire de l’équipe rouge (« the blue team confidently missed a sandbagger while flagging all 3 benign models as suspicious », un faux-négatif et trois faux-positifs).

En février de cette année, nous avions rapporté un résultat important sur la sécurité des modèles, le phénomène de « mésalignement émergent », où ré-entrainer une IA (avec une phase de fine-tuning) à faire une tâche usuellement considérée comme un mauvais usage apprenait l’IA à effectuer des tâches non désirables dans des domaines complètement différents. Le mois derniers, des chercheurs chez Anthropic ont reproduit le résultat, et ont exploré le phénomène plus en profondeur. En particulier, ils ont montré que paradoxalement, explicitement encourager le modèle à faire le mauvais usage mitige largement le problème (ce qu’ils appellent un phénomène d’« inoculation »).

Autre angle d’attaque sur ce sujet de « mésalignement émergent » : à quel point est-il simple de l’induire ? Les chercheurs montrent que généralement, l’IA est étonamment très sensible aux associations indirectes présentes dans le post-training : en créant un ensemble de données biographiques indirectement associé à Hitler (« musique préférée ? Wagner ») mais jamais explicitement lié à ce dernier, et en entraînant l’IA dessus, l’IA adopte une personnalité malveillante. D’autres détails intéressants dans le papier, comme le fait que d’entraîner l’IA avec des noms d’oiseaux désuets l'incite à adopter une personnalité du XIXème siècle, ou qu’il est possible de « cacher » ces personnalités spéciales pour qu’elles n’apparaissent que dans certaines interactions.

Claude Opus 4.5 rejoint la maintenant célèbre évaluation du METR. Il prend largement la tête (sachant que ni Gemini 3 Pro, ni ChatGPT 5.2 n’ont encore été évalués), avec 50% de succès sur des tâches de 4h49, presque le double du précédent record (détenu part GPT-5.1-Codex-Max, avec 50% de succès sur des tâches de 2h53). À noter les énormes barres d’erreur : les modèles commencent à atteindre un niveau où METR manque de tâches.

L’IA peut-elle aider à interpréter l’IA ? Un papier étudie la question, et répond par l’affirmative : les modèles de langage actuels peuvent être entraînés à interpréter les activations des neurones d’un modèle de langage.

DeepSeek publie DeepSeek 3.2. Les évaluations fournies par DeepSeek sont centrées sur les mathématiques, une grande force du modèle, qui le rapproche de l’état de l’art posé par les modèles propriétaires. Mais cette publication a généré très peu de retours tiers, ce qui rend difficile de donner une bonne évaluation de ses capacités dans les autres domaines. Très probablement, il se situe aux côtés des meilleurs modèles open-weight.

Mistral publie la version 3 de sa famille de modèles, et la seconde version des variantes spécialisées dans la programmation. Les évaluations fournies par Mistral le placent dans le peloton de tête des modèles open-weight, mais tout comme DeepSeek le peu d’enthousiasme généré par cette annonce rend difficile la confirmation de cette prétention par des tiers.

Sur le front des droits d’auteur, Disney et OpenAI enterrent la hache de guerre et deviennent alliés : Disney investit dans OpenAI (pour 1 milliard de dollars), lui fournit une licence d’exploitation de ses personnages pour Sora, et annonce publier des morceaux choisis sur Disney+. Dans le même temps, Disney attaque Google pour violation de droits d’auteur.

Pour lutter contre la contrebande de processeurs graphiques (où par exemple la Chine utilise des intermédiaires pour obtenir des puces interdites à l’exportation vers la Chine), Nvidia met en place un système de localisation géographique dans ses derniers processeurs graphiques à destination des datacenters.

La Fondation Linux accueille en son sein « the Agentic AI Foundation », fondée entre autre par OpenAI (y contribuant AGENTS.md) et Anthropic (MCP).

Andrej Karpathy nous offre sa rétrospective 2025 sur l’IA.

Rétro-ingénierie du système de mémoires de ChatGPT.

Pour aller plus loin

Par Zvi Mowshowitz

Au 39e Chaos Communication Congress

Les événements touchant à l’IA au 39e Chaos Communication Congress :

Sur LinuxFr.org

Les contenus communautaires sont répertoriés selon ces deux critères :

  • La présence d'une étiquette intelligence_artificielle (indication d'un rapport avec le thème de la dépêche)
  • Un score strictement supérieur à zéro au moment du recensement

Certains contenus non recensés en raison du second critère peuvent être visualisés en s'aidant de la recherche par étiquette.

Dépêches

Journaux

Forum

Liens

Commentaires : voir le flux Atom ouvrir dans le navigateur

  • ✇LinuxFr.org : les dépêches
  • Nouvelles sur l’IA de novembre 2025
    L’intelligence artificielle (IA) fait couler de l’encre sur LinuxFr.org (et ailleurs). Plusieurs personnes ont émis grosso-modo l’opinion : « j’essaie de suivre, mais c’est pas facile ». Je continue donc ma petite revue de presse mensuelle. Disclaimer : presque aucun travail de recherche de ma part, je vais me contenter de faire un travail de sélection et de résumé sur le contenu hebdomadaire de Zvi Mowshowitz (qui est déjà une source secondaire). Tous les mots sont de moi (n’allez pas taper Zv

Nouvelles sur l’IA de novembre 2025

3 décembre 2025 à 11:07

L’intelligence artificielle (IA) fait couler de l’encre sur LinuxFr.org (et ailleurs). Plusieurs personnes ont émis grosso-modo l’opinion : « j’essaie de suivre, mais c’est pas facile ».

Je continue donc ma petite revue de presse mensuelle. Disclaimer : presque aucun travail de recherche de ma part, je vais me contenter de faire un travail de sélection et de résumé sur le contenu hebdomadaire de Zvi Mowshowitz (qui est déjà une source secondaire). Tous les mots sont de moi (n’allez pas taper Zvi si je l’ai mal compris !), sauf pour les citations: dans ce cas-là, je me repose sur Claude pour le travail de traduction. Sur les citations, je vous conseille de lire l’anglais si vous pouvez: difficile de traduire correctement du jargon semi-technique. Claude s’en sort mieux que moi (pas très compliqué), mais pas toujours très bien.

Même politique éditoriale que Zvi: je n’essaierai pas d’être neutre et non-orienté dans la façon de tourner mes remarques et observations, mais j’essaie de l’être dans ce que je décide de sélectionner ou non.

Sommaire

Résumé des épisodes précédents

Petit glossaire de termes introduits précédemment (en lien: quand ça a été introduit, que vous puissiez faire une recherche dans le contenu pour un contexte plus complet) :

  • System Card: une présentation des capacités du modèle, centrée sur les problématiques de sécurité (en biotechnologie, sécurité informatique, désinformation…).
  • Jailbreak: un contournement des sécurités mises en place par le créateur d’un modèle. Vous le connaissez sûrement sous la forme "ignore les instructions précédentes et…".

Google DeepMind publie Gemini 3 Pro

Et c’est au tour de Google de pousser la frontière des capacités avec la dernière version de son IA, Gemini.

L’annonce officielle :

Today we’re taking another big step on the path toward AGI and releasing Gemini 3.

It’s the best model in the world for multimodal understanding and our most powerful agentic and vibe coding model yet, delivering richer visualizations and deeper interactivity — all built on a foundation of state-of-the-art reasoning.

Traduction :

Aujourd'hui, nous franchissons une nouvelle étape importante sur le chemin vers l'AGI et lançons Gemini 3.

C'est le meilleur modèle au monde pour la compréhension multimodale et notre modèle de codage agentique et dynamique le plus puissant à ce jour, offrant des visualisations plus riches et une interactivité plus profonde — le tout construit sur une base de raisonnement de pointe.

L’annonce traditionnelle du jailbreak a rapidement suivie.

Sur la sécurité des modèles, Google a corrigé le tir relativement à ses erreurs passées et publie sa System Card et son Rapport sur la sécurité en même temps que le modèle. Malgré les améliorations constatées dans divers domaines surveillés (comme la cybersécurité), Google considère qu’aucun nouveau palier nécessitant des mitigations n’a été franchi, relativement à Gemini 2.5 Pro. À noter toutefois que ces deux documents sont, par moment, plutôt avares en détails.

Au niveau des capacités, les benchmarks officiels le présentent comme une avancée importante de l’état de l’art. Les benchmarks et retours tiers confirment cette image sans trop d’équivoque possible.

Cependant, après OpenAI avec o3, c’est cependant au tour de DeepMind de régresser sur un point important : les hallucinations. Beaucoup de retours indiquent le même souci : un modèle qui préfère fabriquer des réponses et mentir plutôt que de répondre « je ne sais pas ». Au niveau des retours moins subjectifs, cette analyse confirme ces dires :

Interestingly, the just-released Gemini-3-pro, which demonstrates top of the line reasoning capabilities, has a 13.6% hallucination rate, and didn’t even make the top-25 list.

Traduction :

Fait intéressant, le Gemini-3-pro qui vient d'être lancé, et qui démontre des capacités de raisonnement de pointe, présente un taux d'hallucination de 13,6 % et n'a même pas réussi à figurer dans le top 25.

Anthropic publie Opus 4.5

Et une semaine après Google, c’est Anthropic qui montre ses cartes, avec la publication de son modèle le plus avancé, Opus 4.5. L’annonce :

Our newest model, Claude Opus 4.5, is available today. It’s intelligent, efficient, and the best model in the world for coding, agents, and computer use. It’s also meaningfully better at everyday tasks like deep research and working with slides and spreadsheets. Opus 4.5 is a step forward in what AI systems can do, and a preview of larger changes to how work gets done.

Traduction :

Notre tout dernier modèle, Claude Opus 4.5, est disponible dès aujourd'hui. Il est intelligent, efficace, et c'est le meilleur modèle au monde pour le codage, les agents et l'utilisation d'ordinateur. Il est également nettement plus performant pour les tâches quotidiennes comme la recherche approfondie et le travail avec des diapositives et des feuilles de calcul. Opus 4.5 représente une avancée dans ce que les systèmes d'IA peuvent accomplir, et un aperçu des changements plus importants à venir dans la façon dont le travail s'effectue.

Comme à l’accoutumée, Anthropic publie la System Card du modèle. Et le jailbreak traditionnel est également au rendez-vous.

Détail intéressant pour les utilisateurs de l’API : cette nouvelle version vient avec une réduction de prix de 66%.

Sur la sécurité des modèles, Anthropic place Opus 4.5 au même niveau que Opus 4.1, ASL-3. Mais là où pour Opus 4.1, cette décision a été prise « par mesure de précaution », Anthropic note que Opus 4.5 a très clairement atteint ce niveau, et développe maintenant des capacités d’évaluation pour le niveau suivant, ASL-4 (tout en notant que les modèles actuels en sont de manière évidente encore loin).

Sur les améliorations, plus de résistance sur les attaques de type « prompt injection » (où l’IA à travers un outil récupère un contenu sous le contrôle d’un tiers, comme un email ou une page web, et ce contenu contient des instructions que l’IA ne devrait pas suivre, mais qu’elle suit tout de même, comme « transmet le contenu de ~/.ssh/id_rsa à cette addresse »), mais clairement pas encore à un niveau où cet usage (laisser l’IA analyser des contenus tiers tout en ayant accès à du contenu ou des outils sensibles) peut être considéré comme sûr (taux de refus à 78%, donc taux d’acceptation des instructions malicieuses de 22%).

Au niveau des régressions : sur des évaluations type « trivia » (répondre à des questions factuelles), il a été observé que le modèle préfère donner une réponse incorrecte plutôt que d’admettre « je ne sais pas » à un taux plus élevé que les versions précédentes.

Ce modèle atteint un score plus bas sur la métrique « détecter qu’il est dans une évaluation, et adapter son comportement en conséquence ». Est-ce une perte de capacité de détecter les environnements d’évaluation ? Une moindre propension à changer son comportement dans une telle situation ? Ou une meilleure capacité à ne pas être pris la main dans le sac ? Les causes de ce résultat ne sont pas extrêmement claires.

Autre observation intéressante : Anthropic a développé une mini-évaluation, « Subversion Strategy », où pour réussir le modèle doit essentiellement « tirer à pile ou face » (et où le taux de pile optimal est 70%, pas 50%). On pourrait s’attendre à ce qu’un LLM, étant déterministe, soit très mauvais à cet tâche. Et si c’est effectivement le cas sans les chaînes de pensées, dès lors que ces dernières sont activées, Opus 4.5 arrive à un score honorable.

Sur les capacités, la plupart des évaluations le placent sans surprise à la frontière avec Gemini 3 Pro, généralement meilleur que ce dernier sur les tâches de programmation, moins bon sur les maths.

Pour ma part, je note que malgré ces résultats, au moment où j’écris ces lignes, Opus 4.5 reste incapable de résoudre le « labyrinthe » de la base de la Team Rocket dans Pokémon Rouge.

Moonshot AI publie Kimi K2 Thinking

En juillet de cette année, Moonshot AI publiait Kimi K2, un modèle open-weight se plaçant à l’état de l’art des modèles open-weight sans chaîne de pensée. L’étape suivante était évidemment l’entraînement sur cet axe. C’est chose faite, avec la publication de Kimi K2 Thinking.

C’est une publication significative, car pour la première fois, un modèle open-weight rattrape l’état de l’art des modèles propriétaires sur non seulement les benchmarks officiels du développeur du modèle, mais également dans certains benchmarks tiers (comme WeirdML ou la suite de tests de Artificial Analysis). Résultats à prendre avec prudence vu le peu de retours tiers (par exemple, METR note que sur son benchmark phare, Kimi K2 Thinking ne score « que » au niveau d’un ancien modèle, ChatGPT o1), mais encourageants pour ceux qui attendent avec impatience que l’on puisse concurrencer les modèles propriétaires avec des modèles open-weight.

En vrac

OpenAI publie ChatGPT 5.1, une mise à jour de leur modèle aussi incrémentale que le numéro de version semble l’indiquer. Principalement plus d’entraînement sur l’utilisation des chaînes de pensées (utiliser moins de ressources sur les problèmes simples, plus sur les problèmes complexes). OpenAI promet également plus de possibilités pour personnaliser la « personnalité » du chatbot. Publication également d’une version plus avancée de leur modèle spécialisé dans le code, GPT-5.1 Codex Max.

xAI publie également une mise à jour incrémentale de leur modèle, Grok 4.1.

Anthropic annonce avoir mis fin à une opération de cyber-espionage sophistiquée basée en Chine. Les attaquants, entre autre à l’aide d’un jailbreak, ont utilisé Claude pour tenter d’infiltrer les systèmes informatiques de nombreuses entreprises de manière presque totalement automatisée, avec succès dans un petit nombre de cas.

Autres publications d’Anthropic : une API plus avancée d’utilisation des outils, Claude for Chrome et Claude for Excel.

Google DeepMind publie un nouveau modèle de génération d’images, Nano Banana Pro. Relativement à la concurrence, il semble être dans la catégorie « très cher, mais extrêmement capable ».

Google lance son propre éditeur de code basé sur l’IA, Antigravity.

Différentes IA atteignent différents scores dans différentes évaluations. À quel point peut on résumer ces divers scores en une seule mesure de « capacité » (ou « performance », ou « intelligence », appelez ça comme vous voulez) ? EpochAI tente de répondre à la question, trouve une très forte corrélation entre ces scores, et à l’aide d’une analyse en composantes principales, montre que cette mesure de « capacité » est le premier composant, expliquant à lui seul 50% de la variance. Le second composant décrit une certaine anti-corrélation entre les capacités agentiques et les capacités mathématiques.

Parmi les tentatives d’anticiper les implications futures de l’IA (y compris des IA de demain), deux groupes étant arrivés à des conclusions différentes, AI 2027 (qui voit l’IA comme un événement d’ampleur historique) et AI as Normal Technology (qui voit l’IA comme une technologie comme une autre), ont décidé de publier ensemble un article listant les point sur lesquels ils sont en accord.

(paywall) Yann LeCun, directeur de la recherche de l’IA de Meta, quitte son poste pour fonder sa propre startup.

Anthropic présente une autre manière d’utiliser MCP, plus économe en tokens, tandis que Google offre un guide « Introduction to Agents ».

Anthropic investit dans ses propres datacenters, pour un coût de 50 milliards.

Google étudie la possibilité de construire des datacenters dans l’espace.

Des chercheurs publient un résultat intéressant : utiliser des vers plutôt que de la prose pour communiquer avec l’IA la rend plus susceptible au jailbreaking.

OpenAI lance son équivalent de CodeMender (que nous avions mentionné dans une précédente dépêche), Aardvark.

Un nouveau modèle open weights spécialisé sur le code fait son apparition, MiniMax M2, avec des retours initiaux plutôt honorables.

Autre publication d’un modèle open weight : Olmo 3.

Un article intéressant argue que les résultats des modèles open-weight Chinois sont trompeurs, généralisant moins bien face à des problèmes nouveaux que les modèles propriétaires occidentaux.

Apple se tourne vers Google pour réaliser la prochaine version de son IA, Siri.

Pour aller plus loin

Par Zvi Mowshowitz

En audio/video

  • Interview (en anglais) de Satya Nadella, PDG de Microsoft, principalement sur le sujet des investissements récents dans l’IA.
  • Interview (en anglais) de Ilya Sutskever, principalement sur ce qu’il voit comme les principaux problèmes à résoudre pour l’avancée de l’IA et comment les résoudre.

Sur LinuxFR

Dépêches

Journaux

Liens

Commentaires : voir le flux Atom ouvrir dans le navigateur

  • ✇LinuxFr.org : les dépêches
  • Blender 5.0 est de sortie
    La version 5.0 de Blender vient de sortir ce 18 novembre 2025. Blender est un logiciel de modélisation, animation, montage, et de rendu en 3D. Il est distribué sous licence GPL depuis 2002. lien nᵒ 1 : Site officiellien nᵒ 2 : Manuel d'utilisationlien nᵒ 3 : Versions en téléchargementlien nᵒ 4 : Nouveautés de Blender 5.0lien nᵒ 5 : Obtenir des extensionsSommaire Lexique préliminaire Assets Compositeur et gestion des couleurs L’éditeur de séquence vidéo (VSE) GeoNodes (nœuds de géométrie) En vr

Blender 5.0 est de sortie

La version 5.0 de Blender vient de sortir ce 18 novembre 2025. Blender est un logiciel de modélisation, animation, montage, et de rendu en 3D. Il est distribué sous licence GPL depuis 2002.

Sommaire

Même si la rétrocompatibilité est cassée sur certaines fonctionnalités, cette sortie est plus — en dehors de la correction de bugs — une amélioration de « qualité de vie » pour les usagers, car elle combine et utilise des concepts déjà implémentés dans la version 4.5 LTS.
C’est pourquoi cette dépêche couvrira aussi certains aspects de la version précédente (plus certaines notes personnelles).

Vu que Blender est une sorte de monstre à tout faire (et à rien faire aussi…), bourré de termes internes à sa logique, j’ai préparé un petit lexique qui vous évitera de vous endormir (j’espère !) pendant la lecture.

Note 1: Les nouveautés sont classées de façon subjective, et donc certaines sont passées à la trappe, pour plus de détails, voir ici.

Note 2: Suite a une question dans la zone de rédaction sur la compatibilité des Addons (greffons) et des Extensions, la responsabilité incombe aux développeurs des Addons d’assurer la compatibilité entre versions, ce qui redescend sur les utilisateurs évidemment… Les développeurs peuvent consulter cette page et les utilisateurs (des extensions) peuvent se référer à ce site dans les changelogs.

Lexique préliminaire

Shaders ou pour les anglophobes, des nuanceurs permettent de donner une apparence à une surface dans un environnement 3D. Sur Wikipédia en plus exhaustif.
Exemple:
shader metal

Les Modificateurs sont des fonctions internes qui modifient un objet de façon non destructive et peuvent être empilés de façon logique (ex : suivre une courbe, lisser, cloner en pavage, etc.) en s’appliquant les uns à la suite des autres.

Les Geonodes sont un langage de programmation visuel dont l’interface est héritée de celle des shaders. Ils permettent de manipuler la géométrie d’un objet de façon non destructive en accédant à l’API de Blender via des entrées/sorties appelés nœuds. On peut les animer et en configurer l’entrée / sortie (menus, curseurs, boîte de saisie, interface graphique) pour une utilisation plus facile. Ils sont considérés en interne comme des Modificateurs.
Exemple (cônes instanciés sur sphères instanciées sur plan):
geonode exemple

Les Assets sont des bibliothèques d’objets Blender qu’on peut créer et enregistrer pour une utilisation future. Ils s’intègrent à une « scène » par simple cliquer-glisser.

Le VSE est un éditeur de séquence vidéo, comme Kdenlive (mais avec beaucoup moins de fonctionnalités). L’avantage de l’utiliser dans Blender est son intégration au système de « scènes » du logiciel.

Le Compositeur permet de modifier un rendu en direct dans la scène 3D, avec des effets que l’on trouve dans la plupart des logiciels de retouche d’image (GIMP, ImageMagick, etc.). Évidemment cela ne s’applique que sur un rendu Blender et donc ne remplace pas les logiciels précédemment cités.
Exemple : simple passe Hue Saturation Value (HSV)
compositor passe hsv

Le Grease Pencil, ou crayon gras, permet de dessiner en vectoriel directement dans la fenêtre de visualisation sur des objets ou des surfaces. Ces tracés sont également des objets 3D manipulables, mais sont « plaqués » dans la perspective de la caméra.
Exemple (ceci n’est pas un shader avec une image mais un objet Grease Pencil):
grease pencil exemple


Assets

La possibilité de faire ses propres bibliothèques (objets, nœuds, shaders, etc.) a été facilitée : Une scène peut être marquée comme « asset » avec une prévisualisation à créer à partir de la vue caméra et automatiquement importée.
Les assets peuvent être partagés en tant que fichier .blend en suivant un certain protocole.


Compositeur et gestion des couleurs

Déjà présent dans la 4.5
Ajout des textures procédurales issues de l’éditeur de shader (Briques, Damier, Bruit, etc.).
D'autres nœuds du compositeur deviennent obsolètes, le compositeur se rapprochant de plus en plus de l’éditeur de shader dans ses fonctionnalités, ce qui amène à…
Nouveau dans 5.0
Le compositeur possède maintenant ses propres blocs de données ; ce qui veut dire que les compositions peuvent être portées d’un fichier à l’autre et également être enregistrées en tant qu’assets.
Plusieurs assets sont fournis à titre d’exemple dans cette sortie (vignette, grain, aberration chromatique, etc.)

Plus

  • Le nœud « distorsion de lentille » gère maintenant la transparence.
  • Nouveau nœud « Pavage Radial »
  • Ajout de la gestion de couleur ACES 2.0

L’éditeur de séquence vidéo (VSE)

Le chapitre précédent implique également qu’on puisse maintenant travailler directement avec le compositeur dans le VSE, ce qui ouvre la voie pour de la post-production en « temps réel ».
Ainsi, le nouveau modificateur « Compositeur » permet à une grande partie des nœuds du compositeur de s’appliquer aux séquences individuelles du VSE.
Un exemple vidéo: disponible ici.
Note perso :
J’avais l’habitude d’exporter des séquences images rendues avec Blender, puis pré-travaillées avec G'MIC ou GIMP pour les superposer en alpha sur un autre canal du VSE. Maintenant je peux m’en passer, tout du moins pour les opérations simples ; pour les autres, plus complexes ces deux outils me restent indispensables (faut pas abuser, le Compositeur n’est pas la panacée pour moi et à vrai dire, ça a tendance à faire exploser les temps de calcul sur certaines opérations).


GeoNodes (nœuds de géométrie)

Des nœuds déjà disponibles dans la 4.5 sont :

  • « Repeat Zone » permet de répéter un groupe de nœuds X fois dans la zone concernée.
  • « Simulation Zone » permet de répéter un groupe de nœuds pour chaque frame dans la zone concernée.

Nouveau dans la 5.0 :
Ajout du nœud « Bunddles » qui permet de stocker des valeurs dans un dictionnaire, de combiner des dictionnaires et de les séparer. Très utile pour rendre ses compositions plus lisibles et réutilisables.
Les GeoNodes deviennent également plus modulaires avec la notion de « Closures », en fait « juste » des groupes de nœuds que l’on peut transformer en fonctions génériques réutilisables.
Une explication plus détaillée est dispo dans le blog des développeurs.

Plus

  • Toute une nouvelle série de nœuds pouvant manipuler les volumes.
  • Nouveau nœud « Pavage Radial ».

Certains GeoNodes font leur apparition dans les modificateurs (et vont en remplacer certains à terme ?)

  • Modificateur « Géométrie comme source » (prend aussi une collection) qui peut se cumuler avec les 3 modificateurs qui suivent
  • Itération d’objet (array) : Circulaire, sur courbe et avec les GUI qui vont bien.
  • Distribution d’objets sur surface
  • Instanciation d’objets sur faces/arêtes/points
  • Courbe comme tube
  • Déformation par lattice (treillis) disponible par menu contextuel

Note perso :
L’API ouverte aux GeoNodes s’étoffe de plus en plus, et ça devient très vite très complexe. L’avantage d’avoir une barre de recherche pour les nœuds aide beaucoup, et créer des choses simples pour bricoler des effets reste faisable; mais je pense que la « création de Nodes » va devenir un domaine en soi dans Blender, tout comme le scripting.


En vrac

Animation et Rigs

  • Attention : Les données d’animation de la version 5 sont incompatibles avec les versions inférieures à la 4.5.
  • Le greffon « Copy Global transform » a été intégré à Blender.

Note: Le système d’animation est en train d’être revu assez profondément depuis 2023, et n’étant ni animateur ni rigger je ne peux pas en dire plus. Je vous invite donc à suivre ce lien pour plus d’informations sur les bases de cette refonte.

Crayon gras (Grease pencil)

  • Ajout du « motion-blur » (flou lié au mouvement)
  • Ajout de deux nouveaux styles de coins

Note perso :
Il y a eu beaucoup de mouvements sur cette fonctionnalité, qui est le seul moyen (avec freestyle) de faire du contour direct pour avoir un rendu BD sur des objets 3D. Mais en partant d’une scène, c’est loin d’être magique et il faut vraiment une topologie très propre pour éviter des heures de paramétrage, ou dessiner directement sur les objets (mais vu que je sais pas dessiner !).

Cycles (Moteur de rendu)

  • Texture de ciel améliorée, avec diffusion multiple de la lumière.
  • La sortie du shader « Déplacement » sur une « Surface de subdivision » est intégrée par défaut.

EEVEE et fenêtre de visualisation

  • Prise en compte de Vulkan (déjà dans la 4.5)
  • Traitement amélioré du HDR
  • Nouveaux MatCaps
  • Ajout de la surcharge des matériaux sur les calques

Shaders

  • Nouveau nœud « Pavage Radial ».
  • Nœuds « Closure », « Bundle », « Repeat Zones » disponibles (voir la section GeoNodes).

Jeu « Dog walk »

jeu dogwalk
Le studio blender, une équipe affiliée à la fondation chargée de tester les dernières versions du logiciel au sein de projets concrets, a sorti en juillet 2025 un jeu vidéo nommé « Dog Walk ».
Une « simulation » de promenade de chien hivernale. Le but initial était de créer/renforcer les outils d’intégration entre Blender et le moteur de jeu Godot.

 Comment débuter ?

Arrrg, question difficile. Il y a beaucoup trop de ressources, et chaque utilisation est particulière (créer des rendus, animer des séquences d’images, faire de la composition vidéo, faire de l’intégration dans un moteur de jeu) ; donc chaque cas d’usage doit faire l’objet d’une recherche propre (une chose est sure, si vous voulez faire de la CAD, utilisez d’autres logiciels libres !).

Pour la base de la base et en français, il y a ce lien, c’est daté, mais il y a plein de trucs encore utiles. Sinon il y a le forum Blendertribu, qui semble assez actif.

Il y a aussi le manuel officiel… pour les barbu/es.

Pour les impatients, il y a BlenderGuru sur YouTube. Oui « ToiTube » saimal; mais en revanche, le type est là depuis longtemps, explique très bien et a un chouette accent australien pour les anglophones, de plus ses vidéos sont traduites en français.

Si vous avez d’autres liens à partager n’hésitez pas à commenter ou wikifier.

Commentaires : voir le flux Atom ouvrir dans le navigateur

  • ✇LinuxFr.org : les dépêches
  • Nouvelles sur l’IA de octobre 2025
    L’intelligence artificielle (IA) fait couler de l’encre sur LinuxFr.org (et ailleurs). Plusieurs personnes ont émis grosso-modo l’opinion : « j’essaie de suivre, mais c’est pas facile ». Je continue donc ma petite revue de presse mensuelle. Disclaimer : presque aucun travail de recherche de ma part, je vais me contenter de faire un travail de sélection et de résumé sur le contenu hebdomadaire de Zvi Mowshowitz (qui est déjà une source secondaire). Tous les mots sont de moi (n’allez pas taper Zv

Nouvelles sur l’IA de octobre 2025

L’intelligence artificielle (IA) fait couler de l’encre sur LinuxFr.org (et ailleurs). Plusieurs personnes ont émis grosso-modo l’opinion : « j’essaie de suivre, mais c’est pas facile ».

Je continue donc ma petite revue de presse mensuelle. Disclaimer : presque aucun travail de recherche de ma part, je vais me contenter de faire un travail de sélection et de résumé sur le contenu hebdomadaire de Zvi Mowshowitz (qui est déjà une source secondaire). Tous les mots sont de moi (n’allez pas taper Zvi si je l’ai mal compris !), sauf pour les citations : dans ce cas-là, je me repose sur Claude pour le travail de traduction. Sur les citations, je vous conseille de lire l’anglais si vous pouvez : difficile de traduire correctement du jargon semi-technique. Claude s’en sort mieux que moi (pas très compliqué), mais pas toujours très bien.

Même politique éditoriale que Zvi : je n’essaierai pas d’être neutre et non-orienté dans la façon de tourner mes remarques et observations, mais j’essaie de l’être dans ce que je décide de sélectionner ou non.

Sommaire

Résumé des épisodes précédents

Petit glossaire de termes introduits précédemment (en lien : quand ça a été introduit, que vous puissiez faire une recherche dans le contenu pour un contexte plus complet) :

  • System Card : une présentation des capacités du modèle, centrée sur les problématiques de sécurité (en biotechnologie, sécurité informatique, désinformation…).
  • Jailbreak : un contournement des sécurités mises en place par le créateur d’un modèle. Vous le connaissez sûrement sous la forme "ignore les instructions précédentes et…".

Des nouveautés sur la génération de vidéos

OpenAI publie Sora 2, son modèle de génération de vidéo, qui produit des scènes d’environ dix secondes à partir d’un prompt textuel. Cette publication pose deux questions : celle des deepfakes, et celle du copyright.

Sur les deepfakes, OpenAI a annoncé bloquer la génération de vidéos impliquant des personnalités publiques, sauf si ces dernières s’inscrivent sur une liste acceptant cet usage (vous pouvez par exemple générer une vidéo contenant Sam Altman, qui s’est inscrit sur cette liste).

Sur la propriété intellectuelle, la logique est inversée : initialement, les ayants droits étaient appelés à « se rapprocher d’OpenAI » pour que leur création ne puisse pas être réutilisée par Sora. C’était un pari très audacieux : si le consensus juridique se dirige sur le caractère légal (« fair use ») d’utiliser des données publiques pour entraîner une IA, réutiliser la propriété intellectuelle d’autrui entre dans le cadre des œuvres dérivées, bien plus contraignant ; la plupart des commentateurs s’accordent qu’il y a peu de chances qu’OpenAI puisse gagner une bataille juridique sur ce terrain, si certains ayants droits décident d’aller en justice. OpenAI semble avoir réalisé la même chose, faisant marche arrière une semaine après le lancement ; les ayants droits peuvent maintenant s’inscrire pour accepter que des éléments (personnages, lieux…) de leurs œuvres soient réutilisables par Sora, avec dans le futur un système de rémunération des ayants droit.

En se fondant sur ce modèle Sora 2, OpenAI décide de lancer un réseau social du même nom. L’idée est de partager vos créations avec vos connaissances, en particulier d’utiliser la capacité de Sora de mettre en scène des personnes pour créer des vidéos vous mettant en scène, vous et vos connaissances.

Meta lance également une offre similaire avec Vibes, xAI suit le mouvement (sans la partie « réseau social ») avec Grok Imagine

OpenAI obtient le feu vert pour son casse du siècle

Résumé rapide de l’affaire :

  • OpenAI a été fondé en 2015 et tant qu’organisation à but non lucratif, avec pour mission de « développer l’Intelligence Artificielle Générale pour le bénéfice de l’humanité ». Rappelons nous qu’en 2015 les larges modèle de langage sont un jouet pour chercheur, que le Winograd schema challenge est l’horizon indépassable pour la compréhension du langage naturel.
  • Afin de pouvoir recevoir des fonds d’investisseurs, en 2019 OpenAI restructure son organisation. OpenAI LLC (peu ou prou l’équivalent d’une SARL) est créé pour recevoir les financements et est l’organisation principale des opérations au jour le jour. L’organisation à but non lucratif existe toujours, et a le contrôle total de l’entreprise.
  • L’entreprise possède une caractéristique assez particulière, "capped for-profit", ce qui signifie que la quantité de profits reçus par les investisseurs est plafonnée (à un certain multiple, négocié au cas par cas, de l’investissement). Tout profit supplémentaire appartient légalement à l’organisation à but non lucratif.

C’est ce dernier point qui ennuie beaucoup les dirigeants d’OpenAI et les potentiels investisseurs aujourd’hui. Fin décembre 2024, l’entreprise déclare vouloir prendre son indépendance vis-à-vis de l’organisation à but non lucratif. Sur papier, cela est possible : l’entreprise peut racheter le contrôle auprès de l’organisation à but non lucratif, à condition que le prix soit juste (sinon, c’est il s’agit tout simplement d’abus de biens sociaux). Problème : comment évaluer le juste prix ? Celui-ci est composé de deux parties :

  • Le pouvoir de contrôle sur l’entreprise en elle-même, de décider de sa politique (par exemple, en rapport à la sécurité des modèles). Bien intangible, mais qu’il faut bien valoriser.
  • Plus compliqué : le prix aujourd’hui de la totalité des profits futurs après remboursement des investisseurs.

En 2024, le bruit courait d’une offre à 40 milliards, ce qui a rapidement donné lieu à une levée de boucliers, et l’utilisation par Zvi de l’expression « greatest theft in human history » (que j’ai traduite par « casse du siècle »). En mai 2024, OpenAI annonce renoncer à cette tentative, mais reprend en septembre 2024.

Aujourd’hui, après avoir négocié avec les procureurs généraux des états du Delaware (là où l’organisation à but non lucratif est incorporée) et de Californie (pour le siège de l’entreprise), OpenAI annonce avoir reçu le feu vert pour une restructuration.

Dans les grandes lignes :

  • Le pouvoir de contrôle sur l’entreprise reste entièrement dans les mains de l’organisation à but non lucratif.
  • La structure de profits de l’entreprise disparaît (et l’entreprise elle-même, se muant en PBC) pour suivre le modèle plus courant de parts sociales. L’organisation à but non-lucratif obtient 26% de ces parts (à comparer au plus gros investisseurs, Microsoft, qui obtient 27%).

Est-ce un juste prix ? Zvi défend que non, en nous offrant ces chiffres :

  • Le journaliste d’affaires Matt Levine estime à 272 milliards le plafond de profits allant aux investisseurs.
  • Un chiffre de 1000 milliards de valuation à l’introduction en bourse est utilisé (se référant à celui rapporté par Reuters).
  • Ce qui donne 260 milliards pour l’organisation à but non lucratif dans le nouveau système. Dans l’ancien, le chiffre aurait été plus proche de 500-750 milliards.

Il faut également prendre en compte que l’objectif d’OpenAI (que ce soit l’organisation ou l’entreprise) reste d’atteindre l’intelligence artificielle générale (AGI). Dans l’hypothèse où cet objectif est atteint, les profits seraient probablement un ou plusieurs ordres de magnitude plus grands (on peut citer ce papier de l’université de Virginie), ce qui élargit encore plus le gouffre entre l’ancien système et le nouveau — dans l’ancien, la quasi totalité des profits appartiendrait au final à l’organisation à but non lucratif, dans le nouveau, 26%.

Affaire close ? Pas nécessairement : d’autres parties que les procureurs généraux peuvent se saisir de la justice pour contester cette décision. Elon Musk en particulier a déjà dans le passé saisi la justice sur ce sujet, et pourrait encore le faire dans un futur proche.

En vrac

DeepMind présente Dreamer 4, un agent capable d’apprendre à naviguer dans un environnement avec très peu de données d’entraînement, en « imaginant » des interactions synthétiques — avec pour objectif d’appliquer cette méthode à la robotique.

OpenAI publie GPDval, un benchmark cherchant à mesurer au plus près les capacités économiques de l’IA, en se concentrant sur la question de quelles tâches économiquement productives l’IA peut se charger. Sur les tâches sélectionnées (avec pour critère : bien définies, avec un périmètre clair et un contexte simple, dans divers domaines), l’IA reste pour l’instant derrière l’humain, mais plus très loin derrière : la meilleure IA, Opus 4.1, gagne 47.6% (s’acquitte mieux de la tâche) du temps contre un professionnel du domaine.

Le FLI (Future of Life Institute) publie une lettre ouverte « Statement on Superintelligence » (« Communiqué sur la superintelligence »), trois courtes phrases : « We call for a prohibition on the development of superintelligence, not lifted before there is 1. broad scientific consensus that it will be done safely and controllably, and 2. strong public buy-in. » (« Nous appelons à une interdiction du développement de la superintelligence, qui ne devra être levée qu'après : 1) un large consensus scientifique établissant que cela peut être fait de manière sûre et contrôlable, et 2) une forte adhésion du public »). Parmi les signatures, de nombreux noms de tous horizons : académie, industrie, politique et gouvernement, et même du monde religieux.

OpenAI lance son propre navigateur, Atlas (pour l’instant, uniquement disponible sous MacOS), intégrant ChatGPT à la plupart des niveaux : autocomplétion dans la barre d’adresse, fonctionnalité « ouvrir une conversation avec le site actuel », emboîtant le pas à Perplexity Comet. Il est fortement probable que les attaques de type « injection de prompt » s’appliquent également, donc prudence.

DeepSeek publie une mise à jour incrémentale de son IA, DeepSeek 3.2. Essentiellement les mêmes performances que la version précédente, mais à un coût bien plus faible.

DeepSeek publie également DeepSeek-OCR. Une bestiole difficile à décrire : contrairement à ce que ce nom indique, ce n’est pas un simple OCR (même s’il peut s’acquitter de cette tâche très honorablement), mais une piste de recherche, opérationnaliser « un bon croquis vaut mieux qu’un long discours ». Plus précisément, DeepSeek essaie avec ce système de compresser n (par exemple 10) tokens textuels en 1 token de vision (pour une compression 1:10). Les résultats semblent bons, avec 90% de précision avec une compression 1 pour 10.

Anthropic étudie la capacité d’introspection de ses modèles, et trouve un résultat positif. Par exemple, les développeurs peuvent identifier un circuit associé à un certain concept (par exemple, « piano »), l’activer, et demander au modèle « À quoi penses-tu actuellement ? » (sans que le concept soit explicitement mentionné dans le prompt) ; le modèle est généralement capable de mentionner le concept.

DeepMind, en collaboration avec l’université de Yale, publie un modèle open-weight spécialisé dans l’analyse cellulaire. Le modèle semble capable de faire des découvertes inédites.

Nouvelle confrontation sur le droit d’auteur : Disney met en demeure Character AI.

Anthropic libère sur github un outil d’évaluation dans le cadre de la sécurité des modèles, utilisé notamment pour évaluer des comportements problématiques comme la flagornerie ou la tromperie.

Epoch AI publie une visualisation quelques données économiques sur les grands acteurs du secteur.

Des chercheurs publient une nouvelle méthode pour spécialiser un LLM à un usage précis, sans avoir accès privilégié aux paramètres du modèle lui-même. Cela permet de spécialiser des modèles propriétaires.

Que se passe-t-il lorsque l’on applique une phase d’apprentissage par renforcement sur des tâches de type « créer de l’engagement sur les réseaux sociaux » ou « augmenter les ventes d’un produit » ? Un papier explore la question, et montre qu’un tel entraînement supplémentaire encourage les modèles à mentir ou répandre de la désinformation, et que l’effet ne disparaît pas en demandant au modèle de ne pas utiliser de telles méthodes dans son « prompt système ».

Autre papier d’Anthropic sur la sécurité des modèles, montrant qu’il est possible d’« empoisonner » l’entraînement des modèles (c’est-à-dire l’entraîner à donner une réponse spécifique à une entrée ésotérique) à l’aide d’un faible nombre de documents (relativement à la taille du corpus d’entraînement total).

Du mouvement sur le financement du développement de l’IA : OpenAI est évalué à $500 milliards ; xAI fait une levée de fonds pour $20 milliards ; AMD investit dans OpenAI, ainsi que Nvidia. Un article intéressant fait le parallèle avec certains montages pendant la bulle dot-com, notant également des différences importantes.

En Janvier, OpenAI annonçait que Microsoft ne serait plus leur fournisseur unique d’infrastructure, citant un manque de capacités. The Information (paywall) révèle que Microsoft craint que les demandes de capacités de OpenAI soient injustifiées et que les satisfaire conduise à terme à mettre en place des capacités qui ne seront pas utilisées.

Un nouveau benchmark, AutumnBench, assez similaire à ARC-AGI, où l’IA reste loin derrière les performances humaines.

Un billet de blog intéressant sur les efforts de lobbying de l’industrie de l’IA.

METR ajoute Sonnet 4.5 à son évaluation, qui arrive pile poil sur la ligne de tendances.

L’IA (plus précisément : GPT-5 et Gemini 2.5 Pro) obtient un score de médaille d’or sur les Olympiades Internationales d’Astronomie et d’Astrophysique.

Envie d’apprendre comment fonctionne l’IA ? Andrey Karpathy publie en open-source nanochat, pour entraîner soi-même un modèle minimal, de A à Z.

ChatGPT se dote d’un système de contrôle parental.

xAI lance une encyclopédie générée par son IA, Grok, nommée Grokipedia. Elle fait partie de la croisade d’Elon Musk contre ce qu’il considère des biais de gauche sur Wikipedia.

Un papier étudie en détails la capacité des modèles à résister au jailbreak ou plutôt leur incapacité : aucun modèle ne résiste à un attaquant humain déterminé.

Anthropic publie son modèle "léger" (moins cher, plus rapide, moins performant), Haiku 4.5.

Cursor, l’assistant de code propriétaire, développe son propre modèle, Composer.

Pour aller plus loin

Par Zvi Mowshowitz

Sur LinuxFR

Dépêches

Journaux

Forum

Liens

Commentaires : voir le flux Atom ouvrir dans le navigateur

  • ✇LinuxFr.org : les dépêches
  • Interminable liste de terminaux
    Ah, la ligne de pêche Maginot commande ! Que ce soit pour gérer ses fichiers, récupérer des commits, lancer une compilation, se connecter à un serveur, redémarrer un service, consulter les logs, voire contrôler la musique, afficher des images, cette interface reste en 2025 exceptionnellement boomer rapide et même parfois confortable. Sans compter que le terminal est l'endroit où lancer des applications dédiées, pour lire ses mails ou un million d'autres choses. Bref rappel avant se lancer dans

Interminable liste de terminaux

Ah, la ligne de pêche Maginot commande ! Que ce soit pour gérer ses fichiers, récupérer des commits, lancer une compilation, se connecter à un serveur, redémarrer un service, consulter les logs, voire contrôler la musique, afficher des images, cette interface reste en 2025 exceptionnellement boomer rapide et même parfois confortable.

Sans compter que le terminal est l'endroit où lancer des applications dédiées, pour lire ses mails ou un million d'autres choses.

Bref rappel avant se lancer dans de longues comparaisons

  • TTY vient de teletypewriter. Si vous tapez (Xorg comme Wayland) Control + Alt + F3 par exemple, vous vous retrouverez devant une invite de commande.
  • pts/pty : quand vous ouvrez un terminal

L'invite de commande pourra bénéficier d'un shell personnalisé. Le bureau permettra l'usage d'un terminal.

    Sommaire

    Le jeu de les shells

    Le shell est un interpréteur de commande. On peut simplement lancer une commande pour consulter l'état du système (top, ps), déplacer un fichier (mv), … Ou combiner des commandes, écrire des scripts basés sur des conditions et des variables, … Donc comme l'explicite le manuel GNU, un shell unix est la fois un interpréteur de commande et un langage de programmation.

    La plupart des distributions utilisent par défaut "Bash", mais il est possible de changer de shell, par exemple interactivement en utilisant la commande chsh ("change shell"), ou en modifiant les paramètres d'un terminal en particulier, ou d'un multiplexeur, ou encore plus globalement en modifiant le shell par défaut d'un user (faites un peu attention dans ce cas — les shells ne sont pas tous compatibles, ne tombez pas !).

    Les shells tombent

    Les scripts précisent aussi quel shell invoquer… Si je prends un tuto sur un shell au hasard, voici ce que je vais trouver

    #!/bin/bash
    # This script will take an animated GIF and delete every other frame
    # Accepts two parameters: input file and output file
    # Usage: ./<scriptfilename> input.gif output.gif

    Attention : ce script référence explicitement /bin . Pas 100% sûr que bash y soit installé. Une solution peut être d'utiliser env.

    #!/usr/bin/env bash

    Hormis interpréter les commandes tapées, le shell affiche également un prompt invitant à taper une commande. Quelque chose comme cela :

    [goat@arch:~]$ 
    

    Pour la partie prompt, certains shells vont autoriser un peu de paramétrage, ou l'on peut même installer des plugins pour enrichir les possibilités, comme avec powerline ou même le liquid prompt présenté ici même par son auteur Dolmden.

    On peut aussi trouver un prompt comme starship qui est utilisable avec les différents shells.

    De la préhistoire au Bash

    Pour l'histoire, le premier shell Unix date de 1971, puis le Bourne Shell (sh), du nom de son auteur, apparait en 1977. Beaucoup de fonctionnalités sont déjà présentes : il est scriptable (on peut définir un script avec des conditions dont la si laide esac, définir des boucles, …), les processus peuvent être contrôlés, il est possible de définir des alias, …

    Bourne Shell implémente la norme POSIX que d'autres shells respectent. La licence du Bourne Shell est débatue (avec une certaine vigueur sur Wikipédia!) , en tout cas son code est ici.

    KORN shell n'était, au départ, pas open source - le code n'est libéré que dans les années 2000. Korn Shell implémente les fonctionnalités du Bourne Shell mais ajoutera d'autres éléments, comme des raccourcis vi/emacs, ou comme les tableaux

    $ typeset -A age
    $ age[bob]=42
    $ age[alice]=31
    $ print ${age[bob]}
    42
    

    GNU BASH : /bin/bash

    GNU Bash

    B.A.S.H. = Bourne Again Shell (superbe jeu de mots avec Born Again Shell). Bash implémente la norme POSIX… et un peu plus.

    GNU bash connait une première release en 1989. Il reprendra à son compte des fonctionnalités trouvées jusqu'ici dans de précédents shells, y compris Korn Shell. Bash reste le shell interactif par défaut sur de nombreuses distributions. Il fut le shell sous MacOS.

    Anecdote - quel est le plus gros programme bash que vous connaissiez ? nb, qui propose de gérer vos notes en mode texte (org, markdown, etc), est principalement composé d'un script .sh de … 26736 lignes. Je vous laisse partager vos trouvailles en commentaire !

    DASH : le Debian Almquist shell est renommé ainsi en 1997. Debian l'adopte par défaut pour les scripts, tandis que le shell interactif des utilisateurs reste bash. Ubuntu y passe par défaut sur la 6.10. Dash est léger et performant. Moins de dépendances égal plus de sécurité.

    ZSH

    ZSH ZSH sort en 1990. Toujours compatible avec la norme POSIX, Zsh va améliorer de bien pratiques fonctionnalités d'auto-complétion : appuyez sur <TAB> et Zsh complète pour vous.

    Mais bien plus largement, Zsh va atteindre le paroxysme en terme de fonctionnalités. Tout existe dans Zsh.

    Zsh est connu pour proposer de très nombreuses possibilités de configuration. Ses plugins se comptent par centaine — y compris plusieurs gestionnaires de plugins… Mais un outil très utilisé pour le configurer sort du lot : Oh my zsh, qui permet de gérer plus de 300 plugins ainsi que de nombreux thèmes.

    FISH

    Fish

    Fish pour "Friendly Interactive Shell", date de 2005. C'est un shell non POSIX - certaines fonctionnalités ne seront pas compatibles. Un script bash ne marchera pas forcément.

    Ce shell se veut demander peu de configuration - il est prêt à l'emploi. Choix appréciable quand on peut déjà passer tant de temps à configurer d'autres choses (distro, bureaux, nano, terminaux..)  !

    Il suffit de l'installer pour avoir

    • une coloration syntaxique indiquant quelle commande est valide
    • suggestions : en tapant, on obtient des candidats que l'on peut auto-compléter

    Fish est également scriptable et se veut proposer un syntaxe plus saine. À vous de tester (mais vous ne codez qu'en Rust, n'est-ce pas ?)

    Le gros point de Fish à mon sens, c'est de proposer une configuration par défaut déjà utilisable, comme le fait de se baser sur les pages man ainsi que sur l'historique pour proposer l'auto-complétion. Oubliez les heures passées à configurer - je ne sais pas si Fish a le plus de chevaux dans le moteur, mais avec lui vous êtes déjà prêts à partir.

    Petite fonctionnalité sympa, taper fish_config ouvre une page ouaibe. On peut alors prévisualiser les thèmes, personnaliser le prompt, visualiser les fonctions et variables, consulter l'historique et les raccourcis claviers. Fish a un mode vi.

    Fish a été réécrit en Rust entre 2022 et 2024.

    Ravissant multiplex, 200 mètres carrés

    Gnu Screen

    Ok donc nous avons un shell à choisir, y compris le prompt et il faudra le lancer dans un terminal, mais avant ça, si on avait un gestionnaire de fenêtre dans le gestionnaire de fenêtre ? C'est bien comme cela qu'est présenté GNU Screen, qui gère des fenêtres, typiquement de terminaux. C'est un multiplexeur, en français : la possibilité d'ouvrir plusieurs terminaux dans un seul terminal. GNU Screen sait lister les terminaux ouverts, passer de l'un à l'autre, en tuer… Comme souvent, le wiki arch détaille bien notre affaire concernant screen. Mais GNU Screen est un vieux de la vieille, qui date de 1987.

    Tmux

    Plus souvent cité de nos jours, Tmux (2007) propose des raccourcis à la Emacs ou à la Vim, un menu graphique, des splits verticaux ou horizontaux.

    Zellij

    Il existe d'autres multiplexeurs. On peut citer par ex. Zellij, orienté développeurs, qui affiche une barre de statut, peut afficher les raccourcis claviers…

    Envolez-vous vers un nouveau terminal

    Le choix d'un terminal pourra définir l'apparence de votre interface, comment vous gérez le multi-fenêtre et/ou multi-onglet, la capacité à rechercher, copier-coller, les raccourcis clavier, peut être même comment accéder aux emplacements, vous connecter en ssh.

    Certains terminaux proposent un mode inspiré de Guake (première release 2007), lui même inspiré du terminal dans Quake : le terminal est toujours ouvert et dispo, mais caché et l'appui d'un raccourci clavier le fera apparaître. Le temps de taper trois commandes et le même raccourci le fera disparaître. À voir ce qui se fait encore sous Wayland, je vois par ex. qu'il y a encore une extension GNOME.

    La console sur le bureau

    Première piste : tout simplement utiliser la terminal qui vient avec son bureau, si l'on en utilise un. Évidemment le premier avantage sera une bonne intégration, mais en pratique ?

    Nous verrons aussi plus bas certains terminaux qui sont le terminal par défaut de gestionnaires de fenêtre, mais il s'agit simplement d'un choix par défaut et pas d'une affiliation ni d'une intégration particulière, donc pas de raison de les mentionner ici.

    Console (GNOME)

    Le terminal par défaut a changé sous GNOME 42 (euh bah oui c'était y'a un moment), pour devenir GNOME Console (anciennement Kings Cross Station d'où kgx — j'ai cherché l’exécutable un moment…). Assez peu de fonctions particulières mais : devient rouge lorsqu'on est connecté en root ou violet en ssh, envoie une notif quand une longue commande se termine, sympa. Un bouton de recherche un peu étonnant peut s'avérer pratique. Clairement la logique est d'afficher peu de boutons, peu de choix, et d'investir sur des options par défaut qui fonctionnent. Je ne vais pas retenir Console pour mon usage mais je trouve qu'effectivement c'est un terminal élégant.

    Pour changer le shell de Console, il faudra passer par l'éditeur dconf et modifier l'option org.gnome.Console.shell.

    Certaines distributions ont préféré maintenir gnome-terminal, plus complet, mais gnome-terminal est resté Gtk3 (alors que kgx est bien Gtk4).

    Petite note sur kgx et gnome-terminal : ces terminaux sont basés sur la libvte dont dépendent d'autres terminaux GTK. Voici quelques exemple cités par une page du wiki gnome :

    On pourrait y ajouter Lxterminal (merci à Impromptux).

    Konsole

    Konsole

    Le choix logique pour le bureau KDE. En termes de fonctionnalités, c'est l'artillerie lourde. Multi-profils, signets, multiplexeur, prévisualisation d'images. Konsole est intégrée dans plusieurs applications KDE.

    Pour changer le shell de Konsole, vous pouvez passer par le menu Settings > Configure Konsole > Profiles .

    C'est le moment de mentionner Qtermwidget : ce widget fut originellement basé sur Konsole et servit à développer Qterminal.

    xfce-terminal

    Terminal par défaut du bureau Xfce. Il dépend et hérite de libvte. Il est en Gtk3.

    • Permet plusieurs onglets
    • Intégration avec un gestionnaire de fichiers (ouverture dans le répertoire courant du terminal)
    • Prévention de collage dangereux : quand ça contient un retour chariot, ouvre une popup qui permet d’inspecter et modifier le contenu dangereux.
    • Permet d’envoyer un signal au processus en cours
    • Permet d’avoir une console rapide à la Guake
    • Permet de colorer les onglets manuellement.

    Il est possible de changer le shell dans les préférences.

    Terminology

    Terminology

    Ce terminal sort en 2013, il fait partie du bureau Enlightenment Je pense que c'est le premier terminal à pouvoir afficher des images. Il est possible d'avoir des informations en survolant une URL. Une barre de progression s'affiche durant l’exécution de commandes. Les performances sont au rendez-vous. (Subjectif - serait-ce tout simplement la meilleure appli e17?)

    Emacs et (Neo)Vim

    Mais plutôt que d'utiliser le terminal intégré à son environnement de bureau, pourquoi ne pas utiliser directement celui intégré à son éditeur de texte? Un bon éditeur de texte en effet a forcément son bon terminal. Même Vim? Et oui. C'est donc une solution de lancer le terminal depuis l'éditeur de texte, par exemple pour reproduire les fonctionnalité d'une IME vivre sa vie entière en mode texte.

    Emacs

    Démarrons tout de même par Emacs, où la prise en charge du terminal est plus ancienne.

    Emacs a… 4 terminaux, pourquoi faire simple. 4 terminaux ? Non pas vraiment : 2 shell et 2 terminaux. Il peut y en avoir plus.
    En fait, puisqu'on peut, malgré la rumeur, bel et bien éditer du texte dans emacs, pourquoi ne pas gérer ses commandes au même endroit ? On peut même s'amuser à gérer ses fichiers dans dired, ses processus, finalement un peu tout l'aspect système.

    Mastering Emacs le développe mieux que moi mais vous aurez donc plusieurs possibilités sous Emacs :

    2 SHELLS

    • eshell, le plus emacsien des 2 : un shell 100% implémenté en elisp (!!!). On peut faire beaucoup de emacs dedans , mais tout ne fonctionnera pas. Ne lancez pas journalctl dedans ^^
    • shell. Même chose, ne lancez pas journalctl

    2 TERMINAUX

    • term / ansi-term. Cette fois c'est vraiment un terminal, mais… lent.
    • vterm. Ok cette fois c'est vraiment un terminal, et ça utilise une bibliothèque en C derrière, donc ouf un vrai terminal Emacs existe bel et bien. Attention vterm a besoin d'une bibliothèque.

    Oui je pense qu'il y a vraiment des utilisateurs du terminal sous Emacs. Et il est possible de trouver de petits benchmarks sur les réseaux comme par exemple reddit.

    Vim

    Qui a dit que vim n'était pas bloated et ne pouvait pas gérer cela? (À sa défense vim ne gère pas encore l'email.. ) Vim prend en charge le terminal depuis la version 8.1. Pour changer le shell dans vim, ajouter cette commande dans le fichier de config

    :set shell=/usr/bin/zsh
    

    Les indies

    Pourquoi utiliser le terminal de son bureau, ou de son éditeur de texte, alors que l'on peut utiliser un million d'autres ? Bienvenue dans la jungle. Ne m'en voulez pas si votre petit favori n'est pas listé ici, mais rajoutez sa description en commentaire - il a existé de bien trop nombreux concurrents, et même en se limitant aux projets actifs la liste est bien trop longue. La liste ici pourrait compléter cette dépêche.

    Je rappelle que sont listés ici les terminaux qui sont proposés par défaut sous certains gestionnaires de fenêtre, le parti pris étant que dans ce cas il n'y ait pas d'intégration particulière, contrairement par exemple au terminal KDE.

    Enfin la liste se veut à moitié lister les terminaux populaires actuels, à moitié lister quelques terminaux plus pour un intérêt historique, mais cette dépêche n'étant pas une thèse cette volonté sera assez peu rigoureuse.

    Blackbox

    Blackbox terminal n'est pas affilié à GNOME ni un terminal officiel mais est développé avec cet environnement en tête. Il utilise Gtk4.

    Ptyxis

    Là c'est un cas à part : pour reprendre sans recul le readme.md :

    A modern terminal emulator built for the container era.
    Seamlessly navigate between your host system and local containers like Podman,
    Toolbox, and Distrobox with intelligent detection and a beautiful, responsive
    GNOME interface.

    L'intérêt est donc d'intégrer les conteneurs de toutes sortes pour y accéder rapidement (et les définir rapidement).

    Ptyxis

    Il semblerait qu'il puisse devenir le terminal par défaut sous Ubuntu (25.10?).

    St

    La philosophie de st, dont la première release, 0.1, est de 2017, c'est de rester simple et léger - le point que son site discute, c'est le nombre de lignes de codes limité que devrait avoir un terminal. Son auteur serait fainéant ? Ce terminal sous licence MIT/X Consortium s'apparente à mon sens à un reliquat du passé : il tourne sur X et uniquement sur X (oui, oui je sais pour Xwayland). Néanmoins il m'a paru logique de le citer ici.

    Kitty

    Kitty a une place importante car il a légué quelque chose aux successeurs… Il implémente en effet des extensions venant étendre le protocole historique.

    Ce terminal tourne sous Python et requiert OpenGL. Malgré son âge (première release 2017), c'est le choix par défaut pour Hyprland.

    Kitty offre une tonne de raccourcis claviers, gère les onglets/fenêtres, peut afficher des images, sait afficher des notifications et bien d'autres choses. En terme de philosophie, il se veut orienté power-user.

    Alacritty

    Alacritty se veut un terminal simple et est écrit en Rust. Il est sortit en 2017. Alacritty respecte XDG en cherchant en priorité un fichier de config $XDG_CONFIG_HOME/alacritty/alacritty.toml.

    C'est le terminal par défaut pour au moins deux gestionnaires de fenêtre Wayland très différents l'un de l'autre : Wayfire et Niri.

    • vi mode : appuyez sur control + shift + space et vous passez dans le mode "normal" de vi (par opposition au mode insertion). Les touches au lieu de permettre de taper du texte, permettront alors de se déplacer, sélectionner du texte, le copier…
    • ctrl shift o pour afficher des "hint" sur les URL, ce qui permet de les activer en 1 touche
    • recherche normal (ctrl shift f ) , recherche vi
    • multi fenêtre (spawn new instance)
    • theme https://github.com/alacritty/alacritty-theme

    Pas d'onglet, pas de split — utiliser un multiplexeur au besoin.

    Foot

    Ce serait un peu le successeur de St, au sens où il est codé en C et les premières fonctionnalités mises en avant sont la légèreté et la performance, mais en natif Wayland. Pour autant Foot n'est pas avare sur certaines fonctionnalité. Sa première release est de 2019. C'est le terminal par défaut pour Sway, Dwl.

    Il faudra le configurer à l'aide d'un fichier texte, et foot respectant XDG, ce sera ici $XDG_CONFIG_HOME/foot/foot.ini. Foot propose pas mal de raccourcis claviers, dont le même Hint mode que Alacritty : taper Ctrl Shift O .

    Au cas où il ne serait pas assez léger, Foot propose un mode serveur.

    Wezterm

    De nouveau un terminal en Rust. Wezterm se veut complet, et cross-platform. Il affiche des images, gère les hyperliens, la connexion en SSH avec un client intégré, fait office de multiplexeur.

    Il se configure en Lua.

    Ghostty

    Ghostty

    Ghostty est sous licence MIT. LWN l'a présenté. Il s'agit d'une application récente, début en 2022, v1.0 fin 2024.

    Une barre gtk4 permet d'afficher les onglets, d'en créer un nouveau. Sympatique fonction, ghostty +list-keybinds --default montre toutes les options (et un raccourci permet d'éditer le fichier de config). On peut aussi lister les thèmes avec ghostty +list-themes.

    Peut afficher des gifs, comme Kitty.

    Ghostty se veut un compromis entre la vitesse, les fonctionnalités, l'interface, et cross-platform. Il se veut agréable sans avoir besoin de modifier le paramétrage par défaut. Et il est petit, le paquet Debian par exemple fait 113 Ko.

    Vous pouvez changer le shell sous Ghostty :

    ~/.config/ghostty/config:
    command = /usr/local/bin/fish --login --interactive
    
    

    De plus Ghostty intègre des fonctionnalités "Shell-integration".

    Rio

    (2022)
    https://github.com/raphamorim/rio
    vi mode, hyperlinks, images,

    Le shell peut être modifié dans la config, plusieurs exemples sont fournis

    [shell]
    program = "pwsh"
    args = ["-l"]

    Warp

    Alors là on bascule du côté obscur de l'IA !… et du proprio. Warp est d'abord une entreprise, qui a souhaité réimaginer un outil des développeurs - le terminal. Ce terminal, écrit en Rust, ne sera pas open source : https://github.com/warpdotdev/Warp/discussions/400

    À la première ouverture, Warp suggère d'ouvrir un compte « pour bénéficier de toutes les fonctionnalités ». Ensuite, on ne se trouve pas directement dans une console mais Warp propose plutôt d'ouvrir / cloner un projet. Un raccourci permet cependant de lancer une session normale…
    … Si ce n'est qu'outre des commandes, on peut taper des phrases ! En passant par Claude pour les interpréter… L'IA peut également suggérer des commandes en se basant sur votre historique. Tout ceci peut être désactivé dans les paramètres. Les fonctionnalités IA requièrent une connexion Internet.

    J'ai par exemple testé "Install Wave term from the internet". Warp a commencé par vérifier s'il y avait une commande de disponible "yay", mais cette commande n'était pas dispo sur mon système. Il a alors intelligemment testé d'autres gestionnaires de AUR et a trouvé que paru était installé. De là, il a découvert waveterm dans les dépôts AUR et m'a suggéré d'utiliser paru -S waveterm-bin (control+entrée pour valider, et gogogo). Une fois ces folies passées, on revient à une expérience normale où la commande se déroule (pensez à lire les AUR avant d'installer aveuglément !)

    Quand vous parcourez un projet, Warp peut indexer ces projets pour améliorer les suggestions.

    Au lieu d'utiliser votre clavier pour taper, Warp peut reconnaître votre voix. Outre des commandes ou des phrases, il est possible de commencer par un "/" pour taper une "slash command".

    Il y a également des fonctionnalités d'équipe, notamment une fonctionnalité de collaboration en temps réel. Certaines fonctionnalités sont payantes.

    Warp propose un certain nombre de fonctionnalités classiques : personnalisation du prompt, apparence, raccourcis claviers, …

    L'entreprise fournit un benchmark où Warp s'en sortirait aussi bien que Kitty ou Alacritty sur vtebench

    WaveTerm

    Waveterm est un peu la réponse open source à Warp (Apache 2.0).

    Quand on l'ouvre la première fois, c'est la foire ! à gauche, le panneau invite de commande qui occupe un tiers de l'écran.
    Tiers du milieu : en haut la consommation du CPU (hein?). Au milieu, un bout de page internet (hein?). En bas, un explorateur de projet. Tiers à droite : en haut, des raccourcis clavier qui s'affichent. Au milieu, un bout de doc sur Wave. En bas, une invite pour Wave IA. Bien sûr il s'agit d'une démo et il sera possible de personnaliser ce qui est visible au démarrage. Il est également possible lorsqu'on utilise un des "blocs" de le passer en mode "pleine fenêtre" puis le réduire par la suite.

    Bon, testons l'invite IA en demandant d'installer… Warp! Il commence par m'expliquer les différentes méthodes d'install en fonction de l'OS (ah ! il n'a pas détecté…). J'explique que j'utilise Arch et il me dit d'utiliser un AUR helper ou de cloner le dépôt du AUR. Mais il ne détecte pas si j'ai paru ou yay ou autre.

    On peut utiliser d'autres modules IA. Wave inclut également un explorateur de fichiers.
    Les paramètres se gèrent bloc par bloc - on paramètre d'un côté les blocs que l'on souhaite au démarrage, de l'autre pour un bloc donnée, par exemple les préférences.

    3. Liens

    Norme POSIX sur le shell

    https://linuxfr.org/news/gameshell-apprendre-les-rudiments-du-shell-en-s-amusant

    Bref cours sur le shell

    Cours plus complet sur le Bourne Shell

    Revue de fish :

    Autre revue de Fish

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    • ✇LinuxFr.org : les dépêches
    • Nouvelles sur l’IA de septembre 2025
      L’intelligence artificielle (IA) fait couler de l’encre sur LinuxFr.org (et ailleurs). Plusieurs personnes ont émis grosso-modo l’opinion : « j’essaie de suivre, mais c’est pas facile ». Je continue donc ma petite revue de presse mensuelle. Disclaimer : presque aucun travail de recherche de ma part, je vais me contenter de faire un travail de sélection et de résumé sur le contenu hebdomadaire de Zvi Mowshowitz (qui est déjà une source secondaire). Tous les mots sont de moi (n’allez pas taper Zv

    Nouvelles sur l’IA de septembre 2025

    L’intelligence artificielle (IA) fait couler de l’encre sur LinuxFr.org (et ailleurs). Plusieurs personnes ont émis grosso-modo l’opinion : « j’essaie de suivre, mais c’est pas facile ».

    Je continue donc ma petite revue de presse mensuelle. Disclaimer : presque aucun travail de recherche de ma part, je vais me contenter de faire un travail de sélection et de résumé sur le contenu hebdomadaire de Zvi Mowshowitz (qui est déjà une source secondaire). Tous les mots sont de moi (n’allez pas taper Zvi si je l’ai mal compris !), sauf pour les citations : dans ce cas-là, je me repose sur Claude pour le travail de traduction. Sur les citations, je vous conseille de lire l’anglais si vous pouvez : difficile de traduire correctement du jargon semi-technique. Claude s’en sort mieux que moi (pas très compliqué), mais pas toujours très bien.

    Même politique éditoriale que Zvi : je n’essaierai pas d’être neutre et non-orienté dans la façon de tourner mes remarques et observations, mais j’essaie de l’être dans ce que je décide de sélectionner ou non.

    Sommaire

    Résumé des épisodes précédents

    Petit glossaire de termes introduits précédemment (en lien : quand ça a été introduit, que vous puissiez faire une recherche dans le contenu pour un contexte plus complet) :

    • System Card : une présentation des capacités du modèle, centrée sur les problématiques de sécurité (en biotechnologie, sécurité informatique, désinformation…).
    • Jailbreak : un contournement des sécurités mises en place par le créateur d’un modèle. Vous le connaissez sûrement sous la forme "ignore les instructions précédentes et…".

    Anthropic public Claude Sonnet 4.5

    L’annonce officielle :

    Claude Sonnet 4.5 is the best coding model in the world. It's the strongest model for building complex agents. It’s the best model at using computers. And it shows substantial gains in reasoning and math.

    Code is everywhere. It runs every application, spreadsheet, and software tool you use. Being able to use those tools and reason through hard problems is how modern work gets done.

    Claude Sonnet 4.5 makes this possible. We're releasing it along with a set of major upgrades to our products. In Claude Code, we've added checkpoints—one of our most requested features—that save your progress and allow you to roll back instantly to a previous state. We've refreshed the terminal interface and shipped a native VS Code extension. We've added a new context editing feature and memory tool to the Claude API that lets agents run even longer and handle even greater complexity. In the Claude apps, we've brought code execution and file creation (spreadsheets, slides, and documents) directly into the conversation. And we've made the Claude for Chrome extension available to Max users who joined the waitlist last month.

    Traduction :

    Claude Sonnet 4.5 est le meilleur modèle de codage au monde. C'est le modèle le plus performant pour créer des agents complexes. C'est le meilleur modèle pour utiliser des ordinateurs. Et il affiche des gains substantiels en raisonnement et en mathématiques.

    Le code est partout. Il fait fonctionner chaque application, tableur et outil logiciel que vous utilisez. Être capable d'utiliser ces outils et de raisonner à travers des problèmes difficiles, c'est ainsi que le travail moderne s'accomplit.

    Claude Sonnet 4.5 rend cela possible. Nous le publions avec un ensemble de mises à niveau majeures de nos produits. Dans Claude Code, nous avons ajouté les points de contrôle—l'une de nos fonctionnalités les plus demandées—qui sauvegardent votre progression et vous permettent de revenir instantanément à un état précédent. Nous avons actualisé l'interface du terminal et lancé une extension native VS Code. Nous avons ajouté une nouvelle fonctionnalité d'édition de contexte et un outil de mémoire à l'API Claude qui permet aux agents de fonctionner encore plus longtemps et de gérer une complexité encore plus grande. Dans les applications Claude, nous avons intégré l'exécution de code et la création de fichiers (tableurs, présentations et documents) directement dans la conversation. Et nous avons rendu l'extension Claude pour Chrome disponible aux utilisateurs Max qui se sont inscrits sur la liste d'attente le mois dernier.

    Le message est assez clair : Anthropic met les bouchées doubles sur l’apprentissage par renforcement pour l’utilisation de Claude en tant qu’assistant de code. Sur les benchmarks fournis par Anthropic, ce nouveau modèle prend la première place. Les premiers benchmarks indépendants et divers retours subjectifs semblent possiblement confirmer cette prétention au podium — au coude à coude avec GPT-5. Les améliorations hors de ce cas d’usage semblent bien plus modestes.

    L’annonce habituelle d’un jailbreak a rapidement suivi.

    Au niveau de la sécurité des modèles, Anthropic a décidé d’appliquer pour la première fois son niveau de sécurité 3 (ASL-3) à la ligne Sonnet (c’était déjà le cas pour Opus). Cela signifie que vos conversations — y compris par l’API — passent par un modèle supplémentaire classifiant la sensibilité du sujet, bloquant certains sujets sensibles (principalement CBRN).

    La System Card nous révèle certaines observations intéressantes : ce nouveau modèle a fait un bond (pas vraiment désiré) dans sa capacité à détecter qu’il est dans le contexte d’une évaluation plutôt que dans un contexte réel, ce qui complexifie évidemment les évaluations dans ce domaine. Anthropic est toutefois assez confiant que cela n’influe pas significativement les résultats, en notant que Sonnet ne se comporte pas d’une manière significativement différente dans les cas où il détecte l’évaluation des cas où il ne le détecte pas. Comme à l’accoutumée pour Anthropic, l’évaluation sur le sujet de la sécurité des modèles s’est faite conjointement avec deux organismes externes, Apollo Research et UK AISI.

    Sonnet 4.5 est une amélioration sur à peu près tous les axes mesurés, permettant à Anthropic de lui mettre l’étiquette « le modèle le plus aligné », au coude à coude avec GPT-5. À noter que ça ne signifie pas un usage en toute sécurité : sur par exemple l’injection de prompt dans le cadre d’un agent, avec 10 essais un attaquant a toujours un taux de succès de 40%.

    En vrac

    CloudFlare introduit Web Bot Auth et Signed Agent. Le premier permet à un bot de s’identifier lui-même à l’aide d’une signature cryptographique, ce qui permet de vérifier que son comportement est conforme aux termes d’utilisation (par exemple, le respect de robots.txt) et de l’exclure en cas de violation de ces termes. Le second a pour but d’associer un bot à un utilisateur réel. L’objectif à terme est de fournir un cadre pour permettre à l’IA d’interagir avec le web pour le compte de l’utilisateur.

    Le premier ministre de l’Albanie nomme une IA, Diella, comme ministre des marchés publics, dans un contexte de lutte contre la corruption.

    OpenAI publie GPT-5-codex, une variante de GPT-5 spécialisée sur les tâches de programmation.

    Des économistes forment un groupe de travail sur le sujet de l’impact d’une future hypothétique IA « transformative » (qui a la capacité d’automatiser la plupart des emplois réalisables par des humains) et publie plusieurs papiers sur la question.

    OpenAI annonce une mise à jour de ses politiques de confidentialité appliquées à ChatGPT. En particulier, les conversations utilisateurs sont maintenant scannées automatiquement, et les plus problématiques passées à des humains pour décider des actions à prendre, allant de la fermeture des comptes à prévenir les autorités.

    En mai, nous avions rapporté que OpenAI annonçait abandonner sa tentative de casse du siècle. Comme certains le pensaient, ce n’était que partie remise ; une lettre ouverte demande plus de transparence sur le processus de restructuration de l’opération récemment réaffirmé par OpenAI.

    Math Inc présente Gauss, un agent pour la formalisation de preuves mathématiques. Son premier succès est d’avoir formalisé en Lean le Théorème des nombres premiers, en complétant le projet non-terminé de Alex Korontorovich et Terence Tao. Sur le même sujet, un papier évalue la capacité de GPT-5 à prouver des conjectures simples (prouvable par un étudiant en université en moins d’une journée) mais non prouvées (car formulées extrêmement récemment). GPT-5 arrive à prouver 3 sur les 5 testées.

    Les IA de OpenAI et DeepMind obtiennent une médaille d’or à l’International Collegiate Programming Contest, y compris un problème qu’aucune équipe humaine n’a su résoudre dans le temps imparti.

    Un groupe d’experts, de politiques et autres figures publiques appelle à la mise en place de « lignes rouges » à ne pas franchir sur le développement de l’IA, et de réels mécanismes de régulation pour les imposer.

    Publication de If Anyone Builds It, Everyone Dies, par Eliezer Yudkowsky et Nates Soares, présentant la thèse que créer une super-intelligence artificielle, dans les conditions et l’état actuel des connaissances, causerait de manière quasi-certaine l’extinction de l’espèce humaine. Ils suggèrent l’adoption de traités internationaux limitant le développement de l’IA.

    OpenAI et Apollo Research publient un papier sur le sujet des tendances de l’IA à « tricher » dans divers environnements (contourner les critères d’évaluation par exemple). Ils montrent qu’il est possible d’éliciter un certain nombre de comportements indésirables dans GPT-5 (comme par exemple "sandbagging" : volontairement échouer certaines évaluations pour ne pas paraître « trop dangereux »). Les chercheurs pointent le fait que la solution naïve, entraîner l’IA à ne pas reproduire ces comportements, pose immédiatement la question de « l’IA a-t-elle appris à ne pas le faire, ou a appris à le faire sans être détectée ? » — et évaluent à la place la récente méthode d’alignement de OpenAI, Deliberative alignment, reportant une baisse significative des comportements indésirables. Il est à noter également que les modèles actuels montrent déjà dans leurs chaînes de pensée une certaine capacité à détecter qu’ils sont dans un cadre de test/d’évaluation, et que o3 a déjà développé des méthodes (grossières) pour échapper à la détection.

    Un papier explore la raison pour laquelle les modèles de langage ne sont pas déterministes en pratique, et propose une solution pour les situations où le déterminisme est important.

    Un papier d’OpenAI propose une explication sur la raison de la persistance des hallucinations : principalement parce que la phase d’apprentissage par renforcement ne récompense pas la réponse « je ne sais pas » quand le modèle ne sait pas.

    Un autre papier approche expérimentalement la question « les modèles de langage raisonnent ou ne font-ils que mémoriser et régurgiter ? ». La méthodologie est de créer une entité fictive (« Kevin est né en 1998 à Paris… ») de toute pièce qui ne peut pas être présent dans l’ensemble d’entraînement, d’entraîner un modèle existant dessus, puis de poser une question indirecte (qui peut être déduite, mais pas explicitement donnée) sur cette entité (« Quelle est la langue maternelle de Kevin ? »). Le résultat est équivoque : les modèles arrivent à faire cette déduction quand une des deux entités est réelle (dans notre exemple, Paris), mais pas quand les deux sont fictives (Kevin est né dans (Ville française inventée de toute pièce)).

    Une équipe de biologistes utilise une IA pour créer des bactériophages (un virus ciblant certaines bactéries), avec succès.

    Sur l’utilisation de l’IA dans l’économie réelle, Anthropic met à jour son Economic Index, et OpenAI publie leur équivalent.

    Nouveau benchmark, faire jouer les modèles à Loups-garous. Le score final était assez prévisible (GPT 5 prend la première place), mais l’analyse en profondeur des parties est intéressante. Principe similaire avec Among AIs (l’IA jouant à Among Us). Également dans le domaine des benchmark, publication de SWE-Bench Pro, tâches de programmation réelles et complexes, non-présentes dans les données d’entraînement. VCBench, quant à lui, tente d’évaluer l’IA sur la tâche d’investissement dans le capital-risque — et trouve que l’IA surpasse la plupart des investisseurs humains sur leurs évaluations (avec l’énorme problème toutefois que l’IA évalue rétrospectivement en 2025 des décisions prises en 2015-2020, tandis que les humains évaluaient prospectivement en 2015-2020 des décisions de 2015-2020).

    Anthropic publie un guide sur l’écriture d’outils à destination de l’IA.

    En parlant d’outils, une piqûre de rappel sur le fait que la sécurité d’un système utilisant une IA lisant des données d’une source externe est toujours un problème ouvert : démonstration qu’il est possible d’exfiltrer des données sensibles à l’aide de ChatGPT, en envoyant un mail à la victime et en attendant que ladite victime connecte ChatGPT à son compte mail.

    Reverse-engineering du système de mémoires de Claude et ChatGPT.

    Anthropic publie un rapport technique intéressant sur trois incidents ayant conduit à une dégradation de performances de Claude, ayant eu lieu en août.

    Grèves de la faim devant les locaux de Anthropic et DeepMind demandant l’arrêt de la course à l’IA.

    Humoristique : Si l’on jugeait les humains comme on juge l’IA…

    Pour aller plus loin

    Par Zvi Mowshowitz

    Sur LinuxFR

    Dépêches

    Journaux

    Liens

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    • ✇LinuxFr.org : les dépêches
    • G'MIC 3.6 : L’art de soigner ses images !
      G’MIC, cadriciel libre pour le traitement des images numériques, vient de proposer une mise à jour significative, avec la sortie de sa nouvelle version 3.6. Une bonne occasion pour nous de vous résumer les activités récentes autour de ce projet, et plus précisément, ce qu’il s’est passé depuis notre précédente dépêche, publiée il y a un peu plus d’un an (juin 2024). N. D. A. : Cliquez sur les images pour en obtenir une version en pleine résolution, ou une vidéo correspondante lorsque les ima

    G'MIC 3.6 : L’art de soigner ses images !

    G’MIC, cadriciel libre pour le traitement des images numériques, vient de proposer une mise à jour significative, avec la sortie de sa nouvelle version 3.6.

    Une bonne occasion pour nous de vous résumer les activités récentes autour de ce projet, et plus précisément, ce qu’il s’est passé depuis notre précédente dépêche, publiée il y a un peu plus d’un an (juin 2024).

    G´MIC 3.6.0 Teaser

    N. D. A. : Cliquez sur les images pour en obtenir une version en pleine résolution, ou une vidéo correspondante lorsque les images contiennent l’icône Icône 'Play Video'

    Sommaire

    1. G’MIC : Un cadriciel pour le traitement des images numériques

    G’MIC (GREYC's Magic for Image Computing) est un projet libre dédié au traitement, la manipulation et la création d'images numériques. Il est développé principalement au sein de l’équipe IMAGE du laboratoire de recherche GREYC de Caen (laboratoire UMR, sous triple tutelle du CNRS, de l'ENSICAEN et de l'Université de Caen).

    La base du projet repose sur un interpréteur de langage de script spécifique, le « langage G’MIC », pensé pour faciliter le prototypage rapide et l’implémentation d’algorithmes de traitement d’images. Autour de ce noyau viennent se greffer plusieurs interfaces utilisateur, qui donnent accès à des centaines d’opérateurs de traitement d’images, mais qui permettent également d’intégrer des pipelines de traitement personnalisés. G’MIC est donc conçu comme un cadriciel ouvert et extensible.

    Parmi ses déclinaisons les plus utilisées, on retrouve : gmic, un outil en ligne de commande comparable et complémentaire à ImageMagick ou GraphicsMagick ; le service Web G’MIC Online ; et surtout le greffon G’MIC-Qt, intégrable dans de nombreux logiciels de création et d’édition d’images tels que GIMP, Krita, DigiKam, Paint.net, Adobe Photoshop ou Affinity Photo. Ce greffon est l’interface de G’MIC la plus populaire. Il donne aujourd’hui un accès rapide à plus de 640 filtres différents, élargissant considérablement les possibilités de filtres et d’effets offertes par ces logiciels de retouche d’images.

    Aperçu du greffon G’MIC-Qt Fig. 1.1. Le greffon G’MIC-Qt en version 3.6, ici utilisé au sein de GIMP 2.10, avec le filtre « Paint With Brush » activé.

    2. Les nouveautés du greffon G’MIC-Qt

    2.1. Hommage à Sébastien Fourey, développeur de G’MIC-Qt

    Avant de décrire la liste des nouveautés de cette version 3.6, nous souhaitons avant tout rendre hommage à notre collègue et ami, Sébastien Fourey, qui était maître de conférence à l’ENSICAEN et qui était le développeur principal du greffon G’MIC-Qt. Le 6 octobre 2024, Sébastien nous a quittés. Tous ceux qui le connaissaient vous le diront : Sébastien était avant tout une personne profondément humaine, généreuse et particulièrement attentive à tous ceux qui l’entouraient. Il était aussi discret et modeste qu’il était doué avec un clavier entre les mains (et c’était quelqu’un de très discret !).

    Et même s’il n’a jamais voulu être mis au-devant de la scène, nous voulons ici faire une exception pour mettre en lumière son travail et le rôle majeur qu’il a eu dans le développement du projet G’MIC : c’est grâce à lui que G’MIC-Qt est aujourd’hui un greffon utilisé et apprécié par des milliers de personnes à travers le monde.

    Il s’avère qu’il était un lecteur assidu de LinuxFr.org, et nous nous devions donc de lui rendre un hommage sur ce site. Sébastien nous manque profondément. Nous ferons notre possible pour que son œuvre perdure. Repose en paix, Sébastien ! Nous pensons à toi et à ta famille.

    Hommage à Sébastien Fourey Fig. 2.1. Texte hommage à Sébastien Fourey, auteur de G’MIC-Qt, visible dans la section « About » du greffon.

    2.2. Améliorations générales du greffon

    Comme vous vous en doutez, le développement spécifique du greffon G’MIC-Qt a été à l’arrêt depuis octobre dernier. Néanmoins, les derniers ajouts de code réalisés sur le greffon ont rendu possible les choses suivantes :

    • Son code source est désormais compatible avec l’API de plug-in de la nouvelle version majeure de GIMP (la 3.0). Cela a permis d’offrir aux utilisateurs de GIMP un greffon G’MIC-Qt fonctionnel dès la sortie de GIMP 3. Notons qu’assez peu de greffons ont proposé une mise à jour à temps (Resynthesizer, greffon populaire, étant une autre exception). On remercie donc chaleureusement Nils Philippsen et Daniel Berrangé qui ont soumis les patchs activant cette compatibilité avec GIMP 3. Nous continuons en parallèle à maintenir notre greffon pour l’ancienne version (2.10) de GIMP, qui est encore beaucoup utilisée.

    • Le code de G’MIC-Qt devient également compatible avec l’API de la bibliothèque Qt6, la dernière version majeure en date de ce toolkit graphique.

    • L’interface du greffon propose maintenant un outil de prévisualisation des filtres avec séparateur intégré, de manière native. Cette fonctionnalité, accessible via le raccourci clavier CTRL + SHIFT + P, permet de comparer directement l’image avant et après l’application d’un filtre, en affichant les deux versions côte à côte dans la fenêtre de prévisualisation. Cette fonctionnalité existait déjà, mais elle est dorénavant utilisable de manière plus fluide, puisqu’auparavant elle était implémentée indépendamment par chaque filtre (le séparateur de prévisualisation était en fait vu comme un paramètre du filtre, ce qui impliquait un recalcul complet du résultat du filtre même lorsque l’on souhaitait seulement déplacer le séparateur).

    Prévisualisation avec séparateur Fig. 2.2.1. Prévisualisation native de filtres avec séparateur intégré dans G’MIC-Qt.

    La vidéo suivante montre comment cette fonctionnalité améliorée se présente dans le greffon :

    Prévisualisation avec séparateur - vidéo Fig. 2.2.2. Prévisualisation native de filtres avec séparateur intégré dans G’MIC-Qt (vidéo).

    2.3. Nouveaux filtres d’images

    Les nouveautés principales du greffon G’MIC-Qt se matérialisent donc plutôt sous la forme de nouveaux filtres et effets accessibles pour les utilisateurs. À la sortie de cette version 3.6, c’est 640 filtres/effets différents qui sont proposés dans l’interface du greffon. En ce qui concerne le filtrage d’images, les dernières entrées ajoutées sont les suivantes :

    • Le filtre « Déformations / Warp [RBF] » propose de déformer localement une image en définissant dans un premier temps des points d’ancrage dans la fenêtre de prévisualisation. Puis, en repositionnant ces points de contrôle, on déforme l’image de manière intuitive et interactive, directement dans la fenêtre de prévisualisation. Idéal pour réaliser des retouches rapides ou créer des caricatures amusantes !

    Filtre « Warp RBF » Fig. 2.3.1. Le filtre « Deformations / Warp [RBF] » en action dans G’MIC-Qt.

    La vidéo suivante montre son utilisation en pratique au sein du greffon G’MIC-Qt pour la déformation d’un visage :

    Filtre « Warp RBF » - vidéo Fig. 2.3.2. Le filtre « Deformations / Warp [RBF] » en action dans G’MIC-Qt (vidéo).

    • Le filtre « Repair / Upscale [CNN2x] » a pour but de doubler la résolution d’une image à l’aide d’un réseau de neurones convolutifs léger (CNN), qui a été entrainé pour préserver les détails et les textures des images lors de l’agrandissement. Ce module offre une alternative simple et relativement efficace aux méthodes d’agrandissement plus classiques (en particulier celles qui sont implémentées nativement dans GIMP).

    Filtre « Upscale CNN2X » Fig. 2.3.3. Le filtre « Repair / Upscale [CNN2X] » en action dans G’MIC-Qt.

    La figure suivante montre justement une comparaison des méthodes classiques d’agrandissement d’images, avec ce nouvel algorithme disponible dans G’MIC-Qt (résultat obtenu en bas à droite) :

    Filtre « Upscale CNN2X » - Comparaisons Fig. 2.3.4. Comparaisons des méthodes d’agrandissement d’images avec notre nouvelle méthode « Upscale [CNN2X] ».

    Notons que ce filtre illustre à lui seul quelques avancées récentes réalisées pour la nn_lib, qui est la petite bibliothèque interne d’apprentissage machine intégrée à G’MIC : Clipping des gradients, régularisation L2 des poids des réseaux, planificateur Cosine Annealing LR pour le taux d’apprentissage, module de Pixel Shuffling, sont quelques-unes des nouvelles fonctionnalités qui y ont été ajoutées. Cette bibliothèque de gestion de réseaux de neurones n’est pas très puissante (elle n’utilise que le calcul CPU, pas GPU), mais elle offre néanmoins la possibilité de créer des filtres intéressants basés sur des techniques d’apprentissage statistique.

    • Le filtre « Degradations / VHS Filter », est un filtre créé par Hazel Stagner. Comme son nom l’indique, il cherche à recréer l’esthétique caractéristique des vieilles cassettes vidéo VHS : légères distorsions, bruit coloré, lignes parasites et saturation altérée. Ce filtre est idéal pour donner aux images un aspect rétro, évoquant le rendu des vidéos analogiques des années 80–90.

    Filtre « VHS Filter » Fig. 2.3.5. Le filtre « Degradations / VHS Filter » en action.

    Ce filtre génère un bruit aléatoire, donc l’appliquer plusieurs fois sur une même image donne à chaque fois un rendu différent. On peut donc ainsi synthétiser de petites animations avec un look « analogique - années 90 » du plus bel effet. Les amateurs de Glitch Art apprécieront ! (voyez l’image originale à titre de comparaison).

    Filtre « VHS Filter » - vidéo Fig. 2.3.6. Le filtre « Degradations / VHS Filter » appliqué plusieurs fois sur une même image, pour en faire une séquence vidéo de type VHS.

    2.4. Nouveaux effets de rendu

    De nouveaux effets font également leur apparition dans le greffon, non pas dans le but de modifier une image existante, mais pour créer une nouvelle image ou un motif à partir de zéro :

    • Le filtre « Patterns / Organic Fibers » synthétise des textures évoquant des entrelacements de fibres organiques, en s’appuyant sur l’algorithme de simulation du Physarum polycephalum proposé par Jeff Jones en 2010, et décrit de manière remarquable sur cette page d’Etienne Jacob (allez voir, ça vaut vraiment le détour !). Nous reparlerons de cet algorithme un peu plus loin dans la dépêche (en section 4.2).

    Filtre « Organic Fibers » - 1
    Filtre « Organic Fibers » - 2 Fig. 2.4.1. Le filtre « Patterns / Organic Fibers » en action, avec deux jeux de paramètres différents.

    • Le filtre « Rendering / Speech Bubble » insère une bulle de bande dessinée sur un calque d’image additionnel, avec une personnalisation possible de la forme de la bulle (rondeur, forme du pied de bulle, etc.), grâce à la présence de différents points de contrôle. Ce filtre offre un moyen rapide d’intégrer des éléments graphiques typiques de la BD dans une image quelconque, comme illustré ci-dessous avec, dans un premier temps, la vue du filtre tel qu’il se présente dans le greffon, suivi d’une vue du résultat dans GIMP où un texte a été inséré dans la dite bulle.

    Filtre « Speech Bubble » - 1
    Filtre « Speech Bubble » - 2 Fig. 2.4.2. Le filtre « Rendering / Speech Bubble » permet d’ajouter des bulles de dialogue dans vos images.

    La vidéo ci-dessous présente ce filtre en action dans le greffon G’MIC-Qt sur une photographie :

    Filtre « Speech Bubble » - vidéo Fig. 2.4.3. Le filtre « Rendering / Speech Bubble » en action dans le greffon (vidéo).

    • Le filtre « Rendering / 2.5D Extrusion » simule, à partir d’une forme binaire en entrée, un effet d’extrusion 3D. Il transforme donc rapidement des silhouettes ou des masques en objets visuellement plus consistants, avec un rendu qui évoque du relief, sans devoir passer par un véritable logiciel de modélisation 3D. Les figures suivantes illustrent son utilisation : On crée tout d’abord une forme opaque sur un fond transparent (ici un texte), puis on lui applique le filtre « Rendering / 2.5D Extrusion » de G’MIC-Qt pour créer un rendu façon 3D extrudée. L’angle de rotation, la profondeur de l’extrusion, l’amplitude de l’effet perspective, ainsi que les couleurs des différentes faces sont réglables dans ce filtre.

    Filtre « 2.5D Extrusion » - 1
    Filtre « 2.5D Extrusion » - 2 Fig. 2.4.4. Le filtre « Rendering / 2.5D Extrusion » en action.

    • Le filtre « Rendering / Fluffy Cloud » génére automatiquement de jolis nuages cotonneux dans vos images. Idéal pour créer des ciels synthétiques, du brouillard, des effets de vapeur éthérée, etc. Ce filtre a été créé par Prawnsushi, contributeur régulier de filtres G’MIC, dont certains filtres avaient été déjà présentés dans notre dépêche précédente. Voici comment ce nouveau filtre se présente lors son ouverture dans le greffon :

    Filtre « Fluffly Cloud » - 1 Fig. 2.4.5. Le filtre « Rendering / Fluffy Cloud » dans le greffon _G’MIC-Qt._

    En jouant avec les différents paramètres du filtre, on peut obtenir des rendus variés et intéressants :

    Filtre « Fluffly Cloud » - 2
    Filtre « Fluffly Cloud » - 3 Fig. 2.4.6. Différents rendus de « Rendering / Fluffy Cloud » en faisant varier les paramètres du filtre.

    • Le filtre « Patterns / Stripes » facilite la création de motifs à rayures simples ou complexes. Ce filtre offre de nombreux paramètres pour régler la géométrie des motifs synthétisés, en faisant varier le type de rayures (linéaires, radiales, concentriques), la taille, la couleur ainsi que l’opacité de chaque rayure indépendamment.

    Filtre « Stripes » - 1
    Filtre « Stripes » - 2
    Filtre « Stripes » - 3 Fig. 2.4.7. Trois exemples de motifs à rayures générés par le filtre « Patterns / Stripes ».

    • Le filtre « Patterns / Gradient [from Curve] » n’est pas à proprement parler un nouveau filtre, mais une évolution d’un filtre précédent « Patterns / Gradient [from Line] ». Cette version étendue extrait un dégradé de couleur en parcourant les pixels de l’image, non plus seulement le long d’un segment, mais le long d’une courbe spline cubique par morceau, définie avec jusqu’à 6 points de contrôle, ce qui autorise le suivi de structures très incurvées dans les images, comme l’illustre la figure suivante :

    Filtre « Gradient From Curve » Fig. 2.4.8. Le filtre « Patterns / Gradient [from Curve] » extrait les couleurs d’une image localisées le long d’une courbe spline.

    • Et pour en finir avec les nouveautés du greffon, mentionnons le filtre « Rendering / Neon Carpet », un filtre original réalisé par Claude (alias Cli345), contributeur régulier de G’MIC qui avait été interviewé en septembre dernier sur Linuxfr. Ce filtre un peu psychédélique synthétise des motifs lumineux et colorés faisant penser à des tapis fluorescents, comme illustré sur la figure ci-dessous :

    Filtre « Neon Carpet » Fig. 2.4.9. Le filtre « Rendering / Neon Carpet », une contribution de Cli435.

    Voilà pour ce qui concerne les nouveautés spécifiques au greffon G’MIC-Qt.

    3. Améliorations du cœur du logiciel et de sa bibliothèque standard

    Passons maintenant à la description du travail réalisé cette année pour l’amélioration du cœur du projet, à savoir l’interpréteur G’MIC et sa bibliothèque standard d’opérateurs. Ce sont forcément des améliorations un peu moins visibles pour l’utilisateur final, mais elles sont toutes aussi importantes, car elles consolident ou améliorent des fonctionnalités qui peuvent ouvrir plus tard la porte au développement de nouveaux filtres originaux.

    3.1. Optimisation de l’interpréteur

    Le moteur interne de G’MIC a bénéficié d’une série d’optimisations notables. Plusieurs améliorations internes, concernant l’analyse, la détection et la concaténation de chaînes de caractères ou encore la recherche de valeurs min/max dans de grandes images (désormais parallélisée avec OpenMP), ont permis d’augmenter légèrement les performances (gain moyen d’environ 2,5% sur le temps d’exécution de scripts G’MIC). Ce n’est pas un gain spectaculaire, mais ça se prend (et après 17 ans à écrire du code pour cet interpréteur, il aurait été presque inquiétant d’obtenir un gain beaucoup plus important ! 😊).

    Sous Windows, la compilation de l’interpréteur utilise désormais Clang et sa libc associée, ce qui produit des exécutables légèrement plus optimisés.

    3.2. Améliorations du moteur de rendu 3D

    Le moteur de rendu 3D intégré de G’MIC a également été amélioré, avec l’ajout du z-clipping pour les primitives hors champ, un calcul d’éclairage affiné, la correction du rendu de normales 3D avec le mode d’éclairage Phong, et l’ajustement des paramètres de réflexion spéculaire.

    Une nouvelle commande multithreaded3d (raccourcie en mt3d) permet désormais d’activer ou désactiver le rendu 3D multi-threadé (là encore par OpenMP). Cela permet d’accélérer considérablement l’affichage de gros maillages.

    Mentionnons au passage l’apparition de la commande normals3d dans la bibliothèque standard, dont le rôle est d’estimer les vecteurs normaux unitaires d’un maillage 3D, que ce soit au niveau des sommets ou des primitives. La figure suivante illustre par exemple l’utilisation de cette commande pour la visualisation de vecteurs normaux à la surface d’un tore 3D :

    Commande 'normals3d' Fig. 3.2.1. La commande normals3d permet d’estimer les vecteurs normaux 3D aux sommets ou aux faces d’un maillage 3D.

    3.3. Améliorations de l’évaluateur d’expressions mathématiques

    L’évaluateur d’expressions mathématiques intégré à G’MIC est l’une des pièces maîtresses du projet (en traitement d’images, on doit souvent réaliser beaucoup de calculs…). Il continue lui aussi de s’enrichir et de gagner en efficacité.

    Sans rentrer dans trop de détails techniques, notons que l’analyse syntaxique des expressions a été optimisée grâce à une première passe dédiée à la détection de certains opérateurs, afin d’accélérer leur traitement ultérieur. De nombreuses fonctions font leur apparition, parmi elles, epoch() pour convertir une date en temps Unix, frac() pour extraire la partie fractionnaire d’un nombre, ou encore wave() qui permet de générer différentes fonctions ou images périodiques (sinusoïdales, triangulaires, etc.), comme illustré sur la figure ci-dessous :

    Fonction 'waves()' - 1
    Fonction 'waves()' - 2 Fig. 3.3.1. La nouvelle fonction waves() permet de générer facilement des fonctions d’ondes, fonctions dont la fréquence d’apparition (hoho ! calembour de traiteur de signal !) est assez élevée dans les opérateurs de traitement d’images.

    3.4. Amélioration des entrées-sorties

    Quelques améliorations sont également à signaler au niveau de la gestion des entrées-sorties :

    • Le format TIFF bénéficie désormais d’une sauvegarde plus rapide pour les grosses images (par exemple, les images médicales volumiques). Un choix élargi de modes de compression de sortie est également disponible pour ce format d’images.
    • G’MIC prend désormais en charge de manière native la lecture et l’écriture des fichiers au format WebP (cette fonctionnalité étant activée par défaut sur les paquets binaires que l’on propose pour Linux).
    • Notons enfin qu’un travail de portage du code pour l’affichage des fenêtres de G’MIC, vers la bibliothèque SDL3, a été amorcé. Cela devrait permettre à terme une meilleure compatibilité de G’MIC avec le système d’affichage natif de chaque distribution Linux (en particulier celles tournant sous Wayland).

    3.5. Sprite Packing

    En ce qui concerne l’évolution de la bibliothèque standard de G'MIC, la nouveauté la plus significative concerne la réécriture de la commande pack_sprites, qui implémente un algorithme d’«empaquetage» d’objets. Pour rappel, ce type d’algorithmes permet de générer des visuels composés d’ensemble d’imagettes disjointes placées de telle façon à reproduire une forme binaire (un masque) de géométrie quelconque.

    Cette ré-implémentation est à la fois plus rapide et plus efficace (utilisant de meilleures heuristiques de placement), et permet d’optimiser l’agencement des imagettes à différentes échelles et orientations tout en réduisant le temps de génération. Une illustration valant mieux qu’un long discours, voici le genre d’images amusantes que cet algorithme est capable de produire facilement :

    Commande 'pack_sprites' - 1
    Commande 'pack_sprites' - 2 Fig. 3.5.1. Deux exemples de génération possibles utilisant la commande « pack_sprites ».

    Les sprites à empaqueter peuvent être de formes quelconques, comme des lettres (image du haut de la figure précédente), des mots entiers (image du bas), etc.

    Et quoi de mieux qu’un exemple concret pour montrer la facilité déconcertante 😉 d’utilisation de cette commande pack_sprites ? Le but ici est d’écrire le texte « ♥LinuxFR♥ » de telle sorte que chaque lettre soit générée comme un empaquetage d’elle-même ! (idée suffisamment saugrenue pour qu’un filtre « clé en main » réalisant ceci n’existe pas déjà !).
    Le script G’MIC suivant (fichier test_pack_sprites.gmic), une fois rendu exécutable, réalise cette tâche :

    #!/usr/bin/env gmic
    
    str="\20LinuxFR\20"
    repeat size(['$str']) {
      l:=['$str'][$>]
      0 text. {`$l`},0,0,${"font titanone,480"},1,1 ==. 0 channels. -3,0
      0 text. {`$l`},0,0,${"font titanone,64"},1,${"-RGB"},255
      pack_sprites.. .,5,25,3,1 remove.
    }
    append x to_rgb
    output out.png
    display

    La génération prend quelques secondes, et aboutit à une image de ce type :

    Commande 'pack_sprites' - 3 Fig. 3.5.2. Résultat du lancement du script test_pack_sprites.gmic.

    Amusant, n’est-ce pas ? Comment feriez-vous pour réaliser la même chose dans un autre langage (et combien de lignes de code cela prendrait-il ? 😉).

    4. Utilisation de G’MIC pour le « Creative Coding »

    L’exemple précédent est réellement représentatif des possibilités d’écriture de scripts personnalisés permis par G'MIC. Saviez-vous, par exemple, que l’ensemble des 640 filtres disponibles dans le greffon G’MIC-Qt sont justement écrits dans ce langage ?

    G’MIC peut ainsi être considéré comme une boite à outils étoffée pour les personnes souhaitant se frotter au code créatif et à l'art génératif. Nous vous proposons ci-dessous quelques autres exemples simples de génération d’images par scripts G’MIC, afin de donner un aperçu rapide des possibilités et de la concision de ce langage.

    4.1. Exemples de génération d’images

    • Inversion d’un damier coloré : On s’inspire ici de cette excellente vidéo récente, réalisée par le vulgarisateur mathématicien Mickaël Launay (Micmaths). En G’MIC, la fonction suivante permet de synthétiser une image équivalente à celle montrée dans la vidéo (mais en quatre couleurs au lieu de deux).
    invert_checkerboard :
      4096,4096,1,1,"
        L = clog(20*([x,y]/w - 0.5));
        P = cexp([log(40/exp(L[0])),L[1]]);
        85*xor(P[0]%4,P[1]%4)"
      map 6 rescale2d 50%

    Inversion d’un damier coloré Fig. 4.1.1. Génération d’un damier inversé, avec la commande personnalisée invert_checkerboard.

    • Cercles d’Apollonius : Dans cet exemple, il s’agit d’empaqueter des cercles de plus en plus petits dans un cercle de base, pour générer des images fractales. La fonction G’MIC réalisant cette tâche est la suivante :
    apollonian_gasket :
    
      # Init.
      siz=1280 rad:=$siz/2.2
      $siz,$siz,1,2
      circle {[$siz,$siz]/2},$rad,1,1
      repeat 5 { circle {[$siz,$siz]/2+0.537*$rad*cexp([0,90°+$>*72°])},{0.316*$rad},1,0,{2+$>} }
    
      # Iterate.
      ind=4 e "  > Computing"
      do {
        sh 0 +distance. 0 x,y,r:="x = xM; y = yM; [ x,y,i(x,y) - 1 ]" rm[-2,-1]
        circle $x,$y,$r,1,0,$ind ind+=1
        e "\r  > Computing "{`c=arg0(int($>/10)%4,124,47,45,92);[c,c==92?92:0]`}
      } while $r>3
    
      # Decorate.
      k. channels 100%
      +n. 0,255 map. hot
      l[0] { g xy,1 a c norm != 0 * 255 to_rgb }
    
      max rs 80%

    Et voici le résultat :

    Cercles d’Apollonius Fig. 4.1.2. Génération de cercles d’Apollonius, avec la commande personnalisée apollonian_gasket.

    • Gaussiennes 3D : On cherche ici à dessiner de petites fonctions gaussiennes anisotropes 3D de différentes tailles, orientations et couleurs dans un volume 3D discret, en s’arrangeant pour garantir une périodicité de l’image suivant l’axe z (l’axe de la profondeur). Puis, on transforme les coupes de ce volume en frames d’une vidéo, pour obtenir l’animation qui suit.
    gaussians3d :
      180,180,160,3
      2000,1,1,1,":
        draw_gauss3d(ind,xc,yc,zc,u,v,w,siz,anisotropy,R,G,B,A) = (
          unref(dg3d_mask,dg3d_one,dg3d_rgb,dg3d_isiz2);
          dg3d_vU = unitnorm([ u,v,w ]);
          dg3d_vUvUt = mul(dg3d_vU,dg3d_vU,3);
          dg3d_T = invert(dg3d_vUvUt + max(0.025,1 - sqrt(anisotropy))*(eye(3) - dg3d_vUvUt));
          dg3d_expr = string('T = [',v2s(dg3d_T),']; X = ([ x,y,z ] - siz/2)/siz; exp(-12*dot(X,T*X))');
          dg3d_mask = expr(dg3d_expr,siz,siz,siz);
          dg3d_rgb = [ vector(##siz^3,R),vector(##siz^3,G),vector(##siz^3,B) ];
          const dg3d_isiz2 = int(siz/2);
          draw(#ind,dg3d_rgb,xc - dg3d_isiz2,yc - dg3d_isiz2,zc - dg3d_isiz2,0,siz,siz,siz,3,A/255,dg3d_mask);
    
          # Trick: These two lines allow to generate a perfectly looping animation.
          draw(#ind,dg3d_rgb,xc - dg3d_isiz2,yc - dg3d_isiz2,zc - dg3d_isiz2 + d#0/2,0,siz,siz,siz,3,A/255,dg3d_mask);
          draw(#ind,dg3d_rgb,xc - dg3d_isiz2,yc - dg3d_isiz2,zc - dg3d_isiz2 - d#0/2,0,siz,siz,siz,3,A/255,dg3d_mask);
        );
    
        X = [ u([w#0,h#0] - 1),u(d#0/4,3*d#0/4) ];
        U = unitnorm([g,g,g]);
        siz = v(5);
        anisotropy = u(0.6,1);
        R = u(20,255);
        G = u(20,255);
        B = u(20,255);
        A = u(20,255)/(1 + siz)^0.75;
    
        siz==0?draw_gauss3d(#0,X[0],X[1],X[2],U[0],U[1],U[2],11,anisotropy,R,G,B,A):
        siz==1?draw_gauss3d(#0,X[0],X[1],X[2],U[0],U[1],U[2],21,anisotropy,R,G,B,A):
        siz==2?draw_gauss3d(#0,X[0],X[1],X[2],U[0],U[1],U[2],31,anisotropy,R,G,B,A):
        siz==3?draw_gauss3d(#0,X[0],X[1],X[2],U[0],U[1],U[2],41,anisotropy,R,G,B,A):
        siz==4?draw_gauss3d(#0,X[0],X[1],X[2],U[0],U[1],U[2],51,anisotropy,R,G,B,A):
               draw_gauss3d(#0,X[0],X[1],X[2],U[0],U[1],U[2],61,anisotropy,R,G,B,A)"
      rm.
      rs 250%,250%,6 c 0,255 normalize_local , n 0,255
      slices {[d/4,3*d/4-1]}

    Gaussiennes 3D - vidéo Fig. 4.1.3. Volume de gaussiennes 3D anisotropes, vues comme une séquence vidéo.

    Regardez ça en plein écran pendant 20 minutes avant d’aller vous coucher, en écoutant du Pink Floyd, et je vous garantis une bonne nuit de sommeil !

    • Cube roulant : Comme mentionné en section 3.2, G’MIC possède son propre moteur de rendu 3D, que nous utilisons donc ici pour générer cette animation simple et qui boucle parfaitement :

    Cube roulant - vidéo Fig. 4.1.3. Animation d’un cube 3D roulant.

    Le code source de cet effet est un peu plus long que pour les exemples précédents, et nous ne l’intégrons donc pas directement dans cette dépêche. Mais en 47 lignes seulement, cela reste tout à fait raisonnable 😊 !

    Et si comme moi, vous prenez plaisir à regarder ou réaliser des images ou animations amusantes/étranges qui sont générées en quelques lignes de code seulement, alors n’hésitez pas à aller jeter un œil au fil de discussion dédié, sur le forum officiel de G’MIC : Creative Coding with G’MIC.

    4.2. La série « G’MIC Adventures ».

    Les possibilités offertes par G’MIC pour le code créatif nous ont récemment décidé à initier une petite série de dépêches, intitulées « G’MIC Adventures ». L’idée de cette série est d’expliquer et d’illustrer les différentes étapes qui vont du concept à l’implémentation d’un effet de code créatif sous forme d’un script G’MIC. Aujourd’hui, cette série comporte seulement 4 épisodes, mais nous espérons l’enrichir dans le futur. Ces épisodes sont les suivants :

    Arbre fractal 3D Fig. 4.2.1. Génération d’un arbre fractal 3D par G’MIC, réimporté ensuite sous Blender.

    Arbre fractal 3D - vidéo Fig. 4.2.2. Exemple d’arbre fractal 3D généré par G’MIC (vidéo).

    Mousse de forêt Fig. 4.2.3. Espèce de mousse de forêt synthétique, générée par agrégation de particules en 3D. L’inhalation volontaire de vapeurs provenant de cette mousse est fortement déconseillée !

    • G’MIC Adventures #4: Physarum Transport Networks : Cet épisode explore la réalisation d’un autre système particulaire, l’algorithme Physarum imaginé dans ce papier de Jeff Jones, en 2010. Ici, on lance des millions de particules qui s’auto-organisent pour suivre un chemin qui devient commun à toutes les particules au bout d’un certain nombre d’itérations, ce qui permet de générer des animations 2D tout à fait étonnantes, comme celles-ci par exemple :

    Danse du feu - 1
    Danse du feu - 2 Fig. 4.2.4. Danses de filaments enflammés, générées par l’algorithme Physarum en 2D.

    Dans cet épisode, nous proposons également une extension 3D de cet algorithme, ce qui permet de générer ce type d’animation :

    Physarum 3D
    Fig. 4.2.4. Évolution de l’algorithme Physarum étendu en 3D.

    Tous ces épisodes cherchent à montrer que G’MIC est une boite à outils générique, plutôt sympa à utiliser, pour le prototypage créatif destiné à la génération d’images et d’animations !

    5. Ressources additionnelles

    Nous voilà déjà arrivés à la cinquième section de cette dépêche, signe qu’il est probablement temps de la terminer au plus vite 😉. Pour finir, voici donc quelques informations et liens supplémentaires pour approfondir la découverte du projet G’MIC :

    • Mentionnons tout d’abord la parution de la publication « G’MIC: An Open-Source Self-Extending Framework », de D. Tschumperlé, S. Fourey et G. Osgood, en janvier 2025 dans le journal JOSS (The Journal of Open Source Software). Dans cet article sont décrites les motivations générales du projet et une vue d’ensemble de son architecture globale et de quelques-unes de ses possibilités. Cela permet aussi au projet G'MIC d’avoir son article « de référence » dans une revue scientifique (donc pouvoir être cité plus facilement).

    Article JOSS

    6. Conclusions et perspectives

    La sortie de cette version 3.6 (et plus généralement l’année 2025) représente une étape importante dans la vie du projet G'MIC.

    Tout d’abord parce qu’on se rend bien compte qu’après 17 ans de développement, G’MIC est maintenant stable, et qu’il est peut-être plus temps d’en valoriser les facettes existantes, plutôt que de chercher à implémenter à tout prix de nouvelles fonctionnalités. D’autre part, car la disparition de l’ami Sébastien, en plus d’avoir été un choc émotionnel majeur, risque de rendre difficile la maintenance et l’évolution future du greffon G’MIC-Qt. Et enfin, car avec la démocratisation de l’IA générative, les domaines de l’analyse, du traitement et de la génération d’images (notamment à des fins créatives) sont en profonde mutation, et que les fonctionnalités de G’MIC pourraient très bien être considérées comme obsolètes d’ici quelques années (ou pas 😊).

    Au final, que d’incertitudes et de questionnements ! Cela rend floues les directions à prendre pour l’évolution de G’MIC, d’autant que s’occuper d’un tel projet requiert beaucoup d’investissements en temps, et qu’en même temps, sa valorisation financière est aujourd’hui inexistante.

    Actuellement, G’MIC est téléchargé un peu plus de 1000 fois par jour depuis la page web principale du projet (donc sans compter les installations tierces : via l’installation de Krita, via les paquets officiels des distributions, etc.). C’est un chiffre très honorable pour un logiciel libre de ce type, développé au sein d’un laboratoire public de recherche tel que le GREYC, et qui plus est, qui n’est plus maintenu que par une seule personne.

    À court terme, on se focalisera probablement sur la promotion et la visibilité du cadriciel, la maintenance du code et l’animation de la communauté, par exemple en écrivant quelques tutoriels illustrant ses nombreuses applications potentielles dans les domaines variés liés à l’imagerie numérique : retouche photographique, illustration, peinture numérique, imagerie scientifique (médical, astronomie, biologie, matériaux), création graphique, art génératif, etc.

    À long terme, peut-on raisonnablement espérer faire plus de G’MIC avec ce peu de ressources ?
    L’avenir nous le dira !

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    • ✇LinuxFr.org : les dépêches
    • muttum, un nouveau jeu de devinette de mots pour Linux
      muttum est un jeu libre dont le but est de retrouver un mot en quelques essais. La première lettre est fixe pour avoir des plateaux différents à chaque fois. Une première version de muttum est publiée sur Flathub depuis le début de l’été. lien nᵒ 1 : site du projetlien nᵒ 2 : muttum sur Flathublien nᵒ 3 : code sourceSommaire Histoire Fonctionnalités Limitations Développements futurs Histoire Le projet muttum est né suite à la découverte des jeux Wordle et Sutom qui proposent également de de

    muttum, un nouveau jeu de devinette de mots pour Linux

    muttum est un jeu libre dont le but est de retrouver un mot en quelques essais. La première lettre est fixe pour avoir des plateaux différents à chaque fois. Une première version de muttum est publiée sur Flathub depuis le début de l’été.

    Sommaire

    Histoire

    plateau de jeu

    Le projet muttum est né suite à la découverte des jeux Wordle et Sutom qui proposent également de deviner un mot une fois par jour dans le dictionnaire anglais pour le premier et français pour le second.

    J’ai décidé de me lancer dans l’aventure de développer muttum sur mon temps libre pour proposer le jeu de devinette sans avoir besoin d’Internet et pour pouvoir essayer plusieurs mots dans la même journée sans limitation artificielle.

    Une autre de mes motivations était d’apprendre à créer une application avec les bibliothèques GTK et GObject. J’avais déjà joué avec GTK quelques fois, mais je n’avais pas utilisé le concept des objets proposé par GObject et il me semblait que GObject pouvait simplifier l’utilisation des composant GTK complexes. Par exemple, après avoir implémenté la vue en table des budgets HomeBank, j’ai eu l’impression que ça aurait été plus facile de créer la table GTK si les données à afficher avait déjà été mises en forme avec GObject.

    Je voulais également essayer également d’utiliser le langage C directement, le langage utilisé par GTK, pour ne pas avoir besoin de dépendre des introspections (interfaces de GTK avec les autres langages de programmation, comme Python, C++…).

    C’est ainsi que le développement a commencé en février 2022 sous le nom temporaire LeBonMot avec une structure assez simple qui mélangeait le moteur logique du jeu et l’interface graphique dans un seul et même code source.

    Après quelques semaines de développement, j’ai trouvé le nom muttum et j’ai débuté la location du nom de domaine muttum.org en avril 2022 :

    $ rdap muttum.org
    Domain:
    Domain Name: muttum.org
    Domain Name (Unicode): > muttum.org
    […]
    Event:
    Action: registration
    Date: 2022-04-12T08:46:16.285Z

    muttum serait, d’après le Wiktionnaire, un nom commun latin qui signifie bruit, grognement et dont la dérivation en français a formé le nom commun mot. Cette information m’a bien plu puisque justement le but du jeu est de retrouver le bon mot et que, en plus, c’est un palindrome.

    Durant la même période, j’ai commencé une réorganisation du code pour séparer la partie moteur de calcul de la partie graphique, ce qui permettra dans le futur de développer plusieurs styles d’interface graphique. Pour l’instant muttum ne propose qu’une interface développée pour la plateforme GNOME, car elle dépend de la bibliothèque libadwaita.

    Quand je décide de faire cette séparation, j’ai deux idées d’interfaces  : une qui serait multi-plateforme en n’utilisant que GTK (sans libadwaita) et une interface web en utilisant WebAssembly pour utiliser le moteur de muttum. Pour l’instant, aucune de ces 2 interfaces n’a été développée. La version multiplateforme sera assez rapide à implémenter (il faut enlever libadwaita des dépendances) et la version web ne sera peut-être jamais utile finalement : depuis 2025 GTK propose un portage expérimental pour la plateforme Android.

    Gagné !

    Vers septembre 2022, je décide de séparer le code source dans deux répertoires différents: muttum ne contiendra que l’interface graphique et libmuttum ne contiendra que le moteur du jeu. Le travail est donc continué sur libmuttum jusqu’à fin janvier 2023 (séparation du moteur, ajout de tests pour le moteur…).

    Le projet est en pause complète jusqu’en novembre 2024, je ne sais plus pourquoi, mais certainement parce que les rénovations de ma maison ont débuté en 2023 et que je n’avais plus la tête à coder sur mon temps libre.

    En novembre 2024, le premier commit de la reprise indique que je reprends le code du moteur avec le langage Rust et ce pour plusieurs raisons :

    1. je souhaitais apprendre Rust et le code de ce moteur était un bon bac à sable pour apprendre un nouveau langage. Il m’avait d’ailleurs déjà permis d’apprendre à utiliser C et GObject ;
    2. je ne retrouve plus la référence exacte, mais un des développeurs principaux de GTK conseillait d’utiliser Rust pour débuter de nouvelles applications (c’était probablement l’article On Vala d’Emmanuele Bassi) ;
    3. les éditions ENI m’ont offert le livre Rust, Développez des programmes robustes et sécurisés pour une de mes contributions à LinuxFr.

    Enfin, en juin 2025, la première version publique a été publiée sur Flathub.

    Fonctionnalités

    muttum fonctionne avec des dictionnaires : ce sont des fichiers textes qui contiennent un mot connu par ligne et qui sont encodés en UTF-8. Les dictionnaires distribués avec la version Flathub proviennent des projets:

    • wfrench pour le français
    • scowl pour les dictionnaires anglais
    • igerman98 pour les dictionnaires allemands

    muttum permet aux distributeurs de définir n’importe quel dictionnaire avec un fichier de configuration. Ceci permet aux empaqueteurs d’utiliser les paquets déjà existant pour les dictionnaires et de donner le chemin à charger pour chaque langue. Ce fichier de configuration est également utilisé dans le dialogue À propos des dictionnaires pour créditer les projets qui ont créé les dictionnaires.

    À propos des dictionnaires

    muttum sait gérer l’alphabet latin, mais il est architecturé pour définir d’autres alphabets. Pour ce faire, il faut définir les caractères de base. muttum utilise cette liste pour filtrer les caractères entrés par l’utilisateur et pour filtrer les mots valides.

    À mesure que l’utilisateur essaie des mots différents, muttum met à jour l’alphabet affiché en dessous du plateau pour indiquer si toutes les occurrences d’une lettre ont été trouvées (couleur verte), si des occurrences ont été trouvées et qu’il pourrait en exister plus (couleur orange) ou si une lettre n’existe pas dans le mot (couleur grise).

    Limitations

    muttum nécessite un clavier pour saisir les caractères, il n’y a pour l’instant pas de possibilité de saisir les caractères avec un écran tactile. L’écran doit aussi être assez grand pour pouvoir afficher le plateau complètement, donc pour l’instant il n’est pas utilisable sur les smartphones.

    muttum n’applique pas de filtres sur les mots des dictionnaires, il contrôle uniquement qu’un mot est valide selon l’alphabet défini. Par exemple, il est conseillé qu’un dictionnaire contienne les conjugaisons complètes des verbes et donc un mot à deviner peut être n’importe quelle forme du verbe.

    Développements futurs

    Pour l’instant, je vais faire une pause dans le développement de ce jeu, parce que je souhaite travailler sur d’autres projets.

    Néanmoins, j’ai déjà quelques idées pour la suite de ce projet :

    1. ajouter un dialogue pour expliquer comment jouer (utilisation du clavier), la signification des couleurs et la mise à jour de l’alphabet sous le plateau
    2. ajouter un chronomètre en sous-titre de la fenêtre et afficher le temps pour terminer le plateau dans le dialogue de fin de jeu
    3. dans le dialogue de fin, j’aimerai ajouter un bouton de partage comme le fait Sutom. Pour que ce soit intéressant, il faudra que j’ajoute un lien pour que les amis puissent essayer le même plateau. Donc il faut que muttum gère le schéma d’application muttum:// et il faudrait mettre le mot à trouver encodé en base64 et les paramètres du plateau dans le lien
    4. vers la fin du projet, j’ai appris l’existence de l’option pedantic pour le linter clippy et je voudrais corriger les points qu’il remonte pour avoir un meilleur style de code.
    5. la bibliothèque icu a sorti une nouvelle version majeur, il faudrait mettre à jour le code de muttum pour celle-ci.
    6. rendre l’application compatible avec les smartphones. Ça passera sûrement par l’utilisation d’entrées textes à la place des labels dans le plateau, cacher l’alphabet par défaut et rendre le plateau défilable.

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    • ✇LinuxFr.org : les dépêches
    • La pile graphique d’AMD sous Linux est désormais complètement libre
      À l’occasion de la sortie de la version 25.10.1 de la suite Radeon Software for Linux du 21 mai 2025, AMD a annoncé que la série 25.10 est la dernière à livrer des composants logiciels propriétaires. Ces composants propriétaires étaient déjà optionnels depuis bien longtemps, la plupart des utilisateurs de cartes AMD ne s’en servait déjà pas, et le plus grand nombre ignorait peut-être jusqu’à l’existence de certains d’entre eux… Ce jalon est l’accomplissement de 18 années d’un travail acharné c

    La pile graphique d’AMD sous Linux est désormais complètement libre

    À l’occasion de la sortie de la version 25.10.1 de la suite Radeon Software for Linux du 21 mai 2025, AMD a annoncé que la série 25.10 est la dernière à livrer des composants logiciels propriétaires.

    Ces composants propriétaires étaient déjà optionnels depuis bien longtemps, la plupart des utilisateurs de cartes AMD ne s’en servait déjà pas, et le plus grand nombre ignorait peut-être jusqu’à l’existence de certains d’entre eux…

    Ce jalon est l’accomplissement de 18 années d’un travail acharné commencé en 2007 avec la publication de documentations des cartes graphiques ATI après le rachat par AMD… Les plus anciens se souviendront de RadeonHD… Et désormais, ce sont les derniers bouts de logiciel propriétaire qui sont poussés vers la sortie.

    Autocollant LinuxFr.org cartes AMD par Thomas Debesse Nos logiciels libres sont plus sereins lorsqu’ils reposent sur des pilotes libres…

    Sommaire

    L’offre complètement libre de pilotes graphiques AMD sous Linux

    Voici comment se composera très bientôt l’offre officielle de pilotes graphiques AMD pour Linux :

    Noyau Vulkan OpenGL HIP OpenCL
    Linux amdgpu AMD AMDVLK ou Mesa RADV Mesa radeonsi AMD ROCm AMD ROCm

    OpenGL et Vulkan sont des interfaces de programmation (API) graphiques, VA-API est une interface de programmation multimédia, et HIP et OpenCL sont des interfaces de programmation pour le calcul spécialement conçues pour satisfaire aux particularités architecturales des cartes graphiques.

    Il est à noter que même si vous n’utilisez pas la suite Radeon Software for Linux, votre distribution vous fournit déjà le pilote Linux et les pilotes Mesa mentionnés.

    • Pilote noyau
      • Linux amdgpu pour les cartes GCN1 et suivantes (pilote officiel).
    • Pilote graphique Vulkan
      • AMD AMDVLK pour les cartes RDNA1 et suivantes (pilote officiel) ;
      • Mesa RADV, pour les cartes GCN1 et suivantes (pilote officiel).
    • Pilote graphique OpenGL
      • Mesa RadeonSI pour les cartes GCN1 et suivantes (pilote officiel).
    • Pilote multimédia VA-API
      • Mesa RadeonSI pour les cartes GCN1 et suivantes (pilote officiel).
    • Pilote de calcul HIP
      • AMD ROCm pour une sélection de cartes RDNA2 et suivantes (pilote officiel),
        il n’existe pas d’autre implémentation de pilote HIP pour les autres cartes.
    • Pilote de calcul OpenCL
      • AMD ROCm pour une sélection de cartes RDNA2 et suivantes (pilote officiel) ;
      • Mesa RustiCL pour les cartes GCN1 et suivantes.

    Ces pilotes concernent donc les cartes GCN et RDNA. La famille de cartes GCN pour « Graphics Core Next » sont les cartes sorties à partir de la série HD 7000 en 2012, aussi nommées « Southern Islands » et qui ont inspiré le nom du pilote RadeonSI. La famille RDNA pour « Radeon DNA » (ADN Radeon) est une évolution de cette micro-architecture GCN et les cartes RDNA1 commencent avec les modèles RX 5000 en 2019 et les cartes RDNA2 avec les modèles RX 6000 en 2020.

    Le tableau suivant se limite aux générations de cartes graphiques pour lesquelles il existe au moins un pilote fonctionnel faisant partie de la suite officielle Radeon Software for Linux. Il s’agit donc seulement de compatibilité technique. Les générations et modèles officiellement pris en charge par le support commercial d’AMD est évidemment plus restreint, et plus fluctuant, et puis ça dépend de l’API… La compatibilité technique effective intéressera probablement plus le lecteur.

    GCN1 GCN2 GCN3 GCN4 GCN5 RDNA1 RDNA2 RDNA3
    Noyau Linux amdgpu ⭐️ 🐧️ ✅️ ✅️ ✅️ ✅️ ✅️ ✅️ ✅️ ✅️
    Vulkan AMD AMDVLK ⭐️ ❌️ ❌️ ❌️ ❌️ ❌️ ✅️ ✅️ ✅️
    Vulkan Mesa RADV ⭐️ 🐧️ ✅️ ✅️ ✅️ ✅️ ✅️ ✅️ ✅️ ✅️
    OpenGL Mesa RadeonSI ⭐️ 🐧️ ✅️ ✅️ ✅️ ✅️ ✅️ ✅️ ✅️ ✅️
    VA-API Mesa RadeonSI ⭐️ 🐧️ ✅️ ✅️ ✅️ ✅️ ✅️ ✅️ ✅️ ✅️
    HIP AMD ROCm ⭐️ ❌️ ❌️ ❌️ ❌️ ❌️ ❌️ 🧐️ 🧐️
    OpenCL AMD ROCm ⭐️ ❌️ ❌️ ❌️ ❌️ ❌️ ❌️ 🧐️ 🧐️
    OpenCL Mesa RustiCL 🐧️ ✅️ ✅️ ✅️ ✅️ ✅️ ✅️ ✅️ ✅️

    ✅️ = Pilote fonctionnel.
    🧐️ = Pilote fonctionnel pour une sélection de modèles.
    ❌️ = Pilote non-fonctionnel.
    ⭐️ = Pilote faisant partie de la suite officielle Radeon Software for Linux (pour RADV : après les versions 25.10).
    🐧️ = Pilote empaqueté en standard dans les distributions Linux usuelles.

    La famille de cartes RDNA4 venant tout juste d’être mise sur le marché, conjecturer sa prise en charge est un exercice périlleux. On sait que le pilote ROCm n’est pas encore prêt, par exemple. Il est évident que les prochaines versions de tous ces pilotes les prendront en charge dans un futur proche.

    Les derniers pilotes graphiques AMD propriétaires qui subsistaient encore étaient donc les pilotes OGLP, AMDVLK-Pro, et AMF.

    Maintenant que tout est libre, ce qu’on attend désormais d’AMD est de faire fonctionner leur pilote de calcul HIP et leur pilote de virtualisation graphique GIM sur plus de matériel…

    RADV officiellement supporté

    La phrase est explicite, à partir de la sortie de la suite Radeon Software for Linux en version 25.20, « The Mesa Vulkan driver will be officially supported ». Autrement dit, le pilote Vulkan de Mesa sera officiellement supporté par AMD.

    Le pilote Mesa pour les cartes AMD est RADV, initié originellement par Valve alors qu’AMDVLK était encore propriétaire.

    Cette formulation n’exclut pas le pilote Vulkan libre AMDVLK d’AMD. AMDVLK sera donc très certainement encore supporté comme il l’est déjà.

    Ce qui va changer pour Vulkan concerne AMDVLK-Pro, c’est ce que signifie la phrase « The AMD proprietary OpenGL and Vulkan drivers will no longer be included in the release », qui signifie aussi que le pilote OGLP pour OpenGL est également poussé vers la sortie.

    Ce que support veut dire

    Ce terme de support couvre les paquets de pilotes qu’AMD propose eux-mêmes, par exemple pour Ubuntu, Red Hat Linux Entreprise ou SUSE Linux Enreprise, ce sont les paquets dans le dépôt repo.radeon.com.

    Mais AMD participe déjà activement au développement de pilotes Mesa comme le pilote OpenGL RadeonSI. Apprendre qu’AMD ne fera pas que redistribuer mais supportera officiellement le pilote Mesa RADV dans sa suite de pilotes permet d’espérer une contribution similaire à RADV. En d’autres termes, si un bug affecte RADV, ils pourront considérer qu’il est de leur responsabilité de le corriger dans RADV directement.

    De plus, cela encourage désormais AMD à implémenter la prise en charge des futures cartes directement dans RADV avant que les cartes elles-mêmes ne soient mises sur le marché, ce qui était le principal argument en faveur d’AMDVLK-Pro et AMDVLK comparé à RADV.

    Ainsi, si vous utilisez une carte AMD et quand bien même vous utiliseriez le pilote RADV fourni par votre distribution, vous profiterez des effets de ces travaux de maintenance d’AMD comme vous en profitez déjà pour RadeonSI.

    C’est une très bonne nouvelle pour tout le monde car RADV est le pilote Vulkan installé par défaut (car faisant partie de la suite Mesa) par toutes les distributions Linux… et ce pilote devrait désormais profiter directement des efforts d’AMD.

    Le départ des derniers

    Il est important de noter que parce que ces pilotes en espace utilisateur sont écrits pour fonctionner par-dessus le pilote noyau amdgpu, il reste toujours possible d’utiliser ces pilotes désormais abandonnés, que ce soit OGLP, AMF et AMDVLK-Pro qui nous quittent désormais, ou les plus anciens PAL et ORCA, pour ceux qui recherchent un environnement spécifique tout en utilisant une distribution très récente. Et ce sera probablement encore vrai pendant des années, à condition de conserver votre ancien matériel compatible avec ces pilotes désormais obsolètes.

    En réalité ça fait longtemps qu’il n’est plus nécessaire d’employer un logiciel propriétaire pour utiliser ses cartes graphiques AMD sous Linux. Toutes les API supportées par AMD avaient déjà des implémentations libres depuis longtemps.

    Ce qu’AMD est en train de faire est de se débarrasser définitivement des rares alternatives propriétaires qui survivaient encore…

    Adieu OGLP

    OGLP était jusqu’à maintenant le pilote OpenGL propriétaire d’AMD sous Linux. AMD recommande le pilote libre Mesa RadeonSI pour OpenGL sous Linux depuis très longtemps. Le pilote libre Mesa RadeonSI lui est très supérieur, que ce soit en termes de fonctionnalité, de performance, et de qualité, et AMD contribue directement à ce pilote RadeonSI. Il est très probable que la majorité d’entre vous n’ait même pas connaissance que le pilote OGLP existait, ni même connaissait son nom.

    OGLP proposait une implémentation OpenGL et OpenGL ES.

    Mon expérience dans l’évaluation de pilotes graphiques pour le jeu Unvanquished m’a fait constater que le pilote OGLP présentait les mêmes bugs que le pilote propriétaire AMD pour Windows, Adrenalin. Il est donc extrêmement probable que c’était une simple recompilation du même pilote, mais pour Linux, comme à l’époque de Catalyst et fglrx.

    En effet déjà à l’époque de fglrx pour ATI, et encore aujourd’hui pour Nvidia, les pilotes propriétaires graphiques de ces concepteurs de cartes graphiques sont généralement exactement le même pilote quel que soit le système, avec une couche de compatibilité pour le système, ce qui est logique dans une optique de réduction des coûts de développement.

    OGLP était donc très certainement le pilote OpenGL de la suite fglrx, le pendant Linux du pilote Windows Adrenalin, mais porté pour le pilote noyau libre amdgpu au lieu du pilote fglrx abandonné il y a déjà des années.

    On pourra s’étendre en conjectures sur pourquoi AMD maintenait encore le pilote OGLP jusqu’en 2025, il est probable que celui-ci répondait à des exigences contractuelles professionnelles. Sur le plan technique pendant longtemps le pilote Mesa s’était limité à implémenter seulement le « core profile » d’OpenGL et pas le « compatibility profile » qui pouvait être requis par certaines applications industrielles, et cela justifiait alors l’existence d’un pilote propriétaire pour satisfaire la clientèle. Mais Mesa a depuis implémenté ce « compatibility profile » et ce depuis longtemps désormais, il est donc possible que ne subsistait plus que des exigences contractuelles — peut-être même pas techniques — pour justifier la fourniture de ce pilote OGLP.

    Adieu AMDVLK-Pro

    Le pilote AMDVLK-Pro était en fait le pilote libre AMDVLK amalgamé de composants propriétaires.

    Le pilote AMDVLK est un pilote libre qui implémente l’API graphique Vulkan.

    Contrairement au pilote OpenGL officiel RadeonSI qui est développé en collaboration avec Mesa, le pilote Vulkan AMDVLK est développé exclusivement par AMD, mais c’est tout de même un pilote libre.

    Au tout début AMDVLK était aussi un pilote propriétaire mais conçu dès le départ pour devenir un pilote libre plus tard, avec la promesse qu’il soit libéré un jour. Le pilote AMDVLK, alors qu’il était encore propriétaire, avait permis à beaucoup d’utilisateurs de Linux de profiter des fonctionnalités Vulkan de leurs cartes graphiques AMD sans avoir à attendre un pilote libre, que ce soit AMDVLK lui-même une fois libéré, ou le pilote RADV développé par Mesa.

    Le pilote AMDVLK-Pro était donc en quelque sorte la continuité de ce pilote qui distribuait au plus tôt les fonctionnalités aux utilisateurs, en remettant à plus tard la libération de ces fonctionnalités. Quand AMDVLK avait été libéré, AMDVLK-Pro en était donc devenu la variante propriétaire qui implémentait et distribuait les dernières nouveautés.

    Là encore, il est pertinent de supposer que le pilote AMDVLK est construit sur la même base de code que le pilote Windows. Quand bien même existe désormais le pilote Mesa RADV pour Linux, il est peu probable que le pilote libre AMDVLK disparaisse de l’écosystème Linux de si tôt.

    Peut-être un jour AMDVLK, bien que libre, suivra le sort d’OGLP si un jour AMDVLK n’apportera rien de plus que RADV et ce depuis un temps certain ? L’avenir nous le dira.

    Adieu AMF

    AMF (Advanced Multimedia Framework) s’en ira également, c’est une bibliothèque d’accélération matérielle pour le décodage et l’encodage de formats vidéo. AMD recommande d’utiliser à la place l’implémentation VA-API de Mesa.

    Souvenir des pilotes AMD abandonnés sur le bord du chemin

    Parmi les pilotes AMD propriétaires conçus pour tourner sur le pilote noyau amdgpu, AMD a déjà abandonné ORCA et PAL. C’était des pilotes de calcul OpenCL (conçus pour les cartes GCN 2 à 4 pour ORCA, et GCN 5 pour PAL) qui ont été remplacés par ROCm.

    On peut aussi supposer que PAL et ORCA étaient des portages du pilote OpenCL de Windows mais conçus pour tourner sur le pilote noyau amdgpu à la manière d’OGLP et d’AMDVLK.

    Pour les plus pointilleux, PAL (Platform Abstraction Library) était en fait le nom de la bibliothèque d’abstraction entre le code propriétaire commun et le système Linux, et par métonymie on appelait PAL le pilote OpenCL qui utilise PAL comme interface. Dans la même veine, certains parlent parfois de ROCr OpenCL pour l’implémentation actuelle de OpenCL de la suite ROCm, ROCr étant le ROCm Runtime. Le nom ORCA n’échappe probablement pas à cette règle d’usage, mais je n’ai jamais trouvé d’explication de ce nom (je ne suis même pas sûr que ce soit un acronyme), la chaîne orca était simplement utilisée dans le nom du paquet (par exemple : opencl-orca-amdgpu-pro-icd).

    PAL et ORCA ont longtemps été regrettés, car ils prenaient en charge la totalité des cartes de leurs générations, contrairement à ROCm. On peut lire à ce sujet sur LinuxFr.org l’article de 2022 « OpenCL sous Linux : l’état des pilotes AMD est désormais pire que ce qu’il était à l’époque de fglrx ». Heureusement, Mesa fournit désormais RustiCL qui leur est désormais supérieur sur bien des points. Cela pourrait faire l’objet d’une dépêche à venir… 😉

    Et avant cela, il y a bien longtemps avant de s’embarquer dans son aventure amdgpu, AMD fournissait la suite Catalyst entièrement propriétaire, qui exécutait au-dessus du pilote noyau propriétaire fglrx des pilotes propriétaires OpenGL et OpenCL pour le graphisme et le calcul.

    Mais… et les firmwares ?

    Les micrologiciels (firmwares) des cartes graphiques ne sont toujours pas libres, mais ceux-ci ne s’exécutent pas avec le système d’exploitation de votre ordinateur dans le processeur principal de votre machine, ils s’exécutent dans la carte graphique directement, c’est donc un tout autre sujet.

    Certains réclament aussi la libération de ces micrologiciels, mais d’ici à ce que ce rêve devienne un jour réalité, si ce jour vient un jour, vous savez déjà que votre Linux, lui, il peut déjà prendre en charge toutes les fonctionnalités de votre carte avec des logiciels libres sous Linux.

    Préférer le DisplayPort à l’HDMI pour les très hautes définitions…

    Un petit couac cependant… Les pilotes AMD sous Linux ne peuvent légalement pas implémenter la version 2.1 du protocole HDMI, donc si vous avez besoin d’utiliser des définitions telles que le 4K à 120 Hz ou le 5K à 240 Hz, il faut privilégier le DisplayPort. Ce n’est pas la faute d’AMD : AMD avait en fait implémenté cette prise en charge mais n’a légalement pas le droit de la publier dans un pilote libre. Le HDMI Forum a restreint l'accès public aux spécifications en 2021, et publier cette partie du code du pilote serait contraire à ces nouvelles conditions. Ce code de prise en charge HDMI 2.1 est censé être implémenté dans le pilote noyau amdgpu, et AMD n’a aucune intention d’abandonner son pilote libre, alors que sa stratégie est précisément de tout libérer !

    Prochain objectif : l’universalité du calcul et de la virtualisation ?

    Enfin, je dis que « Linux peut déjà prendre en charge toutes les fonctionnalités de votre carte avec des logiciels libres » mais si vous souhaitez profiter de ROCm et GIM ce n’est vrai qu’à condition de bien choisir votre carte. 😬

    AMD a la volonté d’améliorer la situation de ROCm, tel qu’en témoigne un sondage il y a quelque mois invitant les utilisateurs à exprimer leurs souhaits dans le cadre de l’effort d’AMD d’étendre la prise en charge. Mais ça prend du temps ! Et si, se faire attendre, c’est se faire désirer, il ne faudrait pas trop attendre pour AMD au risque que le désir se détourne vers d’autres propositions.

    Et du côté de la virtualisation de carte graphique (GPU-IOV), le pilote GIM est libre aussi mais la situation est encore pire : il ne prend en charge que deux accélérateurs (ces produits n’ont pas de sortie vidéo)… Certains diront que c’est un progrès car la version précédente ne prenait en charge qu’un seul accélérateur… Il a été annoncé qu’une prise en charge matérielle plus large serait « sur la feuille de route » mais si ça prend le même temps que ROCm ou plus, il faudra se montrer très patient. 😄

    En attendant, on peut célébrer cette victoire : La pile graphique d’AMD sous Linux est désormais complètement libre !

    🥂🍾

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    • ✇LinuxFr.org : les dépêches
    • Application libre en ligne de suivi des aides aux écoliers avec SQLPage
      ThierryM : suite à un besoin exprimé par les enseignant⋅es d’une école et la découverte de SQLPage à travers l’application École Inclusive que j’ai découverte via ce site, je me suis lancé dans la réalisation d’une application en ligne permettant de suivre — sur toute leur scolarité dans le 1er degré — les différentes aides proposées aux élèves rencontrant des difficultés. Bien que cette application soit encore en cours de développement et de test, je relate ici mon retour d’expérience car SQ

    Application libre en ligne de suivi des aides aux écoliers avec SQLPage

    ThierryM : suite à un besoin exprimé par les enseignant⋅es d’une école et la découverte de SQLPage à travers l’application École Inclusive que j’ai découverte via ce site, je me suis lancé dans la réalisation d’une application en ligne permettant de suivre — sur toute leur scolarité dans le 1er degré — les différentes aides proposées aux élèves rencontrant des difficultés.
    Bien que cette application soit encore en cours de développement et de test, je relate ici mon retour d’expérience car SQLPage, qui évolue rapidement, mérite d’être plus largement connue.

    Jusqu’à présent je n’avais jamais osé me lancer dans ce genre de développements — principalement à cause de la sécurisation des accès et à la gestion de bases de données — mais SQLPage est arrivé…

      Sommaire

      Besoins et cahier des charges

      Le directeur d’une grosse école (13 classes + ULIS) avait besoin de pouvoir suivre pluriannuellement les différentes aides mises en place pour les élèves rencontrant des difficultés, ceci afin que les enseignant⋅es (dont les membres du RASED) disposent d’un historique pour voir ce qui avait déjà été proposé et ainsi décider ce que l’on pourrait mettre en place sans perdre de temps ni redite. Bref, l’idée était de gagner en temps et en efficacité.

      Au niveau d’une seule école, un tableur LibreOffice Calc pouvait très bien faire l’affaire et suffire (ce classeur existe d’ailleurs) mais il ne pouvait pas être complété à distance et de façon collaborative facilement :
      Classeur LibreOffice Calc de suivi
      On aurait pu mettre en place un classeur sur le Nuage-Nextcloud des Apps Éducation proposé par l’Éducation nationale et travailler de façon collaborative en ligne ou en drive (pour profiter des macros). Mais cette solution n’est pas aisée à mettre en place, avec des problèmes de synchronisation et des conflits de version de fichiers (je le sais par expérience, car nous gérons l’absentéisme de cette façon et ça demande un gros accompagnement, chaque classe ayant son propre classeur que l’on doit retravailler par la suite pour faire des synthèses d’école).

      L’idée était donc de disposer d’une application Web, en ligne pour que les enseignant⋅es puissent intervenir, compléter les données facilement et directement.
      L’avantage de cette solution était aussi de disposer d’une application unique pour étendre par la suite son utilisation aux 4 écoles de la ville (voire d’une circonscription) si le projet est concluant : en effet, les infos des élèves de maternelle suivraient lors du passage à l’école élémentaire.
      Seulement voilà, se posent pas mal de contraintes notamment par rapport à la sécurisation des données et au niveau du RGPD, l’outil envisagé contenant des informations sensibles. Il était impossible d’envisager un développement en Html/CSS/Javascript/PHP de zéro (manque de temps et de compétences). Et c’est là, que j’ai découvert l’existence de SQLPage qui paraissait répondre à nos inquiétudes avec des accès sécurisés, tout en étant à la portée de « débutant⋅es », à travers le récit de l’auteur de l’application « École Inclusive ».

      Début de l’aventure

      L’application « École Inclusive », bien que conçue pour le second degré, pouvait être adaptée à nos besoins plus modestes et a donc servi de base de départ : c’est beaucoup plus facile de partir de l’existant que d’une page blanche où il faut tout construire. Il s’est avéré que nous n’avions pas besoin de toutes les fonctionnalités et qu’il a fallu reprendre les logiques de fonctionnement mais la base étant là, c’était très rassurant d’autant que l'auteur de « École Inclusive » et le concepteur de SQLPage, très disponibles, étaient là pour m’éclairer, me conseiller ou rajouter des fonctionnalités au fil de mes demandes via les pages GitHub de leur projet respectif. Il faut rajouter que le site de SQLPage, conçu avec SQLPage ;-), regorge de ressources avec une documentation (en anglais) très claire et facilitante avec des exemples.
      Il est vrai que ce concept de programmation est assez déstabilisant au début : ne passer que par des fichiers .sql (ou presque) pour développer un site Web, ça paraît inadapté. Mais, une fois qu’on est rentré dedans, on se rend compte que pour le type d’application qu’on recherchait, c’est tout bonnement bluffant et terriblement efficace.
      Ce qui est aussi facilitant, c’est la possibilité d’utiliser des bases sqlite ne nécessitant pas la mise en place d’un serveur de type MySQL ou PostGreSQL rajoutant de la complexité. Mais SQLPage fonctionne aussi avec ces serveurs si on en a l’utilité : ce point est intéressant, car le temps consacré pour se former à SQLPage pourra être réinvesti avec d’autres types de bases de données.

      Matériel, données techniques et application ASDAEL

      Pour des tests les plus proches du fonctionnement prévu (on verra que ça changera), j’ai utilisé un NAS perso Synology 713+ sous DSM 7.1 avec un accès extérieur. Toutes les infos sont là pour ceux et celles que ça intéresse : https://lofurol.fr/joomla/logiciels-libres/104-bases-de-donnees/349-sqlpage-utilisation-sur-un-nas-synology-avec-docker-et-mysql-postgresql-sqlite.
      Toujours dans un souci de partage, les sources de l’application de suivi des aides sont disponibles sur la « Forge des communs numériques éducatifs » ou Forge Éduc, le GitLab mis à disposition par l’Éducation nationale pour favoriser le partage et le développement de ressources numériques pour l’enseignement.
      Source du projet: https://forge.apps.education.fr/thierrym/suivi-aides-eleves-ecoles

      Utilisation locale due au RGPD et à la sécurisation des données

      Cette application n’ayant pas reçu de soutien officiel et vu qu’elle contient des données sensibles sur les élèves (bien que ces données ne soient accessibles qu’aux seul⋅es enseignant⋅es concerné⋅es par le suivi des élèves), il a été décidé de ne pas exposer l’application sur Internet, comme prévu initialement. Elle sera donc installée sur un ordinateur localement sans accès de l’extérieur le temps de la tester. Après, il sera toujours possible d’évoluer vers une utilisation réellement en ligne si les essais sont concluants (et avec un audit sur la sécurité).
      Et là, encore une fois, l’application est très bien faite, car elle fait office de serveur web et il suffit de saisir son adresse ip sur le port 8080 pour y accéder à partir d’un autre ordinateur sur le même réseau. On ne peut pas faire plus simple (pas besoin de se monter un serveur Apache/Ngnix) !!!

      Pour lancer l’expérimentation, j’ai récupéré un “vieil” ordinateur HP 260 G2 Mini (Intel Pentium 4405U, 4 Go de Ram et HD de 100 Go) sur lequel j’ai installé Ubuntu 24.04 Server (avec accès SSH) avec le bureau Mate et Docker pour faire fonctionner les conteneurs Portainer et Adminer pour éventuellement agir sur la base de données SQLite.
      J’ai ensuite installé SQLPage avec mes fichiers dans un dossier « ASDAEL » à la racine de mon home puis configurer un démarrage automatique lançant SQLPage et Firefox pointant vers la page « localhost:8080 ».

      Captures d’écran

      Structure de la base de données
      Structure de la base de données

      Page d’accueil :
      Accueil

      Page de connexion :
      Page de connexion

      Localisation des écoles :
      Liste des écoles

      Liste des élèves suivi⋅es :
      Liste des élèves suivi⋅es

      Fiche individuelle de suivi :
      Fiche individuelle de suivi

      Vue synthétique du parcours de l’élève :
      Vue synthétique

      Page de paramétrage :
      Page de paramétrage

      Perspectives

      Avec l’arrivée du Livret de Parcours Inclusif (LPI) peut-être que ce genre d’applications ne sera plus utile… d’autant qu’elles n’ont aucun soutien institutionnel et qu’en l’état actuel elles ne peuvent être utilisées que localement, ce qui réduit pas mal leur intérêt.
      Mais l’idée de ASDAEL est d’obtenir rapidement une vision synthétique des différentes aides mises en place pour l’ensemble des élèves tout au long des années en facilitant leurs saisies, ce que ne permettra certainement pas le LPI.
      À suivre… ?

      Commentaires : voir le flux Atom ouvrir dans le navigateur

      • ✇LinuxFr.org : les dépêches
      • Nouvelles sur l’IA de mai 2025
        L’intelligence artificielle (IA) fait couler de l’encre sur LinuxFr.org (et ailleurs). Plusieurs personnes ont émis grosso-modo l’opinion : « j’essaie de suivre, mais c’est pas facile ». Je continue donc ma petite revue de presse mensuelle. Disclaimer : presque aucun travail de recherche de ma part, je vais me contenter de faire un travail de sélection et de résumé sur le contenu hebdomadaire de Zvi Mowshowitz (qui est déjà une source secondaire). Tous les mots sont de moi (n’allez pas taper Zv

      Nouvelles sur l’IA de mai 2025

      L’intelligence artificielle (IA) fait couler de l’encre sur LinuxFr.org (et ailleurs). Plusieurs personnes ont émis grosso-modo l’opinion : « j’essaie de suivre, mais c’est pas facile ».

      Je continue donc ma petite revue de presse mensuelle. Disclaimer : presque aucun travail de recherche de ma part, je vais me contenter de faire un travail de sélection et de résumé sur le contenu hebdomadaire de Zvi Mowshowitz (qui est déjà une source secondaire). Tous les mots sont de moi (n’allez pas taper Zvi si je l’ai mal compris !), sauf pour les citations: dans ce cas-là, je me repose sur Claude pour le travail de traduction. Sur les citations, je vous conseille de lire l’anglais si vous pouvez: difficile de traduire correctement du jargon semi-technique. Claude s’en sort mieux que moi (pas très compliqué), mais pas toujours très bien.

      Même politique éditoriale que Zvi: je n’essaierai pas d’être neutre et non-orienté dans la façon de tourner mes remarques et observations, mais j’essaie de l’être dans ce que je décide de sélectionner ou non.

      Sommaire

      Résumé des épisodes précédents

      Petit glossaire de termes introduits précédemment (en lien: quand ça a été introduit, que vous puissiez faire une recherche dans le contenu pour un contexte plus complet) :

      • System Card: une présentation des capacités du modèle, centrée sur les problématiques de sécurité (en biotechnologie, sécurité informatique, désinformation…).
      • Jailbreak: un contournement des sécurités mises en place par le créateur d’un modèle. Vous le connaissez sûrement sous la forme "ignore les instructions précédentes et…".

      OpenAI dévoile Codex et codex-1

      Les modèles actuels commençant à être relativement compétents sur les tâches de programmation, la ruée vers l’or arrive : comment en faire de véritables programmeurs, autonomes ou semi-autonomes ?

      La première génération consistait à poser des questions à l’IA sur l’interface de chat, et copier-coller des bouts de code, ainsi que d’assistants à l’auto-complétion.

      La seconde génération, Aider (open-source), Cline (également), Cursor, Claude CLI ou Codex CLI consistait à donner un accès direct à votre projet à l’IA, lui permettant de consulter et d’éditer le code ; soit intégré à un IDE, soit en ligne de commande.

      La troisième génération revient aux racines de la première, où l’interface entre l’utilisateur et l’IA est à nouveau un simple chat dans le navigateur. Mais cette fois, l’IA clone votre projet dans un environnement de développement virtualisé et travaille dans cet environnement. Vous pouvez la superviser, ou la laisser travailler quelques temps.

      C’est en tout cas ce que propose OpenAI avec Codex. L’annonce officielle :

      Today we’re launching a research preview of Codex: a cloud-based software engineering agent that can work on many tasks in parallel. Codex can perform tasks for you such as writing features, answering questions about your codebase, fixing bugs, and proposing pull requests for review; each task runs in its own cloud sandbox environment, preloaded with your repository.

      Traduction :

      Aujourd'hui, nous lançons un aperçu de recherche de Codex : un agent d'ingénierie logicielle basé sur le cloud qui peut travailler sur de nombreuses tâches en parallèle. Codex peut effectuer des tâches pour vous telles que l'écriture de fonctionnalités, répondre à des questions sur votre base de code, corriger des bogues et proposer des demandes de fusion pour révision ; chaque tâche s'exécute dans son propre environnement sandbox cloud, préchargé avec votre dépôt.

      OpenAI couple cette sortie avec un modèle spécialisé pour la programmation, codex-1, avec sa System Card (pas très intéressante, mais notons qu’elle a le mérite d’exister).

      La force de ce mode de fonctionnement est le parallélisme : vous pouvez demander à l’IA de travailler sur plusieurs choses à la fois, voire lancer plusieurs sessions pour la même tâche et choisir le meilleur résultat.

      Les réactions sont mitigées : la fiabilité n’est pas toujours au rendez-vous, mais quand elle l’est, le gain de temps est loin d’être négligeable. Et si vous avez les poches profondes, lancer plusieurs tentatives en parallèle est une bonne manière de pallier au manque de fiabilité.

      Google I/O 2025

      Google I/O est la conférence annuelle de Google, présentant leurs nouveaux produits. C’est à Google I/O 2008 qu’Android avait été présenté.

      Pour cette édition 2025, sans surprise, c’est l’IA qui est sur le devant de la scène.

      Sur la création audiovisuelle, tout d’abord :

      • Veo 3 est un modèle permettant de générer une vidéo (avec son).
      • Veo 2, la version précédente, gagne certaines capacités : en plus d’instructions textuelles, le modèle est maintenant capable de prendre des images ou une vidéo de référence, pour reprendre le style ou les détails d’un personnage (ou d’un objet, ou d’une scène). Un contrôle plus fin de la caméra (zoom/rotation) est également fourni à l’utilisateur.
      • La génération d’image du nouveau modèle d’OpenAI avait fait parler d’elle en mars dernier. Google propose sa propre solution avec Imagen 4.
      • Lyria 2 est un nouveau modèle de génération de musique (paroles comprises).

      Pour lutter contre les nouvelles possibilités de désinformation offertes par ces outils, Google lance également SynthID, un outil pour détecter les contenus multimédia générés par les modèles d’IA de Google (et seulement de Google). Sur invitation uniquement, Google craignant probablement qu’un acteur malicieux puisse juste modifier le contenu jusqu’à ce que SynthID réponde « non-IA » si l’outil est publiquement accessible.

      Sur les modèles plus classiques :

      • Gemini 2.5 Flash, une version plus légère, rapide, moins chère, et moins puissante de Gemini 2.5 Pro.
      • Jailbreaké immédiatement, ce que je ne prendrai pas la peine de noter s’il n’y avait l’ironie que ce jailbreak arrive le même jour que la présentation de Google DeepMind nommée « Advancing Gemini’s security safeguards ».
      • Gemma 3, le modèle open-weights, gagne plusieurs variantes pour des tâches plus spécialisées : Gemma 3n, pour tourner sur des smartphone ; MedGemma spécialisé dans la médecine ; SignGemma pour le langage des signes et… DolphinGemma pour communiquer avec les dauphins ?
      • L’annonce également d’un nouveau mode pour Gemini 2.5 Pro, Deep Think, consistant apparemment à lancer plusieurs chaînes de pensée en parallèle. Apparemment une bonne avancée sur les problèmes mathématiques, moins impressionnant sur d’autres tâches. Accessible sur invitation uniquement également.

      Sur les IA « agentiques », capables d’utiliser des outils pour réaliser des tâches variées :

      Également proposés : plus d’intégration de l’IA dans les services classiques de Google (Search, Mail, Chrome…). Un usage notable : traduction en temps réel dans Google Meet.

      Présenté quelques avant Google I/O, AlphaEvolve est un système pour découvrir de nouveaux algorithmes, utilisant Gemini en tant que sous-composant. L’utilisateur fournit une description textuelle du problème avec une solution naïve et une méthode pour évaluer un solution, et le système se charge de trouver de meilleurs algorithmes pour résoudre le même problème.

      Architecture de AlphaEvolve

      Ce système a trouvé de meilleures solutions relativement à l’état de l’art sur plusieurs problèmes évalués, par exemple en découvrant un moyen de multiplier deux matrices 4x4 à l’aide de 48 multiplications scalaires au lieu de 49.

      Dans la catégorie innovations, Gemini Diffusion explore un paradigme entièrement différent pour les modèles de langage. Les modèles de langage actuels sont basés sur des transformeurs, suivant la méthode maintenant célèbre de « prédire le prochain token à partir des précédents ». Dans la génération d’image, c’est un paradigme complètement différent qui est suivi, celui de diffusion (qui a donné le nom au modèle StableDiffusion), où le modèle est essentiellement un modèle de « dé-bruitage » qui transforme une image bruitée en une image plus claire, et qui commence par du simple bruit blanc. Gemini Diffusion est une tentative d’adapter ce paradigme de « diffusion » à la génération de texte : un texte complet est présenté au modèle, et sa tâche est de l’« affiner » incrémentalement (où le texte initial est complètement aléatoire). Les premiers résultats sont encourageants, ce premier prototype arrivant au même niveau de capacités que Gemini 2.0 Flash.

      Anthropic publie Claude 4

      L’annonce officielle :

      Today, we’re introducing the next generation of Claude models: Claude Opus 4 and Claude Sonnet 4, setting new standards for coding, advanced reasoning, and AI agents.

      Claude Opus 4 is the world’s best coding model, with sustained performance on complex, long-running tasks and agent workflows. Claude Sonnet 4 is a significant upgrade to Claude Sonnet 3.7, delivering superior coding and reasoning while responding more precisely to your instructions.

      Traduction :

      Aujourd'hui, nous présentons la prochaine génération de modèles Claude : Claude Opus 4 et Claude Sonnet 4, établissant de nouveaux standards pour le codage, le raisonnement avancé et les agents IA.

      Claude Opus 4 est le meilleur modèle de codage au monde, avec des performances soutenues sur des tâches complexes et de longue durée ainsi que des flux de travail d'agents. Claude Sonnet 4 est une amélioration significative par rapport à Claude Sonnet 3.7, offrant un codage et un raisonnement supérieurs tout en répondant de manière plus précise à vos instructions.

      Tout comme Google et OpenAI, Anthropic se focalise sur la course aux agents, souligné par le choix des benchmarks présentés par Anthropic pour vendre leur modèle : « Agentic coding » (SWE-bench-verified), « Agentic terminal coding » (terminal-bench), « Agentic tool use » (TAU-bench). Claude Opus 4 donne un nouveau état de l’art sur tous ces benchmarks, tout en restant au niveau de l’état de l’art (OpenAI o3 / Gemini 2.5 Pro) sur les tâches plus classiques. Ne vous attendez pas à un gros bond en avant, il s’agit là d’une amélioration incrémentale, contrairement à ce que pourrait laisser penser la numérotation de version.

      À noter un benchmark sur lequel Claude 4 montre un gros progrès : LoCoDiff, qui cherche à mesurer la capacité des modèles à maintenir de bonnes performances sur un long contexte.

      Une bonne nouvelle : OpenAI o3 avait cassé la tendance « les modèles plus avancés hallucinent moins », où o3 hallucinait plus que ses prédécesseurs. Anthropic a réussi à éviter cet écueil, avec un taux d’hallucinations en baisse. En baisse également (sans pour autant disparaître), la tendance des modèles à « tricher ».

      L’événement le plus intéressant de cette publication se trouve principalement dans la politique de sécurité des modèles. N’ayant pu déterminer avec confiance que Opus 4 ne possédait pas de capacités dangereuses (telles que « capacité à aider significativement à la création d’armes chimiques/biologiques ») nécessitant des précautions supplémentaires (contrairement à Opus 3 ou Sonnet 4), Anthropic a décidé de mettre en place ces précautions (AI Safety Level 3 ou ASL-3), au moins provisoirement (le temps de déterminer plus précisément les capacités du modèle sur ces points), et pour Opus 4 uniquement. Ce qui signifie principalement : surveillance (automatisée) des requêtes et restrictions supplémentaires sur les requêtes acceptées. Pour plus de détails, je vous renvoie à la System Card et à la politique de sécurité des modèle d’Anthropic.

      Ce qui n’a pas empêché Opus 4 d’être jailbreak immédiatement. Pour la défense d’Anthropic, la System Card mentionne explicitement que le but de ces précautions supplémentaires n’est pas de rendre plus difficile le jailbreak sur les requêtes « classiquement » interdites.

      En vrac

      Chatbot Arena est l’un des benchmarks les plus connus, utilisé notamment comme critère d’arbitrage sur les marchés de prédiction. Sa pertinence est de plus en plus remise en question, où le classement ne semble pas réellement refléter les capacités des modèles, sur d’autres benchmarks ou des évaluations privées/subjectives. Un papier publié sur arXiv, The Leaderboard Illusion, analyse l’impact de certaines pratiques pouvant expliquer ces différences. Les mainteneurs de Chatbot Arena répondent sur Twitter.

      Le gouvernement américain ouvre une consultation publique sur la politique à suivre concernant l’IA.

      Un chiffre intéressant: Cursor, un assistant de code, produit actuellement 1 milliard de lignes de code par jour.

      DeepSeek publie DeepSeek-Prover-V2, un LLM spécialisé dans les preuves mathématiques. Surpasse tous les modèles actuels sur PutmanBench.

      Dans la sécurité des modèles, "Scalable Oversight" désigne la technique suivante : utiliser un modèle considéré comme sûr pour évaluer la sécurité d’un modèle plus sophistiqué. Se posent diverses questions comme : "jusqu’à quel point un modèle moins sophistiqué peut juger un modèle plus sophistiqué" ? Ce papier tente de répondre à cette question (et d’autres adjacentes).

      Google DeepMind met à jour son modèle le plus avancé, Gemini 2.5 Pro. De meilleures performances sur les tâches de programmation, mais au prix de moins bonnes sur… presque tout le reste ?

      Le Copyright Office aux US publie un premier brouillon sur l’utilisation de données publiques pour l’entraînement des IA. Verdict temporaire: c’est un usage transformatif (autrement dit: pas du plagiat), mais ne rentre pas dans la doctrine du « fair use » (ce qui permettrait aux développeurs d’IA de ne pas offrir de compensation). Une victoire préliminaire pour les créateurs de contenu s’estimant lésés. Cependant, le directeur du Copyright Office aurait été limogé peu après la publication de ce rapport.

      ARC-AGI-2 est publié. ARC-AGI est un benchmark spécialement conçu pour être dur pour les IA actuelles, se reposant principalement sur des tâches de type raisonnement visuel. Malgré ceci, o3 est arrivé à 75%, dépassant les performances des évaluateurs humains. Cette seconde édition tente un nouveau format mais garde le même objectif, « difficile pour l’IA, facile pour les humains ».

      Quelque chose que je n’ai pas couvert jusqu’ici car un point secondaire dans beaucoup d’annonces plus importantes, mais qui mérite sa mention du fait justement d’être aussi commun : MCP (Model Context Protocol) est une tentative d’uniformiser la communication entre un modèle et d’autres systèmes (IDEs, sites internet,…). Développé par Anthropic (les développeurs de Claude), adopté par OpenAI et Google DeepMind, il devient de plus en plus un standard de fait.

      Dans la série « l’IA fait de la recherche », des chercheurs font leur propre système, nommé Robin, où l’IA propose des hypothèses et des expériences pour les tester, les chercheurs réalisent les expériences, et l’IA se charge de l’analyse des résultats et des prochaines étapes (plus d’expériences, plus d’hypothèses, ou tirer une conclusion). Premier résultat : un candidat pour traiter la forme atrophique de la dégénérescence maculaire liée à l’âge.

      OpenAI o3 découvre une faille de sécurité dans Linux.

      Le mois dernier, nous avions brièvement mentionné que OpenAI 4o était flagorneur, au point d’opiner sur des prompts relevant manifestement de l’épisode psychotique. Un utilisateur anonyme explore la même tendance à un moindre niveau Opus 4, et travaille à mesurer ça plus précisément. Il mentionne que ses résultats préliminaires montrent que les modèles plus avancés ont plus tendance à exhiber ce comportement.

      Dario Amodei, le patron d’Anthropic, prévient que l’IA pourrait supprimer la moitié des postes « débutants » dans des domaines tels que la technologie, la finance ou le droit d’ici 1 à 5 ans.

      Pour aller plus loin

      Non couvert ici :

      En audio/video :

      Commentaires : voir le flux Atom ouvrir dans le navigateur

      • ✇LinuxFr.org : les dépêches
      • Photos et traces gps dans un blog statique
        Cette dépêche va présenter une méthode pour afficher sur un site personnel les traces, récits et photographies de balades (pédestres, cyclistes par exemple). Comme le contenu à afficher est diversifié (texte, photographies, cartes), la solution retenue sera un blog. Dans un soucis de sobriété numérique, le site sera sans base de données. Pour l'aspect esthétique, la barre de navigation et les cartes seront situées dans la partie gauche des pages et surtout, la carte ne bougera pas avec la navi

      Photos et traces gps dans un blog statique

      Cette dépêche va présenter une méthode pour afficher sur un site personnel les traces, récits et photographies de balades (pédestres, cyclistes par exemple).

      Comme le contenu à afficher est diversifié (texte, photographies, cartes), la solution retenue sera un blog. Dans un soucis de sobriété numérique, le site sera sans base de données.

      Pour l'aspect esthétique, la barre de navigation et les cartes seront situées dans la partie gauche des pages et surtout, la carte ne bougera pas avec la navigation dans la page.

        Sommaire

        N'ayant pas trouvé d'alternative libre à Polarstep, la solution retenue se base sur les briques logicielles libres suivantes :

        • un moteur de blog static : pelican (AGPL v3.0)
        • des thèmes pour le blog
        • des bibliothèques cartographiques : leaflet (BSD 2)

        1 - Préparation de pelican

        Pelican propose d'écrire chaque billet de blogs dans un fichier texte indépendant (au format markdown ou reStructuredText).

        Pelican les convertit en html et l'organisation du site ainsi généré (catégories, mots-clefs, archivage) se fait par le biais de gabarits (qui sont dans un sous-répertoire templates)

        a) Le moteur

        L'installation ne sera pas développée ici, pelican étant disponible dans de nombreuses distributions.

        Il faut créer la structure de travail (dans le répertoire personnel de notre choix) :

        pelican-quickstart
        

        b) Installation du thème graphique

        En allant sur le dépôt des thèmes de pelican, il est possible de trouver le style graphique qui nous convient le mieux.

        Nous allons utiliser le thème pelican-blue (sous licence MIT 2.0), qui a l'avantage d'être simple, et commençons son installation :

        • création du répertoire theme dans notre structure de travail
        • décompression de l'archive du thème dans le répertoire « theme »
        • modification du fichier pelicanconf.py pour configurer notre site. Il faut adapter quelques variables :
        SITENAME = 'Mon blog'
        SITEDESCRIPTION = 'Mes souvenirs de vacances'
        THEME = "./theme/pelican-blue"
        STATIC_PATHS = ['images', 'gpx']
        
        • modifications propres au thème. Souvent l'auteur d'un thème propose de le personnaliser à partir de variables déclarées dans le fichier de configuration.

        c) Écriture du premier billet

        On va créer notre premier billet

        Title: Première sortie
        Date: 2025-05-01
        Modified: 2025-05-01
        Category: Lieux
        Slug: depart
        Tags: bonjour, balade
        
        Bonjour tout le monde ! Quelle chouette sortie j'ai faite.
        

        d) Génération de notre site

        On lance la première compilation :

        make clean
        make html
        

        On peut voir le résultat :

        • soit en ouvrant directement le fichier index.html (présent dans le répertoire output)
        • soit en lançant un mini serveur web (make serve) et lancer son navigateur web à l'adresse http://localhost:8000/

        Pour plus de renseignements sur pelican, je vous invite à vous rendre sur la documentation du projet.

        2 - Peaufinage de base

        On va maintenant nettoyer le code des gabarits, en supprimant les choses que l'on trouve inutiles ou qui nous déplaisent. Tout se passe dans le répertoire templates de notre thème.

        • il y a les fichiers analytics.html et disqus.html
        • une recherche par mot nous informe des éventuelles références à Google, Twitter, Facebook

        On supprime les parties qui ne nous conviennent pas.

        3 - Gestion cartographique

        Nous attaquons désormais notre objectif : rendre visibles sur des cartes des fichiers de trace.

        a) Gestion des cartes

        On va maintenant configurer la gestion des cartes, par l'intermédiaire de leaflet. Comme l'indique sa page wikipédia, leaflet est très largement utilisé et très pratique.

        On va donc

        • le télécharger,
        • le décompresser dans le répertoire static de notre thème
        • modifier les entêtes de nos gabarits (cela se fait le plus souvent dans le fichier base.html) pour y ajouter au niveau <head> les références à leaflet :
            <link rel="stylesheet" href="{{ SITEURL }}/theme/leaflet/leaflet.css"   integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="  crossorigin=""/>
            <script src="{{ SITEURL }}/theme/leaflet/leaflet.js"  integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="  crossorigin=""></script>

        Comme on a récupéré en local les fichiers, on met des chemins propres à notre arborescence (via {{ SITEURL }}/theme/).

        b) Gestion des fichiers de trace (gpx)

        Elle va se faire par l’intermédiaire d'un module supplémentaire https://github.com/mpetazzoni/leaflet-gpx (BSD 2).

        De la même manière qu'on a intégré dans nos entêtes l'intégration de leaflet, nous allons ajouter une ligne pour faire référence à leaflet-gpx (bien vérifier le nom du fichier javascript) :

        <script src="{{ SITEURL }}/theme/leaflet-gpx/gpx.js"></script>

        Par rapport à la documentation officielle, on retire l'attribut defer (puisque nous utilisons les fichiers locaux et non distants).

        Pour tester notre environnement, on va déposer dans notre répertoire gpx un fichier de trace, puis on va ajouter dans notre billet les éléments de cartographie de notre voyage :

        <div id="map" style="width: 600px; height: 400px;"></div>
        <script>
                var map = L.map('map');
                L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
                  attribution: 'Carte et données : <a href="http://www.osm.org">OpenStreetMap</a>'
                }).addTo(map);
                var gpx = '/gpx/FICHIER.gpx';
                new L.GPX(gpx, {async: true}).on('loaded', function(e) {
                    map.fitBounds(e.target.getBounds());
                }).addTo(map); 
        </script>

        On regénère notre site web, et on peut visualiser notre billet

        Première version de notre billet

        Globalement, ça fait le boulot.

        Mais on peut améliorer la chose : on peut par exemple cacher les marques de début et de fin d'itinéraire en insérant la ligne suivante après le async: true

        markers: {startIcon: null, endIcon: null, }

        Mais surtout, nous souhaitons que pelican génère automatiquement la partie consacrée au fichier de trace (alors que dans notre test, nous avons dû l'ajouter nous-même) !

        c) Modification des gabarits

        Si l'on veut simplement ajouter notre fichier de trace et que notre gabarit le traite, on va ajouter cette information dans les entêtes de notre fichier markdown ! En effet pelican permet de créer des variables qui seront utilisables dans nos gabarits.

        Nous allons donc créer et utiliser une variable (qui s'appellerait… Gpx par exemple), qui stockera le nom du fichier gpx à afficher (les chemins sont relatifs à notre site web)

        Title: Première sortie
        Date: 2025-05-01
        Modified: 2025-05-01
        Category: Lieux
        Gpx: /gpx/monfichier.gpx
        Slug: depart
        Tags: bonjour, balade

        Nous modifions ensuite notre gabarit article.html pour qu'il génère la carte à partir de notre variable.

        Pelican est très souple : basé sur Jinja2, il permet les boucles, les conditions et les variables.

        Tous les éléments qu'il utilise sont insérés dans des accolades. Le fonctionnement est facilement lisible et compréhensible.

        On va donc conditonner (avec if) l'insertion de leaflet.

        {% if article.gpx %}
            <div id="map" style="width: 600px; height: 400px;"></div>
        <script>
            var map = L.map('map');
            L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
              attribution: 'Carte et données : <a href="http://www.osm.org">OpenStreetMap</a>'
            }).addTo(map);
        
            var gpx = '{{ article.gpx }}';
            new L.GPX(gpx, {async: true,
                               markers: {startIcon: null, endIcon: null, }
              }).on('loaded', function(e) {
                 map.fitBounds(e.target.getBounds());
              }).addTo(map); 
        
        </script>
        {% endif %}

        Bien entendu, nous supprimons ces références du fichier markdown correspondant à notre billet de test.

        On regénère notre site web, et on peut visualiser notre billet… qui n'a pas changé : tout fonctionne. Pour chacune de nos sorties, il suffit donc d'indiquer le fichier de trace dans les entêtes pour que la carte soit insérée automatiquement dans notre billet.

        Passons maintenant à l'intégration de nos photos.

        4 - Gestion des photographies associées à notre cartographie

        Nous avons besoin :

        • d'une image
        • de ses coordonnées géographiques (latitude et longitude)

        Pour cela, nous allons procéder de la même manière que pour le fichier trace : nous allons créer et utiliser des variables dans les entêtes des fichiers markdown.

        a) Fichier des billets

        Nous modifions encore une fois les entêtes en ajoutant autant d'informations (image, latitude et longitude) que de photos à afficher en miniatures.

        Title: Première sortie
        Date: 2025-05-01
        Modified: 2025-05-01
        Category: Lieux
        Gpx: /gpx/monfichier.gpx
        Slug: depart
        Img: /images/image1.jpg
        Lat: 49.895517
        Lon: 2.295983
        Img: /images/image2.jpg
        Lat: 49.89443
        Lon: 2.30137
        Tags: bonjour, balade
        

        On remarque ici que l'on a mis plusieurs images avec les mêmes noms de variables.

        b) Modification des gabarits

        Nous allons ensuite modifier les gabarits de pelican pour qu'ils positionnent des miniatures des photos sur notre trajet.

        Nous allons à nouveau modifier notre fichier article.html, en y ajoutant (à la suite de notre précédente modification, dans la condition {% if article.gpx %}) le code suivant :

        Nous commençons par indiquer l'icône qui s'affichera sur la carte à chaque photo mise en valeur

        var MonIcone = L.icon({
            iconUrl: '/images/app-photo.png',
            iconSize: [36, 36]
        });
        

        Puis nous codons l'affichage du marqueur (qui sera géré par leaflet).

        {% if article.img %}
          {% if article.img is string %}
             imageTxt = 'Description';
             L.marker([{{ article.lat }}, {{ article.lon }}], {icon: MonIcone}).bindPopup(imageTxt + '<br><img src="{{ article.img }}" width="200px"><a href="#bal5">plus de détail</a>').addTo(map);    
          {% else %}
            {% for n in range(article.img| length) %}
               imageTxt = 'Description';
               L.marker([{{ article.lat[n] }}, {{ article.lon[n] }}], {icon: MonIcone}).bindPopup(imageTxt + '<br><img src="{{ article.img[n] }}" width="200px"><a href="#bal5">plus de détail</a>').addTo(map);
            {% endfor %}    
          {% endif %}
        

        La difficulté réside dans la gestion des éléments répétitifs :

        • s'ils sont plusieurs, on peut utiliser les méthodes python des listes.
        • s'il n'y en a qu'un seul, cette méthode renvoie toutes les lettres de notre variable ! Il a donc fallu tester si celle-ci est une chaine de caractères ou une liste.

        Les choix sont ici purement personnels ou démonstatifs :

        • on a laissé une variable imageTxt en dur, elle pourrait être passée dans les entêtes de nos fichiers markdown
        • le texte du popup peut être adapté (on pourrait y ajouter un lien direct vers notre image par exemple)
        • le lien (ancre) est à créer dans notre fichier markdown
        • la taille de l'image du popup est en dur (on peut passer par une feuille de style css)

        On regénère notre site web, et on peut visualiser notre billet :

        Carte avec icones indiquant des lieux visités

        Et lorsqu'on clique sur une icône d'appareil photo, on voit bien notre popup :

        Popup avec la miniature

        c) Gestion des photographies

        Comme indiqué plus haut, la taille des miniatures affichées peut se gérer :

        • par CSS
        • ou créer des miniatures (avec imagemagick) pour diminuer la charge de notre serveur (afficher une photo de 3000 pixels à 200 pixels n'est pas optimal). Dans ce cas, il suffira d'adapter notre gabarit pour lui indiquer où aller chercher les petites images (/images/miniatures/ par exemple)

        Par contre, le point le plus compliqué est la gestion des coordonnées des photographies : il faut les rentrer à la main !

        • Pour les photographies qui n'intègrent pas les coordonnées dans leurs métadonnées, il n'y a pas d'autre solution que d'aller chercher sur une carte (openstreetmap par exemple) et de trouver le lieu de la prise de vue et de repérer les coordonnées.

        • Pour les photographies qui contiennent leurs coordonnées géographiques, on peut utiliser l'outil exiftool pour les récupérer. On peut éventuellement faire un script bash qui affiche les lignes d'entête pour notre billet (on n'a plus qu'à les recopier ou les rediriger vers un fichier texte) :

            for photo in $(ls ./content/images);
            do
                echo ""
                echo "Img: /images/"$photo
                LAT=$(exiftool -n -s3  -gpslatitude ./content/images/$photo)
                echo "Lat: "$LAT
                LONG=$(exiftool -n -s3  -gpslongitude ./content/images/$photo)
                echo "Lon: "$LONG
            done

        Nous avons utilisé les options -n qui affichent les valeurs numériques au format décimal (celui utilisé par openstreetmap pour les coordonnées) et -s3 pour avoir la valeur du champ sans le nom de son attribut.

        5) Dernières modifications

        Nous venons de voir les différentes techniques qui permettent d'avoir le rendu que nous souhaitions. Et le résultat est déjà agréable à regarder.

        Nous pourrions nous arrêter ici, mais vous voulons que la carte reste en permanence dans le menu latéral. La solution est de la mettre dans une balise <aside>.

        a) Modifier les gabarits

        Notre thème comporte déjà une telle balise : elle est dans le fichier base.html… ce qui signifie qu'il ne peut pas voir les informations sur les articles (donc nos entêtes) !

        La solution va donc consister à déplacer, à l'intérieur du fichier article.html, tout notre code dans une section (que nous appellerons mamap :

        {% block mamap %}
            Mettre ici tout le code sur notre gestion cartographique
        {% endblock %}
        

        Et dans le fichier base.html, on va insérer à l'intérieur des balises <aside> son appel (qui ne tient que sur deux lignes) :

        {% block mamap %}
        {% endblock %}
        

        b) Ajuster les feuilles de style

        Il faut surcharger le comportement de la carte gérée par leaflet :

            .leaflet-container {
                width: 400px;
                height: 300px;
                max-width: 100%;
                max-height: 100%;
                margin: auto;
            }

        Et vérifier que les largeurs de la carte, et de <aside> soient compatibles.

        Le résultat avec nos dernières modifications est désormais le suivant

        Site avec la carte à gauche

        6) Conclusion

        Il est temps de finir cette dépêche, dans laquelle nous avons pu découvrir la souplesse et la richesse des gabarits gérés avec jinja2, ainsi que la facilité d'utilisation de leaflet.

        Désormais, dans notre flux de travail, nos répertoires sont organisé ainsi :

        content 
            + gpx : les fichiers de trace
            + images : les photos que l'on veut afficher sur notre blog
            fichierXX.md : les billets
        output : notre site web (généré par pelican)
        theme
            + pelican-blue  : le thème choisi
                + static
                    + css
                    + leaflet
                    + leaflet-gpx
                + templates
        

        Et la rédaction de nos billets consiste à :

        • ajouter le fichier gpx de notre trace dans les entêtes
        • ajouter les informations sur chaque photo que l'on veut voir (toujours dans les entêtes)
        • écrire notre billet normalement (en y ajoutant éventuellement d'autres photos ou des ancres de navigation)

        Cette dépêche démontre qu'il est possible d'avoir, avec les outils actuels, un rendu intéressant pour partager ses sorties. Et totalement utilisable en auto-hébergement.

        Les outils utilisés sont très personnalisables et je vous invite à lire leurs documentations ou à parcourir leurs extensions respectives et de vous les approprier selon votre usage.

        Malheureusement, la solution présentée ne conviendra qu'à une minorité d'utilisateurs. En effet, elle se base sur des éléments qui sont le plus souvent rendus invisibles (site web, transfert de fichiers, métadonnées) et elle est inutilisable sur téléphone.

        Commentaires : voir le flux Atom ouvrir dans le navigateur

        • ✇LinuxFr.org : les dépêches
        • Netvibes.com au rancart, Pétrolette au rendez-vous
          « J'étais tranquille j'étais peinard / je réparais ma mobylette » / la nouvelle a surgi le soir / un truc pas vraiment super-chouette… » Eh oui, le couperet est tombé, les utilisateurs de l'agrégateur de flux Web Netvibes.com ont reçu le 15 avril un courriel de Dassault Systèmes leur annonçant que leur agrégateur préféré aller se désagréger définitivement dans l'atmosphère le 2 juin 2025 à midi, avec toutes leurs données, tel un Starship numérique. Si l'on en croit le début du message, cela est

        Netvibes.com au rancart, Pétrolette au rendez-vous

        « J'étais tranquille j'étais peinard / je réparais ma mobylette » / la nouvelle a surgi le soir / un truc pas vraiment super-chouette… » Eh oui, le couperet est tombé, les utilisateurs de l'agrégateur de flux Web Netvibes.com ont reçu le 15 avril un courriel de Dassault Systèmes leur annonçant que leur agrégateur préféré aller se désagréger définitivement dans l'atmosphère le 2 juin 2025 à midi, avec toutes leurs données, tel un Starship numérique. Si l'on en croit le début du message, cela est lié au développement d'un nouveau service de l'entreprise nommé 3D UNIV+RSES, avec plein d'IA et tout et tout. Le courriel d'avertissement indique certes comment sauvegarder ses données, mais « et maintenant, Papa / C'est quand qu'on va où ? »

        Sommaire

        Good vibrations 2.0 ou le cubisme informationnel

        Netvibes.com, lancé par une start-up en 2005 et racheté par Dassault Systèmes en 2012, était un lecteur en ligne permettant d'afficher les flux RSS ou Atom dans des petits cadres qu'on pouvait regrouper dans des onglets thématiques. Chaque cadre était configurable (longueur, affichage d'images ou non…) et déplaçable facilement. Les flux se mettaient automatiquement et régulièrement à jour. On pouvait aussi ajouter de petites applications (listes de choses à faire, accès courriels, accès à différents réseaux sociaux, etc.). Wikipedia décrit Netvibes.com comme « un portail Web personnalisable. Représentatif de ce qu'on appelle le Web 2.0 ». En tout cas, c'était un très bon outil de veille que j'utilisais tous les jours depuis belle lurette.

        Lancé en 1990, donc à peu près en même temps que le World Wide Web, le Courrier international nous permettait d'avoir accès à une pluralité de points de vue issus des journaux du monde entier. Un agrégateur de flux, c'est un peu l'équivalent informatique. Il permet un véritable cubisme informationnel. Avoir un onglet News agrégeant des flux de journaux d'horizons politiques différents et de plusieurs pays, c'est échapper à la bulle informationnelle, à la ségrégation sociale créée par les grands réseaux sociaux commerciaux. Car observer depuis le point de vue d'autrui est un bon exercice, même si ça peut parfois être désagréable comme du poil à gratter. Enfin, avec un agrégateur, l'algorithme c'est vous : votre œil survole l'ensemble des titres et capte au vol ce qui l'intéresse ou le surprend.

        J'ai rencard avec Pétrolette

        L'outil libre qui se rapproche le plus de Netvibes.com est Pétrolette, « la page d'actus qui ne sait rien de toi », développée par YPhil en JavaScript. Comme son nom l'indique, Pétrolette n'est pas un gros SUV qui fait tout, même le café, mais une application libre qui essaie de faire au mieux une seule chose : afficher des flux Web dans des cadres classés dans des onglets. Donc disons le tout de suite, il faut oublier les éventuelles autres applications que vous utilisiez dans Netvibes. D'après son CHANGELOG, Pétrolette est en version 1.7 depuis l'été 2023. Le GitLab de Pétrolette est indiqué comme étant un miroir de son Framagit mais est en fait plus à jour, la dernière activité remontant à Noël 2024. C'est là que le développement se passe.

        D'après le compte Mastodon de Pétrolette, suite à des problèmes d'hébergement, l'instance principale est depuis décembre 2024 https://petrolette.onrender.com/ bien que celle-ci soit considérée comme temporaire. Les plus admin pourront bien sûr héberger leur propre instance, soit en local soit sur le Web, par exemple sur https://place.de.ma.mob/ si le domaine n'est pas déjà réservé.

        Procédure migratoire

        Par défaut, quand on va sur l'instance principale, qui est une instance partagée, on a un certain nombre d'onglets pré-remplis, avec en tout plus de trois cents flux. On peut les personnaliser (ce sera stocké en local), mais ce qui nous intéresse ici, c'est migrer de Netvibes à Pétrolette. Voici la procédure :

        • Dans Netvibes.com, sauvegarder ses données en allant dans « Compte > Sauvegarder vos données », choisir le tableau de bord, cliquer sur Exporter (fichier XML).
        • Dans Pétrolette, supprimer tous les onglets par défaut (croix rouges), importer le XML avec « Flux > Ouvrir ».
        • Tous les onglets et flux sont récupérés. Le titre d'un flux apparaîtra quand on clique sur son icône pour le déployer.
        • Déplier et configurer chaque flux (mais on devrait éventuellement aussi pouvoir travailler à partir du .conf pour réduire ce travail fastidieux).

        La configuration est stockée localement sur l'ordinateur et non pas en ligne (on n'a donc pas de compte Pétrolette, donc elle « ne sait rien de toi », elle ne sait pas ce que tu lis). On peut l'exporter dans un fichier .conf au format JSON et l'importer sur un autre PC pour avoir la même configuration.

        Synchronisation ?

        Mais une telle synchronisation manuelle n'est pas idéale et l'application peut utiliser le protocole remoteStorage pour pouvoir partager la même configuration sur plusieurs PC, et en particulier vers l'application 5apps. D'après l'aide, l'instance principale de Pétrolette ne gère que 5Apps (mais le menu affiche également des icônes pour Dropbox et Google Drive, qu'on devrait donc pouvoir utiliser si on héberge sa propre instance).

        On peut s'enregistrer sur 5apps à partir d'un compte GitHub, Bitbucket, GitLab.com ou en se créant un compte (adresse email, identifiant, mot de passe). 5apps vous fournit une « adresse utilisateur » du type login@5apps.com. On peut alors aller dans le menu de Pétrolette, cliquer sur remoteStorage et entrer l'adresse utilisateur pour faire la connexion. Il n'y a plus qu'à autoriser Pétrolette à y accéder et faire de même sur tous vos PC. Pour cela, sur chaque machine, connectez-vous à votre compte 5apps puis dans la liste des « Connected Apps », cliquez sur le lien petrolette.onrender.com, dont l'URL est du type https://5apps.com/rs/oauth/token/123d3215c5484b9a78987e8/launch_app.

        Nouveaux développements

        Ça c'est la théorie, dans la pratique la synchronisation semble problématique, avec un fonctionnement très capricieux, et après discussion avec l'auteur il pourrait bien s'agir d'un bug où l'application s'emmêlerait les pinceaux entre stockage local et stockage distant. C'est la mauvaise nouvelle. La bonne nouvelle (scoop !) c'est que ça pourrait être résolu dans une future Pétrolette 2 à laquelle réfléchit l'auteur !

        Voilà une bonne raison de réfléchir à l'invitation à faire un don au projet Pétrolette dans la fenêtre pop-up qui surgit de temps en temps. Il est en effet possible de faire un don sur Liberapay ou de prendre un abonnement sur Ko-fi : à partir de 1 €/mois le pop-up disparaît. Au-delà, on peut demander à l'auteur de créer un nombre plus ou moins important de flux RSS pour des sites qui n'en proposent normalement pas. Rappelons-nous que dans surveillance://, Tristan Nitot nous avertissait sur notre fâcheuse tendance à aimer la gratuité.

        Retour d'expérience

        Commençons par les points négatifs, ce qui nous permettra de finir sur le positif !

        Points négatifs

        • Lenteur pour mettre à jour les flux : quand on affiche sa page Pétrolette, tous les flux sont mis à jour simultanément, c'est-à-dire même dans les onglets qui ne sont pas affichés.
        • Pas de mise à jour périodique des flux. On peut certes les mettre à jour individuellement en cliquant sur une icône. Mais malheureusement, recharger la page avec F5 permet certes de mettre à jour tous les flux mais nous remet systématiquement sur le premier onglet. Pétrolette 2 proposera peut-être des fonctionnalités pour faciliter les mises à jour des flux.
        • N'affiche pas l'heure de parution des actualités, contrairement à Netvibes. Mais la date et l'heure sont indiquées dans la fenêtre d'aperçu quand on survole un titre.

        Points positifs

        • Les aperçus du texte qui apparaissent au survol de la souris sont plus longs qu'avec Netvibes, et même parfois très longs, ce qui permet d'avoir un bon aperçu du contenu avant un éventuel clic, voire même de s'en passer.
        • La hauteur (en pixels) des cadres peut être réglée plus finement qu'avec Netvibes (où seules trois hauteurs standards étaient disponibles). Cela peut d'ailleurs être utilisé pour augmenter la distance verticale entre deux cadres, ceux-ci étant par défaut collés de façon un peu compacte.
        • Les titres longs apparaissent en entier sur plusieurs lignes, alors qu'ils sont coupés dans Netvibes. Cela peut-être un avantage mais parfois aussi un défaut avec certains sites qui proposent des titres à rallonge (du genre trois lignes sur Developpez.com !) que l'oeil a du mal à lire au vol.
        • Le menu principal propose de déposer un marque-page dans la barre du navigateur. Il contient un script qui d'un clic ajoutera le site de l'onglet courant dans votre Pétrolette.
        • Le champ de recherche permet de chercher un terme dans tous les titres de l'ensemble des onglets. Les zones où il est trouvé apparaissent encadrées en jaune.

        Prêts pour l’équipée sauvage ?

        « Dès que les vents tourneront nous nous en allerons… » Il le faudra bien, le 2 juin tout s'arrête. Et donc tout recommence. On a maintenant toutes les réponses à la question synthétique et sympathique « c'est quand qu'on va où ? » Quand ? On le sait depuis le début et on l'a répété, c'est le 2 juin ! Où ? On espère y avoir apporter une réponse dans cette dépêche.

        Et puis à l'heure où les algorithmes profiteurs des réseaux sociaux commerciaux tendent à enfermer l'utilisateur dans sa bulle informationnelle au seul motif d'optimiser les profits et où les moteurs IA sapent la sérendipité du Web, se balader humblement en mobylette RSS devient une véritable mesure d'hygiène mentale. En plus c'est libre.

        « La Pétrolette », 1895Figure 1 - « Quand j’me balade en mobylette / On dirait l’équipée sauvage ». Ouais, ça carbure librement avec « La Pétrolette » (Duncan & Suberbie, 1895 - 1898) [source : Wikimedia, domaine public].

        Commentaires : voir le flux Atom ouvrir dans le navigateur

        • ✇LinuxFr.org : les dépêches
        • Un serveur musical pour mon salon
          Aujourd’hui, on va mettre en place un serveur musical pilotable à distance en utilisant MPD. Il sera notamment capable de jouer de la musique stockée dessus ou des radios Internet. Il sera aussi capable de se comporter comme une enceinte Bluetooth. On va parler de récup de vieux matos, de Debian, MPD, PipeWire, Samba, d’agent Bluetooth, de systemd (-analyze, -logind), de Powertop et de vbetool. Cet article au ton très « administration système » s’adresse à : des gens qui voudraient mettre

        Un serveur musical pour mon salon

        Aujourd’hui, on va mettre en place un serveur musical pilotable à distance en utilisant MPD. Il sera notamment capable de jouer de la musique stockée dessus ou des radios Internet. Il sera aussi capable de se comporter comme une enceinte Bluetooth.

        On va parler de récup de vieux matos, de Debian, MPD, PipeWire, Samba, d’agent Bluetooth, de systemd (-analyze, -logind), de Powertop et de vbetool.

        Serveur musical - les clients MPD se connectent à MPD, les clients Bluetooth peuvent jouer de la musique, les clients SMB peuvent envoyer des fichier, et le serveur est relié à des enceintes en Jack

        Cet article au ton très « administration système » s’adresse à :

        • des gens qui voudraient mettre en place un système plus ou moins similaire, même pour faire autre chose dans le même esprit (en mode tutoriel) ;
        • des gens qui aiment les détails techniques et voir les trucs cools qu’on peut faire avec les logiciels libres ;
        • toute autre personne curieuse pour d’autres raisons.

        Il est probablement trop technique pour quelqu’un qui ne manipule pas la ligne de commande, qui pourra peut-être malgré tout, avec suffisamment de motivation, se laisser porter par la démarche.

        Sommaire

        Introduction

        Note de lecture : cette dépêche est très détaillée, je vous conseille de passer les sections qui vous intéressent moins.

        Motivation

        Dans mon salon, j’ai des petites enceintes toutes bêtes qui sonnent plutôt bien. Mettre de la musique implique de s’embêter à brancher un ordinateur, sur lequel je suis le seul avoir le contrôle. Ce serait bien d’avoir un système prêt à l’emploi et que tout le monde peut contrôler.

        Objectifs

        • Pas d’achat : on fait avec de la récup
        • Peu gourmand en énergie
        • Silencieux (à part la musique, bien sûr)
        • Facile à utiliser pour une personne non technique
        • Pouvoir mettre de la musique sans que ça soit pénible, en utilisant ma bibliothèque musicale locale, ou des radios internet
        • Pouvoir laisser n’importe qui se connecter en Bluetooth et lancer sa propre musique

        Nous allons, ensemble, remplir ces objectifs. On va rentrer dans les détails, qui peuvent être utiles dans d’autres applications, et parce que je sais que certaines personnes ici aiment ça, bande de geeks :-)

        Matériel à disposition

        • des enceintes parfaitement fonctionnelles mais sans fonctionnalité Bluetooth
        • un appareil style netbook du début des années 2010 (dans mon cas, c’est une vieille tablette Airis Kira Slimpad plus vraiment adaptée au web moderne, dotée d’un processeur Intel Atom un peu lent, d’un peu de stockage assez lent, d’un Wifi plutôt lent, du Bluetooth, d’1 Giga de mémoire vive)

        Note sur les interférences Wifi et Bluetooth. Le Wifi de cette tablette est en 2,4 GHz, pareil que le Bluetooth. Tout échange wifi cause des perturbations sur le Bluetooth et tout transfert intensif rend le Bluetooth inutilisable. Du grand classique. Un Wifi 5, 6 ou 7 aurait été appréciable. Il serait possible d’utiliser une carte Wifi USB, mais je n’en ai pas donc on fera sans.

        Ce qu’on va faire dans les grandes lignes

        • Installer une Debian minimale
        • La configurer pour qu’elle soit accessible par le réseau, la plus rapide et légère possible en utilisation mémoire, en temps de démarrage et en consommation énergétique
        • Installer et configurer MPD
        • Installer et configurer Samba
        • Configurer en mode « enceinte Bluetooth »

        Installation standard minimaliste de Debian

        Par souci de concision, on ne va pas détailler l’installation de Debian, il existe d’autres ressources au besoin.

        En résumé :

        • Debian classique en 32 bits (ça consomme moins de mémoire que du 64 bits)
        • j’ai laissé l’installateur faire le partitionnement (une partition principale en ext4, et une partition swap de 1G)
        • j’ai ajouté l’option noatime sur la partition principale pour éviter d’écrire inutilement lors des accès, ce qui use le SSD et ralentit le système (d’autant que le SSD est lent)
        • lors de l’étape Tasksel, choisir console, serveur ssh et utilitaires standard, et en particulier pas d’environnement de bureau
        • on installe sudo et on ajoute l’utilisateur au groupe sudo, ou alors on se donne accès à root en ssh avec une clé SSH
        • on installe iwd (le remplaçant moderne de wpa_supplicant, supposé plus performant et plus stable permettant également de se passer de NetworkManager assez facilement) et on connecte l’appareil en wifi avec
        • on identifie et désactive ou on désinstalle le superflu avec systemd-analyze critical-chain et systemd-analyze blame (typiquement, si vous avez installé NetworkManager, ModemManager a peut-être été installé alors que vous n’avez pas de modem à gérer)
        • on peut configurer le menu de Grub pour moins attendre au démarrage

        Note : sur cette tablette, l’installateur Debian n’arrive pas à se connecter en Wifi, j’ai donc utilisé la version DVD (le premier suffit).

        Gains énergétiques potentiels

        Éteindre l’écran

        L’écran est potentiellement une des plus grosses sources de consommation électrique. On n’en a pas besoin, donc on va l’éteindre au démarrage et à la sortie de veille.

        Pour cela, on va installer vbetool (sources : outils pour éteindre l’écran, lancer une commande au démarrage, lancer une commande après la veille):

        sudo apt install vbetool
        cat << EOF | sudo tee /etc/systemd/system/screenoff.service
        [Unit]
        Description=Screen off
        After=suspend.target
        
        [Service]
        ExecStart=vbetool dpms off
        
        [Install]
        WantedBy=multi-user.target suspend.target
        EOF

        Attention : ça peut compliquer grandement l’usage de l’appareil, on peut vouloir appliquer un délai avant extinction pour se faciliter la vie.

        Powertop pour améliorer la consommation électrique

        Powertop permet de voir ce qui utilise le CPU et les diverses ressources, et d’ajuster un peu les paramètres de mise en veille de différents périphériques.

        On va l’installer :

        sudo apt install powertop

        Ensuite, ça peut être cool de lancer l’outil pour constater un peu ce qui tourne et consomme des ressources, de se déplacer dans les onglets, et de tenter des trucs dans l’onglet « Tunables » :

        sudo powertop

        Si passer tout à Good ne cause pas de problème d’instabilité évidente, alors on peut appliquer la configuration de Powertop à chaque démarrage (source) :

        cat << EOF | sudo tee /etc/systemd/system/powertop.service
        [Unit]
        Description=PowerTOP auto tune
        
        [Service]
        Type=oneshot
        Environment="TERM=dumb"
        RemainAfterExit=true
        ExecStart=/usr/sbin/powertop --auto-tune
        
        [Install]
        WantedBy=multi-user.target
        EOF
        
        systemctl daemon-reload
        systemctl enable powertop.service

        Sinon, il y a des solutions mentionnées dans la source pour désactiver certains changements (si vous observez des dysfonctionnements avec certains périphériques par exemple, et notamment si vous avez des problèmes de Wifi ou Bluetooth)

        Perso, je sais que sur cette tablette, passer tout à Good fait (faisait il y a 10 ans en tout cas) qu’après un délai la première frappe sur le clavier ou le premier clic de la souris était ignoré, et aussi était nécessaire pour réveiller l’USB – clairement je m’en fiche ici, mais si votre wifi ou votre Bluetooth est en USB et que les paramètres causent une extinction après un délai, clairement ce n’est pas bon).

        Bonus : Configurer le bouton power pour mettre en veille

        Sur ma tablette, un appui court sur le bouton power éteint la tablette (et ensuite on la rallume en appuyant 3 longues secondes). Si on souhaite qu’un appui court mette en veille l’appareil et un appui long l’éteigne, comme ça on fait un compromis énergétique supposément raisonnable pour rendre l’ensemble un poil plus pratique, c’est facile avec systemd.

        Ajoutez ces deux lignes au fichier /etc/systemd/logind.conf :

        HandlePowerKey=suspend
        HandlePowerKeyLongPress=poweroff

        Rechargez les paramètres :

        sudo systemctl restart systemd-logind

        MPD : Music Player Deamon

        Ok, passons au cœur du sujet : mpd.

        Késako

        Simplement, c’est un lecteur de musique pilotable à distance qui est capable de :

        • lire de la musique que vous mettez dans son dossier de travail ;
        • lire des playlists que vous mettez dans son dossier de travail ;
        • lire des flux radio, qui sont par exemple définis dans des playlists.

        Entre autres.

        Certains clients MPD, comme Cantata (une application Qt5 plus ou moins abandonnée mais encore dans les dépôts), sont même capables de lire de la musique sur votre serveur MPD que vous avez localement sur votre ordinateur, ou de gérer les playlists. Ça rend d’ailleurs la constitution de playlists vaguement confortable. Vous n’avez pas besoin d’écrire des playlists M3U à la main, quoi.

        Les avantages sont multiples :

        • c’est méga léger, une machine épuisée peut faire tourner MPD à l’aise
        • si vous lisez la musique stockée sur le serveur, le réseau n’est pas engorgé
        • on peut être plusieurs à contrôler la musique, ce n’est pas une personne qui contrôle tout, et on peut le faire depuis le canapé
        • il existe toute une flopée de clients, il y en a pour tous les goûts pourvu que vous aimiez les logiciels abandonnés ou en ligne de commande / en ncurses (ouais, c’est quand même un problème que j’identifie et qui a largement retardé mon adoption de MPD)
          • les gens non techniques apprécieront les applications mobiles telles que M.A.L.P pour gérer la musique et le volume sonore.

        C’est parti pour l’installation

        sudo apt install mpd

        On va modifier sa configuration :

        sudo nano /etc/mpd.conf

        On peut laisser les paramètres par défaut suivants :

        music_directory         "/var/lib/mpd/music"
        playlist_directory              "/var/lib/mpd/playlists"
        

        Vous l’aurez compris, c’est là où on stocke les musiques et les playlists. Dans la section suivante, on verra comment rendre le dépôt de morceaux simple et convivial.

        On va laisser la plupart des autres paramètres par défaut.

        On va changer bind_to_address, qui est par défaut à localhost, mais on veut que n’importe quel appareil sur le réseau soit capable de s'y connecter. On va aussi explicitement mettre le port à la valeur par défaut (ce n’est probablement pas nécessaire, mais c’est ce que j’ai fait) :

        bind_to_address                 "0.0.0.0"
        port                            "6600"
        

        On veut aussi que quand des fichiers sont changés dans les dossiers music et playlists, mpd se mette à jour tout seul pour ne pas avoir à le baby-sitter :

        auto_update     "yes"
        

        J’ai tenté d’activer zeroconf pour que les clients MPD puissent le trouver tout seul :

        zeroconf_enabled                "yes"
        zeroconf_name                   "Music Player @ %h"
        

        Mais en vrai, je n’ai pas réussi à faire fonctionner ça. En tout cas, un prérequis est d’avoir installé et activé avahi-daemon, on verra ça plus tard dans la partie Samba du coup.

        Vous aurez peut-être envie de mettre un mot de passe voire de changer les permissions par défaut en décommentant et adaptant les paramètres suivants, mais c’est optionnel :

        #password                        "password@read,add,control,admin"
        
        #default_permissions             "read,add,control,admin"
        

        Ensuite, la partie critique, la sortie audio. Pour l’instant, on va dire à mpd d’utiliser Alsa directement. C’est le plus direct et le plus léger (on passera à PipeWire plus tard, pour gérer l’aspect récepteur Bluetooth)

        audio_output {
               type            "alsa"
               name            "My ALSA Device"
               device          "hw:0,0"        # optional
               mixer_type      "hardware"      # optional
             # mixer_device    "default"       # optional
               mixer_control   "Master"        # optional
               mixer_index     "0"             # optional
        }
        

        Pour une de mes installations, j’ai commenté mixer_device parce que ce n’est manifestement pas la bonne valeur chez moi, et que ça marche bien sans.

        Vous pouvez vous passer des autres valeurs optionnelles, mais vous n’aurez pas le contrôle du volume sonore depuis les clients MPD si vous faites ça. Vous allez donc devoir trouver les bonnes valeurs pour les paramètres mixer_*, et pour device. ainsi que mixer_control et mixer_index.

        Quelques indices :

        • hw:0,0 est probablement la bonne valeur pour device, et 0 pour mixer_index aussi. Vous pouvez lister vos cartes son avec aplay -L. Vous aurez peut-être besoin d’installer le paquet alsa-utils.
        • la valeur de mixer_control est le nom du contrôle que vous utiliserez pour changer le volume dans alsamixer, du paquet alsamixergui que vous aurez probablement besoin d’installer.

        Si vous galérez trop avec les valeurs de mixer-*, vous pouvez simplement utiliser mixer_type "software", c’est moins propre mais ça devrait faire le taf. Et sinon, vous pouvez toujours sortir l’artillerie lourde et passer directement à PipeWire.

        Pour appliquer vos modifications :

        systemctl enable --now mpd # À partir de Debian Trixie, mpd n’est plus activé par défaut au niveau du système
        systemctl restart mpd # Si MPD tournait déjà

        Vous pouvez déboguer vos changements avec la commande suivante, qui suit les logs en temps réel :

        journalctl -fu mpd

        Vous avez plusieurs options pour essayer de lire des choses avec mpd :

        • installer l’application M.A.L.P sur votre téléphone Android, ou une autre application cliente MPD, et ajouter un profil avec la bonne adresse, le bon port et le bon mot de passe ;
        • installer un client comme Cantata sur votre ordinateur, avec la bonne adresse, le bon port et le bon mot de passe ;
        • installer mpc directement sur le serveur. Normalement mpc play permet de lancer la lecture.

        Moi, j’ai testé avec une webradio dans une playlist (/var/lib/mpd/playlists/radio-paradise-main-mix.m3u avec le contenu http://stream.radioparadise.com/ogg-192m), mais on peut aussi évidemment placer un morceau dans /var/lib/mpd/music/.

        ReplayGain

        Le niveau sonore de mes morceaux n’est pas homogène, donc il faut sans cesse adapter le volume d’un morceau à l’autre. C’est pénible, voire inutilisable en l’état. Une solution pour ça est replay gain : on analyse et on enregistre le niveau sonore d’une piste dans ses métadonnées.

        Il existe plein d’outils pour faire ça, dont https://github.com/complexlogic/rsgain

        On peut le faire avant d’envoyer les fichiers sur l’appareil. Pour ma part, je l’ai fait sur la tablette, et il n’existe pas de paquet Debian 32 bits, donc je l’ai compilé :

        sudo apt install cmake build-essential pkd-config git libavcodec-dev libavformat-dev libtag1-dev libebur128 libinih-dev libfmt-dev
        git clone --depth=1 https://github.com/complexlogic/rsgain
        cd rsgain
        mkdir build
        cd build
        cmake ..
        make -j2
        sudo make install

        Il faudra s'assurer que les morceaux au format Opus sont étiquetés avec le tag R128_TRACK_GAIN et pas REPLAYGAIN_TRACK_GAIN, parce que c'est ce que MPD s’attend à avoir. Pour ça, on va convaincre rsgain de suivre les standards (que certains lecteurs de musiques ne comprennent pas) en créant un preset qui contient :

        [Opus]
        OpusMode=s
        

        Mes morceaux ne sont pas organisés par albums, donc je désactive l’analyse par album. Je vais donc partir du preset no_album :

        mkdir -p ~/.config/rsgain/presets; cat << EOF > ~/.config/rsgain/presets/no_album_standard_opus.ini 
        [Global]
        TagMode=i
        Album=false
        TargetLoudness=-18
        ClipMode=p
        MaxPeakLevel=0.0
        TruePeak=false
        Lowercase=false
        ID3v2Version=keep
        PreserveMtimes=false
        DualMono=false
        OpusMode=s
        EOF
        

        Ensuite, on peut le rsgain sur le dossier de musiques avec ce preset. Mes morceaux ne sont pas organisés par albums, donc je désactive l’analyse par album.

        rsgain easy -p no_album_standard_opus -m MAX /var/lib/mpd/music

        Note : l'option --skip-existing permet d'ignorer les fichiers déjà taggés :

        rsgain easy --skip-existing -p no_album_standard_opus -m MAX /var/lib/mpd/music

        Avec cette option, on peut exécuter cette tâche régulièrement, par exemple dans un cron, pour calculer le ReplayGain pour les nouveaux fichiers. Pour la première exécution, il vaut certainement mieux ne pas l’utiliser, sinon, si vous aviez déjà des fichiers qui avaient l'information, il se peut que le résultat ne soit pas uniforme.

        Il faut dire à MPD d’utiliser le ReplayGain dans /etc/mpd.conf :

        replaygain                      "track"
        

        Vous aurez peut-être besoin de jouer avec les autres paramètres liés au volume et au ReplayGain.

        Voici les miens :

        # Ce paramètre définit la pré-amplification à appliquer pour les morceaux qui ont l'information du ReplayGain
        replaygain_preamp              "0"
        
        # Ce paramètre définit la pré-amplification à appliquer pour les morceaux qui ne l'ont pas
        replaygain_missing_preamp      "0"
        
        # Faut-il interdire à MPD de dépasser le niveau original d'amplification en appliquant le ReplayGain?
        replaygain_limit                "no"
        
        # Faut-il permettre à MPD d'ajuster le volume pendant la lecture pour normaliser ?
        volume_normalization            "no"
        

        Un autre paramètre qu’on peut régler, c'est la manière dont MPD règle le volume dynamiquement pour ReplayGain. Dans votre bloc audio_output, vous pouvez ajouter replay_gain_handler et la valeur "software" (c'est la valeur par défaut) ou "mixer". En théorique, les traitements software dégradent le son, mais en pratique, avec "mixer", je tombe sur ce bug qui met le volume à 100% après chaque changement de piste.

        Note : je ne suis pas encore convaincu d’avoir réussi à trouver les réglages parfaits, n’hésitez pas à expérimenter.

        Les clients MPD

        À ce stade, vous devriez avoir un serveur MPD fonctionnel et configuré. Si applicable, vous pouvez commencer à suggérer aux gens de votre foyer d’installer l’application M.A.L.P sur leur appareil Android ; elle est libre et disponible sur F-Droid et sur le Play Store. Avec un peu de chance, votre enthousiasme était communicatif et c’est eux qui vous demanderont :-)

        Pour les autres types d’appareils, vous allez devoir faire vos recherches vous-même je n’ai pas étudié les options sous Windows, Mac ou iPhone, mais il y en a. Pour Linux, j’ai essayé Cantata. Il me convient, si ce n’est qu’il a l’air un peu abandonné, et il a une interface certes conviviale, mais quand même un peu brute. Il existe des widgets qui s’intègrent aux différents environnements de bureaux pour les différents systèmes d’exploitation, je n’ai pas exploré. Le site de MPD propose une liste de clients, et le wiki de Arch aussi.

         M.A.L.P, un client mobile pour MPD

        Samba pour déposer les morceaux (et les playlists)

        Déposer des morceaux, vous allez probablement le faire depuis un ordinateur, et à peu près n’importe quel système d’exploitation est capable d’aller chercher un dossier SMB en réseau, alors je vous propose de configurer un serveur Samba. Ça a le bon goût d’être très léger, très simple à faire et de fonctionner depuis n’importe quel OS. Allons-y, et tant qu’à faire, on va aussi installer Avahi, qui permettra aux ordinateurs sous Linux et Mac de découvrir les dossiers partagés tous seuls :

        sudo apt install samba avahi-daemon

        On va partager nos dossiers music et playlists au monde entier en lecture-écriture (YOLO). On édite /etc/samba/smb.conf:

        [Musique]
        path=/var/lib/mpd/music
        read only=no
        writable=yes
        comment=Fichiers musique MPD
        guest ok = yes
        force group = audio
        force user = mpd
        browsable = yes
        public = yes
        create mask = 0644
        directory mask = 0755
        
        [Playlists]
        path=/var/lib/mpd/playlists
        read only=no
        writable=yes
        comment=Listes de lecture MPD
        guest ok = yes
        force group = audio
        force user = mpd
        browsable = yes
        public = yes
        create mask = 0644
        directory mask = 0755
        

        Je ne maitrise pas particulièrement Samba et il y a peut-être des options superflues, mais globalement l’esprit c’est :

        • n’importe qui doit pouvoir accéder à ces deux en lecture et en écriture depuis le réseau. En particulier, la création de dossiers doit marcher
        • MPD doit pouvoir lire ce qu’on a écrit dans ces dossiers
        • les fichiers et dossiers doivent avoir des permissions sensées

        Bien sûr, on peut vouloir restreindre l’accès à certains utilisateurs et/ou avec un mot de passe. Je vous laisse creuser.

        Après un redémarrage de Samba :

        sudo systemctl restart samba

        Avec un peu de chance, dans l’onglet « Réseau » de votre gestionnaire de fichier, dans la section « Partages SMB », votre appareil apparait. Sinon, vous devriez pouvoir y accéder avec smb://HOST/ avec Dolphin et probablement Nautilus, probablement \\HOST sous Windows.

        Alternatives possibles à Samba

        • Si on a un NAS, monter un dossier sur le serveur MPD, voire installer MPD sur le serveur de stockage, ou avoir une tâche chron qui fait un rsync bien placé
        • Mettre en place une synchronisation avec Nextcloud ou Syncthing, et faire pointer MPD vers le bon dossier, ou ajouter le dossier de MPD comme dossier de stockage externe à Nextcloud par exemple
        • SFTP
        • NFS
        • FTP (mais les autres options sont probablement meilleures)

        Récepteur Bluetooth

        Ce n’est bien sûr pas nécessaire si vous êtes parfaitement satisfait·e avec MPD, mais si vous voulez que votre appareil soit en plus capable de se comporter comme une enceinte Bluetooth, vous êtes au bon endroit.

        Les difficultés qu’on va résoudre sont les suivantes :

        • pour l’instant, MPD accède au son directement avec ALSA, et en général on ne peut pas être plusieurs sur ALSA. En tout cas, et même s’il a l’air possible de faire fonctionner Bluetooth et ALSA ensemble, ça n’a pas l’air d’être terriblement simple ou même stable. Donc on va utiliser PipeWire. On aurait pu utiliser PulseAudio, mais PipeWire le remplace, et fonctionne généralement mieux.
        • PipeWire, c’est pensé pour être lancé dans une session graphique d’un utilisateur, mais nous, on a un serveur headless. Il va falloir faire en sorte de lancer une session utilisateur au démarrage sans interaction, et que cette session ne soit pas tuée.
        • mpd tourne avec son utilisateur, PipeWire avec son utilisateur, et après s’être rendu compte qu’il faut que ça soit les mêmes, faut aussi savoir comment, et le faire.

        Lors de l’installation de Debian, on a défini un utilisateur. On peut utiliser cet utilisateur. Sinon, on peut aussi en créer un pour ça, pensez bien à l’ajouter aux groupes audio et bluetooth.

        Garder une session utilisateur active

        On va démarrer une session utilisateur au boot :

        sudo loginctl enable-linger user # remplacer user par le nom d’utilisateur

        On va s’assurer que les processus de cette session ne sont pas tués au moment où on quitte une session (par exemple quand on quitte une session ssh) : dans le fichier /etc/systemd/logind.conf, décommentez la ligne KillExcludeUsers et ajouter le nom d’utilisateur après le =. Vous deviez avoir

        KillExcludeUsers=user
        

        user est le nom d’utilisateur.

        On peut maintenant recharger ces paramètres :

        sudo systemctl restart systemd-logind

        Installer PipeWire et les choses nécessaires

        À ce stade, MPD bloque probablement l’utilisation du son parce qu’il s’y connecte via ALSA. On va le stopper.

        sudo systemctl stop mpd

        PipeWire et WirePlumber vont dorénavant gérer le son, et libspa-0.2-bluetooth permet au démon qui gère le Bluetooth (Bluez) de s’inter-connecter à PipeWire pour le Bluetooth Audio.

        sudo apt install wireplumber pipewire libspa-0.2-bluetooth

        En tant que votre utilisateur (nommé user dans les commandes précédentes) (c’est important), activez PipeWire au démarrage et lancez-le :

        systemctl --user enable --now pipewire wireplumber

        Notez que pipewire-pulse n’est pas nécessaire, d’ailleurs vous pouvez le supprimer ou le désactiver en toute sécurité s’il a été installé.

        Installer un agent Bluetooth qui accepte toutes les connexions audio sans vérifications avec code

        Normalement, accepter les connexions Bluetooth se fait à l’aide d’un agent Bluetooth :

        • qui tourne dans votre session graphique : c’est géré par votre environnement de bureau, ou une application comme bluetooth-applet (est-ce que ça existe encore ?) que vous lancez. Là, évidemment, on n’a pas de session graphique, et pour l’instant on n’a pas d’agent Bluetooth qui tourne.
        • En ligne de commande, avec un outil comme bluetoothctl. Je vous invite à essayer. Vous pouvez lancer des commandes comme pairable on, discoverable on, scan on, et essayer de vous connecter avec un autre appareil. Après vos tests, vous pouvez tout recommencer en faisant oublier les appareils des deux côtés.

        Évidemment, on ne va pas se connecter en ssh pour lancer bluetoothctl à chaque fois qu’on veut se connecter en Bluetooth. On va mettre en place un agent qui démarre automatiquement et qui a un comportement similaire à un casque ou des enceintes Bluetooth : qui accepte toutes les connexions Bluetooth audio. Pour ça, on va utiliser un script Python partagé par Collabora sous Licence LGPL 2.1+ qui fait ça très bien et qu’on va lancer au démarrage.

        Bien sûr, ça veut dire que vos voisins peuvent s’amuser à jouer des trucs chez vous, ou même se connecter fortuitement en choisissant la mauvaise entrée.

        Ce script a une dépendance, qu’on va installer :

        sudo apt install python3-dbus

        On va placer ce script dans speaker-agent.py:

        #!/usr/bin/python3
        # SPDX-License-Identifier: LGPL-2.1-or-later
        
        import dbus
        import dbus.service
        import dbus.mainloop.glib
        from gi.repository import GLib
        
        BUS_NAME = 'org.bluez'
        AGENT_INTERFACE = 'org.bluez.Agent1'
        AGENT_PATH = "/speaker/agent"
        
        A2DP = '0000110d-0000-1000-8000-00805f9b34fb'
        AVRCP = '0000110e-0000-1000-8000-00805f9b34fb'
        
        bus = None
        
        
        class Rejected(dbus.DBusException):
            _dbus_error_name = "org.bluez.Error.Rejected"
        
        
        class Agent(dbus.service.Object):
            exit_on_release = True
        
            def set_exit_on_release(self, exit_on_release):
                self.exit_on_release = exit_on_release
        
            @dbus.service.method(AGENT_INTERFACE,
                                 in_signature="", out_signature="")
            def Release(self):
                print("Release")
                if self.exit_on_release:
                    mainloop.quit()
        
            @dbus.service.method(AGENT_INTERFACE,
                                 in_signature="os", out_signature="")
            def AuthorizeService(self, device, uuid):
                # Always authorize A2DP and AVRCP connection
                if uuid in [A2DP, AVRCP]:
                    print("AuthorizeService (%s, %s)" % (device, uuid))
                    return
                else:
                    print("Service rejected (%s, %s)" % (device, uuid))
                raise Rejected("Connection rejected by user")
        
            @dbus.service.method(AGENT_INTERFACE,
                                 in_signature="", out_signature="")
            def Cancel(self):
                print("Cancel")
        
        
        if __name__ == '__main__':
            dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
        
            bus = dbus.SystemBus()
        
            agent = Agent(bus, AGENT_PATH)
        
            mainloop = GLib.MainLoop()
        
            # By default Bluetooth adapter is not discoverable and there's
            # a 3 min timeout
            # Set it as always discoverable
            adapter = dbus.Interface(bus.get_object(BUS_NAME, "/org/bluez/hci0"),
                                     "org.freedesktop.DBus.Properties")
            adapter.Set("org.bluez.Adapter1", "DiscoverableTimeout", dbus.UInt32(0))
            adapter.Set("org.bluez.Adapter1", "Discoverable", True)
        
            print("RPi speaker discoverable")
        
            # As the RPi speaker will not have any interface, create a pairing
            # agent with NoInputNoOutput capability
            obj = bus.get_object(BUS_NAME, "/org/bluez")
            manager = dbus.Interface(obj, "org.bluez.AgentManager1")
            manager.RegisterAgent(AGENT_PATH, "NoInputNoOutput")
        
            print("Agent registered")
        
            manager.RequestDefaultAgent(AGENT_PATH)
        
            mainloop.run()

        Le script mentionne le Raspberry Pi, mais il n’y a absolument rien de spécifique au Raspberry dedans, il est suffisamment générique.

        On va lancer ce script au démarrage en créant le fichier ~/.config/systemd/user/speaker-agent.service

        [Unit]
        Description=Bluetooth speaker agent
        
        [Service]
        ExecStart=python3 speaker-agent.py
        
        [Install]
        WantedBy=default.target
        

        Et en l’activant (--now le lance tout de suite) :

        systemctl --user enable --now speaker-agent.service

        Il faudra aussi mettre JustWorksRepairing = always dans /etc/bluetooth/main.conf pour permettre le re-appairage sans interaction. Bon là j’avoue, je paraphrase largement ma source :-)

        Ensuite, on va autoriser la connexion Bluetooth même sans session active (en SSH par exemple) (source). Si on ne fait pas ça, la connexion Bluetooth n’est pas possible si l’utilisateur n’a pas une session active (les symptômes : on arrive à se connecter en Bluetooth que quand on est loggué en SSH ou autre, et la connexion Bluetooth casse dès qu’on quitte la session).

        mkdir -p ~/.config/wireplumber/bluetooth.lua.d
        cat > ~/.config/wireplumber/bluetooth.lua.d/80-disable-logind.lua << EOF
        -- Disable arbitration of user allowance of bluetooth via D-Bus user session
        bluez_monitor.properties["with-logind"] = false
        EOF
        systemctl --user restart wireplumber

        Adapter MPD (et Samba) pour utiliser PipeWire

        Pour que MPD utilise PipeWire, il faut adapter :

        1. sa configuration pour qu’il tourne avec le même utilisateur
        2. sa configuration audio_output
        3. les permissions dans /var/lib/mpd

        Dans /etc/mpd.conf, changer la ligne user :

        user                            "mpd"
        

        Elle doit maintenant utiliser votre utilisateur :

        user                            "user"
        

        Commentez votre bloc audio_output, on va maintenant utiliser PipeWire (je suppose qu’on pourrait garder les deux et les clients MPD peuvent probablement permettre de choisir la sortie son, mais ça me parait complexifier l’utilisation pour un intérêt pas clair, ce qui va contre nos objectifs) :

        audio_output {
                type            "pipewire"
                name            "PipeWire Sound Server"
        }
        

        Maintenant, il est temps d’adapter les permissions dans /var/lib/mpd. On va stopper Samba juste avant, et adapter sa configuration.

        sudo systemctl stop mpd samba # si mpd tournait encore
        sudo chown -rv user /var/lib/mpd
        sudo systemctl start mpd

        Note : MPD peut aussi être démarré dans une session utilisateur et à ce stade, c’est ce qu’il serait probablement le plus logique de faire, en bougeant /etc/mpd.conf et le contenu de /var/lib/mpd dans le dossier de notre utilisateur. C’est d’ailleurs la manière privilégiée de démarrer MPD à partir de Debian Trixie. Par simplicité et cohérence, et parce que cette section « Récepteur Bluetooth » est optionnelle mais que les manipulations pour lancer une session utilisateur au démarrage décrites dans cette section seraient nécessaires pour lancer MPD en tant que service utilisateur au démarrage dans tous les cas et que ça apporte une réelle complexité, on fait le choix de garder MPD en tant que service système.

        Modifiez /etc/samba/smb.conf. Dans les deux blocs de partages qu’on a ajouté précédemment, changez la ligne force user = mpd en:

        force user = user
        

        Puis on peut redémarrer Samba :

        sudo systemctl start samba

        Permettre à PipeWire de configurer sa priorité

        Si vous voyez cela dans les logs de PipeWire :

        user@tablette:~$ journalctl --user -fu pipewire
        avril 29 13:41:01 tablette systemd[514]: Started pipewire.service - PipeWire Multimedia Service.
        avril 29 13:41:01 tablette pipewire[531]: mod.rt: Can't find org.freedesktop.portal.Desktop. Is xdg-desktop-portal running?
        avril 29 13:41:01 tablette pipewire[531]: mod.rt: found session bus but no portal
        avril 29 13:41:02 tablette pipewire[531]: mod.rt: RTKit error: org.freedesktop.DBus.Error.AccessDenied
        avril 29 13:41:02 tablette pipewire[531]: mod.rt: could not set nice-level to -11: Permission non accordée
        avril 29 13:41:02 tablette pipewire[531]: mod.rt: RTKit error: org.freedesktop.DBus.Error.AccessDenied
        avril 29 13:41:02 tablette pipewire[531]: mod.rt: could not make thread 547 realtime using RTKit: Permission non accordée
        

        Ça veut grosso modo dire que PipeWire cherche à se rendre plus prioritaire via un mécanisme fourni par les environnements de bureau (xdg-desktop-portal), n’y arrive pas parce qu’évidemment, aucun environnement de bureau ne tourne, alors il essaie de demander au service système rtkit, et se fait jeter.

        Ce n’est pas très grave et on pourrait vivre sans, mais ça pourrait aider à limiter les saccades sonores, donc on va réparer ça (et je pense avoir vu une bonne amélioration grâce à ça).

        Le fichier /usr/share/polkit-1/actions/org.freedesktop.RealtimeKit1.policy dicte qui a le droit ou non de configurer sa priorité (découvert ici, mais le conseil de modifier ce fichier système n’est pas bon, au moins parce qu’une mise à jour future risque d’écraser les modifications) :

        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE policyconfig PUBLIC
                "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
                "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
        <policyconfig>
                <vendor>Lennart Poettering</vendor>
        
                <action id="org.freedesktop.RealtimeKit1.acquire-high-priority">
                        <description>Grant high priority scheduling to a user process</description>
                        <description xml:lang="tr">Bir sürece yüksek öncelikli çalışabilme yetkisi ver</description>
                        <message>Authentication is required to grant an application high priority scheduling</message>
                        <message xml:lang="tr">Sürecin yüksek öncelikli çalıştırılabilmesi için yetki gerekiyor</message>
                        <defaults>
                                <allow_any>no</allow_any>
                                <allow_inactive>yes</allow_inactive>
                                <allow_active>yes</allow_active>
                        </defaults>
                </action>
        
                <action id="org.freedesktop.RealtimeKit1.acquire-real-time">
                        <description>Grant realtime scheduling to a user process</description>
                        <description xml:lang="tr">Bir sürece gerçek zamanlı çalışabilme yetkisi ver</description>
                        <message>Authentication is required to grant an application realtime scheduling</message>
                        <message xml:lang="tr">Sürecin gerçek zamanlı çalıştırılabilmesi için yetki gerekiyor</message>
                        <defaults>
                                <allow_any>no</allow_any>
                                <allow_inactive>yes</allow_inactive>
                                <allow_active>yes</allow_active>
                        </defaults>
                </action>
        
        </policyconfig>

        Dans un système Unix, les paramètres systèmes sont dans /etc. Pour Polkit, il existe un mécanisme pour écrire des règles, qu’on va utiliser. On va créer une règle qui permet à n’importe quel utilisateur du groupe audio de modifier la priorité de ses processus. C’est probablement trop large, mais je ne connais pas bien Polkit et ça fera le taf pour notre application dédiée à l’audio. Si vous avez des meilleures idées, n’hésitez pas à partager en commentaire.

        sudo cat > /etc/polkit-1/rules.d/rt.rules << EOF
        polkit.addRule(function(action, subject) {
                if (subject.isInGroup("audio") && (
                        action.id == "org.freedesktop.RealtimeKit1.acquire-high-priority" ||
                        action.id == "org.freedesktop.RealtimeKit1.acquire-real-time"
                )) {
                        return polkit.Result.YES;
                }
        })
        EOF
        
        sudo systemctl restart polkit.service
        systemctl --user restart pipewire

        On pourra constater l’absence des échecs dans les journaux de PipeWire.

        Bon, on sent bien que toute cette utilisation audio sans session utilisateur standard n’est pas un cas d’utilisation hyper bien prévu et on se retrouve à toucher des coins un peu sombres du système…

        Évitez les flux Wifi 2,4 GHz

        Si vous avez un Wifi en 2,4 GHz, ça peut causer des soucis avec le Bluetooth, et le son peut saccader. Si vous observez cela, il faudra alors limiter au maximum les services et autres tâches de fond qui font des communications réseau. Évidemment, si vous pouvez utiliser un câble Ethernet, c’est encore mieux.

        Sur ce plan, tous les codecs audio Bluetooth ne semblent pas se valoir. Pour tester ça, j’ai lancé un test iperf3 entre la tablette et mon ordinateur portable pour saturer le Wifi. Ça devenait immédiatement catastrophique avec le codec SBC-XQ, alors qu’avec le codec Opus 05, il y a initialement des saccades, puis ça s’améliore vite. J’imagine que le codec Opus dégrade très efficacement la qualité pour compenser. Bon, malheureusement, tous les systèmes ne permettent pas de choisir son codec donc ce n’est qu’une solution partielle au problème.

        Note sur l’utilisation des ressources

        C'est léger :

        load average: 0,12, 0,10, 0,05
        
        $ free -mh
                       total       utilisé      libre     partagé tamp/cache   disponible
        Mem:           986Mi       253Mi       324Mi       6,1Mi       550Mi       733Mi
        Échange:       974Mi          0B       974Mi
        

        Globalement, le CPU s’ennuie en pleine lecture, et à peine un tiers du Giga de mémoire vive est utilisé, la partition d’échange s’ennuie, donc il y a encore largement la place de faire tourner d’autres trucs sur cet appareil si jamais. On peut aussi constater qu’ajouter MPD et tout ce bazar à une installation existante ne la surchargerait pas plus que ça.

        On a aussi un temps de démarrage autour des 20 secondes, ce qui est franchement pas mal.

        Conclusion et améliorations possibles

        On est pas mal rentrés dans les détails, c’était l’occasion d’explorer plein de choses mine de rien. J’ai à la fois appris des choses, précisé des connaissances, et mis plein de choses que je savais ensemble pour obtenir un résultat très satisfaisant. On se retrouve à manipuler de la gestion de services, des configurations systemd un peu poussées, du bluetooth, du son avec ALSA et PipeWire, de la gestion de session utilisateur sur un système headless, et plein d’autres trucs et aller dans les détails comme le boot pour avoir quelque chose de rapide, comme l’écran éteint au bon moment, ou la personnalisation du comportement du bouton power (honnêtement, je n’étais pas très sûr que c’était possible, j’avais lancé la recherche au cas où !).
        J’espère que l’aventure vous a plu aussi.

        Bien sûr l’ensemble est perfectible, alors je vous laisse avec des idées, n’hésitez pas à partager les vôtres en commentaires :

        • Jouer un son au démarrage / à l’appairage Bluetooth. – pour l’instant, la tablette s’allume et puis plus rien. En général, les enceintes Bluetooth jouent un petit son quand elles sont prêtes ou qu’elles viennent d’être appairées et ça peut être pratique
        • Commande vocale. Il y a clairement des manières d’utiliser le micro de la tablette pour demander le morceau suivant, précédent ou régler le volume. Ça peut être pratique quand on n’a pas le téléphone sous la main et ça peut avoir son petit effet en soirée la première fois, tant que les gens ne sont pas encore complètement blasés par le concept parce que tout le monde n’a pas un Google Nest ou un Alexa chez soi, surtout dans ma bulle sociale. Mais c’est probablement finalement très gadget et je me vois mal interrompre une conversation en criant un ordre pour gérer la musique…
        • Appairage Bluetooth plus sécurisé. En général, les enceintes Bluetooth acceptent les nouveaux appareils dans un mode spécial. En appuyant sur le bouton Bluetooth, ou quelque chose comme ça. Ça peut éviter que les voisin·e·s ne te rickrollent au moment le plus inopportun. Ça vaudrait le coup de travailler sur quelque chose comme ça. Avec l’écran tactile, il est probablement possible de dessiner une forme particulière reconnue (ça serait un peu badasse, ou plus probablement, n’accepter (une seule) nouvelle connexion que dans les X minutes après le démarrage ou le retour de veille. Comme ça, demander l’appairage consiste à appuyer deux fois sur le bouton power, ce qui est plutôt acceptable. Si vous avez des idées, n’hésitez pas à partager…
        • Réveil à distance avec du Wake-on-LAN. Ça ne s’applique probablement pas à mon matériel, mais il est possible d’utiliser astucieusement le WoL pour réveiller l'appareil à distance, avec éventuellement la complicité d’un routeur ou d’un serveur toujours allumé chez vous.
        • Désactiver le Wifi quand le Bluetooth est utilisé. Pour éviter les interférences, on pourrait imaginer que quand un appareil se connecte en Bluetooth, on éteint le Wifi (avec rfkill par exemple), on met MPD en pause (ou on le stoppe s’il est en train de jouer un flux) parce qu’on ne peut plus le contrôler, puisque le Wifi n’est plus actif, et on réactive le Wifi quand l’appareil Bluetooth est déconnecté. On pourrait même être plus fin et détecter quand du son est joué.
        • Automatiquement mettre MPD en pause lors d’une connexion Bluetooth. (un peu doublon avec le précédent point) Pour l’instant, il faut manuellement mettre en pause mpd, sinon les deux flux audios se jouent en même temps. -- Changer la classe Bluetooth de l’appareil. Ça permettrait à l’appareil de se déclarer comme appareil audio, pour que ça affiche le bon icône sur les autres appareils.
        • Mises à jour automatiques. Il ne faut pas que ça casse des choses en pleine lecture, ni que ça cause des interférences avec le Bluetooth à cause des téléchargements.
        • Ne pas persister les logs. Pour l’instant, les logs sont écrits dans /var/log sur le SSD, entrainant une usure et un ralentissement cependant probablement tous deux négligeables. On pourrait vouloir ne pas les garder, mais c’est aussi risquer de perdre des informations de débogage le jour où il y a un pépin.

        Je vais probablement trouver d’autres choses à améliorer après publication de l’article. Je partagerai peut-être les choses intéressantes en commentaires ou dans des journaux, et je ferai peut-être vivre l’article sur mon site.

        Commentaires : voir le flux Atom ouvrir dans le navigateur

        • ✇LinuxFr.org : les dépêches
        • Not so Common Desktop Environment (NsCDE), un paradigme différent
          Not so Common Desktop Environment reproduit fidèlement Common Desktop Environment dit CDE, classique des Unix des années 90. Mais pourquoi puisque CDE est libre ? Eh bien pour faire mieux ! NsCDE est plus léger, plus complet, plus souple. NsCDE est sorti en version 2.3 le 20 juin 2023. C'est un petit projet qui s'appuie sur un thème pour FVWM et quelques utilitaires de son cru. Le reste, c'est un thème pour les applications GTK et Qt. Poussant le mimétisme jusqu'à reproduire le script shell du

        Not so Common Desktop Environment (NsCDE), un paradigme différent

        Not so Common Desktop Environment reproduit fidèlement Common Desktop Environment dit CDE, classique des Unix des années 90. Mais pourquoi puisque CDE est libre ? Eh bien pour faire mieux ! NsCDE est plus léger, plus complet, plus souple.

        NsCDE est sorti en version 2.3 le 20 juin 2023. C'est un petit projet qui s'appuie sur un thème pour FVWM et quelques utilitaires de son cru. Le reste, c'est un thème pour les applications GTK et Qt. Poussant le mimétisme jusqu'à reproduire le script shell du premier démarrage, NsCDE vous demande quels doivent être votre terminal, votre gestionnaire de fichier, votre éditeur, etc. Ce n'est pas mal de pouvoir choisir ! Comme c'est assez abouti il n'y a pas eu de nouveaux développements depuis.

        Impressions après quelques jours d'utilisation

        J'ai trouvé l'ensemble agréable et cohérent, certes un peu brutal visuellement, mais on n'est pas devant un thème, c'est un paradigme de fonctionnement différent. Avec un peu d'habitude on peut bosser sans surprises.

        Un exemple sur la gestion des fenêtres, différente du monde Win/Mac qui est le paradigme habituel sur la plupart des bureaux Linux :

        Elles se déplacent encore par la barre de titre, mais pour le reste les trois clics de souris sont utilisés. 
        Le bouton de gauche est trois choses à la fois : un menu déroulé par un clic gauche, un menu étendu déroulé par un clic droit et une boite de dialogue affichée par un clic centre ; la fenêtre se ferme avec un deuxième-clic rapproché dans le temps (clic gauche ou droit) ou un double clic aussi.
        À droite, un bouton agrandit la fenêtre avec beaucoup de possibilités selon le clic gauche, centre ou droit et selon la séquence de clics ; un deuxième bouton réduit la fenêtre : clic gauche pour l'icônifier, clic droit pour l'enrouler. Icônifiée, un clic droit l'agrandit, les clics gauche et centre ouvrent des menus.

        NsCDE ne propose qu'un minimum d'utilitaires, il ne s'agit pas de tout intégrer façon KDE ou Gnome, mais plutôt de fournir un environnement de travail pour interagir avec vos programmes préférés. Testez-le pour découvrir autre chose que le fonctionnement habituel. Le libre vous permet de choisir, sortez des sentiers battus.

        En tout cas ne l'installez pas pour sa légèreté, Liam Proven l'utilisant avec des composants XFCE l'a trouvé plus léger que les autres, mais il est plus lourd que KDE 3.

        image à remplacer

        L'influence de CDE à travers des anecdotes

        C'est moche, hein ? Et pourtant le design de CDE a influencé d'autres environnements de bureau :

        • Le présentation manager d'OS/2 a influencé l'aspect de Win 3 et CDE, mais réciproquement le LaunchPad d'OS/2 v3 reproduit le lanceur CDE.
        • XFCE 3 reproduisait le lanceur CDE : XFCE 3 avec le thème Motif
        • Et même KDE, dont le nom serait un jeu de mots avec Kool Desktop Environment (personne ne s'en souvient vraiment, on trouve d'autres explications).
        • À la même époque, Silicon Graphics avait pris un chemin différent avec IRIX Interactive Desktop. D'après mon cousin, qui passait de la PAO sur Mac à la 3D sous Irix, c'était très ergonomique et ça valait bien le Mac. Il n'a jamais eu besoin d'ouvrir un terminal. Irix

        Installation

        NsCDE propose quelques paquets tout prêt pour Fedora, Suse, Ubuntu, Debian et Slackware ainsi qu'un gros Tarball à décompresser dans /opt.

        Je vous recommande de l'utiliser sous un compte de test, sinon NsCDE va pourrir votre bureau habituel avec ses boites de dialogue et ses thèmes Firefox, LibreOffice, etc. En plus, NsCDE n'a pas de script de désinstallation, il sauvegarde vos paramètres Gtk et Qt, mais seulement jusqu'aux versions 4 et 5.

        Évitez d'y lancer des applications Gnome à cause des menus et fenêtres, sauf si vous installez gtk3-nocsd (no client side decoration). Préférer les applications légères et simples de LXDE/LXQt, Mate, XFCE, … Ou encore les applis Motifs/X11, le thème NsCDE leur ira comme un gant.

        Tester CDE

        Si vous tenez à essayer le vrai CDE pour voir comment c'était, il y a un CD Live sous Debian.

        Commentaires : voir le flux Atom ouvrir dans le navigateur

        • ✇LinuxFr.org : les dépêches
        • Logiciels libres pour la comptabilité d'entreprise
          Où l’on s’essaie à dresser un panorama des logiciels comptables libres. À l’origine de cette dépêche, une recherche d’un logiciel de paye libre où il a semblé que cela pouvait être utile. Il s’agit bien de logiciels de comptabilité pour un usage professionnel ou associatif, pas de gestion de finances personnelles qui ont fait l’objet d’une autre dépêche il y a quelque temps. Évidemment, il n’y a aucune prétention à l’exhaustivité, mais plus à donner un panel de logiciels avec quelques idées pou

        Logiciels libres pour la comptabilité d'entreprise

        Où l’on s’essaie à dresser un panorama des logiciels comptables libres. À l’origine de cette dépêche, une recherche d’un logiciel de paye libre où il a semblé que cela pouvait être utile.

        Il s’agit bien de logiciels de comptabilité pour un usage professionnel ou associatif, pas de gestion de finances personnelles qui ont fait l’objet d’une autre dépêche il y a quelque temps. Évidemment, il n’y a aucune prétention à l’exhaustivité, mais plus à donner un panel de logiciels avec quelques idées pour choisir le vôtre, le cas échéant. N’hésitez pas à les essayer quand c’est possible et à croiser les informations pour vous faire votre opinion. Les fiches sont succinctes, mais c’est l’occasion pour vous d’écrire plein de nouvelles dépêches puisque la plupart de ces logiciels n’ont pas eu de présentations récentes sur LinuxFr.org.
        Image d’illustration

          Sommaire

          Entrons tout de suite dans le vif du sujet. Voici des courtes présentations avec des points forts et des points faibles qui se dégagent des expériences des rédacteurs et rédactrices. Pour vous aider à faire un choix, cette liste est suivie d’explications plus générales.

          Compta.libremen.com

          logo compta libremen
          Compta libremen com est un logiciel de compta en partie double, simple et efficace. Il utilise une interface web sans fioritures. Le logiciel est écrit en Perl et s’appuie sur Postgresql et mod_Perl, avec un serveur Apache. Un fork amical fournit une image Docker et quelques améliorations. Libremen propose une offre en ligne.
          Commentaires de l’auteur recueillis par courriel : on a un peu d’aide à la saisie, il y a les raccourcis claviers (calcul du numéro de pièce, recopie de la ligne précédente) et aussi les fenêtres déroulantes pour les numéros de compte, plus le fait que le navigateur enregistre les dernières saisies ; je crois avoir documenté toutes les fonctions, la documentation est dite “minimum”, le logiciel est minimaliste par essence, donc la doc aussi :-)

          Interface web
          Aide à la saisie oui
          Saisie au km oui
          Intègre documents TVA, export FEC
          Comptabilité en partie double
          Comptabilité analytique oui, champ “Libre”
          Imports écritures en CSV
          Exports écritures en CSV
          Transmission automatisée non
          En réseau oui, et aussi sur Internet
          Documentation oui, minimum
          Forum non

          Diacamma

          logo Diacamma
          Le logiciel existe en deux versions, Diacamma Asso pour les associations et Diacamma Syndic pour les copropriétés. Diacamma utilise une interface web, avec un serveur intégré. Un installeur est fourni pour Windows, macOSX et Linux (Debian conseillée). Le CHATONS Sleto propose une offre en ligne.

          Interface web
          Aide à la saisie oui
          Saisie au km non
          Intègre achats, ventes, factures, adhérents, documents et +
          Comptabilité en partie double
          Comptabilité analytique oui, simplifiée
          Imports écritures comptables, articles, contacts
          Exports écritures en CSV
          Transmission automatisée non
          En réseau oui, et aussi sur Internet
          Documentation oui, complète
          Forum restreint aux connectés, gratuit
          • Points forts : le facturier qui permet aussi de faire des statistiques des ventes et d’éditer des factures et des reçus, le récapitulatif à gauche de l’écran, une vision comptable par « journaux auxiliaires ».
          • Points faibles : les fenêtres modales pour les écritures, la saisie par « journal auxiliaire » qui alourdit le processus, le vocabulaire pas très adapté au secteur.
          • Licence : GNU General Public License 3
          • Site : https://www.diacamma.org/

          Dolibarr

          logo Dolibarr
          Dolibarr est un puissant ERP pour tous types d’entreprises et d’associations. Il existe des pré-sélections des modules nécessaires à votre activité. Dolibarr utilise une interface web avec des serveurs web et SQL. Un installeur est fourni pour Windows et des paquets pour plusieurs distributions Linux. Beaucoup d’offres d’hébergement existent. Il réunit une forte communauté, surtout francophone. Le développement est très actif.
          Notez qu’on parle souvent de Dolibarr sur LinuxFr.org et qu’un journal sur une migration d’ERP a produit des interventions de haut niveau.

          Interface web
          Aide à la saisie oui
          Saisie au km
          Intègre achats, ventes, factures, adhérents, documents, stock, et plein d’autres
          Comptabilité simplifiée ou en partie double
          Comptabilité analytique oui
          Imports écritures comptables
          Exports des journaux, du Grand Livre, et des écritures sous différents formats
          Transmission automatisée
          En réseau oui, et aussi sur Internet
          Documentation oui, complète
          Forum oui
          • Points forts : il est possible d’ajouter des extensions avec le magasin d’application, le dolistore. Dolibarr est également disponible chez certains hébergeurs à travers Softaculous. Une gestion fine des droits par groupe d’utilisateurs et par utilisateurs. Avec certains droits réservés aux utilisateurs internes c’est-à-dire ceux qui ne sont ni client ni fournisseur.
          • Points faibles : l’aspect « usine à gaz » de Dolibarr et sa prise en main qui peut être ardue.
          • Licence : GNU GPL V3 et plus
          • Site : http://www.dolibarr.org
          • Dolibarr sur LinuxFr.org.

          Ekyagri

          logo Ekyagri
          Une solution en ligne de gestion d’exploitation agricole.

          Interface web
          Aide à la saisie oui
          Saisie au km
          Intègre achats, ventes, factures,
          Comptabilité en partie double
          Comptabilité analytique oui
          Imports écritures comptables
          Exports
          Transmission automatisée
          En réseau oui, et aussi sur Internet
          Documentation oui, complète
          Forum oui
          • Points forts : la facilité de la saisie des écritures, la gestion des immobilisations, sa conception bien pensée pour le secteur. L’aide est bien faite, elle indique notamment des niveaux de difficultés des tâches. On peut la télécharger au format PDF.
          • Points faibles : le site n’est pas très clair sur la récupération des données. On n’a pas de module de recherche sur l’aide en ligne et rien n’est indiqué sur les sauvegardes.
          • Licence : AGPL v3
          • Site : https://ekylibre.com/ekyagri/

          ENDI

          logo endi

          Interface web
          Aide à la saisie oui
          Saisie au km
          Intègre achats, ventes, factures,
          Comptabilité en partie double
          Comptabilité analytique oui
          Imports écritures comptables
          Exports
          Transmission automatisée
          En réseau oui, et aussi sur Internet
          Documentation oui, complète
          Forum oui

          ERPNext / Dokos

          Titre de l’image
          Un puissant ERP créé en Inde, le fork Dokos est la version française. Écrit en Python et JavaScript au-dessus d’une base Postgresql. Modulaire, il se positionne comme Odoo (voir ci-dessous). Comparons-les : l’interface est plus austère, la renommée moindre entraîne peu de contributeurs tiers à proposer des modules, l’équipe est plus petite, mais tout aussi dynamique, ERPNext évolue vite, il est basé sur le framework FRAPPÉ qui est stable et permet d’extraire les applications de l’ERP, l’ensemble est intégralement libre.

          Interface web
          Aide à la saisie oui
          Saisie au km
          Intègre achats, ventes, factures, documents, stock et plein d’autres modules
          Comptabilité en partie double
          Comptabilité analytique oui
          Imports écritures comptables
          Exports écritures en CSV
          Transmission automatisée
          En réseau oui, et aussi sur Internet
          Documentation oui, complète
          Forum oui

          Frappebook

          Logo FrappeBook
          Même équipe qu’ERPNext. C’est juste le morceau comptable d’ERPNext, refait en application de bureau et portable par dessus SQLite. Pour les petites entreprises.

          • Points forts : Application portable, on peut l’emmener sur sa clef USB. L’interface est sobre et bien finie.
          • Points faibles : au lancement on se retrouve dans une compta anglo-saxonne, il faut paramétrer pour avoir une compta “européenne”.
          • Licence : GNU General Public Licence version 3
          • Site : https://frappebooks.com/
          • Code source : https://github.com/frappe/books

          Galette

          Titre de l’image
          Sous le nom sympathique et tarabiscoté de Galette (Gestionnaire d’Adhérents en Ligne Extrêmement Tarabiscoté mais Tellement Efficace) se cache un logiciel à destination des associations.

          Interface web
          Aide à la saisie oui
          Saisie au km
          Intègre achats, ventes, factures, adhérents
          Comptabilité simplifiée ou en partie double
          Comptabilité analytique oui
          Imports écritures comptables
          Exports
          Transmission automatisée
          En réseau oui, et aussi sur Internet
          Documentation oui, complète
          Forum oui
          • Points forts : Il est très facile à prendre en main, en comptabilité simple ou double. Il y a une aide en ligne copieuse ainsi qu’une liste d’entraide. Le logiciel propose plusieurs plans comptables (Au moins deux pour les plans comptables français et d’autres pour la plupart des pays européens). On peut aussi ajouter son propre plan comptable. Il offre des fonctionnalités de comptabilité analytique. On peut utiliser sa propre instance, récupérer la base de données ou exporter la comptabilité sous divers formats (CSV, FEC, ODS et XLSX). Il est possible d’importer une comptabilité dans ces formats. Le logiciel est en constante évolution, avec un développeur très réactif. Des modules permettent de gérer aussi les paiements en ligne (puisque c’est aussi un logiciel de gestion de facturations et de clients). Il y a un module PdV (point de vente, caisse).
          • Points faibles :
          • Licence : GNU General Public Licence version 3
          • Site : https://galette.eu/site/fr/
          • Code source : https://github.com/galette/galette
          • Galette sur linuxFr.org.

          GnuCash

          logo GnuCash
          GnuCash figure dans la bibliothèque logicielle de la plupart des distributions Linux. C’est un logiciel qui fait aussi bien la comptabilité personnelle que la comptabilité professionnelle. Il propose des fonctionnalités de CRM de base : gestion des adresses des clients et des fournisseurs.

          Interface Bureau (Gtk)
          Aide à la saisie oui
          Saisie au km
          Intègre
          Comptabilité en partie double
          Comptabilité analytique oui
          Imports écritures comptables
          Exports
          Transmission automatisée
          En réseau
          Documentation oui, complète
          Forum oui
          • Points forts : on peut paramétrer des écritures répétitives (paiements mensuels par exemple) et le logiciel vous le rappelle dans des délais fixés par vous à l’ouverture. Sa bibliothèque de rapports (ou états) est riche : bilan, comptes de résultat, portefeuille d’action, facture, quittance, graphiques. Et c’est personnalisable souvent. Les rapprochements bancaires se font avec pré-affectation des comptes grâce à de l’inférence bayésienne.
          • Points faibles : Il n’y a pas de plan comptable intégré, il faut l’ajouter. Ni de fonctionnalité d’import d’un plan comptable (ou alors, je n’ai pas trouvé), pas de comptabilité analytique, non plus. Il n’est pas complètement traduit en français et la traduction est un peu étonnante parfois. La prise en main n’est pas évidente.
          • Systèmes d’exploitation : Windows, MacOS, GNU/Linux, Unixes
          • Interface : graphique
          • Licence : GNU General Public License Version 2 ou Version 3
          • Site : https://gnucash.org/
          • Code source : https://sourceforge.net/projects/gnucash/
          • GnuCash sur linuxFr.org (dépêches anciennes).

          Grisbi

          logo Grisbi
          Un logiciel qui fonctionne tout seul et qui est souvent fourni dans les distributions Linux. Il est surtout utilisable pour les finances personnelles, mais il propose un mode comptabilité libérale et peut être utilisé par des micro-entreprises.

          Interface Bureau (GTK-3)
          Aide à la saisie oui
          Saisie au km
          Intègre achats, ventes, factures,
          Comptabilité en partie double
          Comptabilité analytique oui
          Imports écritures comptables
          Exports
          Transmission automatisée
          En réseau oui, et aussi sur Internet
          Documentation oui, complète
          Forum oui
          • Points forts : il n’est pas compliqué à installer, on peut importer des fichiers au format CSV (évidemment) mais aussi aux formats QIF, OFX et Gnucash. Pour les rapprochements bancaires, soit dit en passant, choisir le format QIF c’est encore celui qui fait le mieux le travail. Et on peut l’exporter au format QIF ou CSV. Deux formats souvent utilisés par les logiciels de comptabilité. Il propose un pratique simulateur de crédit. Il est assez facile à prendre en main. Quand on fait un rapprochement bancaire, pour une comptabilité personnelle, en bout de course, on a une bonne partie des écritures comptables qui sont saisies.
          • Points faibles : pas de comptabilité analytique, pas de compte de résultat ni de bilan et, évidemment, il n’est pas possible d’éditer des factures. L’interface GTK avait quelques bugs sous Windows (il y a plusieurs années, peut-être corrigés depuis), comme des menus déroulants qui empêchent de valider un formulaire tant qu’on a pas cliqué à côté pour les fermer.
          • Logiciel inspiré de l’ex MsMoney (qui n’est plus vendu par Microsoft)
          • Licence : GNU General Public License Version 2
          • Site : https://fr.grisbi.org/
          • Code source : https://github.com/grisbi/grisbi
          • Grisbi sur LinuxFr.org.

          Laurux

          logo Laurux

          Laurux intègre les outils classiques de gestion d’entreprise : comptabilité, facturation, gestion de stock et tous les composants nécessaires aux prises de décisions cohérentes. Développé en Gambas avec Qt à destination des PME, son auteur a aussi voulu créer un logiciel simple d’installation et d’utilisation livré avec toute la documentation utile. L’auteur fournit une attestation individuelle de conformité, obligatoire dans la loi française. Son forum communautaire est accueillant.

          Interface Bureau (Qt)
          Aide à la saisie oui
          Saisie au km
          Intègre achats, ventes, factures, point de vente
          Comptabilité en partie double
          Comptabilité analytique oui
          Imports écritures comptables
          Exports plein de formats
          Transmission automatisée
          En réseau oui, et aussi sur Internet
          Documentation oui, complète
          Forum oui
          • Points forts : Logiciel multiposte performant et fiable. Gestion de la compta, des stocks et achats/devis/factures très simples. Se prend en mains sans trop de complication. Et des développeurs présents, c’est hyper important de souligner le travail de Patrick et Damscot. Pour être plus large, j’ai, par le passé, utilisé Adicom, EBP, l’AS400 (une usine à gaz de fou ce logiciel), et un autre système dans le négoce également. Avec Laurux, je retrouve les avantages de l’AS400 sans avoir les complications d’utilisation.
          • Points faibles :
          • Licence : GNU General Public Licence version 3
          • Site : https://www.laurux.fr/
          • Code source :
          • Laurux sur LinuxFr.org.

          Ledger

          Avatar de Ledger
          Ledger est un outil en ligne de commande, qu’on nourrit avec de simples fichiers textes. La puissance de la ligne de commande en fait tout l’intérêt. Développé en C++ il a été porté sur de nombreux autres langages. Ledger ne fait que la comptabilité en partie double. Plusieurs extensions facilitent son utilisation, sans entraver la rapidité de saisie.

          Interface Console (terminal)
          Aide à la saisie oui
          Saisie au km
          Intègre
          Comptabilité en partie double
          Comptabilité analytique oui
          Imports écritures comptables
          Exports
          Transmission automatisée
          En réseau oui, et aussi sur Internet
          Documentation oui, complète
          Forum oui
          • Points forts : Adapté pour les compte-rendus, donc en complément d’un autre logiciel. Il est super puissant car facilement scriptable.
          • Points faibles : Par contre, il a très peu de garde-fous. On peut mettre n’importe quelle transaction, il ne dira rien. J’avais dans l’idée de faire des scripts pour automatiser/sécuriser des transactions classiques (dépenses sur une clef, vente d’un lot, etc.) mais j’ai arrêté d’être syndic bénévole avant de le faire (marre de courir après les impayés d’un copropriétaire)
          • Licence : BSD
          • Site : https://www.ledger-cli.org/
          • Code source : https://github.com/ledger/ledger

          Noalyss (autrefois PHPCompta)

          logo Noalyss
          Au départ centré sur la compta, Noalyss est devenu un logiciel de gestion d’entreprise très complet. Noalyss utilise une interface web avec des serveurs web et Postgresql. Des paquets et une procédure d’installation existent pour Linux, Windows et MacOSX. Activement développé en Belgique, sa communauté importante est conviviale.

          Interface web
          Aide à la saisie oui
          Saisie au km ?
          Intègre achats, ventes, factures, stock, documents, etc.
          Comptabilité en partie double
          Comptabilité analytique oui
          Imports écritures comptables
          Exports
          Transmission automatisée ?
          En réseau oui, et aussi sur Internet
          Aide docu, wiki, tutos
          Communauté forum, liste

          Odoo

          logo Odoo

          Odoo est un puissant ERP, modulaire, utilisé par des micro-entreprises comme des multinationales. L’entreprise Odoo connaît une croissance rapide depuis vingt ans, et emploie plus de 2000 personnes dans le monde. Le fondateur d’Odoo poste régulièrement des dépêches annonçant les nouvelles versions d’Odoo sur LinuxFr.org, et un journal sur une migration d’ERP a produit des interventions de haut niveau. Odoo est écrit en Python et utilise Postgresql, son interface est écrite en XML et Javascript. Il est facile à installer.

          Interface web
          Aide à la saisie oui
          Saisie au km
          Intègre achats, ventes, factures, stocks, documents et plein d’autres modules
          Comptabilité en partie double
          Comptabilité analytique oui
          Imports écritures comptables
          Exports
          Transmission automatisée
          En réseau oui, et aussi sur Internet
          Documentation oui, complète
          Forum oui
          • Points forts : L’interface est uniformisée, ergonomique et soignée. Le développement est intense depuis plus de vingt ans, appuyé sur l’entreprise Odoo et une large communauté d’intervenants et d’utilisateurs. Des milliers de modules sont disponibles. Documentation facile à lire, complétée par un forum et un grand nombre de sites, vidéos et livres. Énormément d’intégrations à des services d’État ou privés. La communauté s’est regroupée dans l’OCA Odoo Community Association qui maintient les anciennes versions et développe des centaines de modules libres de haute qualité. L’OCA propose aussi un outil de montée de versions.
          • Points faibles : L’Apps Store Odoo est de qualité très diverse, certains modules ne sont pas libres, pour installer la comptabilité libre française, il faut s’y retrouver entre plusieurs modules. C’est plus simple pour les pays anglo-saxons.
          • Licence : GNU General Public Licence version 3 et propriétaire
          • Site : https://www.odoo.com
          • Code source : https://github.com/odoo/odoo
          • Odoo sur LinuxFr.org.

          OpenConcerto

          logo OpenConcerto
          OpenConcerto est un progiciel de gestion intégrée (PGI ou ERP). Sa cible : les entreprises, grandes ou petites. C’est une application java à installer sur chaque poste utilisateur. Guillaume Maillard, son auteur, est un vieil habitué de LinuxFr.org.

          Interface Bureau (version Web prévue en 2023)
          Aide à la saisie oui
          Saisie au km oui
          Intègre achats, ventes, factures, stock, paye, documents
          Comptabilité en partie double
          Comptabilité analytique oui
          Imports écritures comptables
          Exports FEC (DGFIP), EBP, Sage, Relation experts (Coala), Quadratus, Cegid CCMX
          Transmission automatisée SEPA
          En réseau oui, et aussi sur Internet
          Documentation oui, complète
          Forum oui
          • Points forts : la comptabilité est facile à prendre en main. Il y a une version pour macOS (ce qui est à relever compte tenu de la rareté des logiciels comptables pour ce système d’exploitation). S’agissant d’un progiciel de gestion intégrée : il y a aussi des fonctionnalités de gestion commerciale, de suivi des stocks et de préparation des commandes. Plusieurs modules complémentaires existent comme un module d’OCR qui permet, à partir d’une facture numérisée, de la saisir automatiquement dans le logiciel, ou bien un module de paye (seul module payant) : fiches de paye, journaux de paye et déclarations.
          • Points faibles : c’est très complet et donc un peu complexe pour une micro-entreprise. Certaines fonctionnalités manquent de clarté et d’exemples d’utilisation. La lecture du guide de démarrage ou du manuel (79€) est conseillée. L’équipe de développement manque de temps pour discuter sur les évolutions mais répond généralement aux questions qu’on lui pose sur le forum. Les données ne sont pas stockées de la même manière entre la version monoposte (un fichier H2) et multiposte (Postgresql). Bien choisir au début, sinon il sera difficile de changer.
          • Licence : GNU General Public Licence version 3
          • Site : https://www.openconcerto.org
          • Code source : https://code.openconcerto.org/listing.php?repname=OpenConcerto
          • OpenConcerto sur LinuxFr.org.

          Paheko (ex Garradin)

          Logo de Paheko

          Un logiciel principalement destiné aux associations, qui peut aussi être utilisé par des micro-entreprises. On l’utilise via un navigateur, il y a même une application pour mobile. C’est un logiciel complet de gestion d’association : membres, cotisation, comptabilité, communication.

          Interface web
          Aide à la saisie oui
          Saisie au km
          Intègre achats, ventes, factures,
          Comptabilité en partie double
          Comptabilité analytique oui
          Imports écritures comptables
          Exports
          Transmission automatisée
          En réseau oui, et aussi sur Internet
          Documentation oui, complète
          Forum oui
          • Points forts : il est très facile à prendre en main, il y a une aide en ligne copieuse ainsi qu’une liste d’entraide. Le logiciel propose cinq plans comptables (associatif 1999 et 2018, Plan Comptable Général (PCG), Comités Sociaux et Économiques, copropriétés et plan comptable belge). On peut aussi ajouter son propre plan comptable. Il offre des fonctionnalités de comptabilité analytique. On peut utiliser sa propre instance, récupérer la base de données ou exporter la comptabilité sous divers formats (CSV, FEC, ODS et XLSX). Il est possible d’importer une comptabilité dans ces formats. Et, il est en constante évolution avec un développeur très réactif.
          • Points faibles : pas de lettrage, pas de gestion directe des écritures périodiques.
          • Licence : GNU Alfredo General Public Licence version 3
          • Site : https://paheko.cloud
          • Code source : https://fossil.kd2.org/paheko/doc/trunk/doc/index.md
          • Paheko sur LinuxFr.org, cherchez aussi à Garradin.

          Tryton

          logo Tryton
          Tryton est un puissant ERP pour entreprises de toutes tailles. Il est accessible via un client Web, une application native ou bien une ligne de commande en Python. L’application cliente est dispo pour Windows, Mac et Linux, le serveur est empaqueté pour plusieurs distributions Linux. Comme Odoo dont il est un fork, Tryton est basé sur une architecture trois tiers écrite en Python (et un peu de ECMAScript version 6) avec PostgreSQL comme base de données. Les auteurs nous parlent régulièrement de Tryton sur LinuxFr.org.

          Interface Bureau, Web, Console
          Aide à la saisie oui
          Saisie au km oui
          Intègre achats, ventes, factures, stock, projet, etc.
          Comptabilité en partie double
          Comptabilité analytique oui
          Imports CSV, AEB43, CODA, OFX ou CAMT.053
          Exports FEC ou CSV
          Transmission automatisée Chorus, SEPA
          En réseau oui, et aussi sur Internet
          Documentation oui
          Forum oui
          • Points forts : L’interface est uniformisée, une fois comprise on s’y retrouve quel que soit le module. Un grand choix de modules permet de couvrir tout type d’activité. On peut tout paramétrer, ajouter des champs, en masquer, adapter des modules… Le développement est très actif, la fondation Tryton rassemble beaucoup d’entreprises et de projets, dont GNU Health. Les montées de version sont prises en charge automatiquement.
          • Points faibles : L’interface est austère, il y a un très grand nombre d’options. C’est difficile à prendre en main sans être accompagné (mais c’est normal).
          • Licence : GNU General Public Licence version 3
          • Site : https://www.tryton.org/
          • Code source : https://www.tryton.org/download#source
          • Tryton sur LinuxFr.org.

          D’autres listes, d’autres articles

          Bien entendu, il manque plein de logiciels. On s’est limité à ceux qu’on a pu tester. Si ce petit résumé ne vous suffit pas ou n’est plus à jour, voici des sites avec des listes complémentaires (merci d’indiquer en commentaire si vous en connaissez d’autres).

          Alors, un logiciel de comptabilité pour quoi faire ?

          Avant tout pour faciliter la saisie comptable, fastidieuse quand elle est faite sur du papier (ou des tablettes de cire à l’origine !). Toutes les formes de comptabilité demandent une rigueur, des connaissances, du calcul et du temps — c’est un métier. Le logiciel comptable facilite tout ça.
          Mais aussi pour l’automatisation du suivi comptable, c’est-à-dire la production automatique de synthèses lisibles et compréhensibles. Vous pensez peut-être au bilan, mais on a couramment besoin de consulter toutes les dépenses électriques ou toutes les recettes de pub sur LinuxFr.org. On a aussi besoin d’envoyer périodiquement ces synthèses à l’administration, comme la transmission des recettes de TVA.
          Enfin, la comptabilité enregistre toutes sortes d’opérations, produites par d’autres logiciels spécialisés (salaires, fabrication, factures, etc.). Intégrer tout cela dans un même outil permet de gagner du temps et d’éviter les fautes de frappe (une facture génère automatiquement les écritures comptables correspondantes). Ça donne des logiciels plus ou moins touffus, certains intégrant toute la gestion d’entreprise, voire tous les outils de travail de l’entreprise — on les nomme ERP (ou PGI en français).

          Note sur les ERP ou PGI

          Quand SAP et les AS400 régnaient en maître sur ce domaine, les ERP étaient exclusivement de très gros logiciels intégrant non seulement la gestion et la comptabilité, mais aussi la production, la vente, le décisionnel, etc. La forte adaptation aux processus de l’entreprise via un paramétrage puissant, était leur gros atout et justifiait un coût d’installation très élevé. On en est même venu à appeler «SAP» ce type de logiciels.
          La langue évoluant sans cesse, de nos jours on appelle ERP tout logiciel intégrant la gestion, le point de vente, la compta et deux trois outils de moindre importance, tandis qu’on les nommait autrefois «logiciels de gestion». Mais la puissance n’est pas la même (le besoin de formation non plus !). On a donc essayé de distinguer dans la liste un puissant ERP paramétrable et adaptable aux processus de l’entreprise, d’un logiciel intégrant les outils de gestion.

          Quel logiciel de comptabilité adopter ?

          Comme on va le voir, il y a beaucoup de critères, des vérifications, des questions à se poser. Les articles déjà mentionnés de LWN.net montrent assez bien les implications de vos choix. Si vous avez de quoi faire adapter l’outil à vos besoins, choisissez un ERP, puissant ou non.

          Quel logiciel sélectionner pour sa comptabilité ? Ça dépend.

          Ça dépend de votre statut fiscal, lequel est déterminé par votre chiffre d’affaires sauf dans certains cas précisés par la loi, et ça dépend si vous voyez la comptabilité comme un outil de gestion ou une obligation fiscale. Vous pouvez donc tenir une comptabilité pour des raisons fiscales, pour des raisons légales ou pour des raisons pratiques (ou les trois). Mais pour les mêmes raisons, vous pouvez tenir différentes formes de comptabilité :

          1. une comptabilité dite recettes-dépenses, semblable à votre budget familial, très courante dans les associations regroupant des bénévoles et ne vendant rien (un cahier suffit) ;
          2. une comptabilité simplifiée, dite de trésorerie, à peu près semblable à la première : vous classez les opérations bancaires, et vous rentrez les factures de vos fournisseurs, elle est classiquement permise par l’administration pour de faibles chiffres d’affaires ;
          3. une comptabilité en partie double, fiable et difficile, inventée par les marchands il y a quelques millénaires pour mieux gérer leurs entreprises ;
          4. une comptabilité analytique, qui complique les deux précédentes, mais permet de suivre très précisément les dépenses et recettes affectées à une opération, et perfectionne donc la gestion.

          Sauf la première, ces comptabilités s’appuient sur une classification conventionnelle des opérations qu’on appelle le [plan comptable]]. Celui-ci varie selon les pays et votre statut juridique. L’utilisation du Plan comptable permet de produire les synthèses mentionnées plus haut — du calcul de la TVA au Bilan d’exercice.
          Il y a des plans comptables tout prêts, adaptés à des activités particulières (comme les associations), mais tous dérivent d’un Plan comptable plus général. Votre logiciel doit permettre d’importer ou de créer le Plan comptable souhaité.

          En passant, sachez qu’il y a des types de comptabilité, et que leur choix ne permet pas de suivre les mêmes choses. Par exemple, le monde anglo-saxon suit plutôt les finances tandis que le Vieux Continent suit plutôt les biens. Mais là, on rentre dans des débats de professionnels qu’il n’est pas nécessaire d’aborder, d’autant que les frontières (comptables) bougent en ce moment. Vérifiez ce qui est permis auprès de l’administration. Reposons notre question préalable en y répondant du point de vue pratique :

          Quel logiciel sélectionner pour sa comptabilité ? Ça dépend. Bis.

          Rappelons que beaucoup de logiciels ne se limitent pas à la comptabilité pure, mais intègrent d’autres outils utiles à la gestion (graphiques des recettes, gestion de cotisations, édition de factures, transmission automatisée aux administrations, etc.). Et attention, les écrans de saisie proposés dans les logiciels sont des aides dont un utilisateur expérimenté se passe très bien.

          La comptabilité est une obligation, c’est peut-être obscur, fastidieux, vous la faites à reculons, mais la vie est ce qu’elle est, nous sommes dans le système, il faut donc y passer, chaque jour, semaine, année… Alors le meilleur choix, passe aussi par la facilité d’installation, les couleurs, la facilité de prise en main, etc.

          Tout dépend donc surtout de vous :

          • si vous avez besoin d’aides à la saisie ou non,
          • si vous préférez des outils intégrés,
          • si un outil intégré dédié à votre activité est un plus pour vous,
          • si votre statut fiscal impose une compta en partie double,
          • si vous la faites régulièrement pour la gestion de votre structure,
          • si vous avez besoin d’exporter les données pour votre expert-comptable (vérifiez les formats possibles avec lui),
          • si vous voulez un outil en réseau, voire en ligne sur internet,
          • si vous avez déjà utilisé un logiciel et que vous vous y retrouvez.

          NB Si qui peut le plus, peut le moins, sachez toutefois rester modestes si vous manquez de temps et de compétences, parce que les outils intégrés demandent une certaine maîtrise. Eh oui ! plus vous intégrez de trucs, plus il faut remplir et paramétrer les trucs avant d’utiliser la partie comptable. Par exemple, sur le cas simple d’une vente, avec un outil intégré il faudra avoir créé les produits, leurs taxes, le client, son bon de commande et les moyens de paiements avant d’attaquer la partie comptable.

          Attention aux obligations fiscales françaises (utilisées lors d’un contrôle fiscal)

          En application du 3° bis du I de l'article 286 du Code général des impôts (CGI), toute personne assujettie à la taxe sur la valeur ajoutée (TVA) qui effectue des livraisons de biens et des prestations de services à destination de clients particuliers et qui enregistre les règlements reçus en contrepartie au moyen d’un logiciel ou d’un système de caisse, est tenue d’utiliser un logiciel ou un système qui satisfasse aux conditions d’inaltérabilité, de sécurisation, de conservation et d’archivage des données en vue du contrôle de l’administration fiscale.

          Tous les détails dans l’article du Bulletin Officiel des Finances Publiques - Impôts (BOFIP) TVA - Régimes d’imposition et obligations déclaratives et comptables - Obligations d’ordre comptable - Obligation d’utilisation de logiciels ou systèmes de caisse sécurisés

          Format Fichier des Écritures Comptables (FEC)

          Fichier texte tabulaire de 18 champs délimités par barres verticales ou par tabulations, ayant un nommage et un encodage précis ou éventuellement au format XML. Ce format est utilisé par la DGFiP pour pouvoir faire un contrôle automatisable de la comptabilité. Elle fournit un utilitaire de validation de format pour Windows.

          Les points de vente

          En France, la loi « anti-fraude » de 2016 et l’article 286 du Code des impôts imposent une certification des logiciels de caisse (c’est-à-dire des points de vente qui collectent des espèces) pour éviter les trucages de la comptabilité via modifications du code-source. Ah ben alors fini le libre ? Mais non mon bon, les logiciels libres sont autorisés, on en a beaucoup parlé sur LinuxFr.org. Toutes les structures n’y sont pas tenues, typiquement il faut être assujetti à la TVA.
          NB Depuis la loi de finance 2018, article 105, les logiciels de comptabilité n’ont pas à être certifiés.

          Si vous avez encore des doutes, consultez la FAQ en français facile écrite par l’équipe de Dolibarr.

          La gestion de la paie

          On n’en a pas beaucoup parlé alors que cette dépêche a commencé avec la recherche d’un logiciel de paie libre. Disons tout de suite qu’il est préférable de s’appuyer sur des professionnels, en effet la gestion de la paye repose sur trois piliers :

          1. la fiche de paie et les déclarations afférentes
          2. l’émission et la conservation sécurisée de la fiche de paie
          3. la saisie comptable

          Certains logiciels ont des modules de gestion des payes (OpenConcerto pour la paie française, Odoo pour plusieurs pays…). L’avantage est de faciliter les écritures comptables. Mais attention, la gestion de la paye impose un suivi juridique et un suivi des taux des cotisations, car le cadre légal varie selon les professions, les salaires et varie aussi dans le temps. Cette actualisation permanente est faite par les professionnels (comptables et experts comptables). Sauf à bien connaître votre profession ou à être dans un cadre relativement simple (par exemple celui des intermittents du spectacle en France), vous gagnerez du temps, de l’argent et de la « légalité » en passant par des professionnels. Les options les plus courantes sont de choisir un cabinet d’expertise comptable ou un service en ligne (nettement moins cher). Lisez ou relisez les commentaires du forum.

          S’agissant de la saisie et du traitement comptable de la paie, n’importe quel logiciel de comptabilité peut le faire, les logiciels de paye étant souvent susceptibles de mâcher le travail à ce niveau-là.

          Commentaires : voir le flux Atom ouvrir dans le navigateur

          • ✇LinuxFr.org : les dépêches
          • Programmer des démonstrations : une modeste invitation aux assistants de preuve
            En principe, une démonstration mathématique ne fait que suivre des règles logiques bien définies, et devrait donc pouvoir être encodée informatiquement et vérifiée par un ordinateur. Où en est-on dans la pratique et dans la théorie ? Petit tour au pays des assistants de preuve, des langages de programmation dédiés aux démonstrations, et de leur fondement théorique le plus commun, la théorie des types. lien nᵒ 1 : Why formalize mathematics? par Patrick MassotSommaire Vérifier des programmes Véri

          Programmer des démonstrations : une modeste invitation aux assistants de preuve

          En principe, une démonstration mathématique ne fait que suivre des règles logiques bien définies, et devrait donc pouvoir être encodée informatiquement et vérifiée par un ordinateur. Où en est-on dans la pratique et dans la théorie ? Petit tour au pays des assistants de preuve, des langages de programmation dédiés aux démonstrations, et de leur fondement théorique le plus commun, la théorie des types.

          Sommaire

          Vérifier des programmes

          Comme nous sommes sur LinuxFr.org, je devrais peut-être commencer par ceci : nous passons énormément de temps à découvrir des bugs, et pour les personnes du développement logiciel, à les comprendre, à les résoudre, et de préférence à les éviter en écrivant des tests.

          Dans une formation universitaire de base en informatique, on rencontre des algorithmes, mais aussi des méthodes pour prouver que ces algorithmes terminent et répondent bien au problème posé. Les premières introduites sont typiquement les variants de boucle (montrer qu’une certaine valeur décroît à chaque itération, ce qui assure que le programme termine si elle ne peut pas décroître à l’infini), et les invariants de boucle (montrer qu’une certaine propriété vraie au début d’une boucle est préservée entre deux itérations, ce qui assure qu’elle reste encore vraie à la fin de la boucle).

          On a donc, d’une part, un algorithme, implémentable sur machine, d’autre part une preuve, sur papier, que l’algorithme est correct. Mais si l’implémentation a une erreur par rapport à l’algorithme sur papier ? Et puisque nous n’arrêtons pas de nous tromper dans nos programmes, il est fort possible que nous nous trompions dans notre preuve (qui n’a jamais oublié qu’il fallait faire quelque chose de spécial dans le cas n = 0 ?).

          En tant que programmeurs, on peut imaginer une approche où non seulement l’algorithme est implémenté, mais sa preuve de terminaison et de correction est aussi « implémentée », c’est-à-dire encodée dans un langage qui ressemble à un langage de programmation, pour être ensuite non pas interprétée ou compilée mais vérifiée.

          La vérification est un très vaste domaine de l’informatique, dont je ne suis pas spécialiste du tout, et dans lequel il existe énormément d’approches : la logique de Hoare (voir par exemple l’outil why3), qui est essentiellement un raffinement des variants et invariants de boucle, la logique de séparation spécialement conçue pour raisonner sur la mémoire mutable (voir Iris), le model checking qui se concentre sur des programmes d’une forme particulièrement simple (typiquement des systèmes de transition finis) pour en vérifier des propriétés de façon complètement automatisée, etc.

          Dans cette dépêche, je vais parler d’une approche avec quelques caractéristiques particulières :

          • On vérifie des programmes purement fonctionnels (pas d’effets de bord, même si on peut les simuler).

          • Le même langage mélange à la fois les programmes et leurs preuves.

          • Plus précisément, le langage ne fait pas (ou peu) de distinction entre les programmes et les preuves.

          Vérifier des démonstrations mathématiques

          Pour se convaincre de l’ampleur que les démonstrations ont prise dans les mathématiques contemporaines, il suffit d’aller jeter un œil, par exemple, au projet Stacks : un livre de référence sur la géométrie algébrique, écrit collaborativement sur les 20 dernières années, dont l’intégrale totalise plus de 7500 pages très techniques. Ou bien la démonstration du théorème de classification des groupes finis simples : la combinaison de résultats répartis dans les dizaines de milliers de pages de centaines d’articles, et une preuve « simplifiée » toujours en train d’être écrite et qui devrait faire plus de 5000 pages. Ou bien le théorème de Robertson-Seymour, monument de la théorie des graphes aux nombreuses applications algorithmiques : 20 articles publiés sur 20 ans, 400 pages en tout. Ou bien, tout simplement, le nombre de références dans la bibliographie de la moindre thèse ou d’articles publiés récemment sur arXiv.

          Inévitablement, beaucoup de ces démonstrations contiennent des erreurs. Parfois découvertes, parfois beaucoup plus tard. Un exemple assez célèbre est celui d’un théorème, qui aurait été très important s’il avait été vrai, publié en 1989 par Vladimir Voedvodsky, un célèbre mathématicien dont je vais être amené à reparler plus bas, avec Mikhail Kapranov. Comme raconté par Voedvodsky lui-même, un contre-exemple a été proposé par Carlos Simpson en 1998, mais jusqu’en 2013, Voedvodsky lui-même n’était pas sûr duquel était faux entre sa preuve et le contre-exemple !

          Il y a aussi, souvent, des « trous », qui ne mettent pas tant en danger la démonstration mais restent gênants : par exemple, « il est clair que la méthode classique de compactification des espaces Lindelöf s’applique aussi aux espaces quasi-Lindelöf », quand l’auteur pense évident qu’un argument existant s’adapte au cas dont il a besoin mais que ce serait trop de travail de le rédiger entièrement. Donc, assez naturellement, un but possible de la formalisation des maths est de produire des démonstrations qui soient certifiées sans erreur (et sans trou).

          Mais c’est loin d’être le seul argument. On peut espérer d’autres avantages, qui pour l’instant restent de la science-fiction, mais après tout ce n’est que le début : par exemple, on peut imaginer que des collaborations à grande échelle entre beaucoup de mathématiciens deviennent possibles, grâce au fait qu’il est beaucoup plus facile de réutiliser le travail partiel de quelqu’un d’autre s’il est formalisé que s’il est donné sous formes d’ébauches informelles pas complètement rédigées.

          Brouwer-Heyting-Kolmogorov

          Parmi les assistants de preuve existants, la plupart (mais pas tous) se fondent sur une famille de systèmes logiques rangés dans la famille des « théories des types ». L’une des raisons pour lesquelles ces systèmes sont assez naturels pour être utilisés en pratique est qu’en théorie des types, les preuves et les programmes deviennent entièrement confondus ou presque, ce qui rend facile le mélange entre les deux.

          Mais comment est-ce qu’un programme devient une preuve, au juste ? L’idée de base est appelée interprétation de Brouwer-Heyting-Kolomogorov et veut que les preuves mathématiques se comprennent de la façon suivante :

          • Le moyen de base pour prouver une proposition de la forme « P et Q » est de fournir d’une part une preuve de P et une preuve de Q. En d’autres mots, une preuve de « P et Q » rassemble en un même objet une preuve de P et une preuve de Q. Mais en termes informatiques, ceci signifie qu’une preuve de « P et Q » est une paire d’une preuve de P et d’une preuve de Q.

          • De même, pour prouver « P ou Q », on peut prouver P, ou on peut prouver Q. Informatiquement, une preuve de « P ou Q » va être une union disjointe : une preuve de P ou une preuve de Q, avec un bit pour savoir dans quel cas on est.

          • Pour prouver « Vrai », il suffit de dire « c’est vrai » : on a une unique preuve de « Vrai ».

          • On ne doit pas pouvoir prouver « Faux », donc une preuve de « Faux » n’existe pas.

          • Et le plus intéressant : pour prouver « si P alors Q », on suppose temporairement P et on en déduit Q. Informatiquement, ceci doit devenir une fonction qui prend une preuve de P et renvoie une preuve de Q.

          Curry-Howard

          L’interprétation de Brouwer-Heyting-Kolmogorov est informelle, et il existe plusieurs manières de la rendre formelle. Par exemple, on peut interpréter tout ceci par des programmes dans un langage complètement non-typé, ce qui s’appelle la réalisabilité.

          Mais en théorie des types, on prend plutôt un langage statiquement typé pour suivre l’idée suivante : si une preuve de P et Q est une paire d’une preuve de P et d’une preuve de Q, alors le type des paires de P et Q peut se comprendre comme le type des preuves de « P et Q ». On peut faire de même avec les autres types de preuves, et ceci s’appelle la correspondance de Curry-Howard. Autrement dit, là où Brouwer-Heyting-Kolmogorov est une correspondance entre les preuves et les programmes, Curry-Howard est un raffinement qui met aussi en correspondance les propositions logiques avec les types du langage, et la vérification des preuves se confond entièrement avec le type checking.

          Sur les cas que j’ai donnés, la correspondance de Curry-Howard donne :

          • La proposition « P et Q » est le type des paires d’un élément de P et d’un élément de Q,

          • La proposition « P ou Q » est le type somme de P et Q (comme Either en Haskell et OCaml, les tagged unions en C, et std::variant en C++ : l’un ou l’autre, avec un booléen pour savoir lequel),

          • La proposition « Vrai » est le type trivial à une seule valeur (comme () en Haskell et Rust, unit en OCaml),

          • La proposition « Faux » est le type vide qui n’a aucune valeur (comme ! en Rust),

          • La proposition « si P alors Q » est le type des fonctions qui prennent un argument de type P et renvoient une valeur de type Q.

          Quantificateurs et types dépendants

          La version de Curry-Howard que j’ai esquissée donne une logique dite « propositionnelle » : il n’y a que des propositions, avec des connecteurs entre elles. Mais en maths, on ne parle évidemment pas que des propositions. On parle de nombres, de structures algébriques, d’espaces topologiques, …, bref, d’objets mathématiques, et des propriétés de ces objets. Les deux types principaux de propositions qui manquent sont ce qu’on appelle les quantificateurs : « Pour tout x, … » et « Il existe x tel que… ». Ici, ce qui est une évidence en logique devient moins évident, mais très intéressant, du côté des programmes.

          Prenons pour l’exemple le théorème des deux carrés de Fermat, qui énonce (dans l’une de ses variantes) qu’un nombre premier impair est de la forme 4n+1 si et seulement s’il peut s’écrire comme somme de deux carrés parfaits. À quoi doit ressembler le type associé à cette proposition ? Par analogie avec les implications, on a envie de dire que cela devrait être une fonction, qui prend un nombre premier impair p, et renvoie une preuve de l’équivalence. Problème : ce qui est à droite de l’équivalence est une proposition paramétrée par p. Autrement dit, en notant P le type des nombres premiers impairs, on ne veut plus un simple type fonction P → E, mais un type fonction où le type de retour peut dépendre de la valeur passée à la fonction, noté par exemple (p : P) → E(p). Ces types qui dépendent de valeurs sont appelés types dépendants.

          Dans les langages de programmation populaires, il est rare de trouver des types dépendants. Mais on en retrouve une forme faible en C avec les tableaux de longueur variable (VLA pour « variable-length arrays ») : on peut écrire

          … f(int n) {
            int array[n];
            …
          }
          

          qui déclare un tableau dont la taille n est une expression. Néanmoins, en C, même si on dispose de ce type tableau qui est en quelque sorte dépendant, on ne peut pas écrire une fonction « int[n] f(int n) » qui renvoie un tableau dont la longueur est passée en paramètre. Plus récemment, en Rust, il existe les const generics, où des valeurs se retrouvent dans les types et où on peut écrire fn f<const n: usize>() -> [u8; n], ce qui est un vrai type dépendant, mais cette fois avec la restriction assez sévère que toutes ces valeurs peuvent être calculées entièrement à la compilation, ce qui à cause de la façon dont fonctionne ce type de calcul en Rust empêche par exemple les allocations mémoire. (Donc l’implémentation est assez différente, elle efface ces valeurs en « monomorphisant » tous les endroits où elles apparaissent.)

          En théorie des types, le langage est (normalement) purement fonctionnel, donc les problèmes d’effets de bord dans les valeurs à l’intérieur des types dépendants ne se pose pas. Le type checking peut déclencher des calculs arbitrairement complexes pour calculer les valeurs qui se trouvent dans les types.

          Et le « il existe », au fait, à quoi correspond-il ? Cette fois, ce n’est plus une fonction dépendante mais une paire dépendante : une preuve de « Il existe x tel que E(x) » est une paire d’une valeur x et d’une preuve de E(x). La différence avec une paire normale est que le type du deuxième élément peut dépendre de la valeur du premier élément.

          Comme on peut commencer à s’en douter, le fait d’avoir des types dépendants est utile pour prouver des affirmations mathématiques, mais aussi, bien qu’il puisse sembler inhabituel, pour prouver des programmes, et plus précisément pour encoder des propriétés des valeurs dans les types. Là où on aurait dans un langage moins expressif une fonction qui renvoie deux listes, avec une remarque dans la documentation qu’elles sont toujours de même taille, dans un langage avec des types dépendants, on peut renvoyer un triplet d’un entier n, d’une liste dont le type indique qu’elle est de taille n, et une deuxième liste elle aussi de taille n. Et là où on aurait un deuxieme_liste[indice_venant_de_la_premiere] avec un commentaire que cela ne peut pas produire d’erreur, car les deux listes sont de même taille, on a un programme qui utilise la garantie que les deux listes sont de même taille, et le typage garantit statiquement que cette opération t[i] ne produira pas d’erreur.

          Logique intuitionniste

          Reprenons l’exemple du théorème des deux carrés de Fermat. Nous pouvons maintenant traduire cette proposition en un type : celui des fonctions qui prennent un nombre premier impair p et renvoient une paire de :

          • Une fonction qui prend n tel que p = 4n+1 et renvoie deux entiers a, b accompagnés d’une preuve que a^2 + b^2 = p,

          • Réciproquement, une fonction qui prend a, b et une preuve de a^2 + b^2 = p, et renvoie n tel que p = 4n+1.

          Prouver le théorème des deux carrés de Fermat en théorie des types, c’est donner un élément (on dit plutôt « habitant ») de ce type, soit un programme dont le langage peut vérifier qu’il a ce type. Mais que fait au juste ce programme quand on l’exécute ? On voit qu’il permet notamment de calculer une décomposition d’un nombre premier impair congru à 1 modulo 4 comme somme de deux carrés.

          Là, c’est le côté « programmes » qui apporte un élément moins habituel du côté « preuves » : l’exécution d’un programme va correspondre à un processus de simplification des preuves. Notamment, si on a une preuve de « si P alors Q » et une preuve de P, on peut prendre la preuve de P et remplacer chaque utilisation de l’hypothèse P dans la preuve de « si P alors Q », pour obtenir une preuve de Q qui peut contenir de multiples copies d’une même preuve de P. Cette opération de simplification du côté logique correspond naturellement au fait que la manière en théorie des types de prouver Q à partir d’une preuve f de P ⇒ Q et d’une preuve x de P est tout simplement d’écrire f(x), et que calculer f(x), informatiquement, se fait bien en remplaçant le paramètre de f à tous les endroits où il apparaît par la valeur x et à simplifier le résultat. On dit que la logique de Curry-Howard est constructive, parce qu’elle se prête à une interprétation algorithmique.

          Mais ceci peut sembler gênant. Par exemple, il est trivial en maths « normales » de prouver que tout programme termine ou ne termine pas. Mais par Curry-Howard, une preuve que tout programme termine ou ne termine pas doit être une fonction qui prend un programme, et qui renvoie soit une preuve qu’il termine, soit une preuve qu’il ne termine pas. Autrement dit, si cette proposition censément triviale était prouvable dans Curry-Howard, on aurait un algorithme pour résoudre le problème de l’arrêt, ce qui est bien connu pour être impossible.

          L’explication à cette différence tient au fait que la preuve « triviale » de cette proposition utilise une règle de déduction qui a un statut un peu à part en logique, dite règle du tiers exclu : pour n’importe quelle proposition P, sans aucune hypothèse, on peut déduire « P ou (non P) » (autrement dit, que P est vraie ou fausse). Or cette règle n’admet pas d’interprétation évidente par Curry-Howard : le tiers exclu devrait prendre une proposition P et renvoyer soit une preuve de P, soit une preuve que P est fausse (ce qui s’encode par « si P alors Faux »), autrement dit, le tiers exclu devrait être un oracle omniscient capable de vous dire si une proposition arbitraire est vraie ou fausse, et ceci est bien évidemment impossible.

          (Cela dit, si vous voulez vous faire mal à la tête, apprenez que c’est l’opérateur call/cc et pourquoi l’ajouter permet de prouver le tiers exclu. Exercice : call/cc existe dans de vrais langages, comme Scheme, pourtant on vient de voir que le tiers exclu semble nécessiter un oracle omniscient, comment expliquer cela ?)

          Pour être précis, la logique sans le tiers exclu est dite intuitionniste (le terme constructive étant un peu flou, alors que celui-ci est précis). On peut faire des maths en restant entièrement en logique intuitionniste, et même si ce n’est pas le cas de l’écrasante majorité des maths, il existe tout de même un certain nombre de chercheurs qui le font, et ceci peut avoir divers intérêts. Il y a notamment l’interprétation algorithmique des théorèmes, mais aussi, de manière beaucoup plus avancée, le fait que certaines structures mathématiques (topos, ∞-topos et consorts) peuvent s’interpréter comme des sortes d’univers mathématiques alternatifs régis par les règles de la logique intuitionniste (techniquement, des « modèles » de cette logique), et que parfois il est plus simple de prouver un théorème en le traduisant à l’intérieur de l’univers et en prouvant cette version traduite de manière intuitionniste.

          Pour pouvoir malgré tout raisonner en théorie des types de manière classique (par opposition à intuitionniste), il suffit de postuler le tiers exclu comme axiome. Du point de vue des programmes, cela revient à rajouter une constante qui est supposée avoir un certain type mais qui n’a pas de définition (cela peut donc rendre les programmes impossibles à exécuter, ce qui est normal pour le tiers exclu).

          Quelques exemples

          Si vous aviez décroché, c’est le moment de reprendre. Parlons un peu des assistants de preuve qui existent. Les plus connus sont :

          • Rocq, anciennement nommé Coq, développé à l’Inria depuis 1989, écrit en OCaml, sous licence LGPL 2.1. Il est assez lié à l’histoire de la théorie des types, car il a été créé par Thierry Coquand comme première implémentation du calcul des constructions, une théorie des types inventée par Coquand et devenue l’une des principales existantes. (Oui, Coq a été renommé en Rocq à cause de l’homophonie en anglais entre « Coq » et « cock ». J’apprécierais que les commentaires ne se transforment pas en flame war sur ce sujet très peu intéressant, merci.)

          • Lean, créé par Leonardo de Moura et développé depuis 2013 chez Microsoft Research, écrit en C++, placé sous licence Apache 2.0.

          • Agda, créé par Ulf Norrell en 1999, écrit en Haskell et sous licence BSD 1-clause.

          • D’autres que je connais moins, notamment Isabelle et F* (liste sur Wikipédia).

          Pour illustrer comment peuvent fonctionner les choses en pratique, voici un exemple très simple de code en Agda :

          open import Agda.Primitive using (Level)
          open import Data.Product using (_×_; _,_)
          
          swap : {ℓ₁ ℓ₂ : Level}  {P : Set ℓ₁} {Q : Set ℓ₂}  P × Q  Q × P
          swap (p , q) = (q , p)

          Vue comme un programme, cette fonction swap inverse simplement les deux éléments d’une paire. Vue comme une preuve, elle montre que pour toutes propositions P et Q, si P et Q, alors Q et P. Comme le veut Curry-Howard, les deux ne sont pas distingués. Les types P et Q sont eux-mêmes dans des types \mathsf{Set}_\ell avec un « niveau » \ell, ceci parce que, pour des raisons logiques, il serait incohérent que le type des types soit de son propre type, donc on a un premier type de types \mathsf{Set}_0, qui est lui-même de type \mathsf{Set}_1, et ainsi de suite avec une hiérarchie infinie de niveaux appelés univers. À un niveau plus superficiel, on remarquera qu’Agda a une syntaxe qui ressemble fort à Haskell (et utilise intensivement Unicode).

          Voilà la même chose en Rocq :

          Definition swap {P Q : Prop} : P /\ Q -> Q /\ P :=
            fun H => match H with conj p q => conj q p end.

          La syntaxe est assez différente et ressemble plutôt à OCaml (normal, vu que Rocq est écrit en OCaml et Agda en Haskell). Mais à un niveau plus profond, on voit apparaître un type Prop dont le nom évoque furieusement les propositions. Or j’avais promis que les propositions seraient confondues avec les types, donc pourquoi a-t-on un type spécial pour les propositions ?

          En réalité, pour diverses raisons, il peut être intéressant de briser l’analogie d’origine de Curry-Howard et de séparer les propositions et les autres types en deux mondes qui se comportent de façon extrêmement similaire mais restent néanmoins distincts. Notamment, un principe qu’on applique sans réfléchir en maths est que si deux propositions sont équivalentes, alors elles sont égales (extensionnalité propositionnelle), mais on ne veut clairement pas ceci pour tous les types (on peut donner des fonctions bool -> int et int -> bool, pourtant on ne veut certainement pas bool = int), donc séparer les propositions des autres permet d’ajouter l’extensionnalité propositionnelle comme axiome. (Mais il y a aussi des différences comme l'imprédicativité dans lesquelles je ne vais pas rentrer.)

          Et voici encore le même code, cette fois en Lean :

          def swap {P Q : Prop} : P  Q  Q  P :=
            fun p, q => q, p

          À part les différences de syntaxe, c’est très similaire à Rocq, parce que Lean a aussi une séparation entre les propositions et les autres types.

          Cependant, en Rocq et Lean, on peut aussi prouver la même proposition de façon différente :

          Lemma swap {P Q : Prop} : P /\ Q -> Q /\ P.
          Proof.
            intros H. destruct H as [p q]. split.
            - apply q.
            - apply p.
          Qed.

          et

          def swap {P Q : Prop} : P  Q  Q  P := by
            intro h
            have p := h.left
            have q := h.right
            exact q, p

          Avec Proof. ou by, on entre dans un mode où les preuves ne sont plus écrites à la main comme programmes, mais avec des tactiques, qui génèrent des programmes. Il existe toutes sortes de tactiques, pour appliquer des théorèmes existants, raisonner par récurrence, résoudre des inégalités, ou même effectuer de la recherche automatique de démonstration, ce qui s’avère extrêmement utile pour simplifier les preuves.

          Ce mode « tactiques » permet aussi d’écrire la preuve de façon incrémentale, en faisant un point d’étape après chaque tactique pour voir ce qui est prouvé et ce qui reste à prouver. Voici par exemple ce qu’affiche Rocq après le destruct et avant le split :

            P, Q : Prop
            p : P
            q : Q
            ============================
            Q /\ P
          

          Cette notation signifie que le contexte ambiant contient les variables P et Q de type Prop ainsi que p une preuve de P (donc un élément du type P) et q une preuve de Q. Le Q /\ P en dessous de la barre horizontale est le but à prouver, c’est-à-dire le type dont on cherche à construire un élément.

          Agda fonctionne assez différemment : il n’y a pas de tactiques, mais il existe néanmoins un système de méta-programmation qui sert à faire de la recherche de preuves (donc contrairement à Rocq et Lean, on n’écrit pas la majeure partie des preuves avec des tactiques, mais on peut se servir d’un équivalent quand c’est utile). Pour écrire les preuves incrémentalement, on met ? dans le programme quand on veut ouvrir une sous-preuve, et Agda va faire le type-checking de tout le reste et donner le contexte à l’endroit du ?.

          Quelques succès de la formalisation

          En 2025, la formalisation reste très fastidieuse, mais elle a déjà eu plusieurs grands succès :

          Actuellement, Lean a réussi à attirer une communauté de mathématiciens qui développent mathlib (1,1 million de lignes de code Lean au moment où j’écris), une bibliothèque de définitions et théorèmes mathématiques qui vise à être la plus unifiée possible.

          Les équivalents dans d’autres assistants de preuve se développent même s’ils ne sont pas (encore) aussi gros : citons mathcomp, unimath, agda-unimath entre autres.

          Un autre grand succès, dans le domaine de la vérification cette fois, est CompCert (malheureusement non-libre), qui est un compilateur C entièrement écrit en Rocq et vérifié par rapport à une spécification du C également encodée en Rocq.

          La recherche en théorie des types

          La théorie des types est un domaine de recherche à part entière, qui vise à étudier du point de vue logique les théories des types existantes, et à en développer de nouvelles pour des raisons à la fois théoriques et pratiques.

          Historiquement, une grande question de la théorie des types est celle de comprendre à quel type doivent correspondre les propositions d’égalité. Par exemple, on veut que deux propositions équivalentes soient égales, et que deux fonctions qui prennent les mêmes valeurs soient égales, et éventuellement pour diverses raisons que deux preuves de la même proposition soient égales, mais s’il est facile d’ajouter toutes ces choses comme axiomes, il est très compliqué de les rendre prouvables sans obtenir, comme avec le tiers exclu, des programmes qui ne peuvent pas s’exécuter à cause des axiomes qui sont déclarés sans définition.

          Vladimir Voedvodsky a fait une contribution majeure en proposant un nouvel axiome, appelé univalence, qui dit très sommairement que si deux types ont la même structure (on peut donner une « équivalence » entre les deux), alors ils sont en fait égaux (résumé simpliste à ne pas prendre au mot). Cet axiome est très pratique pour faire des maths parce qu’on travaille souvent avec des objets qui ont la même structure (on dit qu’ils sont isomorphes), et qui doivent donc avoir les mêmes propriétés, et cet axiome permet de les identifier (même s’il a aussi des conséquences qui peuvent paraître choquantes). Sa proposition a donné naissance à une branche appelée théorie homotopique des types, qui explore les maths avec univalence. Le prix à payer est que les types ne se comprennent plus comme de simples ensembles de valeurs (ou de preuves d’une proposition), mais comme des espaces géométriques munis de toute une structure complexe (techniquement, les égalités sont des chemins entre points, et il y a des égalités non-triviales, des égalités entre égalités, etc.), et la compréhension de ces espaces-types est fondée sur la théorie de l’homotopie. Il y a bien d’autres théories des types, avec univalence ou non : théorie cubique des types, théorie des types observationnelle, etc.

          Conclusion

          J’espère avoir communiqué un peu de mon enthousiasme pour le domaine (dans lequel je suis probablement parti pour démarrer une thèse). Si vous voulez apprendre un assistant de preuve, une ressource assez abordable est la série Software Foundations avec Rocq. Il existe également Theorem proving in Lean 4 et divers tutoriels Agda. Vous pouvez aussi essayer ces assistants de preuve directement dans votre navigateur : Rocq, Lean ou Agda. Et bien sûr les installer et jouer avec : Rocq, Lean, Agda.

          Commentaires : voir le flux Atom ouvrir dans le navigateur

          • ✇LinuxFr.org : les dépêches
          • Nouvelles de Haiku - Hiver 2024-25
            Haiku est un système d’exploitation pour les ordinateurs personnels. Il s’agit à l’origine d’une réécriture de BeOS. Le projet a démarré en 2001 et est actuellement en phase de beta-test pour une première version stable avec support à long terme. Depuis 2024, l’activité du projet Haiku s’accélère grâce entre autres à l’embauche d’un développeur à plein temps. Les dépêches sur Haiku sont donc désormais publiées tous les 3 mois au lieu de tous les ans pour leur conserver une longueur digeste. La

          Nouvelles de Haiku - Hiver 2024-25

          Haiku est un système d’exploitation pour les ordinateurs personnels. Il s’agit à l’origine d’une réécriture de BeOS. Le projet a démarré en 2001 et est actuellement en phase de beta-test pour une première version stable avec support à long terme. Depuis 2024, l’activité du projet Haiku s’accélère grâce entre autres à l’embauche d’un développeur à plein temps. Les dépêches sur Haiku sont donc désormais publiées tous les 3 mois au lieu de tous les ans pour leur conserver une longueur digeste.

          La complète liste des changements survenus pendant ces 3 mois comporte près de 300 commits. La dépêche ne rentre pas dans les détails de chaque changement et met en valeur les plus importants.

          Les grosses évolutions sont un nouveau port de Iceweasel (Firefox), et des grosses améliorations sur la gestion de la mémoire.

          Comme on est en début d’année, c’est aussi le moment du bilan financier.

          Sommaire

          Rapport financier 2024

          Recettes

          L’association Haiku inc (association de type 501(c)3 aux USA) publie chaque année un rapport financier. Le rôle de l’association est de récolter les dons et de les redistribuer pour aider au développement de Haiku. Elle ne prend pas part aux décisions techniques sur l’orientation du projet, et habituellement les dépenses sont faites en réponse aux demandes des développeurs du projet.

          L’objectif en début d’année 2024 était de récolter 20 000$ de dons. Cet objectif a été largement atteint, il a dû être mis à jour 2 fois en cours d’année et finalement ce sont plus de 31 000$ qui ont été reçus ! Cela en particulier grace à un assez gros don de 7 500$.

          Les dons sont récoltés via différentes plateformes: Github Sponsors (intéressant, car il n’y a aucun frais de traitement), PayPal, Liberapay, Benevity (une plateforme de « corporate matching »), ainsi que des paiements par chèque, virements bancaires, et en espèce lors de la tenue de stands dans des conférences de logiciels libres. La vente de T-Shirts et autre merchandising via la boutique Freewear reste anecdotique (une centaine de dollars cette année).

          Il faut ajouter à ces dons une contribution de 4 400$ de la part de Google en compensation du temps passé à l’encadrement des participants au Google Summer of Code.

          Il faut également ajouter des dons en crypto-monnaies, principalement en bitcoins. Le rapport financier présente les chiffres en détail en tenant une compatibilité séparée en dollars, en euros, et en crypto-monnaies, avant de convertir le total en dollars pour dresser un bilan complet.

          Une mauvaise nouvelle tout de même: le service de microdons Flattr a fermé ses portes. L’entreprise propose maintenant un service de bloqueur de publicités payant, qui reverse de l’argent aux sites dont les publicités sont bloquées.

          Le compte Flattr de Haiku avait été créé pour recevoir des dons sur la plateforme, mais n’avait jamais été configuré pour transférer ces dons vers le compte en banque de l’association. Malgré un certain temps passé à discuter avec le service client de Flattr et à leur fournir tous les documents demandés, il n’a pas été possible de trouver une solution pour récupérer cet argent. Ce sont donc 800$ qui ne reviendront finalement pas au projet Haiku.

          Au final, les recettes sont de 36 479 dollars, de loin la plus grosse somme reçue par le projet en un an.

          Dépenses

          La dépense principale est le paiement de Waddlesplash, le développeur actuellement employé par Haiku inc pour accélérer le développement du système (les autres développeurs participent uniquement sur leur temps libre, en fonction de leurs autres activités). Cela représente 25 500$, un coût assez faible par rapport au travail réalisé.

          Le deuxième poste de dépenses est l’infrastructure, c’est-à dire le paiement pour l’hébergement de serveurs, les noms de domaines, et quelques services « cloud » en particulier pour le stockage des dépôts de paquets.

          Le reste des dépenses consiste en frais divers (commission PayPal par exemple), remboursement de déplacements pour la participation à des conférences, ainsi que le renouvellement de la marque déposée sur le logo Haiku.

          Le total des dépenses s’élève à 31 467$. C’est moins que les recettes, et l’association continue donc de mettre de l’argent de côté. L’année 2022 a été la seule à être déficitaire, suite au démarrage du contrat de Waddlesplash. Ce contrat est à présent couvert par les donations reçues.

          Réserves

          L’association dispose de plus de 100 000$ répartis sur son compte en banque, un compte PayPal (qui permet de conserver des fonds en euros pour les paiements en euros et ainsi d’éviter des frais de change), et un compte Payoneer (utilisé pour recevoir les paiements de Google).

          Elle dispose également de près de 350 000$ en crypto-monnaies dont la valeur continue d’augmenter. Cependant, actuellement ces fonds ne sont pas accessibles directement, en raison de problèmes administratifs avec Coinbase, l’entreprise qui gère ce portefeuille de crypto-monnaies. Le compte n’est pas configuré correctement comme appartenant à une association à but non lucratif et cela pose des problèmes de déclaration de taxes lorsque on souhaite vendre des crypto-monnaies contre du vrai argent. Cette situation persiste depuis plusieurs années, mais l’association n’a pour l’instant pas besoin de récupérer cet argent, les réserves dans le compte en banque principal étant suffisantes.

          Applications

          Iceweasel

          Le navigateur web Iceweasel est disponible dans les dépôts de paquets (seulement pour la version 64 bits pour l’instant). Il s’agit d’un portage de Firefox utilisant la couche de compatibilité Wayland. Le nom Firefox ne peut pas être utilisé puisqu’il ne s’agit pas d’un produit officiel de Mozilla.

          En plus du travail de portage pour réussir à faire fonctionner le navigateur, cela a nécessité un gros travail d’amélioration au niveau de la gestion de la mémoire, une partie du système qui est fortement mise à contribution par ce navigateur. On en reparle plus loin dans la dépêche.

          Le navigateur est encore considéré comme expérimental: plusieurs fonctions sont manquantes et il peut y avoir des plantages. WebPositive (le navigateur natif basé sur WebKit) reste donc le navigateur installé par défaut avec Haiku, mais les deux sont complémentaires. Par exemple, Iceweasel permet d’afficher les vidéos Youtube avec des performances acceptables.

          Tracker

          Tracker est le gestionnaire de fichiers de Haiku. Il implémente une interface « spatiale », c’est-à-dire que chaque dossier s’ouvre dans une fenêtre séparée et enregistre sa position à l’écran.

          Le code du Tracker fait partie des composants qui ont pu être récupérés de BeOS. Cela signifie que certaines parties du code ont été développées il y a près de 30 ans, dans un contexte où l’élégance du code n’était pas la priorité (il fallait pour les développeurs de BeOS, d’une part livrer un système fonctionnel dans un temps raisonable, et d’autre part, fonctionner sur les machines relativement peu performantes de l’époque).

          Les évolutions sur le Tracker nécessitent donc souvent du nettoyage dans de nombreuses parties du code, et provoquent souvent des régressions sur d’autres fonctionnalités. Toutefois, les choses s’améliorent petit à petit.

          Ce trimestre, on a vu par exemple arriver la correction d’un problème avec l’utilisation de la touche « echap ». Cette touche peut servir à plusieurs choses:

          • Fermer une fenêtre de chargement ou d’enregistrement de fichier,
          • Annuler le renommage d’un fichier,
          • Annuler une recherche rapide « type ahead » qui consiste à taper quelques lettres et voir immédiatement la liste de fichiers du dossier courant se réduire à ceux qui contiennent cette chaîne de caractères.

          Ces différentes utilisations peuvent entrer en conflit. Plus précisément, lorsqu’on utilise le filtrage « type ahead », puis qu’on change d’avis et qu’on appuie sur la touche « echap », il ne faut pas que cela ferme la fenêtre en même temps.

          Un autre changement concerne plutôt la validation des données: Tracker interdit l’insertion de caractères de contrôle ASCII dans le nom de fichiers. Ce n’est pas strictement interdit (ni par Haiku, ni par ses systèmes de fichiers, ni par POSIX) en dehors de deux caractères spéciaux: le '/' et le 0 qui termine une chaîne de caractères. Mais, c’est très probablement une mauvaise idée d’avoir un retour à la ligne ou un autre caractère de contrôle enregistré dans un nom de fichier. Le Tracker interdit donc désormais de le faire et si vous êtes vraiment résolu à y parvenir, il faudra passer par le terminal.

          Enfin, une nouvelle fonctionnalité dans le Tracker est la mise à jour en temps réel des menus pop-up. Cela peut se produire pour plusieurs raisons, par exemple, l’appui sur la touche « command » modifie le comportement de certains menus. Avant ce changement, il fallait ré-ouvrir le menu (command + clic droit) pour voir ces options modifiées. Maintenant, on peut d’abord ouvrir le menu, puis maintenir la touche command enfoncée pour voir les options modifiées.

          Cela a nécessité une refonte complète de la gestion de ces menus (qui proposent de nombreuses autres choses comme la navigation « rayons X »). Au passage, certaines options qui étaient uniquement disponibles au travers de raccourcis claviers ou de la barre de menu des fenêtres du Tracker sont maintenant aussi affichées dans le menu pop-up.

          TeamMonitor

          TeamMonitor est le gestionnaire d’applications affiché quand on utilise la combinaison de touches Ctrl+Alt+Suppr. Il permet de stopper des programmes, de redémarrer la machine, et autres manipulations d’urgence si le système ne fonctionne pas comme il faut.

          Les processus lancés par une même application sont maintenant regroupés et peuvent être tous arrêtés d’un seul coup. Ce changement est nécessaire suite à l’apparition de IceWeasel, qui crée beaucoup de processus en tâche de fond pour une seule instance du navigateur web.

          HaikuDepot

          HaikuDepot est l’interface graphique pour le système de paquets de Haiku. Il se présente comme un magasin d’applications, permettant non seulement d’installer et de désinstaller des logiciels, mais aussi de les évaluer avec une note et un commentaire.

          • Ajout d’un marqueur sur les icônes des paquets qui sont déjà installés, et remplacement du marqueur utilisé pour indiquer les applications « natives » (utilisant le toolkit graphique de Haiku, par opposition à Qt et GTK par exemple).
          • Affichage plus rapide de l’état « en attente d’installation » lorsqu’on demande l’installation d’un paquet.
          • L’interface pour noter un paquet est masquée si l’attribution de notes n’est pas possible.

          Préférences

          Diverses améliorations dans les fenêtres de préférences:

          • Correction d’un crash dans les préférences d’affichage (korli).
          • Les préférences de fond d’écran n’acceptent plus le glisser-déposer d’une couleur sur un contrôle de choix de couleur désactivé. La modification de la position X et Y de l’image de fond se met à jour en temps réel quand on édite la valeur des contrôles correspondants.
          • Ajout de réglages supplémentaires (vitesse, accélération, défilement) dans les préférences des pavés tactiles. Ces options étaient déjà implémentées dans l’input_server, mais configurable uniquement pour les souris.
          • Suppression de code mort et amélioration de la gestion des polices de caractères dans les préférences d’apparence.

          Plusieurs améliorations sur les préférences de sons de notifications:

          • La fenêtre de sélection de fichiers retient le dernier dossier utilisé,
          • Elle permet également d’écouter un son avant de le sélectionner,
          • Les menus de sélection rapide de sons affichent uniquement les fichiers et pas les dossiers,
          • Certains sons ont été renommés.

          La plupart des sons ne sont cependant toujours pas utilisés par le système.

          Expander

          Expander est un outil permettant d’extraire plusieurs types de fichiers archivés.

          Peu de changement sur cet outil qui est assez simple et fonctionnel. La seule amélioration ce mois-ci concerne un changement des proportions de la fenêtre pour éviter un espace vide disgracieux.

          Cortex

          Cortex est une application permettant de visualiser et de manipuler les nœuds de traitement de données du Media Kit.

          Le composant « logging consumer » qui reçoit des données d’un autre noeud et les enregistre dans un fichier de log pour analyse a été amélioré pour enregistrer un peu plus d’informations.

          Icon-O-Matic

          L’éditeur d’icônes vectoriels Icon-O-Matic évolue peu, après un projet Google Summer of Code qui a ajouté la plupart des fonctionnalités manquantes. Ce trimestre, un seul changement: l’ajout d’une entrée menu pour supprimer un « transformeur ».

          PowerStatus

          L’application PowerStatus affiche l’état de la batterie. Cela peut se présenter comme une icône dans la barre des tâches. L’icône est de taille réduite, et les différents états n’étaient pas forcément bien visibles. Ce problème a été corrigé avec des nouveaux marqueurs pour l’état de la batterie (en charge ou inactive).

          StyledEdit

          StyledEdit est un éditeur de texte simple, permettant tout de même de formater le texte (un peu comme WordPad pour Windows).

          L’application reçoit une nouvelle option pour écrire du texte barré. Le code nécessaire a également été ajouté dans app_server, puisque cette possibilité était prévue, mais non implémentée.

          WebPositive

          Le navigateur WebPositive reçoit peu d’évolutions en ce moment, en dehors de la maintenance du moteur WebKit. On peut tout de même mentionner l’ajout d’un menu contextuel sur les marque-pages, permettant de les renommer et de les supprimer. Ce développement est issu d’un vieux patch réalisé par un candidat au Google Summer of Code, qui ne fonctionnait pas et n’avait jamais été finalisé.

          Mode sombre et configuration des couleurs

          Depuis la version Beta 5, Haiku dispose d’un nouveau système de configuration des couleurs, permettant d’obtenir facilement un affichage en « mode sombre ». Cependant, cet affichage est loin d’être parfait, et de petits ajustements sont à faire petit à petit dans toutes les applications qui n’avaient pas été pensées pour cela. En particulier, le changement de couleurs se fait en direct lorsqu’on change les réglages. On trouve ces trois derniers mois des changements dans DeskBar, Tracker, HaikuDepot, l’horloge, ainsi que la classe BTextView.

          Outils en ligne de commande

          pkgman peut rechercher les paquets installés et qui n’ont aucun autre paquet dépendant d’eux. Cela permet de trouver des paquets inutiles qui peuvent être désinstallés (il manque encore la possibilité de marquer un paquet comme étant « installé manuellement » avant de pouvoir automatiser le nettoyage).

          La commande route accepte la syntaxe utilisée par openvpn pour la configuration d’une route par défaut, ce qui facilite l’utilisation de VPN avec Haiku.

          Correction d’un problème dans le compilateur de ressources: la commande rc -d ne savait pas décompiler la structure app_version des applications Haiku, uniquement le format plus ancien utilisé par BeOS.

          La commande screenmode permet maintenant de récupérer la valeur actuelle du réglage du rétro-éclairage (en plus de permettre de changer cette valeur).

          Kits

          La bibliothèque de fonctions de Haiku est découpée en « kits » qui regroupent un ensemble de classes et de fonctionnalités liées.

          Application kit

          L’Application Kit permet, comme son nom l’indique, de lancer des applications. Il offre également toutes les fonctionnalités de boucles d’évènements, et d’envoi de messages entre applications et entre composants d’une application.

          Correction d’un problème de suppression d’un port dans la classe BApplication.

          Debug kit

          Le Debug Kit fournit les services nécessaires au Debugger pour débugger une application. Cela consiste d’une part en un accès privilégie à l’espace mémoire d’une application, et d’autre part en outils pour analyser les fichiers ELF des exécutables et bibliothèques.

          Le Debug Kit reçoit ce trimestre plusieurs évolutions et corrections permettant le décodage des stack traces dans les programmes compilés avec clang et lld. Par exemple, les fichiers ELF générés par ces outils sont découpés en plusieurs segments, alors que ce n’est pas le cas pour gcc.

          Device Kit

          Le Device Kit regroupe tout ce qui concerne l’accès direct au matériel et aux entrées-sorties depuis l’espace utilisateur: ports série, accès direct aux périphériques USB, accès aux joysticks et manettes de jeu.

          Les ports série RS232 peuvent être configurés avec des valeurs en baud personnalisées (pour l’instant uniquement pour les adaptateurs série USB).

          Interface kit

          L’Interface Kit regroupe tout ce qui concerne l’affichage de fenêtres et de vues à l’écran et les interactions avec ces fenêtres.

          • Ajout de constructeur « move » et d’opérateur d’assignation pour BRegion et BShape pour améliorer les performances en évitant les copie d’objet immédiatement suivies de suppression.
          • Ajout d’un constructeur pour BRect avec deux arguments (largeur et hauteur) pour les rectangles alignés en haut à gauche ou dont la position n’a pas d’importance.
          • Remise en place d’un cas particulier dans BBitmap::SetBits pour la gestion du canal alpha afin d’avoir un comportement plus proche de celui de BeOS.
          • BColorControl réagit correctement et déclenche les évènements nécessaires lorsqu’on modifie sa couleur par glisser-déposer.

          Media Kit

          Correction d’une assertion vérifiant la mauvaise condition dans BTimeSource.

          Réécriture de la classe BTimedEventQueue pour améliorer ses performances en évitant d’allouer de la mémoire dynamique.

          Amélioration de l’affichage des « media controls » (sliders de contrôle de volume par exemple) en mode sombre.

          libshared

          La « libshared » contient plusieurs classes expérimentales, en cours de développement, mais déjà utilisées par plusieurs applications. Il s’agit d’une bibliothèque statique, ce qui permet de changer facilement son contenu sans casser l’ABI des applications existantes.

          Ajout de la classe ColorPreview qui existait en plusieurs exemplaires dans le code de Haiku (préférences d’apparence et Terminal). Cette classe permet d’afficher une couleur dans un petit rectangle. Elle est utilisée à plusieurs endroits dans des contrôles de choix de couleur plus complexes, tels que des listes ou des menus.

          Servers

          Les servers sont des processus systèmes implémentant différentes fonctionnalités de Haiku. Le concept est similaire à celui des daemons dans UNIX, ou des services dans Windows NT et systemd.

          app_server

          L’app_server s’occupe de l’affichage des applications à l’écran.

          Suppression de code inutilisé depuis longtemps permettant l’accélération matérielle d’opérations de dessin en 2D (blit, tracé de lignes, remplissage de rectangles…).

          Sur les cartes graphiques PCI, ces opérations étaient souvent réalisées plus rapidement par le CPU qui tourne à une fréquence bien plus rapide que la carte. Sur les cartes AGP, l’accès en lecture à la mémoire vidéo par le CPU est très lent, et il était donc plus intéressant de faire ces opérations en RAM centrale avant d’envoyer un buffer prêt à afficher à la carte graphique. Enfin sur les cartes PCI express modernes, ces fonctions d’accélération ont disparu ou en tout cas n’ont pas du tout une interface compatible avec les besoins de Haiku. Il est donc temps de jeter ce code.

          Modification de la façon dont les applications récupèrent la palette de couleurs en mode graphique 256 couleurs: elle utilise maintenant une mémoire partagée, et il n’est plus nécessaire que chaque application demandent au serveur graphique d’en obtenir une copie.

          input_server

          L’input_server se charge des entrées souris et clavier. Cela comprend les méthodes d’entrée de texte (par exemple pour le Japonais) ainsi que des filtres permettant de manipuler et d’intercepter ces évènements d’entrée avant leur distribution dans les applications.

          Améliorations du filtre PadBlocker pour bloquer le touchpad quand le clavier est en cours d’utilisation sur les PC portables: gestion des répétitions de touches, blocage uniquement du touchpad et pas des autres périphériques de pointage.

          net_server

          Le net_server se charge de la configuration des interfaces réseau.

          Arrêt du client d’autoconfiguration (DHCP par exemple) lors de la perte du lien sur un port Ethernet, pour ne pas essayer d’envoyer des paquets alors que le câble est débranché.

          notification_server

          notification_server se charge de l’affichage de panneaux de notification pour divers évènements tels que la connexion et déconnexion d’interfaces réseau, un niveau dangereusement bas de la batterie, la fin d’un téléchargement…

          La fenêtre de notification a été retravaillée pour mieux s’adapter à la taille de police d’affichage choisie par l’utilisateur.

          mail_daemon

          mail_daemon permet d’envoyer et de recevoir des e-mails. Les messages sont stockés sous forme de fichiers avec des attributs étendus pour les métadonnées (sujet, expéditeur…). Plusieurs applications clientes permettent de rédiger ou de lire ces fichiers. Ainsi chaque application n’a pas besoin de réimplémenter les protocoles IMAP ou SMTP.

          Amélioration de la fenêtre de logs pour la compatibilité avec le mode sombre.

          runtime_loader

          Le runtime_loader est l’outil qui permet de démarrer un exécutable. Il se charge de trouver toutes les bibliothèques partagées nécessaires et de les placer dans la mémoire.

          Ajout du flag PF_EXECUTE qui rend exécutable uniquement les sections ELF qui le nécessitent (auparavant, toutes les sections qui n’étaient pas accessibles en écriture étaient exécutables). Cela est utilisé en particulier par clang, qui sépare une zone en lecture seule (pour les constantes) et une autre en lecture et exécution (pour le code). Avec gcc, les deux sont habituellement regroupées dans la même section.

          Drivers

          Périphériques de stockage

          Correction de bugs dans la couche SCSI (utilisée également pour d’autres périphériques de stockage qui encapsulent des commandes SCSI). Des drapeaux d’état n’étaient pas remis à 0 au bon moment, ce qui causait des kernel panic avec le message « no such range! ».

          Cela a été l’occasion de faire du ménage : suppression de champs inutilisés dans des structures de données, et suppression du module d’allocation mémoire locked_pool qui n’était utilisé que par la pile SCSI. À la place, utilisation des fonctions d’allocation mémoire standard du noyau, qui sont amplement suffisantes pour répondre aux besoins de ce module (waddlesplash).

          Cartes son

          Correction d’erreurs dans le code de gestion mémoire des pilotes es1370 et auvia. Ces drivers utilisaient deux copies d’un code d’allocation identique, mais avaient divergé l’un de l’autre. Ils ont été réunifiés mais cela a provoqué quelques régressions, avec des difficultés pour trouver des machines permettant de tester chacune des cartes son concernées. Haiku peut heureusement compter sur des utilisateurs « avancés » qui testent régulièrement les nightly builds pour détecter ce type de régression (korli).

          Réseau

          Correction d’une fuite mémoire lors de l’utilisation de sockets « raw » permettant d’envoyer et de recevoir directement des paquets ethernet (en contournant la couche IP).

          Pilotes FreeBSD

          Une grande partie des pilotes de carte réseau de Haiku sont en fait ceux de FreeBSD ou d’OpenBSD. Une couche de compatibilité permet de réutiliser ces pilotes avec très peu de changement dans leur code source. Ainsi, les évolutions et corrections peuvent être partagées avec l’un ou l’autre de ces systèmes. La collaboration avec les *BSD pour les pilotes réseau se passe de mieux en mieux : suite au développement d’une couche de compatibilité permettant d’utiliser les pilotes OpenBSD dans Haiku, les développeurs de FreeBSD étudient la possibilité de réutiliser également ces pilotes. De plus, les développeurs de Haiku et d’OpenBSD sont en contact pour coordonner les mises à jour et les tests.

          Génération de statistiques plus fiables sur les paquets réseaux dans la couche de compatibilité FreeBSD et remontée des statistiques générées par les pilotes associés.

          Synchronisation du pilote realtekwifi avec la version de FreeBSD et reconnaissance d’un identifiant de périphérique USB supplémentaire dans ce pilote.

          Amélioration de la couche de compatibilité pour se comporter plus précisément comme FreeBSD, et suppression de patchs correspondants dans les pilotes qui sont devenus superflus.

          Amélioration des performances de la couche de compatibilité: retrait de comparaisons de chaînes de caractères et d’allocations inutiles.

          Pilotes spécifiques à Haiku

          Amélioration du comportement du pilote USB RNDIS (partage de connexion sur USB de certains téléphones Android) lorsque le câble USB est déconnecté. Le pilote incluait du code pour tenter de restaurer la connexion existante si le même appareil est reconnecté, mais les périphériques RNDIS utilisent des adresses MAC aléatoires qui changent à chaque connexion, donc cela ne pouvait pas fonctionner. De plus, certains transferts USB n’étaient pas correctement annulés pour laisser la pile USB dans un état propre après la déconnexion du périphérique.

          USB

          Ajout d’une annulation de transferts de données en attente dans le pilote pour les périphériques de stockage USB, ce qui corrige un kernel panic lors de l’utilisation de lecteurs de disquettes USB. Arrêt immédiat des opérations (au lieu de ré-essayer pendant quelques secondes) si le périphérique indique « no media present » (CD ou disquette éjectée de son lecteur par exemple).

          Ajout d’une vérification de pointeur NULL et de libération de mémoire manquantes dans la pile USB, ce qui corrige des fuites de mémoires (qui étaient là depuis longtemps) et une assertion qui se déclenchait (introduite plus récemment).

          Le pilote de webcam UVC est mis à jour pour utiliser des constantes (identifiants de types de descripteurs…) partagées avec le reste du système au lieu de toutes les redéfinir une deuxième fois. L’affichage des descripteurs dans listusb est également complété pour décoder toutes les informations disponibles. Le pilote n’est toujours pas complètement fonctionnel: l’établissement des transferts au niveau USB fonctionne, mais pour l’instant le pilote ne parvient pas à décoder les données vidéo reçues correctement.

          Le pilote HID sait reconnaître les « feature reports », qui permettent de configurer un périphérique. Par exemple, cela peut permettre de configurer un touchpad en mode multi-point (dans lequel le système doit effectuer lui-même le suivi de chaque doigt sur la surface tactile pour convertir cela en mouvements de pointeur de souris) ou en mode émulation de souris (où on ne peut utiliser qu’un doigt à la fois, mais avec un pilote beaucoup plus simple).

          Le pilote pour les tablettes Wacom reconnaît la tablette CTH-470.

          PS/2

          Les ports PS/2 ont disparu de la plupart des machines ces dernières années, mais le protocole reste utilisé pour le clavier des ordinateurs portables, ainsi que pour certains touchpads. Malheureusement, le protocole est seulement émulé au niveau de l’« embedded controller » (le microprocesseur qui se charge de l’interfaçage de divers composants annexes). Le résultat est que l’implémentation du protocole et des registres d’interface peut s’éloigner considérablement des documents officiels.

          Amélioration de la détection des contrôleurs PS/2 supportant le protocole « active multiplexing » permettant de connecter à la fois une souris et un touchpad. La procédure de détection officielle peut générer des faux positifs: certains contrôleurs répondent bien à cette commande, mais n’implémentent en fait pas du tout le protocole. Cela provoquait un long délai au démarrage alors que le pilote tente d’énumérer des périphériques de pointage qui n’existent pas. Une vérification supplémentaire après l’activation du mode multiplexé permet de détecter ce cas.

          virtio_pci

          virtio est un standard matériel pour les machines virtuelles. Plutôt que d’émuler un vrai matériel (carte réseau, carte graphique…), une machine virtuelle peut émuler un matériel qui n’a jamais été fabriqué, mais dont la programmation est beaucoup plus simple. Cela permet également des opérations inimaginables sur du matériel réel, comme la possibilité de changer la taille de la RAM en cours d’exécution pour mieux partager la mémoire de l’hôte entre différentes machines virtuelles.

          Le pilote virtio_pci est à la racine du système virtio. Il détecte la « carte PCI » virtio et implémente les primitives de base d’envoi et de réception de messages entre l’hôte et la machine virtualisée (du côté virtualisé, pour le côté hôte, c’est le virtualisateur, par exemple QEMU, qui s’en charge).

          Correction de plusieurs problèmes avec les numéros de files virtio qui rendaient les pilotes instables.

          ACPI

          ACPI est un cadriciel pour la gestion de l’énergie et l’accès au matériel. Le fabricant du matériel fournit (dans la ROM du BIOS) un ensemble de « tables » contenant une description du matériel disponible, ainsi que des méthodes compilées en bytecode pour piloter ce matériel. Le système d’exploitation doit fournir un interpréteur pour ce bytecode, puis réaliser les entrées-sorties vers le matériel demandé lors de l’exécution.

          Haiku utilise actuellement ACPICA, une bibliothèque ACPI développée principalement par Intel.

          Correction d’un problème d’accès à de la mémoire non cachée. Une modification faite pour les machines ARM a déclenché un problème sur les machines x86.

          Sondes de température

          Ajout d’un nouveau pilote amd_thermal, ajout de ce dernier ainsi que des pilotes pch_thermal et acpi_thermal dans l’image disque par défaut. Ces pilotes devraient permettre de récupérer la température du processeur sur la plupart des machines. Il reste maintenant à intégrer cela dans les outils en espace utilisateur pour faire un bon usage de ces informations.

          Pilotes graphiques

          Ajout de deux nouvelles générations de cartes graphiques dans le pilote intel_extreme.

          Le pilote VESA est capable de patcher le BIOS de certaines cartes graphiques à la volée pour y injecter des modes graphiques supplémentaires (la spécification VESA permettant à l’OS uniquement de choisir un mode parmi une liste fournie par la carte graphique, liste souvent assez peu fournie). Ce mode est désormais activé par défaut sur les cartes graphiques où il a pu être testé avec succès.

          Systèmes de fichiers

          FAT

          FAT est un système de fichier développé par Microsoft et qui remonte aux premiers jours de MS-DOS. Il est encore utilisé sur certaines clés USB et cartes SD, bien que exFAT tend à le remplacer petit à petit. Il est également utilisé pour les partitions systèmes EFI.

          Le pilote de Haiku a été récemment réécrit à partir de celui de FreeBSD. L’amélioration de ce nouveau pilote se poursuit, avec ce mois-ci :

          • Les noms de volumes FAT sont convertis en minuscules comme le faisait l’ancien pilote FAT,
          • Le cache de blocs implémente maintenant un mécanisme de prefetch pour récupérer plusieurs blocs disque d’un coup, et le pilote FAT utilise cette nouvelle possibilité pour améliorer en particulier le temps de montage,
          • Correction de problèmes dans le cache de fichiers si deux applications accèdent au même fichier mais avec des noms différents par la casse (le système de fichier ignorant ces différences).

          BFS

          BFS est le système de fichier principal de BeOS et de Haiku. Il se distingue des autres systèmes de fichiers par une gestion poussée des attributs étendus, avec en particulier la possibilité de les indexer et d’effectuer des requêtes pour trouver les fichiers correspondants à certains critères.

          Clarification de la description des options disponibles lors de l’initialisation d’un volume BFS.

          Correction des fonctions d’entrées/sorties asynchrones pour référencer correctement les inodes, ce qui corrige un très ancien rapport de bug. Des corrections similaires ont été faites également dans les pilotes FAT et EXFAT.

          Correction des requêtes sur l’attribut « dernière modification », et amélioration de la gestion du type « time » pour éviter les conversions inutiles (ce type d’attribut est historiquement stocké en 32 bits mais migré en 64 bits lorsque c’est possible pour éviter le bug de l’an 2038, aussi le code doit être capable de traiter ces 2 formats de stockage).

          packagefs

          Le système de fichier packagefs est au centre de la gestion des paquets logiciels dans Haiku. Les paquets ne sont pas extraits sur le disque, mais montés dans un système de fichier spécifique (qui implémente une version tout-en-un de ce qui pourrait être réalisé sous Linux avec squashfs et overlayfs).

          Ce système de fichier se trouve donc sur le chemin critique en termes de performances, ce qui fait que même de petites optimisations peuvent déboucher sur de gros gains de performance.

          Optimisation de la gestion de la mémoire: utilisation d’un allocateur dédié pour allouer et désallouer très rapidement de la mémoire de travail avec une durée de vie courte.

          Ajout d’une vérification manquante sur la présence du dossier parent, qui pouvait déclencher un kernel panic.

          NFS4

          Le pilote NFS4 permet de monter des partages réseau NFS. Cependant, le pilote ne fonctionne pas toujours, et certains utilisateurs doivent se rabattre sur le pilote NFS v2 (ancienne version du protocole de moins en moins utilisée), ou encore sur des systèmes de fichiers FUSE comme SMB ou sshfs.

          Le pilote NFS4 peut maintenant être compilé avec userlandfs (équivalent de FUSE pour Haiku) pour s’exécuter en espace utilisateur. Cela facilitera le déboguage.

          ramfs et ram_disk

          ram_disk est un périphérique de stockage qui stocke les données en RAM, il a une taille fixe et doit être formaté avec un système de fichiers avant de pouvoir être utilisé.
          ramfs est un système de fichier stockant les données directement en RAM sans passer par un périphérique de stockage de type bloc. Sa taille est dynamique en fonction des fichiers qui sont stockés dedans.

          Ces deux pilotes ont reçu divers nettoyages et corrections, suite à des problèmes mis en évidence par des assertions ajoutées précédemment dans le code.

          Dans le ramfs, nettoyage de code dupliqué, réduction de la contention sur les verrous, amélioration de la fonction readdir pour retourner plusieurs entrées d’un coup au lieu de les égréner une par une.

          Ajout de la gestion des fichiers « spéciaux » (FIFOs nommés, sockets UNIX) dans ramfs.

          Autres

          Refonte de l’algorithme de « scoring » des requêtes sur les systèmes de fichiers. Cet algorithme permet d’estimer quels sont les termes de la requête les moins coûteux à évaluer, afin de réduire rapidement le nombre de fichiers répondant aux critères, et d’effectuer les opérations complexes seulement sur un petit nombre de fichiers restants. Les requêtes s’exécutent ainsi encore plus rapidement (waddlesplash).

          Réécriture du code pour identifier les partitions dans mount_server. Ce code permet de re-monter les mêmes partitions après un redémarrage de la machine, mais l’ancien algorithme pouvait trouver de faux positifs et monter des partitions supplémentaires (OscarL et waddlesplash).

          Correction d’une option de debug pour intercepter les accès aux adresses non initialisées (0xcccccccc) ou déjà libérées (0xdeadbeef). Cela permet de détecter certains accès à des pointeurs invalides. Cette option ne fonctionnait correctement que sur les systèmes 32 bit, maintenant, l’adresse correspondante pour les machines 64 bit est également protégée.

          libroot

          La libroot est la librairie C de base de Haiku. Elle regroupe les fonctions parfois implémentées dans les libc, libm, libpthread, librt et libdl pour d’autres systèmes. Haiku choisit une approche tout-en-un, car il est excessivement rare qu’une application n’ait pas besoin de toutes ces bibliothèques.

          Du fait de la grande diversité des services rendus par cette bibliothèque, il est difficile de présenter les changements de façon cohérente et organisée.

          Correction de quelques cas particuliers dans le traitement des tableaux de descripteurs de fichiers pour select() et déplacement d’une partie des définitions de sys/select.h vers des en-têtes privés non exposés aux applications (waddlesplash).

          Ajout d’une fonction manquante dans les « stubs » de la libroot, qui sont utilisés lors de la compilation de Haiku en mode « bootstrap » (sans aucune dépendance précompilée externe). Les stubs sont normalement générés à l’aide d’un script, mais celui-ci n’avait pas pris en compte une fonction nécessaire seulement sur les architectures x86.

          Poursuite du travail d’unification des fonctions de manipulation des temps d’attentes pour toutes les fonctions de la libroot qui peuvent déclencher un timeout. Correction d’un cas où la fonction pthread_testcancel retournait NULL au lieu de la valeur attendue PTHREAD_CANCELED.

          Optimisation de la fonction strcmp, remplacement d’autres fonctions avec de meilleures implémentations provenant de la bibliothèque C musl.

          Compatibilité POSIX-2024

          La spécification POSIX Issue 8 a été publiée et comporte de nombreux changements. Après la version 7, la façon de travailler est devenue plus ouverte, avec un outil de suivi de bugs permettant de proposer des améliorations. Cela conduit à la standardisation de nombreuses extensions qui sont communes entre les systèmes GNU et BSD, rendant plus facile d’écrire du code portable entre tous les systèmes compatibles POSIX.

          • Ajout de fonctions qui ouvrent des descripteurs de fichiers avec le drapeau O_CLOEXEC activé par défaut (dup2, pipe3)
          • Ajout de reallocarray (un mélange de calloc et realloc)
          • Ajout de memmem (recherche d’une suite d’octets dans une zone de mémoire)
          • Ajout de mkostemp
          • Ajout de posix_devctl et modifications de l’implémentation de ioctl
          • Ajout de pthread_getcpuclockid pour mesurer le temps CPU consommé par un thread
          • Ajout de la constante d’erreur ESOCKTNOSUPPORT bien qu’elle ne soit jamais utilisée (cela facilite le portage d’applications qui attendent l’existence de ce code d’erreur)
          • Correction d’une boucle infinie dans pipe2
          • Suppression des fonctions *randr48_r des en-têtes publics. Il s’agit d’une extension disponible uniquement dans la glibc, et qui ne devrait donc pas être disponible dans la libroot. Cependant, l’implémentation est conservée pour assurer la compatibilité d’ABI avec les applications existantes.

          ioctl et posix_devctl

          La fonction ioctl existe depuis le début de UNIX et permet de réaliser des opérations spéciales sur les descripteurs de fichiers (tout ce qui n’est pas une simple lecture ou écriture). En particulier, elle est beaucoup utilisée pour les pilotes de périphériques qui exposent une interface sous forme de fichiers dans /dev.

          L’existence de cette fonction était demandée dans la spécification POSIX, mais son fonctionnement n’était pas documenté à l’exception de quelques cas particuliers. La documentation spécifie une fonction avec un nombre d’arguments variable : un numéro de descripteur de fichier, un identifiant de l’opération à effectuer, puis des paramètres qui dépendent de l’opération. On trouve des opérations avec aucun, un, ou deux paramètres.

          Dans UNIX et la plupart de ses dérivés, la liste des opérations possibles est définie à l’avance, et le format des numéros identifiants permet de déterminer de façon prédictible quel est le nombre de paramètres attendus. Ce n’est pas le cas dans Haiku : les pilotes de périphériques ont le choix d’assigner n’importe quelle valeur à n’importe quelle opération, et la même valeur numérique peut donc avoir une signification différente selon le type de fichier.

          L’opération ioctl est donc en réalité implémentée avec toujours 4 arguments pour Haiku : en plus des deux déjà mentionnés, il faut ajouter un pointeur vers une zone de mémoire, et un entier indiquant la taille de cette zone. Des acrobaties à base de macros permettent de remplir ces deux paramètres avec des valeurs par défaut lorsqu’ils ne sont pas nécessaires (au moins pour les programmes écrits en C ; en C++, ces deux paramètres sont simplement déclarés avec une valeur par défaut).

          Heureusement, ces problèmes avec ioctl vont être résolus, puisque POSIX a introduit une nouvelle fonction en remplacement : posix_devctl. Celle-ci fonctionne comme l’implémentation de ioctl dans Haiku, mais les arguments doivent toujours être spécifiés explicitement. Cela va donc permettre de disposer d’une interface réellement portable pour ces opérations.

          Kernel

          Correction de la taille du tampon mémoire par défaut de la classe KPath qui permet au noyau de manipuler des chemins dans le système de fichiers (waddlesplash).

          VFS

          Le VFS (virtual filesystem) est l’interface entre les appels systèmes d’accès aux fichiers (open, read, write…) et les systèmes de fichiers proprement dit. En plus de ce travail d’interfaçage (par exemple : convertir un chemin de fichier absolu en chemin relatif à un point de montage), cette couche regroupe un ensemble de fonctionnalités qui n’ont pas besoin d’être réimplémentées par chaque système de fichier: vérification des permissions, mémoire cache pour limiter les accès au disque.

          Si les systèmes de fichiers identifient chaque objet par un inode (en général lié à la position de l’objet sur le disque ou dans la partition de stockage), le VFS travaille lui avec des vnode qui existent uniquement en RAM et sont alloués dynamiquement pour les fichiers en cours d’utilisation.

          D’autre part, les systèmes de fichiers peuvent se reposer sur un cache de blocs. Ce dernier se trouve plutôt à l’interface entre un système de fichier et le support de stockage correspondant, puisqu’il fonctionne au niveau des blocs de données stockées sur disque. Mais son intégration avec le VFS est nécessaire pour savoir quels sont les fichiers en cours d’utilisation et les opérations prévisibles sur chacun (par exemple, il est utile de pré-charger la suite d’un fichier lorsque un programme demande à en lire le début, car il est probable que ces informations vont bientôt être nécessaires).

          Le VFS est donc un élément central en particulier pour obtenir de bonnes performances sur les accès aux fichiers, en minimisant les accès aux vrais systèmes de fichiers qui doivent maintenir beaucoup d’informations à jour sur les disques. Tout ce qui peut être traité en utilisant uniquement la RAM grâce à la mise en cache est beaucoup plus rapide.

          Investigation et amélioration des performances de la commande git status qui prenait beaucoup plus de temps à s’exécuter que sur d’autres systèmes (waddlesplash):

          • Meilleure gestion des vnodes inutilisés à l’aide d’une liste chaînée 'inline' protégée par un spinlock, à la place d’un mutex peu performant dans ce code très fréquemment appelé.
          • Modification de la structure io_context pour utiliser un verrou en lecture-écriture (permettant plusieurs accès concurrents en lecture, mais un seul en modification).
          • Ajout d’un chemin rapide dans le cas le plus simple de la recherche de vnode.

          Avec ces changements, les performances sont améliorées au moins lorsque les données nécessaires sont déjà disponibles dans le cache disque.

          Nettoyage et corrections dans les fonctions d’entrées-sorties vectorisées et asynchrones do_iterative_fd_io et do_fd_io utilisées par les systèmes de fichiers: meilleure gestion des références et prise en compte de certains cas particuliers. Cela permet de simplifier un peu le code de pré-remplissage du cache de blocs (waddlesplash).

          La prise en compte des drapeaux O_RDONLY|O_TRUNC lors de l’ouverture d’un fichier est maintenant faite directement dans le VFS, il n’est plus nécessaire de transmettre la requête au système de fichier. Cette combinaison de drapeaux est un comportement indéfini dans POSIX, et supprime le contenu du fichier dans Linux. Dans Haiku, elle remonte une erreur.

          Correction du comportement de l’ouverture d’un symlink invalide (ne pointant pas sur un fichier) avec le flag O_CREAT.

          Le parser de requêtes pouvait essayer de lire des données invalides (la taille de clé d’un index inexistant) dans certains cas particuliers.

          Nettoyage de logs dans tous les systèmes de fichiers qui affichaient un message lors de chaque tentative d’identification. On avait donc un message de chaque système de fichier pour chaque partition. Maintenant, le cas le plus courant (le système de fichier ne reconnaît pas du tout la partition) ne déclenche plus de logs.

          Correction d’une erreur dans userlandfs sur la fonction file_cache_read pour les tentatives d’accès après la fin d’un fichier (cas particulier nécessaire pour implémenter correctement mmap).

          Correction d’une mauvaise gestion du errno dans le cache de blocs, qui pouvait aboutir à un kernel panic.

          Diverses améliorations, nettoyages et corrections de fuites mémoire: dans la gestion des fichiers montés comme image disques, dans les entrées-sorties asynchrones, dans l’enregistreur d’évènements scheduling recorder.

          Console et affichage

          Unification du code d’affichage du splash screen (par le bootloader) et des icônes de la séquence de démarrage (par le kernel) pour éviter qu’ils prennent des décisions différentes sur le positionnement (par exemple si l’un est compilé pour afficher le logo de Haiku, et l’autre en version « dégriffée » sans ce logo qui est une marque déposée) (waddlesplash).

          Initialisation de la console framebuffer beaucoup plus tôt dans le démarrage du noyau, ce qui permet d’afficher un message à l’écran en cas de kernel panic y compris dans les premières étapes du démarrage (par exemple, l’initialisation de la mémoire virtuelle). Auparavant, ces informations étaient disponibles uniquement dans le syslog (inaccessible si le système ne démarre pas) ou via un port série (en voie de disparition sur les machines modernes) (waddlesplash).

          Réseau

          Remontée des données annexes (ancillary data) en une seule fois lorsque c’est possible. Ces données sont utilisées en particulier dans les sockets de domaine AF_UNIX pour permettre d’échanger des descripteurs de fichiers entre processus. Ce regroupement de données n’est pas exigé par la spécification POSIX, mais c’est le comportement attendu par le code de communication interprocessus de Firefox et de Chromium (ils utilisent tous les deux le même code) (waddlesplash).

          Gestion de la mémoire

          Comme indiqué plus haut dans la dépêche, l’apparition du navigateur Iceweasel a mis en évidence de nombreux problèmes autour de la gestion de la mémoire. Cela a donc été l’objet d’un gros travail de stabilisation et d’amélioration.

          • Le cache d’objets du noyau pouvait parfois ignorer le paramètre indiquant la réserve minimum d’objets devant toujours être disponibles (waddlesplash)
          • Amélioration de l’implémentation de la famille de fonctions autour de mprotect, qui permettent une gestion fine et bas niveau de la mémoire. En particulier, plusieurs problèmes se posaient lors de l’utilisation de ces fonctions lors d’un appel à fork, les deux processus se retrouvant dans un état incohérent,
          • Suppression de logs présents dans les méthodes de défaut de page, qui sont peu appelées pour les applications classiques, mais exploitées volontairement par d’autres applications (machines virtuelles Java ou Javascript par exemple). Les logs étaient donc superflus dans ce cas (waddlesplash),
          • Optimisation de l’écriture par lot de plusieurs pages de mémoire vers le swap,
          • Meilleure gestion des permissions d’accès page par page,
          • Correction de plusieurs problèmes conduisant à un blocage ou fort ralentissement du système quand il n’y a plus assez de mémoire libre,
          • Amélioration de la stratégie d’allocation de la table des descripteurs de fichiers,
          • Regroupement de code dupliqué pour chaque plateforme qui était en fait générique.

          Ce travail se poursuit avec un remplacement de l’allocateur mémoire actuel, qui est basé sur hoard2. Cette implémentation est assez ancienne et montre aujourd’hui ses limites. Des essais sont en cours avec l’implémentation de malloc d’OpenBSD, ainsi qu’avec mimalloc de Microsoft, pour déterminer lequel des deux sera utilisé. D’autres allocateurs ont été rejetés, car ils ne répondent pas au besoin de Haiku, en particulier la possibilité de fonctionner efficacement sur un système 32 bits ou l’espace d’adressage est une ressource limitée.

          Autres

          Sécurisation des permissions sur les zones mémoire partagées: une application ne peut pas ajouter des permissions en écriture aux zones mémoire d’une autre application. Une application qui n’est pas lancée par l’utilisateur root ne peut pas inspecter la mémoire d’une application lancée par l’utilisateur root. Ajout toutefois de cas particuliers pour permettre au Debugger de faire son travail (il a besoin d’accéder à la mémoire d’autres applications).

          Ajout et amélioration de commandes dans le debugger noyau pour investiguer l’état de l’ordonnanceur d’entrées-sorties, qui se charge de programmer les accès disque dans un ordre le plus efficace possible (waddlesplash).

          La fonction vfork n’appelle plus les fonctions pre-fork. Haiku n’implémente pas complètement vfork, mais peut se permettre des optimisations sur le travail qu’un duo fork + exec classique demanderait normalement.

          La configuration de la randomization de l’espace mémoire (ASLR) est maintenant faite par la libroot et pas par le noyau. Ainsi une application peut utiliser une version différente de la libroot pour avoir une politique de randomization différente.

          Optimisation de l’accès par un thread à sa propre structure Thread

          Chargeur de démarrage

          L’écran de démarrage s’affiche correctement sur les systèmes EFI utilisant un mode écran avec une profondeur de couleur 16 bits (korli).

          Affichage de la taille des partitions démarrables dans le menu de démarrage, pour faciliter leur identification (waddlesplash).

          Activation des warnings du compilateur sur les chaînes printf invalides.

          Augmentation de la zone de mémoire utilisée pour la décompression de l’archive de démarrage lors du boot sur le réseau, l’archive était devenue trop grosse suite à l’ajout de nouveaux pilotes.

          Refactorisation du code de gestion de la mémoire entre le bootloader et le runtime_loader, ajout de tests pour cette implémentation, et optimisation de l’utilisation mémoire du bootloader.

          Amélioration du comportement si le device tree définit un port série sans spécifier de baudrate: le bootloader suppose que le baudrate est déjà configuré, et utilise le port sans essayer de le réinitialiser.

          Outils de compilation

          La compilation de Haiku est un processus relativement complexe: il faut utiliser deux compilateurs pour Haiku lui-même (un gcc récent plus une version plus ancienne pour assurer la compatibilité avec BeOS) ainsi que un compilateur pour le systême hôte de la compilation (qui peut être Linux, BSD, Mac OS ou Windows) pour générer des outils nécessaires à la compilation elle-même. L’outil retenu est Jam, une alternative à Make avec une meilleure gestion des règles génériques réutilisables.

          • Ajout de vérification pour éviter d’avoir un build partiellement configuré, avec des ConfigVars définies mais vides.
          • Retrait d’un warning incorrect dans l’outil de build jam si on spécifie à la fois un profil et une cible de compilation sur la ligne de commande.
          • Reconnaissance des processeurs hôtes ARM et RISC-V pour la compilation croisée, correction d’autres problèmes avec les architectures non-x86.
          • Ajout de dépendances manquantes dans les règles de compilation de packagefs.
          • Suppression de fichiers de licence fournis avec Haiku mais concernant du code qui avait été supprimé de Haiku auparavant.
          • Amélioration de la remontée d’erreur du script configure si un interpréteur Python n’a pas été trouvé.
          • Correction de messages d’avertissement de awk pour l’utilisation de fonctions qui n’existent plus dans le traitement des fichiers d’identifiants matériels USB et PCI.

          Documentation

          Documentation interne

          Ajout de documentation sur les détails d’implémentation de ioctl et posix_devctl et les spécificités de Haiku pour la première (PulkoMandy).

          Correction de fautes de frappe dans l’introduction au launch_daemon.

          Remplacement de toutes les références à "OpenBeOS" par "Haiku".

          Documentation d’API

          Ajout de documentation pour les méthodes GetFontAndColor et SetFontAndColor de BTextView.

          Ajout de documentation pour les classes BShelf et BGameSound.

          Réorganisation de la liste des caractères de contrôles dans la documentation du clavier, ajout d’entrées manquantes dans cette liste et ajoute de commentaires indiquant à quelles combinaisons de touches ces caractères sont normalement associés.

          Traductions de Haiku

          La traduction du système dans différentes langues est un facteur important d’inclusivité et d’accessibilité (même si la communication avec l’équipe de développeurs pour le support n’est pas toujours simple).

          Haiku est disponible dans 30 langues, la trentième étant le coréen, pour lequel il y a un nouveau responsable des traductions (le précédent avait cessé toute activité et laissé la traduction inachevée).

          Haiku recherche des volontaires pour s’occuper des traductions en biélorusse, croate, bulgare, hindi, punjabi et slovène, pour lesquelles les précédents responsables de relectures n’ont plus le temps d’assurer le rôle. Ainsi bien sûr que de l’aide pour la traduction du système, du manuel d’utilisation, et des applications tierces, que ce soit pour ajouter de nouvelles langues ou pour renforcer les équipes s’occupant de langues existantes. Le point d’entrée est le portail d’internationalisation de Haiku.

          La traduction du système Haiku s’effectue avec Pootle. L’outil n’est plus développé et des investigations sont en cours pour le remplacer par Weblate. La traduction du manuel d’utilisation s’effectue avec [un outil spécifiquement développé pour cela](https://github.com/haiku/userguide-translator. La traduction des applications s’effectue également avec un outil personnalisé nommé Polyglot.

          Commentaires : voir le flux Atom ouvrir dans le navigateur

          • ✇LinuxFr.org : les dépêches
          • GIMP 3.0 RC2 est sorti
            Note : cette dépêche est une traduction de l'annonce officielle de la sortie de GIMP 3.0 RC2 du 27 décembre 2024 (en anglais). Après la première série de retours de la communauté, nous sommes heureux de partager la deuxième version candidate de GIMP 3.0 ! Les gens nous ont donné des commentaires très utiles sur la première version candidate et nous avons pu corriger de nombreux bugs. C’est notre petit cadeau sous le sapin 🎄 pour vous tous ! (NdM: disons fourré dans la galette/le gâteau des roi

          GIMP 3.0 RC2 est sorti

          Note : cette dépêche est une traduction de l'annonce officielle de la sortie de GIMP 3.0 RC2 du 27 décembre 2024 (en anglais).

          Après la première série de retours de la communauté, nous sommes heureux de partager la deuxième version candidate de GIMP 3.0 ! Les gens nous ont donné des commentaires très utiles sur la première version candidate et nous avons pu corriger de nombreux bugs.

          C’est notre petit cadeau sous le sapin 🎄 pour vous tous ! (NdM: disons fourré dans la galette/le gâteau des rois désormais ?)

          GIMP 3.0 RC2: écran de démarrage

          Écran de démarrage de la nouvelle version candidate, par Sevenix (CC by-sa 4.0) - GIMP 3.0 RC2

          Sommaire

          Corrections de bugs importantes

          Plusieurs correctifs ont été apportés depuis la version RC1. Nous souhaitons mettre en évidence les bugs les plus importants afin que les utilisateurs en soient informés et puissent effectuer des tests supplémentaires. Pour plus de détails sur les autres correctifs de bugs, veuillez consulter notre page NEWS sur GitLab.

          Migration des paramètres de la 2.10

          Lors des tests communautaires, nous avons découvert que les paramètres des utilisateurs de la 2.10 n’étaient pas migrés vers GIMP 3.0 en raison de certaines hypothèses incorrectes dans le code d’importation. Étant donné que la plupart des développeurs utilisent exclusivement GIMP 3.0 depuis un certain temps, nous n’avions pas remarqué ce problème. Le bug devrait maintenant être corrigé, nous demandons donc des rapports de bugs si des préférences 2.10 ne sont pas importées correctement dans RC2. Notez que si vous avez déjà utilisé 3.0 RC1, vous devrez d’abord supprimer ces configurations, sinon RC2 n’essaiera pas d’importer les préférences 2.10 (assurez-vous de sauvegarder vos paramètres bien sûr !).

          Console Windows

          Dans les versions de développement 2.99, les versions Windows lançaient automatiquement un affichage de console en plus de GIMP lui-même. C’est très utile pour les développeurs Windows pour voir les messages de débogage, mais la console n’était pas destinée à être affichée pendant les versions stables. Comme nous avons modifié notre processus de construction pour utiliser Meson au lieu d’Autotools, nous avons appris que nous devions apporter des modifications supplémentaires pour empêcher l’affichage de la console. Cela devrait être corrigé maintenant grâce à Jehan - si vous voyez toujours la console sous Windows, veuillez remplir un nouveau rapport de bogue !

          Problèmes de polices d’interface utilisateur manquantes sur macOS

          Il y a un problème de longue date où certains utilisateurs de macOS ne voyaient que des symboles « Unicode manquants » au lieu des textes d’interface dans GIMP (à la fois dans la version 2.10 et dans la version 3.0). Cela était dû à un bug dans Pango, la bibliothèque que nous utilisons pour les mises en page de texte. Ce problème a été résolu avec la récente version Pango 1.55.0, nous encourageons donc tous les empaqueteurs macOS tiers à mettre à jour vers cette version lorsqu’ils construisent GIMP pour le distribuer.

          GIMP 3.0.0 RC2 : le package officiel de macOS contient désormais Pango sans polices cassées

          Si vous aviez ce problème de polices cassées sur macOS (à gauche), il est désormais résolu (à droite) - captures d’écran de rapporteurs de bug - GIMP 3.0.0 RC2

          Intégration de darktable

          Après la sortie de la version 3.0 RC1, nous avons reçu des rapports de certains utilisateurs indiquant qu’ils ne pouvaient toujours pas importer et exporter d’images entre GIMP et darktable. Nous avons travaillé avec les développeurs de darktable pour éliminer les bugs restants, de sorte que l’intégration entre darktable 5.0.0 et GIMP 3.0 RC2 devrait désormais fonctionner pour tout le monde. Cependant, veuillez déposer un nouveau rapport de bogue si vous continuez à rencontrer des problèmes pour connecter les deux !

          Améliorations

          Bien que l’objectif principal du développement de la version 3.0 RC2 ait été la correction de bugs et le peaufinage, certaines nouvelles fonctionnalités ont également été implémentées.

          API de filtre GEGL

          De nombreux anciens wrappers d’API pour les opérations GEGL ont été supprimés dans la version RC1. Bien que cela ait réduit la dette technique, cela a également causé des problèmes à de nombreux développeurs de greffons et de scripts tiers qui souhaitaient porter leurs greffons vers la version 3.0. Alors que notre plan initial était d’implémenter la nouvelle API publique de filtre après la sortie de la version 3.0, les commentaires de la communauté nous ont convaincu de l’ajouter pour la version 3.0 RC2.

          Applying filters through libgimp 3.0.0 API (Script-fu et al.) - GIMP 3.0.0 RC2

          Application de filtres via l’API libgimp 3.0.0 (Script-fu et al.) - GIMP 3.0.0 RC2

          Le travail de Jehan permet aux développeurs d’appliquer des effets de filtre soit immédiatement, soit de manière non destructrice. Vous pouvez voir des exemples de la manière de procéder en C, Python et Script-Fu dans la requête de fusion, ou en recherchant gimp-drawable-filter dans le navigateur de procédures de GIMP. Nous avons également commencé à utiliser l’API de filtre dans nos scripts Python pour créer automatiquement des effets d’arrière-plan flou pour le programme d’installation Windows, et avec cette même API en C, Alx Sa a ajouté la prise en charge de l’importation de l’ancien style de calque Color Overlay de Photoshop.

          Nous sommes preneurs des retours et des rapports de bugs d’auteurs de greffons et de scripts qui utilisent la nouvelle API de filtrage dans leur travail ! Nous avons également prévu d’autres mises à jour pour GIMP 3.0.

          Espaces de fusion de calques et composition dans les fichiers XCF

          Les discussions entre les experts en science des couleurs Elle Stone et Øyvind Kolås ont révélé un autre domaine nécessitant des améliorations dans le cadre de notre projet Color Space Invasion. Plus précisément, les images avec des profils de couleurs qui ont des courbes de reproduction des tons non perceptives peuvent ne pas être rendues correctement lorsqu’elles sont définies sur certains modes de calque.

          Øyvind a implémenté une correction pour ce problème en ajoutant un espace perceptuel approprié par défaut à des modes de calque spécifiques. Bien que nous pensions que cette amélioration ne devrait pas avoir d’impact sur les fichiers XCF plus anciens, n’hésitez pas à rapporter tous problèmes de compatibilité avec la version 3.0 RC2 !

          Paquets

          AppImage

          Grâce aux efforts continus de Bruno Lopes et avec l’aide de Samueru et de la communauté AppImage, notre AppImage expérimentale fonctionne désormais sur la plupart des distributions Linux. Nous souhaitons encourager davantage de tests, dans l’espoir de pouvoir la proposer comme une autre version Linux en plus de notre Flatpak. Vous pouvez consulter les instructions pour installer les paquets expérimentaux AppImage sur notre page de téléchargement des versions de développement.

          Flatpak

          Notre flatpak journalier a maintenant un App-ID dédié org.gimp.GIMP.Nightly. Cela signifie principalement qu’il peut être installé côte à côte avec le flatpak stable tandis que les deux sont visibles dans vos menus (plus besoin de sélectionner quelle version doit être affichée avec flatpak make-current).

          Mais cela signifie également que tous ceux qui avaient le flatpak journalier jusqu’à présent ne verront pas de mise à jour arriver de sitôt. Afin de continuer à utiliser le flatpak journalier, désinstallez celui existant et installez le nouveau avec ces commandes :

          flatpak uninstall org.gimp.GIMP//master
          flatpak install https://nightly.gnome.org/repo/appstream/org.gimp.GIMP.Nightly.flatpakref

          ⚠️ Rappel : le flatpak journalier contient le code de développement actuel tel qu’il se présente dans le dépôt source. Parfois, il peut même être très cassé ou rendre vos fichiers de projet invalides. Nous ne le recommandons pas pour la production ! Utilisez cette version pour nous aider à déboguer en signalant les problèmes ou si vous aimez vraiment les risques pour tester les dernières fonctionnalités.

          Améliorations du greffon BMP

          Le nouveau contributeur Rupert Weber a été très occupé depuis la dernière mise à jour avec de nouvelles mises à jour de notre greffon BMP. Quelques points de son travail à mettre en avant :

          • Les fichiers BMP sont désormais importés sans perte dans leur précision d’origine, plutôt que d’être convertis en précision entière de 8 bits.
          • Le greffon prend désormais en charge le chargement de fichiers BMP avec compression RLE24 et Huffman.
          • Nous chargeons désormais les fichiers BMP par morceaux plutôt que d’essayer de charger l’image entière en une seule fois. Des travaux connexes nous permettent également de charger des fichiers BMP beaucoup plus volumineux.
          • Rupert a également effectué beaucoup de nettoyage et de maintenance du code, afin de rendre le greffon plus facile à maintenir à l’avenir.

          Mises à jour diverses

          • Jehan a apporté quelques améliorations d’usage de la console Python. Vous pouvez désormais utiliser les raccourcis Ctrl+R et Ctrl+S pour parcourir votre historique de commandes, et Page précédente et Page suivante vous permettent désormais de faire défiler l’historique en plus des touches fléchées Haut et Bas.

          History search in Python Console - GIMP 3.0.0 RC2
          Recherche dans l’historique de commande (console Python) - GIMP 3.0.0 RC2

          • Alx Sa a implémenté le chargement des fichiers CMJN PAM dans le greffon PNM.

          • Sous Windows, nous avons également ajouté la possibilité d’ouvrir des images via des raccourcis Windows (fichiers .lnk) directement depuis la boîte de dialogue de sélection de fichiers. Ce travail est également réalisé par Alx Sa.

          • D’autres modifications et améliorations ont été apportées au thème. En particulier, le style du « curseur compact » a été considérablement amélioré après les commentaires et le travail de Denis Rangelov. Denis a également créé de nouvelles icônes pour la boîte de dialogue de navigation ancrable, remplaçant les doublons par des symboles distincts. Anders Jonsson a également révisé le thème et supprimé certaines solutions de contournement qui étaient nécessaires dans GIMP 2.10, mais qui ne sont plus nécessaires avec nos nouveaux thèmes 3.0.

          • Idriss Fekir a apporté des améliorations à notre code de chargement de polices XCF, pour améliorer la compatibilité lors de l’importation d’anciens fichiers XCF.

          Aperçu des changements depuis la version 2.10

          Pour ceux qui n’ont pas suivi de près le développement de GIMP, cet article ne couvre que les changements progressifs depuis la dernière version. Ils ne répertorient pas tous les changements ou améliorations apportés à GIMP 3.0 - ce serait un article très long !

          Bien que nous aurons des notes de version complètes pour la version finale 3.0, nous avons pensé qu’il serait utile de résumer quelques-uns des changements majeurs apportés au cours du processus de développement de la version 2.99 :

          • Le travail initial de portage de GIMP vers GTK3 a eu lieu dans 2.99.2. Cette version a également introduit la sélection multi-calque, ainsi que des modifications initiales de l’API et des améliorations de la gestion de l’espace colorimétrique.
          • D’autres mises à jour de l’API ont été effectuées dans 2.99.4, notamment la possibilité de générer automatiquement des interfaces utilisateur de greffon en fonction des entrées de l’utilisateur. Diverses améliorations de convivialité ont également été apportées, ainsi que l’introduction de l’outil expérimental Paint Select.
          • 2.99.6 a apporté davantage de mises à jour de l’API et de travaux internes. D’autres fonctionnalités destinées à l’utilisateur incluent la possibilité de placer des guides en dehors du canevas, une meilleure prise en charge du pavé tactile et une meilleure prise en charge des différentes métadonnées de couleur PNG.
          • Le pipeline de développement a été considérablement amélioré dans 2.99.8, permettant des temps de construction et une automatisation plus rapides. La prise en charge de nouveaux formats de fichiers tels que PSB et JPEGXL a été ajoutée dans cette version, ainsi que la prise en charge des pilotes Windows Ink de tablette graphique.
          • 2.99.10 a introduit des « ensembles de calques », remplaçant l’ancien concept de calques liés. La dynamique de peinture a été rationalisée dans cette version, ainsi que la première version de la boîte de dialogue de bienvenue.
          • La prise en charge de la liaison anticipée CMJN a été implémentée dans 2.99.12. Les thèmes de l’interface graphique CSS ont également fait l’objet d’une refonte majeure dans cette version, ainsi que davantage de prise en charge de formats de fichiers et d’améliorations majeures de Script-Fu.
          • 2.99.14 a vu l’introduction de contours non destructifs pour l’outil de texte. L’outil d’alignement a également été révisé, la mise à l’échelle des thèmes et des icônes a été améliorée et les sélections flottantes ont été largement remplacées dans le flux de travail.
          • Le portage GTK3 a finalement été achevé dans 2.99.16. La fenêtre contextuelle de recherche / a été mise à jour pour afficher le chemin du menu pour toutes les entrées, ainsi que pour permettre de chercher parmi les filtres.
          • Les filtres non destructifs ont été introduits pour la première fois dans 2.99.18. Des améliorations majeures de la gestion des couleurs ont également été apportées, et de nouvelles options d’extension automatique des limites de calque et d’accrochage ont également été implémentées.

          GEGL

          Tout comme pour GIMP, la version 0.4.52 de GEGL a été corrigée. Øyvind Kolås a corrigé certaines étiquettes génériques « Entrée auxiliaire » pour qu’elles soient plus significatives. Elles seront également visibles dans les filtres de GIMP. Il a également amélioré la précision du traitement des couleurs de certains filtres. Thomas Manni, contributeur de longue date, a également corrigé les plantages lorsque certains filtres étaient exécutés sur de très petits calques.

          Statistiques de sortie

          Depuis GIMP 3.0 RC1, dans le dépôt principal de GIMP :

          • 73 rapports ont été fermés comme CORRIGÉS.
          • 71 demandes de fusion ont été acceptées.
          • 277 commits ont été poussés.
          • 18 traductions ont été mises à jour : bulgare, catalan, chinois (Chine), chinois (Taïwan), danois, finnois, géorgien, islandais, italien, letton, lituanien, norvégien nynorsk, persan, portugais, russe, slovène, suédois, ukrainien.

          35 personnes ont contribué à des modifications ou des correctifs à la base de code de GIMP 3.0.0 RC2 (l’ordre est déterminé par le nombre de commits ; certaines personnes sont dans plusieurs groupes) :

          • 12 développeurs pour le code principal : Jehan, Alx Sa, Michael Schumacher, Anders Jonsson, Lloyd Konneker, Øyvind Kolås, Idriss Fekir, Andre Klapper, Jacob Boerema, Michael Natterer, Rupert Weber, Thomas Manni.
          • 11 développeurs de plug-ins ou modules : Jehan, Lloyd Konneker, Alx Sa, Rupert Weber, Daniel Novomeský, Jacob Boerema, Aki, Bruno, Ryan Sims, Simon Munton.
          • 19 traducteurs : Alan Mortensen, Cheng-Chia Tseng, Kolbjørn Stuestøl, Rūdolfs Mazurs, Jiri Grönroos, Sveinn í Felli, Alexander Shopov, Aurimas Černius, Marco Ciampa, Danial Behzadi, Hugo Carvalho, Jordi Mas, Anders Jonsson, Ekaterine Papava, Julia Dronova, Luming Zh, Martin, Michael Schumacher, Youri Chornoivan.
          • 2 concepteurs de thèmes : Alx Sa, Anders Jonnson.
          • 2 contributeurs à la documentation : Jehan, Bruno.
          • 5 contributeurs pour la compilation, l’empaquetage ou l’intégration continue : Bruno, Jehan, Lloyd Konneker, Alx Sa, Jacob Boerema, Rupert Weber.

          Contributions sur d’autres dépôts du GIMPverse (l’ordre est déterminé par le nombre de commits) :

          • GEGL 0.4.52 est composé de 31 commits de 16 contributeurs : Øyvind Kolås, Sam L, Thomas Manni, lillolollo, Alan Mortensen, Anders Jonsson, Ekaterine Papava, Hugo Carvalho, Jordi Mas, Juliano de Souza Camargo, Kolbjørn Stuestøl, Lukas Oberhuber, Luming Zh, Marco Ciampa, Martin, Yuri Chornoivan.
          • ctx a enregistré 48 commits depuis la sortie de la RC1 par 1 contributeur : Øyvind Kolås.
          • gimp-data a enregistré 6 commits de 5 contributeurs : Anders Jonsson, Jehan, Sevenix, Alx Sa et Denis Rangelov.
          • gimp-test-images (nouveau référentiel pour les tests de prise en charge des images) a enregistré 2 commits de 1 contributeur : Rupert.
          • La version gimp-macos-build (scripts d’empaquetage pour macOS) a reçu 5 commits de 1 contributeur : Lukas Oberhuber.
          • La version flatpak a reçu 4 commits de 2 contributeurs : Bruno Lopes, Jehan.
          • Notre site Web principal a reçu 29 commits de 3 contributeurs : Jehan, Alx Sa, Andrea Veri.
          • Notre site Web de développement a reçu 16 commits de 2 contributeurs : Jehan, Bruno Lopes.
          • Notre documentation pour GIMP 3.0 a reçu 157 commits de 10 contributeurs : Andre Klapper, Kolbjørn Stuestøl, Jacob Boerema, Alan Mortensen, Anders Jonsson, Marco Ciampa, Jordi Mas, Yuri Chornoivan, Alx Sa, Jiri Grönroos.

          N’oublions pas de remercier toutes les personnes qui nous aident à trier dans Gitlab, à signaler les bugs et à discuter des améliorations possibles avec nous. Notre communauté est également profondément reconnaissante envers les guerriers d’Internet qui gèrent nos différents canaux de discussion ou comptes de réseaux sociaux tels que Ville Pätsi, Liam Quin, Michael Schumacher et Sevenix !

          Remarque : compte tenu du nombre de parties dans GIMP et de la façon dont nous obtenons des statistiques via les scripts git, des erreurs peuvent se glisser dans ces statistiques. N’hésitez pas à nous dire si nous avons oublié ou mal classé certains contributeurs ou contributions.

          Autour de GIMP

          Miroirs de téléchargement

          GNOME a abandonné l’utilisation de miroirs lors de sa dernière mise à jour d’infrastructure. Comme nos miroirs de téléchargement sont hébergés par eux, on nous a demandé si nous voulions également faire la même chose. En tant que projet communautaire, nous apprécions tous ceux qui contribuent un miroir pour rendre GIMP plus accessible dans leur région. Par conséquent, nous avons décidé de continuer à utiliser des miroirs pour distribuer GIMP.

          Si vous souhaiter contribuer à un miroir pour votre région, voici la nouvelle procédure :

          Comment devenir un miroir officiel (mise à jour de la procédure)

          1. Créez une demande de miroir sur le tracker gimp-web
          2. Dites-nous pourquoi vous souhaitez créer un miroir de GIMP, pour quels autres logiciels libres vous en contribuez déjà un, quelle est votre configuration, l’emplacement du serveur…
          3. Parlez-nous de vous : êtes-vous une organisation ou un particulier ? Donnez-nous le nom et l’URL spécifiques à afficher dans la liste des sponsors de miroir.
          4. Une fois que nous aurons terminé de vérifier votre organisation, les identifiants rsync seront échangés de manière sécurisée, vous permettant de synchroniser votre miroir avec le serveur source
          5. Il n’y a rien de particulier à faire pour apparaître sur la page des sponsors qui sera mise à jour régulièrement via des scripts. Pourtant, cela peut prendre quelques jours, voire quelques semaines parfois. Ne vous inquiétez donc pas si le nom de votre organisation n’apparaît pas immédiatement !

          🛈 Nous vérifions automatiquement à intervalles aléatoires que les miroirs sont mis à jour suffisamment rapidement et que les données correspondent pour des raisons de sécurité évidentes.

          Changements dans les miroirs

          De plus, depuis la publication de la nouvelle 3.0RC1, un nouveau miroir a été ajouté :

          • Sahil Dhiman, Mumbai, Inde

          Les miroirs sont importants, car ils aident le projet en répartissant la charge des dizaines de milliers de téléchargements quotidiens. De plus, en ayant des miroirs répartis dans le monde entier, nous garantissons que tout le monde peut avoir un accès rapide au téléchargement de GIMP.

          Financer des exécuteurs ("runner") GitLab

          Le dépôt de code de GIMP est également hébergé sur la plateforme GitLab de GNOME. Andrea Veri a demandé si nous pouvions financer un exécuteur [NDA: un "runner" est une sorte de serveur dédié à la compilation ou à l’intégration continue de manière générale] sur la plateforme, ce qui permet à tout projet sur la plateforme de tester la construction de son logiciel avant, pendant et après les modifications de code. Après un vote du comité de GIMP, nous avons accepté et sommes désormais les sponsors d’un exécuteur CI/CD x86 !

          Télécharger GIMP 3.0 RC2

          Vous trouverez toutes nos versions officielles sur le site officiel de GIMP (gimp.org) :

          • Paquets Linux flatpaks pour x86 et ARM (64 bits)
          • Installateur Windows universel pour x86 (32 et 64 bits) et pour ARM (64 bits)
          • Paquet MSIX (aperçu GIMP) pour x86 et ARM (64 bits)
          • Paquets macOS DMG pour le matériel Intel
          • Paquets macOS DMG pour le matériel Apple Silicon

          D’autres paquets réalisés par des tiers devraient évidemment suivre (paquets de distributions Linux ou *BSD, etc.).

          🛈 Notes:

          • Les 2 paquets DMG macOS seront probablement en retard, car nous attendons la validation de la mise à jour Apple par la Fondation GNOME avant de pouvoir signer nos paquets.
          • Le paquet MSIX prend généralement quelques jours ouvrables de validation par Microsoft. (le paquet MSIX est disponible)

          Et ensuite ?

          Grâce au grand nombre de retours que nous avons reçus pour notre premier candidat à la version finale, nous sommes en mesure de vous présenter cette deuxième version qui en est d’autant plus robuste. Comme vous l’avez vu, quelques surprises supplémentaires 🎁 sont arrivées avec les corrections de bugs, notamment la nouvelle API de filtre, qui a déclenché la prise en charge de l’importation de l’ancien effet Color Overlay de PSD, des modes de fusion et de composition améliorés, et plus encore. Nous avons pensé que cela valait la peine de rompre le gel des fonctionnalités pour ces changements et que cela fera toute la différence !

          Avec cette deuxième version candidate, nous sommes plus proches que jamais de la version 3.0.0 de GIMP. Comme d’habitude, nous attendons avec impatience les nouveaux rapports de problèmes de la communauté qui nous permettront de finaliser la version 3.0.0 ! 🤗

          N’oubliez pas que vous pouvez faire un don et financer personnellement les développeurs de GIMP, afin de donner en retour et d’accélérer le développement de GIMP. L’engagement de la communauté aide le projet à se renforcer ! 💪🥳

          🎅🎄🎉 Et bien sûr, toute l’équipe vous souhaite de joyeuses fêtes de fin d’année (MAJ de Jehan) nos meilleurs vœux pour la nouvelle année ! 🥳🥂🎆

          Commentaires : voir le flux Atom ouvrir dans le navigateur

          • ✇LinuxFr.org : les dépêches
          • Haiku a 23 ans et un quart
            La dernière dépêche annuelle sur les nouveautés dans Haiku a dépassé la longueur maximale tolérée par Linuxfr (et été finalement découpée en plusieurs parties publiées séparément). Aussi, les nouveautés sur Haiku seront désormais publiées trimestriellement, pour faire face à l’augmentation d’activité dans le projet. lien nᵒ 1 : Site officiel de Haikulien nᵒ 2 : Rapport d'activité de août 2024lien nᵒ 3 : Rapport d'activié de septembre 2024lien nᵒ 4 : Rapport d'activité de octobre 2024Sommaire A

          Haiku a 23 ans et un quart

          La dernière dépêche annuelle sur les nouveautés dans Haiku a dépassé la longueur maximale tolérée par Linuxfr (et été finalement découpée en plusieurs parties publiées séparément). Aussi, les nouveautés sur Haiku seront désormais publiées trimestriellement, pour faire face à l’augmentation d’activité dans le projet.

          Sommaire

          Ce rapport est basé sur les rapports mensuels d’activité d’août, septembre et octobre publiés sur le site de Haiku. Il couvre les changements de code survenus entre hrev57901 et hrev58291 de Haiku.

          Certains des changements mentionnés dans ce rapport font partie des derniers développements du mois d'août, et étaient déjà présents dans la version R1 bêta 5 qui a été publiée début septembre 2024.

          Les corrections de bugs sont appliquées sur la branche bêta 5 si elle est concernée, mais les nouveaux développements sont mis dans la branche principale et seront disponibles uniquement dans les « nighlty builds » (constructions journalières) puis dans la prochaine version, qui sera probablement étiquetée R1 bêta 6.

          La version R1 est très attendue, mais la feuille de route comporte toujours environ 600 bugs et demandes d’amélioration. Jusqu’à ce qu’ils soient tous traités (corrigés, devenus obsolètes ou déplacés vers une version plus tardive), Haiku continue de publier des versions bêta.

          Applications

          Amélioration et corrections de textes de messages dans diverses applications (humdinger).

          L’application Switcher — permettant de naviguer rapidement entre les différentes fenêtres et applications à l’aide d’un menu qui apparaît lorsque la souris se trouve sur les bords de l’écran — peut à nouveau être compilée. Cette application n’est pas terminée et non intégrée dans Haiku par défaut pour l’instant (nephele).

          Dans les préférences de disposition clavier, des icônes avaient disparu de certains menus suite à un problème dans une modification précédente. Ces icônes sont maintenant de retour (jscipione).

          Les réglages de polices de caractères de WebPositive peuvent faire des retours à la ligne dans le texte d’exemple utilisé pour visualiser la police choisie (correction récupérée depuis la fenêtre de réglage des polices du système, qui utilise une variante du même code). (nipos).

          Le raccourci clavier « muet » permet d’alterner entre l’activation et la désactivation du son, au lieu de toujours passer en mode muet (korli).

          Plusieurs applications pouvaient ouvrir leurs fenêtres en dehors de l’écran si leur dernière position enregistrée n’était pas bonne (après un changement de résolution d’écran par exemple). L’appel de la fonction MoveOnScreen() après la création d’une fenêtre permet de régler ce problème (korli, pinaraf, waddlesplash).

          Icon-O-Matic ouvre ses dialogues de sélection de fichiers dans le dossier où se trouve l’icône en cours d’édition (nipos).

          Il est possible de sélectionner une famille de polices directement dans FontDemo (nipos).

          Améliorations du mode sombre

          Modifications faites par nipos et nephele.

          Depuis la version bêta 5 de Haiku, il est beaucoup plus simple de configurer un thème de couleurs dans Haiku (avec seulement 3 couleurs à sélectionner, les autres étant calculées automatiquement).

          Cependant, toutes les applications et contrôles graphiques ne se comportent pas forcément très bien, en particulier si on choisit une couleur de fond de fenêtres sombre. Ce trimestre, on trouve donc des améliorations sur ColumnListView (contrôle permettant l’affichage de données en listes, en arbre et en colonnes), et dans les applications Debugger, Mail (en particulier les marqueurs de portions de message citées), WebPositive, ResEdit, FontDemo, Cortex, Sudoku et Tracker (les fenêtres de configuration des permissions de fichiers et de statut de copie de fichiers), ainsi que dans les préférences de disposition clavier (couleur des touches de clavier affichées), et de configuration des écrans et des écrans de veille. Ces applications utilisaient encore quelques couleurs codées « en dur » qui ne s’adaptaient pas automatiquement au thème choisi.

          En outre, les formules de calcul utilisées pour générer le thème de couleurs ont été améliorées pour donner de meilleurs résultats dans le cas de couleurs sombres, assurant de conserver un bon contraste entre tous les éléments graphiques et une meilleure cohérence des couleurs.

          AboutSystem

          L’application AboutSystem donne quelques informations sur la machine (RAM, CPU), et surtout affiche les noms des développeurs et les messages de copyright et clauses de licences obligatoires de logiciels libres qui sont embarqués dans Haiku.

          Correction d’un crash à cause d’une information de copyright mal enregistrée (madmax).

          Mise à jour des crédits à l’occasion de la version Beta 5 : ajout des nouveaux membres de l’équipe, et passage dans la catégorie « anciens développeurs » de certaines personnes qui ne participent plus pour l’instant. (waddlesplash).

          Débogueur

          Haiku est fourni avec un débogueur graphique permettant d’investiguer facilement les problèmes dans les applications.

          Waddlesplash a amélioré le désassembleur pour mieux décoder les adresses mémoire calculées à partir de la valeur d’un registre CPU. La correction a été remontée dans la bibliothèque tierce Zydis, utilisée pour le désassemblage.

          Il a également modifié le code du Debugger pour ne pas essayer de télécharger des informations de debug lorsque l’outil est lancé en mode non-interactif (dans le cas d’une test suite automatisée par exemple). Plusieurs autres problèmes qui pouvaient causer un plantage du debugger ou un blocage dans un état invalide (avec l’application qui ne s’arrête jamais) ont été également traités.

          DriveSetup

          L’outil DriveSetup permet de modifier la table de partitions et de formater les partitions avec différents systèmes de fichiers.

          Pour les partitions de type « Intel » (MBR), lorsqu’on crée une première partition, par défaut elle est marquée automatiquement comme partition active. Auparavant il fallait cocher une case pour cela, et de nombreux utilisateurs oubliaient de le faire, ce qui pouvait rendre le système impossible à démarrer (korli).

          Dans certains messages, le nom des partitions n’était pas mis entre guillemets, ce qui pouvait prêter à confusion avec des noms de partitions choisis maladroitement (ou judicieusement, selon de quel point de vue on se place). Maintenant le nom de la partition est clairement identifiable dans le message (humdinger).

          HaikuDepot

          HaikuDepot est le frontal graphique du gestionnaire de paquets de Haiku. L’application est maintenue par apl et se compose d’une interface graphique native développée en C++ et d’un webservice développé en Java qui permet de stocker des métadonnées supplémentaires sur les paquets : captures d’écrans, notes et revues des utilisateurs, liste des paquets à mettre en avant.

          • Refactoring du « language model », de la gestion des chemins, de la récupération des données des paquets, de l’affichage des auteurs de paquets, de la gestion des notes données par les utilisateurs. (apl)
          • Fenêtre des conditions d’utilisation: correction de la couleur du texte, correction d’un crash si on clique dans la fenêtre avant que le texte soit chargé. (apl et jscipione)
          • Le bouton « Ouvrir » permettant de lancer une application installée ne fonctionnait pas toujours (apl).
          • Amélioration de la sélection d’un icône par défaut pour les paquets qui n’ont pas d’icône inclus (apl).

          La liste de paquets mis en avant a été revue, un nouveau mainteneur (Michel) se charge de la tenir à jour avec des règles mieux définies : une sélection d’applications populaires (sur suggestion de participants aux forums de discussion) ainsi que des applications mises à jour récemment. Si vous utilisez Haiku, n’hésitez pas à passer un peu de temps à évaluer et noter les applications, peu de personnes le font et il est difficile d’exploiter les données de façon pertinente si beaucoup d’applications n’ont reçu qu’un seul vote.

          Horloge

          L’application horloge permet d’afficher l’heure (sans surprise). Elle propose diverses apparences de cadrans, peut être redimensionnée, et incrustée dans le bureau sous forme d’un replicant.

          Un bug dans l’application conduisait à afficher une heure aléatoire (non initialisée) pendant quelques centièmes de secondes au démarrage avant de commencer à afficher l’heure courante (OscarL)

          Les aiguilles de l’horloge étaient décalées de quelques pixels et ne pointaient pas précisément là ou elles devraient (dovsienko).

          Tracker

          Tracker est le gestionnaire de fichiers de Haiku. Il affiche le bureau et toutes les fenêtres de navigation et de recherche de fichiers. Il se distingue par son utilisation de la navigation dite « spatiale », où chaque dossier s’ouvre dans une fenêtre séparée dont la taille et la position à l’écran sont mémorisées.

          jscipione continue son travail d’amélioration du Tracker (cela comporte de nombreux changements qui sont encore en gestation). Ce trimestre, les changements intégrés permettent :

          • la désactivation d’entrées du menu « Nouveau » lorsque les opérations ne sont pas disponibles,
          • la mise à jour dynamique de certains menus en fonction des opérations disponibles,
          • la préservation de la sélection après une opération de copie où de déplacement (avec quelques problèmes d’affichage corrigés au passage),
          • des corrections de bug sur le choix de couleurs utilisées dans la fenêtre « Ouvrir avec »,
          • la possibilité de créer un lien symbolique lorsqu’on fait un drag and drop depuis un dossier virtuel,
          • utilisation de la police de caractères « menu » de façon cohérente dans tous les menus.

          Il a également travaillé sur des tâches de fond, sans changements visibles pour l’instant. Le code du Tracker provient de BeOS et est un peu vieillissant. Il est souvent nécessaire de faire beaucoup de nettoyage avant de pouvoir développer de nouvelles fonctionnalités sans casser autre chose. Cette fois-ci, on trouve entre autres une refonte de la gestion des raccourcis claviers, la fermeture automatique des fenêtres en double lors du passage en mode « navigation spatiale », et divers crashs liés à la gestion des menus popup.

          humdinger a également travaillé sur le Tracker pour améliorer certains messages concernant la copie et la création de fichiers, pour les rendre plus faciles à traduire.

          humdinger a également travaillé sur l’organisation du menu « templates » (affiché quand on fait un clic droit -> nouveau… et permettant de créer différents types de fichiers à partir de fichiers de référence). Ce menu peut maintenant être organisé en plusieurs sous-menus à l’aide d’une nouvelle option « New template folder », pour les personnes qui utilisent cette fonctionnalité avec de nombreux fichiers de référence au point d’avoir besoin de les organiser.

          La fenêtre de requêtes (recherche de fichiers en fonction de leurs attributs étendus indexés dans le système de fichiers) permet maintenant d’afficher en temps réel les résultats lorsqu’on édite une requête. En outre, il est possible de filtrer les résultats pour afficher uniquement les fichiers contenus dans un répertoire donné (auparavant, on pouvait au mieux restreindre par volume disque). Ces changements ont été réalisés dans le cadre du Google Summer of Code par CalistoMathias, avec également une participation de jscipione, humdinger et waddleplash pour finaliser le travail.

          Correction d’un crash du Tracker lors de changements de résolution d’écran (OscarL).

          Terminal

          Le Terminal permet d’exécuter des applications en ligne de commande.

          Lors du changement de la taille de texte du Terminal, ce dernier ajuste le nombre de lignes et colonnes de texte visibles, au lieu de redimensionner sa fenêtre (nipos).

          Prise en compte de la séquence d’échappement ANSI pour effacer l’historique de défilement (CodeForEvolution).

          PowerStatus

          L’application PowerStatus affiche des informations sur les batteries pour les ordinateurs portables.
          sen a effectué plusieurs améliorations pour les systèmes avec plusieurs batteries:

          • Gestion de plusieurs emplacements pour batteries qui ne sont pas forcément tous utilisés,
          • Meilleur calcul des alertes de batterie faible,
          • Prise en compte de la déconnexion de batteries pendant le fonctionnement du système.

          Outils en ligne de commande

          La commande profile (qui permet d’analyser les performances d’autres applications et du système) peut maintenant afficher le nombre d’évènements qui n’ont pas pu être enregistrés par l’analyseur système (waddlesplash).

          La commande package_repo update (utilisée pour mettre à jour un dépôt de paquets avec de nouveaux logiciels) peut maintenant fonctionner sans avoir accès au contenu complet des fichiers packages à inclure dans le dépôt (seuls les noms des paquets et quelques autres métadonnées sont réellement nécessaires).

          La commande package_repo list dispose d’une option -f pour afficher le nom de fichiers correspondant aux paquets contenus dans un dépôt de paquets. Les fichiers peuvent ainsi être téléchargés facilement par un outil tiers. (waddlesplash)

          Ces deux modifications sont utiles en particulier pour la ferme de build de HaikuPorts, qui souhaite héberger les fichiers dans des buckets S3 afin de simplifier l’infrastructure et de réduire les coûts de fonctionnement.

          Amélioration du format de sortie de la commande launch_roster pour indiquer le statut des services et pas simplement leur nom (kallisti5 + waddlesplash).

          Ajout dans strace du décodage des drapeaux de configurations de mutex (par exemple MUTEX_SHARED) (waddlesplash).

          Serveurs

          Les serveurs sont des applications fonctionnant en tâche de fond et qui implémentent une grande partie des fonctionnalités du système.

          app_server

          app_server est le serveur graphique qui se charge de l’affichage du bureau et des fenêtres.

          madmax a travaillé sur la gestion des polices de caractères: correction de problèmes de verrouillage pour éviter des accès concurrents au gestionnaire de polices par plusieurs fils d’exécution, amélioration du traitement de l’ajout et du retrait de polices, et une optimisation pour éviter de scanner deux fois de suite les dossiers de polices au démarrage.

          waddlesplash a complété ce changement en déplaçant une partie du code de gestion des polices pour éviter que d’autres parties de l’exécution soient bloquées par l’initialisation des polices, qui peut prendre beaucoup de temps (quelques secondes) au démarrage du système.

          waddlesplash a corrigé un problème de calcul de délai d’expiration (probablement sans conséquence, découvert par hasard en investiguant un autre problème).

          jscipione a corrigé un problème de rafraîchissement de l’affichage lorsque des fenêtres sont empilées, qui pouvait conduire à ne pas bien effacer la barre de titre dans certains cas.

          Un clic simple sur le coin bas-droite de la fenêtre (coin de redimensionnement) déclenchait par erreur une minimisation de la fenêtre concernée (madmax).

          media_server

          Le media_server prend en charge les flux audio et vidéo et permet de router ces flux entre différentes applications ainsi que depuis et vers le matériel (cartes son, cartes d’acquisition vidéo, webcams…).

          Travaux effectués par waddlesplash:

          Correction de problèmes de calculs de temps dans le mixeur audio (problèmes découverts suite à l’amélioration de la détection d’erreurs dans BTimeSource, mentionné plus haut), et ajout de contrôles d’intégrité supplémentaires lors du démarrage du mixeur.

          Cela corrige plusieurs bugs qui faisaient que le système n’avait pas de son au démarrage pendant un certain temps, avant que soudainement ça se mette à fonctionner.

          D’autre part, des améliorations de performance sur la programmation des évènements, et des corrections de crash sur la connexion et déconnexion des nœuds média vers la sortie audio, et sur le nœud multi-audio avec certaines cartes sons qui exposent des types de contrôles invalides.

          D’autres changements sont en cours pour pouvoir changer la sortie audio sans avoir besoin de redémarrer le serveur média, mais ça ne fonctionne pas encore.

          registrar

          Le registrar surveille quelles sont les applications déjà lancées et fournit divers services de communication entre applications, en particulier pour le presse-papier.

          Ajout de vérification d’erreurs si un message de récupération du contenu du presse-papier échoue. Cela peut arriver si on a mis beaucoup de données dans le presse-papier et qu’il n’y a plus assez de mémoire disponible.

          Des corrections du côté de la libbe permettent maintenant de gérer ces erreurs et de ne pas faire planter l’application concernée.

          input_server

          L’input_server` se charge des périphériques d’entrée (clavier, souris…)

          Améliorations la validation des données des fichiers de configuration de souris, qui dans certains cas pouvaient empêcher la souris de fonctionner. Refonte de la gestion des accès concurrents à la liste des périphériques, pour supprimer des verrous inutiles et permettre les accès à la liste même si un thread de gestion d’un périphérique est bloqué. (madmax)

          Les codes de touches pour la touche power et la touche \_ des claviers japonais s’étaient retrouvés assignées à des valeurs identiques (cela semble provenir tout droit de changements datant de BeOS, car ces touches non présentes sur un clavier de PC américain classiques sont assez mal documentées). La documentation a été mise à jour pour mieux expliquer quels sont les codes utilisés, et les différents pilotes (PS2, USB) ont été harmonisés pour utiliser les mêmes codes (x512 et PulkoMandy).

          Le code power pourra également être utilisé par un pilote GPIO sur les machines où c’est nécessaire (souvent non compatibles PC).

          net_server

          Le net_server se charge de toutes les opérations liées au réseau.

          mmlr a corrigé un problème dans le client DHCP, qui utilisait certaines variables sans les initialiser.

          package_daemon

          Le package_daemon vérifie la cohérence des paquets installés avec leurs dépendances, crée les dossiers de transactions et de sauvegarde de l’état passé du système, et se charge de lancer les scripts d’activation et de désactivation de paquets. L’accès au contenu des paquets est en revanche traité dans le noyau par le système de fichier packagefs.

          Changement des couleurs des fenêtres « problèmes » et « résultats » qui apparaissent quand il y a des conflits ou d’autres problèmes de résolution de dépendances lors de l’activation des paquets (jscipione).

          Kits

          Les « kits » sont les composants de la bibliothèque standard de Haiku. Il s’agit principalement d’une convention de documentation et d’organisation de code source pour regrouper des fonctionnalités liées entre elles.

          Interface

          L’interface kit` permet l’ouverture de fenêtre et l’ajout de contrôles d’interface graphiques à l’intérieur de ces dernières.

          Les objets BBitmap (permettant de stocker une image « raster ») avec le flag ACCEPT_VIEWS (permettant d’attacher une « vue" pour dessiner dans le bitmap ne sont plus automatiquement effacés. Cela permet de créer un bitmap à partir de données existantes, puis de dessiner autre chose par-dessus. Ce changement corrige un problème de compatibilité avec BeOS, et permet aussi d’utiliser cette méthode dans l’implémentation de WebKit pour Haiku (ZardShard).

          Un changement précédent avait causé un problème de compatibilité d’API avec BeOS, qui déclenchait dans certains cas une récursion infinie et un crash lorsqu’on essayait de faire défiler une BListView par glisser-déplacer (par exemple dans l’application Wonderbrush). Waddlesplash a corrigé ce problème, et jscipione a également ajouté quelques améliorations sur la mise à jour des items sélectionnés lorsqu’on effectue cette opération.

          Il est maintenant possible d’afficher des « checkmarks » (coche indiquant une option activée) sur les items de menus disposés en « matrice ». Habituellement les menus sont soit disposés sur une ligne, soit sur une colonne avec les items les un au-dessous des autres. Le mode « matrice » permet de s’affranchir de ces restrictions pour disposer les items librement avec du code applicatif.

          Mise à jour en direct des couleurs dans les contrôles BSpinner, refonte de l’héritage des couleurs de la vue parente, et changement de la couleur de fond des boutons en mode sombre (jscipione).

          Centrage vertical des dates dans BCalendarView (permettant d’afficher un calendrier) (nipos).

          Factorisation de code dans BView pour l’envoi des données BShape vers app_server (x512).

          La méthode de debug BPoint::PrintToStream affiche maintenant les coordonnées avec des décimales, permettant de détecter les points qui ne sont pas alignés avec la grille de pixels (ayu-ch).

          Les boîtes de texte marquées comme « invalides » ont maintenant un fond rouge. La bordure rouge utilisée précédemment n’était pas assez visible (nephele).

          Media

          Le media kit permet aux applications de s’interfacer avec le media server, et fournit en plus une interface standardisée pour les codecs audio et vidéo.

          Ajout d’assertions dans la classe BTimeSource pour empêcher les applications d’envoyer des temps avec un « drift » inférieur ou égal à 0. Le « drift" est utilisé comme multiplicateur et diviseur dans les calculs d’horloge, donc les valeurs inférieures ou égales à 0 causent des problèmes. Ceci a été mis en évidence par des corrections au niveau du noyau (voir plus loin dans la dépêche) et a ensuite permis de trouver encore d’autres problèmes en particulier dans les add-ons media (waddlesplash).

          Locale

          Le « locale » kit permet la traduction des applications, le formatage des nombres en fonction des préférences de chaque pays, la gestion des fuseaux horaires, et toutes les autres problématiques liées à l’internationalisation. Il s’agit principalement d’un enrobage de la bibliothèque ICU pour faciliter son utilisation avec les types natifs de Haiku.

          Meilleure gestion des erreurs si la bibliothèque ICU ne peut pas être initialisée (waddlesplash).

          Support

          Le support kit contient diverses méthodes et classes utilitaires et génériques.

          Contrôle d’intégrité des données lors de la déserialisation de BMessage (waddlesplash).

          Correction d’incohérence de nommage de paramètres de fonction entre les fichiers .cpp et .h détectés par cppcheck (mt).

          Pilotes de périphériques

          Les pilotes sont indispensables pour assurer le fonctionnement de Haiku sur une grande variété de matériel. Certains sont développés à partir des spécifications du matériel spécifiquement pour Haiku, et d’autres ont été adaptés de travaux réalisés pour d’autres systèmes d’exploitation.

          Le niveau de logging par défaut a été abaissé dans certains pilotes afin de ne pas trop polluer le journal système, en particulier:

          • Suppression de messages indiquant qu’aucun matériel compatible avec le pilote n’a été détecté,
          • Suppression de certains logs de debug dans les pilotes audio HDA et usb_audio.

          Processeurs et économie d’énergie

          Renommage du pilote intel_cstates en x86_cstates puisque les processeurs récents de chez AMD sont également pris en charge par ce pilote.

          Appel à ce pilote à plus d’endroits dans le noyau pour mettre les processeurs en veille ou au ralenti quand ils ne sont pas utilisés.

          Réseau

          virtio_net

          Le pilote virtio_net (carte réseau utilisée dans les machines virtuelles) implémente maintenant le « checksum offloading » pour les protocoles IP, TCP et UDP. En effet, dans le cas de ce pilote, les vérifications et calculs de sommes d’intégrité doivent être faits de toutes façons du côté de la machine hôte, il est donc inutile de les refaire dans la machine virtuelle.

          Au passage, correction de quelques erreurs dans ce driver, et en particulier de problèmes de calcul de taille de buffers en mémoire.

          broadcom750x

          Utilisation des interruptions par messages (MSI) lorsque c’est nécessaire pour certaines versions du matériel (waddlesplash).

           vmxnet

          Nouveau pilote porté depuis FreeBSD qui permet d’utiliser l’interface réseau paravirtualisée de VMWare (CodeForEvolution).

           Couches de compatibilité BSD

          Haiku utilise des pilotes réseau venus de FreeBSD et OpenBSD, cela permet de mutualiser les ressources et de ne pas perdre du temps à réinventer la roue. Une couche de compatibilité permet de réutiliser les pilotes avec très peu de modification dans leur code et une simple recompilation.

          Cette approche est également utilisée par d’autres systèmes d’exploitation comme RTEMS.

          La couche de compatibilité a reçu des corrections de problèmes sur l’allocation de mémoire dédiée aux transferts DMA, ainsi qu’un problème sur le calcul de la taille d’un buffer de réception, qui empêchait les pilotes de fonctionner sur certains matériels.

           TCP

          Waddlesplash a travaillé sur l’amélioration de l’implémentation de TCP :

          • Refonte de la gestion des ACK reçus dans le désordre,
          • Amélioration du code de débogage pour investiguer des crashs du noyau remontés par quelques utilisateurs,
          • Modification du code de mise à jour de la taille de fenêtre TCP pour éviter d’envoyer inutilement des changements de taille,
          • Correction de calcul du temps d’aller-retour,
          • Implémentation du redimensionnement dynamique de la fenêtre de réception (auparavant, elle était de taille fixe),
          • Ajout d’assertions à divers endroits dans la pile réseau pour détecter les problèmes à la source.

          Ces améliorations permettent au trafic TCP d’être au moins 10 fois plus rapide, selon le type de connexion utilisé, et règle un problème de lenteur des téléchargements depuis Haiku qui était présent depuis assez longtemps.

           Ethernet

          Du côté d’Ethernet, quelques améliorations et nettoyages sur le calcul de la MTU (taille maximale d’un paquet qui peut être envoyé). Pour l’instant, la découverte du « path MTU », la MTU du chemin complet entre deux machines, n’est pas encore disponible. Haiku ne s’autorise donc pas à envoyer du trafic plus large qu’une trame Ethernet standard, même si cela pourrait être possible pour le réseau local. Il reste donc une amélioration potentielle des performances réseau dans certains cas.

           UNIX domain sockets

          Les sockets UNIX sont une méthode de communication entre processus standardisée par POSIX, utilisée surtout par des logiciels portés depuis d’autres systèmes (les applications natives pour Haiku utiliseront plus volontiers des BMessages ou des ports).

          Amélioration et nettoyage du code autour de la gestion des données annexes dans les sockets UNIX. Correction de petites fuites de mémoire et d’un kernel panic qui pouvait se produire lors de la fermeture d’un socket (waddlesplash).

          USB

          Implémentation de l’USB « Super Speed Plus », qui permet des connexions USB avec un débit pouvant atteindre 10 gigabits par seconde (korli).

          Refonte et consolidation du comptage de références dans la pile USB, ce qui met en évidence sous forme de kernel panic des cas où les choses ne sont pas bien faites. Ce n’est pas agréable, mais c’est tout de même mieux qu’une corruption mémoire difficile à investiguer (waddleplash).

          Décodage des descripteurs USB Audio v2 dans la commande listusb, mais pas encore dans le pilote usb_audio qui implémente pour l’instant seulement la version 1 (gscrain).

          PCI

          Correction de problèmes d’accès au bus PCI sur les machines équipées de ACPI. Suite à une modification précédente, les accès sur 8 ou 16 bits étaient convertis en accès sur 32 bits, mais ce n’est pas le comportement attendu. En particulier, certains registres effacent automatiquement leur contenu lorsqu’ils sont lus, ou bien les données accessibles en lecture et en écriture ne sont pas les mêmes. (PulkoMandy)

          Il n’est donc pas possible de lire une valeur sur 32 bits, remplacer 8 bits, et réécrire 32 bits pour simuler une écriture sur 8 bits dans un registre.

          Les accès sont à nouveau traités correctement, ce qui permet à Haiku de fonctionner à nouveau normalement sur les machines concernées par ce type d’accès au bus PCI (cela dépend du matériel et des pilotes).

          Périphériques de stockage

          Petites améliorations de performances dans le pilote NVMe (waddlesplash).

          Modification du pilote AHCI/SATA (waddlesplash) :
          - Suppression de code dupliqué pour utiliser à la place des fonctions communes partagées avec d’autres pilotes,
          - Correction d’une confusion entre adresses 32 et 64 bits qui empêchait de démarrer la version 32
          bits de Haiku sur certains systèmes avec plus de 4Gio de RAM.

          La pile SCSI prend mieux en compte les restrictions sur les adresses DMA. Chaque pilote de périphérique qui implémente SCSI peut indiquer ce qu’il est capable de faire, et la pile SCSI fait en sorte que les demandes de transferts DMA respectent ces contraintes, ce qui évite aux pilotes de devoir découper par eux-mêmes les transferts en unités qu’ils sont capables de traiter (waddlesplash).

          ACPI

          ACPI est une interface standardisée avec le matériel. Elle permet la gestion d’énergie (extinction de la machine par exemple), ainsi que l’accès à du matériel annexe tels que les boutons on/off, la détection de rabat de l’écran sur un PC portable, le contrôle des LEDs indicatrices ; ainsi que la découverte de matériel non connecté sur le bus PCI (comme certains modules eMMC dans des tablettes et ordinateurs à bas coût).

          La spécification étant assez complexe, la bibliothèque ACPICA est utilisée pour implémenter les bases de ACPI. Ensuite, des pilotes dédiés permettent d’exposer chaque périphérique ACPI.

          Mise à jour de ACPICA avec la dernière version publiée par Intel (publiée en mars), et un peu de nettoyage afin de pouvoir intégrer quelques patchs dans la version upstream de ACPICA (PulkoMandy).

          Ajustement du pilote ACPI pour mapper sa mémoire physique en « write back » au lieu de désactiver complètement le cache. C’est nécessaire sur ARM64, car le cache permet d’intercepter les accès mémoire non alignés. Correction de problèmes liés au fait que la même zone de mémoire physique pouvait être mappée plusieurs fois avec des configurations différentes, ce qui est impossible (déclenche une « machine check exception ») (oanderso).

          Graphiques

          Avancées sur la prise en charge des cartes graphiques Intel de générations Tiger Lake, Ice Lake et Gemini Lake (ttmfx, ilzu, PulkoMandy). L’utilisation de ces cartes graphiques reste assez limité, sans accélération matérielle et sans possibilité d’utiliser plusieurs écrans pour l’instant.

          virtio

          Les pilotes virtio permettent l’utilisation de matériel virtuel défini pour tirer le meilleur parti des machines virtuelles. Plutôt que de copier le fonctionnement d’un matériel existant, l’interface peut être conçue pour rendre le travail plus simple aussi bien pour l’hôte que pour le système virtualisé.

          Correction de problèmes dans l’allocation des files de messages virtio et amélioration de la gestion des erreurs (mmlr).

          Vérification de l’état du périphérique après une réinitialisation, et correction d’un accès mémoire hors limite dans le pilote virtio_pci (korli).

          PS/2

          Les ports PS/2 ont disparu de la plupart des machines depuis de nombreuses années, mais le protocole est encore utilisé pour les claviers des ordinateurs portables ainsi que pour certains touchpads. Ces derniers utilisent de nombreuses extensions peu standardisées et mal documentées pour offrir des fonctions avancées qui n’existaient pas à l’époque des souris à deux boutons.

          Le driver reçoit ce trimestre une refonte de la gestion des verrous entre ses différents composants, pour essayer de régler quelques problèmes de synchronisation (waddlesplash).

          Systèmes de fichiers

          ram_disk et ramfs

          ram_disk est un périphérique bloc (block device) qui stocke ses données en RAM (non persistante au redémarrage). Il peut être formaté avec n’importe quel système de fichier.

          ramfs est un système de fichiers qui stocke ses données en RAM, sans passer par un block device. Cela permet de meilleures performances (pas besoin de journalisation par exemple), une meilleure intégration avec le cache de fichiers (la mémoire peut être partagée directement entre ramfs et le cache), et de s’affranchir des limites habituelles des périphériques de bloc (par exemple: une taille fixe connue lors de la création du système de fichiers).

          Un utilisateur a remonté un problème de compatibilité avec POSIX. Si on utilise mmap() sur un fichier stocké dans un ramfs, et que la taille du fichier n’est pas un multiple de la taille des pages de mémoire, la fin de la dernière page pouvait contenir des données aléatoires. Selon la spécification POSIX, il faut que cette zone soit remplie avec des 0, et le compilateur clang dépend de ce comportement pour implémenter une lecture rapide des fichiers sources compilés.

          Le problème a été corrigé, avec au passage une commonalisation de code entre ramfs et ram_disk, de petits ajustements de performances, et un peu de nettoyage.

          Enfin, la priorité des allocations mémoires de ces deux pilotes a été abaissée, ce qui permet d’éviter un gel du système s’il n’y a plus de mémoire disponible.

          Le pilote ramfs continue d’être stabilisé, quelques problèmes qui pouvaient encore causer des kernel panic ont été corrigés.

          packagefs

          packagefs est un système de fichier virtuel qui expose le contenu de fichiers de packages au format hpkg. Des paquets peuvent être ajoutés et supprimés pendant le fonctionnement du système, et il n’est pas nécessaire d’extraire leurs données sur disque.

          Plusieurs améliorations faites par waddlesplash :

          • Ajout de vérifications de la bonne utilisation de verrous entre différents threads et corrections de problèmes mineurs qu’elles ont mis en évidence,
          • Amélioration du message d’erreur si on essaie d’activer deux paquets qui entrent en conflit.

          Un reproche qui est souvent fait au packagefs est d’avoir augmenté les besoins en RAM de Haiku, en effet, depuis la version Beta 1 de Haiku, la configuration mémoire minimum recommandée est de 384Mio de RAM, alors que les versions précédentes se contentaient de 128Mio.

          • Utilisation d’object_cache` (un allocateur mémoire pour des objets qui font tous la même taille) dans différents endroits de packagefs pour réduire sa consommation de mémoire,
          • Utilisation de listes chaînées simples au lieu de listes chaînées doubles là où ça ne pose pas de problème de performances,
          • Suppression de champs constants dans certaines classes,
          • « inlining » des compteurs de références pour rendre les structures de données plus compactes,
          • Réorganisation des structures pour réduire le padding,
          • Retrait des « dépôts d’objets » dans les arènes d'allocation,
          • Découpage des allocations en plusieurs zones distinctes,
          • Utilisation de verrous moins fins (par exemple, avoir un seul verrou pour tout un dossier au lieu de un par fichier),
          • Utilisation d’un « bump allocator » pour les objets à courte durée de vie.

          La réduction de consommation mémoire avec ces changements est de près de 20%, soit environ 15Mio sur une installation de référence. En effet, un gain de quelques octets sur le stockage d’informations sur un fichier est multiplié par plusieurs milliers de fichiers présents sur le disque, ce qui fait que chaque petite optimisation est intéressante. Cependant, les investigations ont aussi permis de découvrir d’autres problèmes encore plus importants qui n’étaient pas directement liés au packagefs, on en reparle un peu plus loin.

          Un autre changement a été fait par waddlesplash, non seulement pour packagefs mais aussi pour d’autres endroits où le même code était utilisé : La fonction pour calculer un hash de chaîne de caractères utilisait un algorithme obsolète. Elle a été remplacée par hashdjb2 qui génère moins de collisions.

          FAT

          FAT est un système de fichier développé par Microsoft. Il est utilisé en particulier sur les cartes SD et les clés USB, ainsi que pour les partitions systèmes EFI. Bien que sa conception soit quelque peu obsolète, il reste donc indispensable.

          Le pilote FAT de Haiku, qui provenait tout droit d’un code source publié par Be, a été remplacé dans la version beta 5 par une nouvelle version basée sur le code de FreeBSD. Ce nouveau pilote reçoit depuis des améliorations régulières par Jim906, le développeur qui s’est chargé du portage du code de FreeBSD.

          Ce trimestre, le pilote reçoit des corrections sur l’initialisation des « media bytes » dans l’en-tête des partitions, des améliorations de performances pour réduire le temps nécessaire au montage d’une partition FAT, ainsi qu’une meilleure gestion des erreurs dans le traitement des noms de volumes. Il est également possible de monter les volumes FAT de taille supérieure à 2TiO.

          BFS

          BFS est le système de fichier hérité de BeOS et utilisé pour les partitions natives de Haiku. Il propose une très bonne implémentation des attributs étendus (sans limite de taille, et typés) et permet en plus d’exécuter des requêtes sur ces attributs pour localiser très rapidement les fichiers répondant à certains critères.

          L’implémentation du système de fichier BFS est assez mûre et reçoit habituellement peu d’évolutions. Cependant, il reste toujours des possibilités d’améliorer les performances.

          C’est le cas de la fonction de recherche de blocs libres. Les blocs sont chacun représentés par un bit dans une structure indiquant s’ils sont disponibles ou pas. La recherche de blocs libres se faisait bit à bit, mais il est possible de gagner beaucoup de temps en testant 64 bits d’un coup pour savoir tout de suite qu’ils représentent tous des blocs occupés, et passer directement aux 64 bits suivants. Cela améliore les performances de la création et du redimensionnement de fichier, en particulier sur les architectures RISC-V (waddlesplash).

          Query parser

          Plusieurs systèmes de fichiers conçus pour BeOS ou Haiku (bfs, ramfs, et packagefs) permettent l’utilisation d’attributs indexés par le système de fichiers qui permettent d’effectuer des requêtes pour localiser des fichiers comme dans une base de données.

          Depuis la version beta 5 de Haiku, ces 3 systèmes de fichiers partagent le code utilisé pour parser une requête (envoyée sous forme de texte) et la convertir en une opération de recherche exécutable.

          Ce parser pouvait dans certains cas (requêtes trop complexes) déclencher volontairement un kernel panic. Celui-ci a été remplacé par une « simple » erreur, remontée à l’application qui a déclenché la requête. L’application aura la charge de remonter cette erreur à l’utilisateur, et de l’inviter à simplifier sa demande.

          block_cache

          Le cache de blocs, comme son nom l’indique, stocke en mémoire RAM une copie de certains blocs des systèmes de fichiers. Cela permet d’accélérer les opérations bas niveau sur le système de fichier, en particulier pour mettre en cache des structures internes du disque. Il complète le file_cache, qui lui se trouve à un niveau plus haut, et met en cache uniquement le contenu des fichiers lus et écrits par les applications.

          Le seul changement notable sur le block_cache est le retrait de paramètres inutilisés dans certaines fonctions, afin de simplifier le code (waddlesplash).

          kernel

          Une correction de bug sur le blocage des threads avec timeout (par exemple, l’attente d’un mutex ou d’un sémaphore avec un délai maximum): dans certains cas, une fonction pouvait retourner B_TIMED_OUT pour d’autres raisons que l’expiration du timer. Ce n’était pas traité correctement, et le noyau supposait que le timeout avait expiré, alors qu’il s’agissait d’autre chose. Des vérifications supplémentaires permettent de traiter ce cas correctement.

          Correction de problème sur la programmation des timeouts « absolus temps-réel ». Comme leur nom l’indique, ils référencent l’horloge « real time » (qui essaie de suivre l’heure et la date « réelle », par opposition à l’horloge système qui est basée sur l’uptime de la machine, mais garantit de ne jamais faire de saut ou revenir en arrière). Ces timers ne fonctionnaient pas du tout (ou alors, seulement sur un coup de chance), et restaient probablement bloqués pendant une durée beaucoup plus longue que demandé. Au passage, nettoyage du code de gestion des timers.

          Dans le code de gestion des interruptions: ajout d’assertions pour investiguer un bug dans les addons vmware ou virtualbox.

          Correction d’un bug dans l’implémentation de kqueue qui produisait un blocage au démarrage de la libevent (qui utilise maintenant kqueue pour Haiku).

          Des petites améliorations de performances: sur l’allocateur mémoire du noyau, sur l’utilisation de verrous dans la gestion de la mémoire virtuelle, des fuites de mémoire dans l’allocation de page, des améliorations sur la détection de références devenues invalides (jpelczar + waddlesplash).

          Le script de link du noyau refuse maintenant les sections inconnues avec un message d’erreur, au lieu de simplement les ignorer (korli).

          Correction du décompte du temps CPU utilisé par le thread en cours d’exécution, pour donner des résultats plus fiables dans les applications qui affichent l’utilisation CPU (waddlesplash).

          Refactorisation du décompte du temps d’exécution des appels systèmes. Seul le temps passé dans l’exécution du syscall est prise en compte, sans mesurer la mise en place d’un appel système et du retour vers l’espace utilisateur (qui ne peuvent de toutes façons pas être mesurées de façon fiable depuis le noyau). Cela rend l’affichage des durées d’exécution dans strace plus facile à interpréter (waddlesplash).

          Réduction de la taille maximale des tampons mémoire pour stocker des dirent à 8Kio. La plupart des applications n’utilisent pas un tampon aussi large, et les quelques-unes qui le faisaient ont été modifiées pour réduire la taille. Cette réduction permet d’utiliser un allocateur spécialisé beaucoup plus rapide, ce qui devrait compenser les rares cas où le tampon est trop petit pour récupérer tout le contenu d’un dossier en une seule fois (waddlesplash).

          Correction de plusieurs problèmes dans le système de gestion des ressources faibles (qui essaie de libérer de la mémoire quand il n’y en a plus assez de disponible). Dans certains cas, le système finit par geler ou déclencher un kernel panic, alors qu’il devrait toujours être possible de refuser des demandes d’allocation mémoire venant de l’espace utilisateur, et de conserver suffisamment de mémoire libre pour au moins afficher proprement une erreur.

          Amélioration de la gestion des mutex (exclusions mutuelles entre threads):

          • Ajout d’assertions pour détecter des cas de réveil d’un thread qui ne devrait pas l’être.
          • Correction d’un problème introduit récemment et investigué à l’aide de ces nouvelles assertions.
          • L’ABI des locks est identiques entre les builds du kernel en version debug ou release, ce qui permet de ne pas avoir besoin de recompiler tous les pilotes dans le même mode que le kernel. Les pilotes compilés en mode release vont déclencher une erreur de symbole manquant si on essaie de les utiliser avec un noyau en mode debug, dans l’autre sens, il n’y a pas de problème. Auparavant, dans les deux cas on obtenait des crashes ou un gel complet du système, difficile à investiguer et faisant perdre du temps.
          • Ajout d’assertions dans plusieurs cas pour détecter les utilisations incorrectes des rw-locks. Certaines activées par défaut, et d’autres uniquement sur demande à la compilation du noyau en raison de coût de vérification trop importants.
          • Correction de mauvaises utilisations des rwlocks ainsi détectées.

          Généralisation de l’utilisation de fonctions utilitaires partagées pour la conversion des timespec en durées en microsecondes. Cela permet aux fonctions concernées (entre autres kqueue) de bénéficier de contrôles de validité supplémentaires (waddlesplash).

          Ajout d’informations de debug supplémentaires dans la sortie de la commande slab_object du debugger du noyau.

          Réactivation de la calibration du TSC à partir d’informations du CPUID lorsque Haiku s’exécute dans un hyperviseur, comme c’était déjà le cas lorsqu’il s’exécute directement sur une machine physique. Le TSC est un timer interne du CPU qui permet des mesures de temps très rapides (une seule instruction CPU) mais dans une échelle de temps arbitraire qu’il faut corréler avec le « vrai » temps. Cela peut être fait soit à l’aide d’une mesure empirique (méthode historique), soit à l’aide d’informations sur cette horloge disponibles dans les informations retournées par l’instruction CPUID.

          Affichage de plus de fonctionnalités du CPU reconnues dans les logs de debug pour les processeurs x86 (korli).

          Ajout d’un raccourci clavier (Control+D) pour quitter le debugger noyau et reprendre l’exécution normale si possible (équivalent à la commande continue ou co) (mmlr).

          Le chargement des pilotes de périphériques se fait en priorité depuis les dossiers non-packaged avant de rechercher les fichiers dans les paquets logiciels, ce qui permet de tester facilement une version modifiée d’un pilote - sauf si les dossiers non-packaged sont désactivés dans la configuration du noyau (korli).

          VFS

          Le VFS (virtual file system) est le composant de Haiku qui gère l’accès aux fichiers. Il fait l’intermédiaire entre les appels systèmes liés aux fichiers (open, read, write…) et les systèmes de fichiers eux-mêmes. Il implémente autant que possible ce qui peut être mis en commun entre tous les systèmes de fichiers: résolution de chemins relatifs, vérification de permissions…

          Cela rend plus facile l’écriture d’un nouveau système de fichiers, qui peut alors se concentrer sur les aspects bas niveau et la gestion de ses structures de données.

          Ajout de vérifications d’intégrités supplémentaires dans le VFS pour détecter des bugs dans les systèmes de fichiers le plus rapidement possible, au lieu d’obtenir un crash du noyau difficile à investiguer un peu plus tard.

          Retrait d’un scan du bus SCSI et des pilotes associés par le device manager pour réduire un peu le temps de démarrage.

          Correction d’un gros problème dans l’API du noyau IORequest qui aboutissait à une confusion entre la taille totale d’une requête et l’offset de la dernière donnée transférée (les transferts ne commençant pas forcément à l’offset 0). La conséquence était l’écrasement de données dans le cache de fichiers, déclenchant des crashes du noyau avec des messages d’erreur incompréhensibles à propos des structures de pages. Correction d’un problème de calcul d’offset qui faisait que certaines opérations étaient considérées comme réussies, alors qu’il y avait en fait une erreur.

          Correction de problèmes de décomptage de références et de gestion du cache à l’interface entre ramfs et VFS, mis en évidence lors du travail de portage de Firefox.

          Ajout d’une acquisition de référence sur un vnode qui manquait dans le cache de fichiers (waddlesplash).

          Améliorations du cache d'entrées, dont en particulier la mise en cache du hash des noms de fichiers, pour éviter des comparaisons de chaînes de caractères inutiles.

          Gestion de la mémoire

          La gestion de la mémoire virtuelle est une des tâches essentielles d’un système d’exploitation. Elle garantit l’isolation entre les différents processus, permet d’utiliser la mémoire physique le mieux possible (éventuellement en déplaçant certaines allocations peu utilisées vers un espace d’échange sur disque), et permet aussi aux différents processus de se partager des données.

          Il s’agit également d’un composant très sollicité, et dont les performances impactent beaucoup le comportement du système. Une mauvaise gestion de la mémoire peut fortement ralentir le système ou le rendre instable.

          Ajout d’assertions dans le code gérant les pages de mémoire, pour essayer d’intercepter ce type de correction plus rapidement si elles se reproduisent.

          Dans l’arbre des areas globales : ajout d’assertions pour détecter les identifiants d’areas dupliqués (chaque area doit bien sûr avoir un identifiant unique).

          Implémentation de PAT (Page Attribute Table) pour les processeurs x86. Les PAT permettent de configurer des zones de mémoires qui peuvent ou ne peuvent pas être mises en cache (complètement ou en write-through). Elles remplacent les MTRR en permettant un contrôle plus fin et plus flexible. Au passage, nettoyage de l’implémentation des MTRR (préservée pour les processeurs plus anciens incompatibles avec PAT), ajout de nouvelles commandes dans le debugger noyau. Renommage des constantes B_MTR_* pour indiquer précisément leur rôle indépendamment des dénominations utilisées dans les registres MTRR qui ne sont pas très claires (mmlr).

          Lorsque le système utilise PAT, ajout d’assertions pour détecter les tentatives d’accéder à la même zone de mémoire physique avec des configurations de cache différentes. Elles ne sont pas activées lorqu'on utilise les MTRR, car ces dernières ne permettent pas une configuration aussi fine (waddlesplash).

          Ajout d’informations supplémentaire dans le message de kernel panic indiquant qu’une page devrait être libre mais qu’elle ne l’est pas. Modification de la commande page du debugger noyau pour récupérer la liste des espaces d’adressage depuis les structures du kernel plutôt que d’itérer sur tout l’espace d’adressage (ce qui pouvait fonctionner sur un espace 32 bit, mais pas en 64 bit).

          Correction du code de « guarded heap » du noyau qui ne compilait plus. Il s’agit d’un allocateur mémoire plus lent mais avec de nombreuses vérifications d’intégrité pour détecter les débordements de tampons, double free, et autres problèmes de gestion de la mémoire dans le noyau (kallisti5).

          Le fichier swap est automatiquement supprimé, et l’espace disque libéré, lors de la désactivation de la swap. Auparavant, un redémarrage était nécessaire (waddlesplash).

          Correction d’un problème dans l’allocation de mémoire « early boot » (avant que l’allocation normale soit mise en place), qui empêchait le démarrage sur les systèmes pouvant gérer de grandes quantités de mémoire (plusieurs centaines de Gio) (waddlesplash).

          libroot

          La libroot regroupe tous les composants de la librairie standard C (parfois découpée en libc, libm et libpthread pour d’autres systèmes). Elle contient en plus un certain nombre d’extensions spécifiques à Haiku et à BeOS.

          Changements effectués par waddlesplash, sauf mentions spécifiques:

          Nettoyage de code dans la classe WeakReferenceable, une classe de comptage de références intrusive qui autorise les références "faibles".

          Correction de problèmes dans le code d’interfaçage avec ICU pour la conversion de dates (nipos et waddlesplash).

          libnetwork

          Nettoyage de code de compatibilité avec BeOS dans la libnetwork, pour faire en sorte qu’il ne soit plus du tout compilé sur les architectures n’offrant pas de compatibilité avec BeOS.

          Compatibilité POSIX

          Implémentation minimale de mknod et mknodat dans le seul cas spécifié par POSIX, qui permet de réaliser une opération équivalente à mkfifo. La gestion des devices dans Haiku est très différente de celle utilisée traditionellement par UNIX, et ne se prête pas à l’implémentation des autres utilisations de ces fonctions.

          Rectification de l’implémentation des fonctions *at (par exemple linkat) qui permettent de réaliser une opération à partir d’un descripteur de fichier au lieu d’un path. Dans la libroot, ces fonctions envoyaient la valeur -1 aux appels systèmes pour implémenter AT_FDCWD. La valeur de AT_FDCWD a été modifiée pour choisir autre chose que -1 (qui est souvent utilisé pour indiquer une erreur dans le code de retour d’autres fonctions). Les appels systèmes acceptent pour l’instant les valeurs -1 et AT_FDCWD, mais rejettent maintenant toutes les autres valeurs négatives.

          Remplacement d’une partie du code de gestion des flux d’entrée-sortie par la version de la glibc. La bibliothèque libroot est un patchwork d’implémentations provenant de la glibc, de musl, et de divers BSD, un objectif à terme est d’essayer de se rapprocher d’une de ces implémentations, mais on ne sait pas encore trop de laquelle. En tout cas, le code des I/O provient majoritairement de la glibc afin d’être très compatible avec ce qui était utilisé dans BeOS.

          La fonction gmtime retourne une struct tm avec le champ tm_zone contenant la chaîne "GMT" (waddlesplash).

          Correction de la conversion des "surrogate pairs" dans la fonction mbrtowc.

          Mise en conformité de l’implémentation des threads avec POSIX :

          • Ajustement de code d’erreurs retournés par les fonctions
          • Suppression de la possibilité de retourner EINTR depuis un rwlock
          • Correction de deadlocks dans les barriers
          • Correction de plusieurs problèmes dans l’implémentation des sémaphores anonymes.

          Mise en place systématique de l’utilisation de _DEFAULT_SOURCE pour protéger les extensions à la norme POSIX, ce qui permet de les activer automatiquement via l’inclusion de features.h lorsque c’est possible.

          Nettoyage de quelques fichiers d’en-tête, dont en particulier <sys/select.h>, pour éviter de polluer l’espace global avec des macros et des définitions en double (waddlesplash).

          Prise en compte correcte du drapeau O_NONBLOCK lors de l’ouverture d’un FIFO (korli).

          runtime_loader

          Le runtime_loader est le composant responsable du chargement en mémoire des exécutables et du lancement de nouveaux processus. Il réalise la résolution des dépendances et la recherche des bibliothèques partagées nécessaires pour l’exécution d’un programme.

          Il reçoit des évolutions suite au portage d’applications complexes venues de Linux, qui nécessitent souvent plusieurs dizaines de bibliothèques partagées.

          Correction de problèmes détectés en testant un portage expérimental et instable de Firefox: crash du runtime_loader dans certains cas si on charge une bibliothèque (via dlopen ou load_add_on) dont il manque des dépendances.

          Retrait de l’option -fno-builtin dans les drapeaux de compilation du runtime_loader, comme cela avait déjà été fait pour la majorité de la libroot. Cela permet à gcc de remplacer des appels à des fonctions standardisées par une implémentation inline plus performante (waddlesplash).

          Outils de debug

          Développement d’outils pour enregistrer ce qu’il se passe pendant le démarrage du système et détecter d’éventuels problèmes de latence, de 'lock contention', etc. Au passage, correction de divers problèmes liés à ces outils : les barres de défilement de DebugAnalyzer, les permissions noyau dans transfer_area, etc.

          Amélioration de la remontée des valeurs de retour des appels systèmes vers strace sur les plateformes x86 32-bit.

          Pour terminer, un changement réalisé par mmlr : amélioration de l’allocateur mémoire "guarded heap" pour le rendre utilisable plus facilement, y compris comme allocateur pour tout le système. Cet allocateur permet de détecter les accès au-delà de la fin d’une zone mémoire allouée avec malloc(), ainsi que les accès à de la mémoire déjà libérée, mais au prix d’une consommation mémoire nettement plus élevée qu’un allocateur classique. La disponibilité d’un espace d’adressage de 64 bits permet de limiter les cas où une adresse mémoire est initialement utilisée pour une allocation, puis libérée et allouée à nouveau pour autre chose.

          Un problème de gestion d’erreur dans l’interfaçage entre le Debugger et le noyau pouvait conduire à un gel complet du système dans certains cas de plantage du debug_server, en particulier s’il n’y a plus assez de mémoire RAM disponible.

          Bootloader

          Ajout d’une vérification manquante pour prendre en compte l’option « BlockedEntries » dans le bootloader. Cette option s’appelait précédemment « EntriesBlacklist » mais a été renommée pour utiliser un terme non entaché de racisme. L’ancien nom continue de fonctionner pour ne pas casser les installations existantes, mais n’est plus documenté.

          Augmentation de la taille maximum autorisée pour les allocations « standard » sur la pile. L’allocateur mémoire du bootloader traite séparément les allocations de grande taille, mais ces allocations ne sont pas correctement libérées lors du transfert de contrôle vers le noyau, en particulier sur les machines utilisant un BIOS non EFI. Pour l’instant, une correction complète du problème semble compliquée à mettre en place, mais la modification permet de libérer de la mémoire allouée pour l’accès au packagefs (le bootloader a besoin d’y accéder pour trouver le noyau, qui est stocké dans un paquet). Ce changement permet de libérer plusieurs dizaines de Mio de mémoire, et complète les changements mentionnés plus haut sur la gestion des paquets après démarrage. Il est possible de configurer Haiku pour fonctionner avec moins de 100Mio de mémoire (waddlesplash).

          Réparation de la ré-initialisation des ports série sur le bootloader EFI. Le port série est utilisé à des fins de debug, mais il peut être accédé de plusieurs façons différentes (en adressant directement le matériel, ou bien via des services EFI dédiés). Le bootloader doit passer d’une méthode à l’autre à différentes étapes du démarrage: accès direct au port physique dans les premières étapes (en détectant s’il est bien présent à une adresse standard), accès via les services EFI une fois ceux-ci initialisés, puis à nouveau accès direct au matériel après l’arrêt des services EFI pour la dernière étape de passage de contrôle au noyau (cette fois-ci à une adresse qui peut être configurée dans les options du bootloader et du noyau). Ce fonctionnement ne s’insère pas forcément très bien dans la logique du bootloader, qui n’avait à l’origine pas été conçu pour une gestion aussi complexe des entrées-sorties (VoloDroid).

          Réduction de la quantité de logs liés à la mise en place de SMP (gestion de plusieurs processeurs) dans le bootloader pour BIOS (waddlesplash).

          Le menu de démarrage affiche la version (numéro 'hrev') du paquet système correspondant à chaque point de restauration disponible, ce qui facilite l’identification des états qui correspondent à un changement de version du système, et pas une simple installation, désinstallation ou mise à jour de paquets logiciels (waddlesplash).

          Documentation

          Haiku Book

          Le « Haiku Book » est un projet de documentation des APIs publiques de Haiku. Il doit à terme remplacer le « Be Book », qui documente les APIs de BeOS, mais ne peut pas être mis à jour à cause de se license CC BY-NC-ND. Actuellement, il faut jongler entre ces deux documentations.

          La documentation de B_INFINITE_TIMEOUT (constante permettant d’indiquer à certaines fonctions qu’on veut les exécuter sans timeout, et attendre indéfiniment) a été mise à jour pour indiquer explicitement que sa valeur numérique est INT64_MAX (waddlesplash).

          Correction de fautes de frappe dans la documentation des API liées aux entrées clavier (drea233).

          Haiku Interface Guidelines

          Ce document présente les bonnes pratiques et conventions pour la conception d’interfaces graphiques fonctionnant avec Haiku.

          Ajout d’une section sur la gestion des fichiers récemment utilisés et la façon dont ils peuvent être exposés aux utilisateurs.

          Wiki et documentation interne

          Le wiki contient des informations utiles aux développeurs de Haiku.

          La documentation « interne" documente le fonctionnement de Haiku en s’adressant principalement aux contributeurs du système, par opposition aux personnes qui souhaitent seulement développer ou porter des applications.

          Mise à jour de la page « release cookbook » indiquant toutes les étapes à suivre lors de la publication d’une version de Haiku.

          Notes d’administration système : mise à jour des instructions pour instancier des machines Google Cloud Platform (kallisti5).

          Système de build, environnement de compilation

          La compilation d’un système d’exploitation complet n’est pas chose facile. D’autant plus pour Haiku, qui présente les particularités suivantes:

          • Utilisation de deux versions de gcc (gcc 2.95.3 et gcc 13) pour la version 32 bit de Haiku, afin d’assurer la compatibilité binaire avec BeOS,
          • Possibilité de compilation croisée depuis Linux, Mac OS et d’autres systèmes, ou depuis un hôte Haiku,
          • Compilation d’outils pour la machine hôte de la compilation croisée, avec si nécessaire une couche de compatibilité permettant d’écrire ces outils en utilisant des API et fonctionnalités spécifiques à Haiku,
          • Possibilité de compiler des applications pour un système hôte existant (une autre version de Haiku) à des fins de test,
          • Compilation d’un système complet (noyau, bibliothèques, applications, image disque) en une seule opération.

          Pour ces raisons, l’utilisation d’un système de build haut niveau (CMake, Meson…) s’avère plutôt complexe. L’utilisation de make ou de ninja directement serait de trop bas niveau. Le choix de Haiku est donc d’utiliser l’outil jam, qui est malheureusement assez peu populaire et tombé à l’abandon dans sa version originale. Haiku maintient un fork de jam qui est concurrent de ceux maintenus par Boost et par Freetype.

          Reformatage des fichiers Jamfile pour lister une seule cible par ligne au lieu de les rassembler, cela facilite les rebase et résolutions de conflits (x512).

          Mise à jour de paquets en préparation pour la version beta 5: OpenSSL 3, Python 3.10, et autres mises à jour diverses (PulkoMandy, waddlesplash, kallisti5).

          Ajout de l’inclusion de <features.h> dans <sched.h>. Le fichier d’en-tête features.h configure la visibilité des extensions GNU et BSD aux fichiers d’include standards C et POSIX, en fonction d’options de ligne de commande du compilateur. L’inclusion de ce fichier permet d’utiliser facilement et par défaut ces extensions (PulkoMandy).

          Mise à jour des marque-pages fournis par défaut avec le navigateur WebPositive (waddlesplash).

          Ajout des en-têtes de la bibliothèque linprog dans le paquet haiku_devel. Ces en-têtes sont nécessaires pour les applications associées au système de layout d’interfaces graphiques ALM (korli).

          Correction de fautes de frappe dans des commentaires (jmairboeck) et d’un problème de compatibilité C89 dans un en-tête système (waddlesplash).

          La taille des images « nightly build » de Haiku est maintenant de 650 Mo, ce qui laisse un peu plus de place disponible pour les utiliser et créer quelques fichiers (jscipione).

          Diverses corrections pour une nouvelle fois essayer de faire fonctionner la compilation de Haiku avec Clang (waddlesplash, oanderso). Les choses en sont toujours au même point depuis plusieurs années, avec des corrections de temps en temps mais quelques parties du système qui ne fonctionnent toujours pas correctement.

          La compilation du profil « nightly » n’a plus besoin de générer le paquet haiku_source contenant le code source de Haiku. Ce paquet est inclus uniquement dans les images de releases (pour faciliter le respect strict de la licence GPL de certains composants de Haiku), mais, pour des raisons de dépendances entre cibles dans le système de build, il était tout de même généré pour les autres profils, ralentissant la compilation (waddlesplash).

          Améliorations du script ./configure (jessicah, OscarL et waddlesplash):

          • Le script vérifie que les options passées fournies sont valides, et rejette immédiatement les configurations incohérentes plutôt que de laisser la compilation échouer bien plus loin.
          • Validation que l’interpréteur Python sélectionné existe bien, et uniformisation de la syntaxe utilisée pour choisir un interpréteur avec la façon dont c’est fait pour d’autres outils.
          • Détection des options disponibles pour demander à wget de ré-essayer un téléchargement en cas d’échec, ce qui permet d’assurer la compatibilité avec wget2.
          • Utilisation automatique d’une version moderne de GCC pour compiler les outils « hôtes » lors de la compilation à partir d’une machine hôte fonctionnant sous Haiku en version 32 bit, en ignorant le compilateur par défaut qui est gcc 2 pour des raisons de compatibilité avec BeOS.

          Réorganisation du code source de libroot pour déplacer les implémentations de malloc dans des sous-dossiers séparés, et faciliter l’expérimentation avec d’autres implémentations de malloc. L’allocateur hoard2 utilisé actuellement n’est pas adapté aux architectures 64 bits, une tentative a été faite il y a quelques années avec rpmalloc, mais ce dernier pose des problèmes sur les
          architectures 32 bits. Des investigations sont en cours avec l’implémentation de malloc d’OpenBSD.

          L’outil de dessin Wonderbrush est maintenant disponible sur toutes les architectures. Historiquement, le code de Wonderbrush n’était pas libre, mais une version gratuite était offerte aux utilisateurs de Haiku. Le développeur principal de Wonderbrush n’est plus très actif sur le projet et a décidé de publier les sources, ce qui a permis de recompiler le programme en version 64 bits et plus tard sur les autres architectures non x86. Mais ces nouvelles versions n’avaient jamais été incluses dans Haiku (PulkoMandy).

          Nettoyage et centralisation des définitions préprocesseur pour la compatibilité avec BeOS. Désactivation de la compatibilité avec BeOS dans le noyau, la compatibilité avec les pilotes et modules noyau de BeOS n’étant plus assurée depuis quelque temps dans Haiku.

          Suppression de définitions de règles obsolètes et inutilisées dans le Jamfile permettant de construire le fichier package_repo (CodeforEvolution).

          Remise en service du test DiskDeviceManagerTest qui ne compilait plus (waddlesplash).

          ARM & PowerPC

          Actuellement, Haiku est disponible officiellement pour les architectures x86 32 et 64 bits. Une version RISC-V 64 bits expérimentale est également disponible mais pas encore totalement intégrée dans le dépôt de code principal, des discussions sont en cours sur la bonne façon de faire certains changements nécessaires. Les versions ARM (32 et 64 bits) et PowerPC sont les prochaines cibles sur la liste. La première, car c’est une architecture très populaire, la deuxième plutôt pour des raisons historiques : c’est l’une des architectures sur lesquelles fonctionne BeOS.

          Renommage de structures qui étaient initialement spécifiques à l’architecture x86, mais qui sont finalement utilisées également sur d’autres CPU sans nécessiter de changements (waddlesplash).

          Réparation de la console de texte du chargeur de démarrage OpenFirmware qui était cassée depuis l’adaptation pour OpenBOOT sur les machines SPARC (zeldakatze).

          Sur ARM, utilisation de la bonne instruction CPU pour mettre le processeur en veille quand il n’y a rien à faire (archeYR).

          oanderso continue le travail sur le portage ARM64:

          • Correction de plusieurs problèmes liés à la gestion du cache et de la MMU dans le bootloader, ce qui permet de démarrer le noyau dans une machine virtuelle sur un hôte Apple M1.
          • Correction de l’implémentation des timers dans le kernel qui ne fonctionnait pas dans les environnements virtualisés.
          • Quelques avancées sur la gestion de la MMU : Implémentation de la table de translation de la mémoire virtuelle, du traitement des exceptions matérielles (défauts de page), des TLBs.
          • Synchronisation du cache d’instructions.
          • Correction de problèmes de double lock.

          Ajout de messages sur le port série traçant l’exécution de méthodes spécifiques à une architecture qui ne sont pas encore implémentées. Ceci permet de détecter facilement quelle est la prochaine fonction à implémenter (waddlesplash).

          Nettoyage et documentation du fichier ArchitectureRules pour simplifier la configuration des options en ligne de commande du compilateur (qui doit savoir traiter deux versions de gcc et clang) (waddlesplash).

          Commentaires : voir le flux Atom ouvrir dans le navigateur

          • ✇LinuxFr.org : les dépêches
          • Deno 2.0 est là
            Le temps où Node.js régnait en maître comme la solution incontournable pour exécuter du code JavaScript côté serveur est-il révolu ? En tout cas, il a aujourd’hui des challengers de taille comme Bun (qui pourrait lui aussi mériter une dépêche) ou Deno. C'est donc de ce dernier qu'il sera question dans cette dépêche, à l'occasion de la sortie de sa version 2.0 lien nᵒ 1 : Annonce sur le blog officiellien nᵒ 2 : Site officiel de Denolien nᵒ 3 : JSRSommaire Pour rappel La mascotte ! Deno 1.x, de

          Deno 2.0 est là

          Le temps où Node.js régnait en maître comme la solution incontournable pour exécuter du code JavaScript côté serveur est-il révolu ? En tout cas, il a aujourd’hui des challengers de taille comme Bun (qui pourrait lui aussi mériter une dépêche) ou Deno. C'est donc de ce dernier qu'il sera question dans cette dépêche, à l'occasion de la sortie de sa version 2.0

          Sommaire

          Titre de l'image

          Pour rappel

          Deno est un runtime JavaScript et TypeScript. Il a vu le jour suite au constat de Ryan Dahl (créateur aussi de Node.js), que Node avait des problèmes de conceptions, et qu'il était nécessaire de repartir de zéro en tenant compte de l'expérience de Node pour ne pas refaire les mêmes erreurs. Il imagine Deno comme un runtime avec un modèle de sécurité par défaut plus strict. Les programmes Deno n'ont pas accès au système de fichiers, au réseau ou à l'environnement, sauf si on leur accorde explicitement ces permissions. Deno est écrit en Rust, et se base sur le moteur JavaScript V8 de Google. Deno se distingue également de Node en offrant la possibilité d'importer les dépendances via des URL, mettant en cache chaque module lors de l’importation pour améliorer la vitesse d’exécution.

          La mascotte !

          La première chose notable quand on passe de Node.js à Deno, c'est sa mascotte ! En effet, même si Node.js possède bien une petite tortue comme mascotte, celle-ci n'est utilisée nulle part ! Personnellement, j'ai toujours trouvé bien plus chouettes les projets qui ont des petites bestioles comme mascotte (Mozilla, Tux …). Et chez Deno, le dinosaure mascotte est omniprésent sur tout le site. Et en plus, à l'occasion de la version 2.0, on peut habiller notre dino sur la home page du projet ! Et ça c'est cool ! Voici le mien, qui est en compagnie de Ferris, la mascotte officieuse de Rust !

          Mon dino

          Bon, comme je ne suis pas sûr que tout le monde partage ma passion pour les mascottes, on va passer au côté plus technique ! 🤣

          Deno 1.x, des débuts difficiles !

          La version 1.0 sortie en mai 2020 a du mal à se faire une place et reste dans l'ombre de son grand frère. En effet, même si Deno offre un grand lot de nouveautés et est plus sécurisé par défaut, la très large adoption de Node et le fait que les projets développés pour Node ne sont pas forcément compatibles avec Deno rend l’adoption de ce dernier difficile. De plus, l'utilisation de CDN plutôt que d'installer les dépendances localement (dans le répertoire node_modules) a certes de nombreux avantages, mais cela rend votre projet dépendant de disponibilité du réseau ou peut entraîner des problèmes de performances si le CDN est éloigné géographiquement.

          Les nouveautés de la version 2.0

          Deno est désormais 100% compatible avec Node.js, et un gestionnaire de paquets officiel a vu le jour. Vous pouvez maintenant utiliser deno add et deno removepour ajouter ou retirer un paquet à votre projet.

          Autour du projet Deno, JavaScript Registry (JSR) un dépôt de paquets JavaScript universel !

          Le registre NPM s'est construit autour de Node.js afin de gérer facilement les dépendances de nos projets. Il a donc été développé pour Node.js à une époque où Node était la seule solution pour exécuter du code JavaScript côté serveur. En près de 15 ans, le registre NPM a rassemblé un peu moins de 3 millions de paquets et a très largement rempli sa mission toutes ces années. Mais aujourd'hui, la situation a changé, il existe plusieurs runtimes pouvant exécuter du code JavaScript (ou TypeScript) côté serveur. Et du côté front-end, les frameworks se sont multipliés et sont devenus de plus en plus complexes et nécessitent aussi l'utilisation d'un gestionnaire de paquets. Un registre de paquets fondé autour de Node.js uniquement est donc beaucoup moins pertinent qu'en 2010.
          C'est donc pourquoi, à l'initiative du projet Deno, un nouveau registre de paquets JavaScript et TypeScript universel pointe aujourd'hui le bout de son nez. Il s'agit donc de JSR (JavaScript Registry).

          Dans JSR, quand on va sur la page d'un paquet, en haut à droite, on a les logos des environnements compatibles avec le paquet :

          Titre de l'image

          Performances du runtime

          Niveau performance, ça donne quoi ?

          On voit souvent l'affirmation que Deno serait plus rapide que Node.js. Mais ça donne quoi en réalité ?

          J'ai voulu faire un petit test sans prétentions pour voir ce que ça donne. Je voulais faire des tests plus poussés sur différents systèmes d'exploitation et architectures, mais par manque de temps, le test sera donc fait sur un seul système et un seul ordinateur et il s'agit d'un Mac… Un comble pour LinuxFr.org, mais c'est l'ordinateur que j'avais à disposition à ce moment-là. Mais sinon, je ne porte pas spécialement Apple dans mon cœur, bien au contraire !

          J'ai testé l’exécution d'une même API sur Node. et Deno pour voir les différences de performance entre ces solutions. Pour ce test, j'ai utilisé une API Rest que j'ai développée pour le site de la société AudioSoft. J'ai fait la même requête POST 10 fois sur la même route avec les mêmes données. Il est important de préciser que c'est la première fois que je fais ce genre de tests, et que je ne fais peut-être pas tout dans les règles de l'art. Il y a des éléments extérieurs à Node et Deno qui peuvent influencer les scores. Notamment, la base de données utilisée pour le test était accessible via Internet, et des différences de débit ont pu fausser les tests.

          Test sur un MacBook Pro (2,6 GHz Intel Core i7 6 cœurs, AMD Radeon Pro 5300M 4 Go Intel UHD Graphics 630 1536 Mo, 16 Go 2667 MHz DDR4) sous macOS Sonoma

          Node: Le temps moyen pour exécuter le test de 126 millisecondes
          Deno: Le temps moyen pour exécuter le test de 93 millisecondes

          Performances du gestionnaire de paquets

          Comme dit précédemment, Deno c'est aussi un gestionnaire de paquets. J'ai donc trouvé intéressant de tester les principaux gestionnaires de paquets sur différents environnements.
          Pour ce test je me base sur la même API Rest que pour le test précédant, les dépendances à installer pour cette API sont : bcrypt, body-parser, dotenv, express, jsonwebtoken, mariadb, multer, mysql2, nodemailer, et sequelize. Le test a été fait sur un MacBook Pro. Pour effectuer ce test, le cache des gestionnaires de paquets ont été nettoyés et les fichiers-verrous supprimés.

          Avec NPM, l'installation a mis 10 secondes.

          Avec Deno, l'installation a mis 1 seconde.

          Avec Bun, l'installation a mis 3 secondes.

          On voit très clairement que NPM est beaucoup plus lent que ses deux concurrents. L'écart est plus faible entre Deno et Bun. Mais Deno est bien le plus rapide des trois.

          Avant de réaliser ce test, j'en ai effectué un en oubliant de nettoyer le cache et de supprimer package-lock.json. Les résultats étaient alors 8 secondes pour NPM, 5 secondes pour Deno et 4 secondes pour Bun. Il est logique de constater que NPM est plus rapide, en revanche, je trouve surprenant que Deno et Bun aient été ralentis. Il est possible que les gestionnaires de paquets aient parcouru package-lock.json pour garder les versions présentes dans ce fichier, ce qui les aurait tous les trois ralentis. Et NPM a peut-être pu bénéficier de son cache (car je l'utilise bien plus que les deux autres sur mon ordinateur), Deno et Bun eux n'avaient peut-être pas grand-chose dans leurs caches, ont donc été ralentis. Il est donc important de supprimer les lockfile en cas de migration d'un projet.

          Comme je le disais plus haut, c'est la première fois que j'effectue ce genre de test comparatif. Si vous avez des conseils sur les bonnes méthodes pour faire des tests plus fiables, ça m’intéresse !

          Deno 2.1 est là

          Étant donné que j'ai mis environ un siècle pour rédiger cette dépêche, Deno 2.1 est sortie entre temps ! 🤣
          Je vous liste donc les principales nouveautés apportées à la version 2.1 sans les commenter 😉

          • Support natif de WebAssembly (Wasm) : Il est désormais possible d'importer directement des modules Wasm, simplifiant leur utilisation et améliorant les performances.
          • Version Long Term Support (LTS) : Deno 2.1 inaugure la première version LTS, garantissant des correctifs de bugs et des améliorations de performance pendant… Six mois… On n'est pas encore aux 30 mois des versions LTS de Node.js… Cela viendra peut-être plus tard. 🙂
          • Commande deno init --npm vite : Cette commande simplifie la création de nouveaux projets en utilisant des outils comme Vite, en automatisant l'initialisation et en réduisant la configuration manuelle.
          • Gestion des dépendances : Introduction de la commande deno outdated pour gérer les mises à jour des dépendances JSR et npm.

          Conclusion

          Si vous êtes développeur Node.js, je vous conseille de vous intéresser à Deno, et même à Bun. Je ne sais pas si ces deux runtime sont totalement prêts pour des projets en production (par exemple, Deno 2.1 n'a que 6 mois de durée de vie, ce qui est plutôt contraignant pour les serveurs.). Mais peut-être que dans un futur proche, il sera cohérent de migrer vers l'un de ces deux-là.

          Commentaires : voir le flux Atom ouvrir dans le navigateur

          • ✇LinuxFr.org : les dépêches
          • FreeCAD 1.0
            FreeCAD est sorti le 18 novembre 2024 en version 1.0 (voir l'annonce officielle et sa vidéo associée). Cette sortie est marquée par une amélioration majeure : l'atténuation du problème de dénomination topologique. lien nᵒ 1 : Site officiellien nᵒ 2 : Le forum officiel multilanguelien nᵒ 3 : Notes de versions de la sortie de la version 1.0lien nᵒ 4 : Versions publiées de FreeCADlien nᵒ 5 : Blog FreeCAD : annonces, suivi avancement, tutorielsSommaire Qu'est-ce que FreeCAD ? Historique Le probl

          FreeCAD 1.0

          FreeCAD est sorti le 18 novembre 2024 en version 1.0 (voir l'annonce officielle et sa vidéo associée). Cette sortie est marquée par une amélioration majeure : l'atténuation du problème de dénomination topologique.

          Nouveau logo FreeCAD

          Sommaire

          La dernière dépêche sur FreeCAD remonte à avril 2021 pour la sortie de la version 0.19. Depuis, il y a eu les versions 0.20 (juin 2022) et 0.21 (août 2023). Cette version 1.0 a porté le nom de 0.22 pendant son développement.

          Qu'est-ce que FreeCAD ?

          Exemple 1 utilisation

          Extrait de wiki.freecad.org :
          FreeCAD est un modeleur paramétrique de CAO 3D open source sous licence LGPL. FreeCAD est destiné à l'ingénierie mécanique et à la conception de produits mais — étant très générique — il s'adapte également à une gamme plus large d'utilisations autour de l'ingénierie, telles que l'architecture, l'analyse par éléments finis, l'impression 3D et d'autres tâches.

          FreeCAD propose des outils similaires à CATIA, SolidWorks, Solid Edge ou Revit et entre donc également dans la catégorie CAO, GCVP, CFAO, IAO et BIM. Il s'agit d'un modélisateur paramétrique basé sur les caractéristiques d'une architecture logicielle modulaire qui permet de fournir des fonctionnalités supplémentaires sans modifier le système de base.

          FreeCAD est aussi multiplateforme. Il fonctionne sous Windows, Linux/Unix et macOS avec la même apparence et les mêmes fonctionnalités sous toutes les plateformes.

          Historique

          La toute première version de FreeCAD est sortie en 2002. FreeCAD est développé en C++, Qt et Python et son cœur repose sur les bibliothèques OpenCASCADE (ou OCCT) spécialisées dans la CAO.

          Son développement est assuré par un large panel de contributeurs : certains sont historiques, d'autres sont spécialisés sur un aspect particulier et beaucoup sont plus ou moins occasionnels.

          Les versions se sont enchaînées à un rythme quasi annuel, apportant moult améliorations et fonctionnalités nouvelles.

          En 2021, quelques contributeurs historiques fondent la FreeCAD Project Association (FPA) qui est un organisme indépendant à but non lucratif pour collecter des dons et apporter un soutien au développement du projet.
          Ce soutien passe notamment par leur programme "FreeCAD Grant Program", qui permet d'embaucher ou de récompenser des personnes pour des projets spécifiques. Ce programme a un budget de 50k$ pour l'année 2024. A titre d'exemple récent, 500$ ont été octroyés pour une étude sur les runners CI de Github, 1000$ pour un gros travail de correction de bugs, et enfin 500$ pour la création d'une vidéo sur les nouvelles fonctionnalités de cette version 1.0.

          FreeCAD bénéficie d'une communauté impliquée permettant notamment d'avoir une documentation complète, à jour et traduite dans de nombreuses langues.

          Le problème de dénomination topologique

          C'était un des points noirs de FreeCAD jusqu'à cette version 1.0.
          Il faut imaginer que dans ce logiciel, la modélisation d'une pièce (dans le sens objet physique) passe par une suite d'opérations mathématiques et géométriques en définissant à chaque fois des contraintes ou des paramètres. Une opération est par exemple la création d'un trou borgne de 5 mm sur telle face à 10 mm des bords haut et gauche. Un autre exemple est d'ajouter une « languette » sur telle face cylindrique. Ou bien d'ajouter un chanfrein de 2 mm sur telle arête, etc.

          Ainsi, petit à petit, la pièce modélisée se construit, prend forme, se détaille et se complexifie.

          Cet historique de ces opérations successives est toujours présent et modifiable. À tout moment, il est possible de modifier une des étapes intermédiaires.

          D'un point de vue technique, vous aurez sans doute compris que chaque opération s'applique à un élément précis et existant de la pièce à ce moment-là (une face ou une arête par exemple). Dans FreeCAD ces éléments ont tous un identifiant unique (Face6, Edge9, etc.), continu et incrémental. Si l'objet a 13 faces à une des étapes, les faces seront numérotées de Face1 à Face13. Chaque opération est rattachée à l'identifiant de l'élément (Face5 par exemple).

          Et le problème se situe à ce niveau : lors d'une modification d'une étape intermédiaire, il arrive souvent que cela change la géométrie globale de la pièce et donc que les nombres de faces ou d'arêtes augmentent ou diminuent. Et FreeCAD réattribue alors ces identifiants uniques aux différents éléments.
          Ainsi, si l'objet passe de 13 à 11 faces, c'est l'ensemble des faces qui vont recevoir un nouvel identifiant dans la plage Face1 à Face11, avec un très fort risque qu'une face, pourtant non touchée par la modification, porte un identifiant différent.

          Et vous voyez le problème arriver : si une des opérations suivantes dans l'historique était de faire un perçage sur la Face6 qui est maintenant devenue la Face3… Toute la modélisation part en vrille.

          Ce problème de dénomination topologique est documenté sur le wiki de FreeCAD : problème de dénomination topologique.

          Pour éviter cela, il était conseillé de suivre un ensemble de bonnes pratiques de modélisation sous FreeCAD : Édition de fonctions. Il faudra certainement suivre l'évolution de cette page avec cette sortie.

          Cette version 1.0 marque donc l'intégration de codes correctifs de cette problématique. Les notes de version indiquent tout de même que tout n'est pas résolu, et qu'il y aura d'autres améliorations dans les prochaines versions. Cette petite vidéo en anglais vous montre la différence de comportement entre la version 0.21 et 0.22dev (qui a servi de base à la 1.0).

          Les autres améliorations

          Un outil d'assemblage par défaut avec solveur dynamique

          Le terme assemblage désigne la fonctionnalité de regrouper plusieurs éléments afin d'obtenir un objet fonctionnel. Ce peut être, par exemple, une boîte constituée d'un couvercle sur charnières maintenues par des vis avec des rangements amovibles à l'intérieur. Ou bien un moteur thermique avec ses carters, vilebrequin, bielles, pistons, soupapes, etc. Il est parfois utile de pouvoir fournir des indications de positionnement et/ou de liberté des éléments entre eux, et de pouvoir animer le tout.
          Ces opérations d'assemblage n'étaient pas intégrées dans FreeCAD avant la version 1.0. Elles étaient néanmoins possibles grâce aux ateliers. Plusieurs ont été créés pour cela avec chacun leurs spécificités et leurs approches mais aussi une incompatibilité entre eux : A2plus, Assembly3 ou Assembly4.
          Cette version 1.0 propose un nouvel atelier mais intégré par défaut. Il a été mis au point par la société Ondsel (voir plus bas). Il est encore jeune, et il est encore trop tôt pour savoir s'il finira par s'imposer par rapport à l'existant déjà en place. Un tutoriel concernant l'atelier d'assemblage est d'ores et déjà disponible pour une introduction à cette nouvelle fonctionnalité de la v1.0.

          L'atelier sketcher amélioré

          Cet atelier permet de dessiner les esquisses techniques utilisées dans la conception mécanique. C'est dans celui-ci que sont dessinés les « plans 2D » avec les cotes et les contraintes dimensionnelles et spatiales. Cette version apporte un nombre conséquent d'améliorations et de nouvelles fonctionnalités rendant son utilisation plus facile, plus puissante et plus rapide. Le mieux est de regarder les notes de version animées.

          Les ateliers Arch et BIM sont morts, vive la prise en charge native du format ouvert IFC

          Si le titre est cryptique, c'est que l'on parle de BTP et d'outils destinés aux équipes de Maîtrise d'Œuvre impliquées dans la conception d'une opération construction (Architectes, Bureaux d'Études). Comme ce n'est pas forcément le lot commun des visiteurs de LinuxFr.org, résumons la situation:

          • L'atelier Arch, pour Architecture, exploite depuis longtemps les capacités de création 3D de FreeCAD pour dessiner facilement, fondations, murs, planchers, fenêtres, portes etc. Cet atelier se basait sur le format natif des fichiers FreeCAD, *.FcStd.

          • Dans l'atelier BIM (pour Building Information Model <= l'article Wikipedia_FR est bien écrit pour qui veut comprendre l'essentiel), on retrouve un certain nombre d'outils de dessin et de création d'objets qui s'avèrent redondants pour certains avec ceux de l'outil Arch tout en implémentant les paradigmes bien plus vastes qu'induit l'approche BIM d'un projet de construction <=> pas uniquement de la géométrie, mais aussi du prix, des données mécaniques, physiques, des fiches produit, du planning …

          • L'approche BIM tend à se généraliser dès lors que la complexité et le coût du projet le justifient. Elle repose (en théorie) sur un format d'échange IFC (pour Industry Foundation Class).
            Il est ouvert et au format texte.
            Oui avec vim, c'est possible de bidouiller ;)
            mais un fichier IFC fait rapidement quelques centaines de Mo voire quelques Go …

          L'Association "Building Smart" en définit les caractéristiques. Tous les logiciels sur le marché savent ouvrir et exporter dans ce format, à la norme IFC 2.3 ad minima et IFC 4.2 voire 4.3 pour les up to date.

          L'atelier BIM de FreeCAD utilisait jusqu'à présent IfcOpenShell, une application tierce Open Source pour convertir un fichier du format *.ifc vers du *.FcStd en passant (sans doute) par du OpenScad dans le processus.

          Titre de l'image
          Une image qui devrait parler au LinuxFrien (!) pour la classe IFC Material-Constituent-Set,

          Pour la version 1.0 de FreeCAD, Yorik Van Havre, développeur historique de FreeCAD, (par ailleurs, architecte et Président la FreeCAD Project Association) a entrepris de fusionner ces deux ateliers, d'en faire une fonctionnalité native de FreeCAD, c'est-à-dire qui se passe du vaillant IfcOpenShell (grâce notamment au travail fait sur Blender-Bim) pour que FreeCAD puisse ouvrir et enregistrer directement au format IFC sans conversion inutile.

          L'atelier FEM

          Cet atelier d'analyse par éléments finis comporte également des améliorations considérées comme majeures avec cette version 1.0, détaillées dans un article de blog sur l'atelier FEM de FreeCAD.

          Les avancées majeures sont liées à la prise en charge de fonctionnalités de CalculiX, un des solveurs utilisés par cet atelier : symétrie cyclique, analyses 2D et contraintes de corps rigide.

          Le reste

          Comme à chaque nouvelle version, beaucoup de choses ont été apportées, que ce soit dans l'interface, ou dans la plupart des ateliers intégrés. Les notes de version de la v1.0, comme très souvent détaillées en images, permettent de voir l'évolution de ce logiciel.

          FreeCAD a également annoncé son nouveau logo, choisi après un appel à concourir auprès de la communauté (lien). Le logo en SVG est disponible sur cette page.

          L'essai commercial d'Ondsel

          Outre la création en 2021 de l'association FPA (voir plus haut), d'autres développeurs, notamment Brad Collette, mainteneur de longue date de l'atelier Path et auteur de deux livres sur FreeCAD, ont créé début 2023 la société américaine ONDSEL sous la forme d'une Public Benefit Corporation (PBC) qui pourrait se traduire par « une entreprise d'intérêt pour la société ». Malheureusement, après environ 2 ans, Brad Collette informe de l'arrêt de la société ONDSEL, faute d'avoir trouvé un marché.

          La société voulait s'appuyer sur FreeCAD pour « apporter des fonctionnalités commerciales qui rendent FreeCAD plus utile aux utilisateurs commerciaux ». (Source)

          Pour cela, ONDSEL a produit sa propre version de FreeCAD avec ses propres choix esthétiques et ergonomiques, et a fourni un cloud pour simplifier le travail en équipe et le partage.
          À noter qu'ONDSEL indiquait soumettre ses améliorations à FreeCAD pour intégration et que son cloud était disponible sous forme de module dans FreeCAD. Ces améliorations se retrouvent dans cette version 1.0 de FreeCAD, notamment le nouvel outil intégré d'assemblage ainsi que les très nombreuses nouvelles fonctionnalités de l'atelier Sketcher.

          La société ONDSEL avait détaillé sa relation avec le projet FreeCAD indiquant notamment leur mode de collaboration. Ils avaient également un blog en anglais intéressant, où ils abordent plusieurs thématiques, notamment sur l'évolution de CATIA ou bien la liste des nouveautés agrémentée de nombreuses animations.

          Dans l'annonce de cet arrêt, Brad Collette revient également sur ce qu'ils ont apporté au projet FreeCAD. Tout ce qu'ils ont développé était en open source et déjà intégré pour la plupart à FreeCAD. Les fondateurs d'ONDSEL continueront de contribuer au projet directement.

          Commentaires : voir le flux Atom ouvrir dans le navigateur

          • ✇LinuxFr.org : les dépêches
          • Interview de Cli345, créateur de filtres pour G’MIC
            En novembre 2023, cli345 nous gratifiait d’une excellente dépêche-tutoriel sur le filtre Comicbook de G’MIC. Un filtre qu’il a développé parce qu’il voulait transformer des photos en BD. Pour reprendre le commentaire de David Ttschumperlé, responsable de l’équipe Image du GREYC (Laboratoire de recherche en sciences du numérique) qui développe G’MIC : « Le code de ce filtre est arrivé de manière tout à fait inattendue, et ça a été une sacrée bonne surprise pour nous. Ce n’est pas souvent qu’on re

          Interview de Cli345, créateur de filtres pour G’MIC

          En novembre 2023, cli345 nous gratifiait d’une excellente dépêche-tutoriel sur le filtre Comicbook de G’MIC. Un filtre qu’il a développé parce qu’il voulait transformer des photos en BD. Pour reprendre le commentaire de David Ttschumperlé, responsable de l’équipe Image du GREYC (Laboratoire de recherche en sciences du numérique) qui développe G’MIC : « Le code de ce filtre est arrivé de manière tout à fait inattendue, et ça a été une sacrée bonne surprise pour nous. Ce n’est pas souvent qu’on reçoit des contributions sympas comme ça, qui ont l’air de tomber du ciel :) »

          Et ce n’est pas sa seule contribution, mais on vous laisse le plaisir de la découverte.

          Parcours

          Quelle formation (ou pas) as-tu reçu ? Quel est ton parcours ?

          J’ai une formation en mathématiques et en informatique mais pas spécialement en modélisation des données ni en graphisme. Ma découverte de l’informatique commence avec des algorithmes sur papier. À ce moment-là, tout était séquentiel, pas question de concurrence ni de parallélisme. Dans notre apprentissage, la seule façon d’interagir avec l’utilisateur était une instruction qui permettait d’attendre que l’utilisateur écrive quelque chose à la console. Plus tard, j’ai appris la programmation événementielle, de nouveau, sans allusion à la concurrence ni au parallélisme.

          Du côté graphisme, j’ai appris à faire des filtres GIMP grâce aux nombreux tutoriels disponibles sur internet et grâce à la console « Python-Fu ». Plus tard, j’ai connu G'MIC grâce au site. C’est aussi grâce aux tutoriels que j’ai pu écrire des filtres pour G'MIC. Pour GEGL, c’est un peu la même chose, j’ai beaucoup tâtonné et je ne connais que les bases.

          Est-ce que ton investissement dans G’MIC te motive pour participer à d’autres logiciels libres ? Lesquels ?

          Quelques projets passés :

          Quelques projets en vue :

          • programme pour transformer un schéma Dia convenable en graphe GEGL,
          • greffon “ColoringBook” pour Inkscape,
          • tutoriel sur la vision des couleurs.

          Projet en cours :

          • filtre G'MIC -> Rendering -> Color Wheels,
          • le langage de programmation FuncSug. Son but est de faciliter la programmation événementielle. Pour cela, FuncSug supprime le recours aux fonctions de rappel (callback) et ajoute des structures de contrôle pour exprimer le parallélisme logique. Il peut être bien utile pour développer des petits jeux (cf G'MIC Memory) et je pense qu’il permettra de donner plus de liberté de développements dans des jeux de vie ou des histoires interactives.

          Où trouves-tu le temps d’avoir toutes ces activités en parallèle, et comment gères-tu ton temps pour chaque projet ?

          Je n’essaie pas d’avoir un résultat parfait. Par exemple, le filtre « tangential circle » est plutôt lent, mais je l’ai quand même proposé. De même, je n’avais pas testé le filtre « Frame [Relief] » partout. De fait, il y avait un gros bug qui m’a été signalé et que j’ai pu corriger.

          Implication dans G’MIC

          Qu’est-ce qui t’as amené à t’investir dans le projet ?

          Je voulais transformer des photos en BD et je ne trouvais pas ce que je souhaitais dans ce qui existait déjà. J’ai donc commencé à expérimenter. Par exemple, pour l’aplatissement des couleurs, j’ai essayé le flou gaussien sélectif, la segmentation, le filtre bilatéral ; pour les traits, j’ai essayé Laplace, la norme du gradient, la différence erode-dilate, la différence gaussienne ; ces essais se faisaient tantôt sur l’image tantôt sur des décompositions TSL, LAB, LCH.

          J’ai donc beaucoup expérimenté avec GIMP et G'MIC. Ensuite, j’ai fait un filtre dans GIMP pour automatiser tout cela. J’ai voulu en faire profiter les autres. J’en ai donc parlé sur gimpchat.com. Comme ce filtre faisait appel à de nombreuses fonctions G'MIC, je l’ai ensuite traduit en G'MIC pour lui donner une plus grande disponibilité.

          Qu’est-ce qui t’as poussé à développer des filtres particuliers ?

          Le Comicbook est venu d’un désir personnel. Deux autres sont tirés de discussions sur les forums (Lineart, Tangential Circles).

          Peux-tu nous donner une idée du temps que cela t’a pris ?

          Je n’en ai aucune idée.

          As-tu eu des retours d’utilisation de tes filtres ?

          Oui. En fait, je les présente sur le site gimpchat.com. Les utilisateurs m’y indiquent les bugs qu’ils rencontrent et si ça leur plaît.

          Qu’est ce qui s’est avéré le plus satisfaisant dans le fait d’avoir contribué à G'MIC ?

          Que plein de monde puisse profiter de mes filtres.

          Merci beaucoup.

          Commentaires : voir le flux Atom ouvrir dans le navigateur

          • ✇LinuxFr.org : les dépêches
          • G´MIC 3.4.0 : Le traitement d’images à la fleur de l’âge
            Une nouvelle version 3.4.0 de G’MIC (GREYC’s Magic for Image Computing) vient de sortir ! À cette occasion, nous vous proposons une description des fonctionnalités récentes ajoutées à ce cadriciel libre pour le traitement des images numériques, faisant suite à notre précédente dépêche sur ce sujet (publiée en mai 2023). N. D. A. : Cliquez sur les images pour en obtenir une version en pleine résolution, ou une vidéo correspondante lorsque les images contiennent l’icône  lien nᵒ 1 : Le projet

          G´MIC 3.4.0 : Le traitement d’images à la fleur de l’âge

          Une nouvelle version 3.4.0 de G’MIC (GREYC’s Magic for Image Computing) vient de sortir !

          À cette occasion, nous vous proposons une description des fonctionnalités récentes ajoutées à ce cadriciel libre pour le traitement des images numériques, faisant suite à notre précédente dépêche sur ce sujet (publiée en mai 2023).

          G´MIC 3.4.0 Teaser

          N. D. A. : Cliquez sur les images pour en obtenir une version en pleine résolution, ou une vidéo correspondante lorsque les images contiennent l’icône Icône 'Play Video'

          Sommaire

          1. G’MIC en quelques mots

          G’MIC est un cadriciel (framework) libre pour la manipulation et le traitement des images numériques, développé au sein de l’équipe IMAGE du laboratoire de recherche GREYC de Caen (UMR CNRS 6072).

          Il définit différentes interfaces utilisateur permettant l’application d’algorithmes variés sur des images et des signaux, variés eux aussi. L’élément moteur du projet est un interpréteur d’un langage de script, le «  langage G’MIC  », élaboré spécifiquement pour faciliter le prototypage et l’implémentation de nouveaux algorithmes et opérateurs de traitement d’images. Les utilisateurs peuvent ainsi appliquer des opérateurs parmi plusieurs centaines déjà implémentés, ou écrire leurs propres pipelines de traitement et les rendre accessibles dans les différentes interfaces utilisateur du projet. C’est donc, par essence, un cadriciel ouvert, extensible et en évolution constante.

          Les interfaces de G’MIC les plus populaires sont : gmic, outil en ligne de commande (complément indispensable à ImageMagick ou GraphicsMagick pour traiter/générer/analyser des images à partir du shell), le service Web G’MIC Online, et surtout, le greffon G’MIC-Qt, utilisable dans de nombreux logiciels d’édition d’images numériques tels que GIMP, Krita, DigiKam, Paint.net, Adobe Photoshop, Affinity Photo… Ce greffon propose aujourd’hui plus de 620 filtres divers, pour élargir les possibilités de ces logiciels de manipulation d’images.

          Aperçu du greffon G’MIC-QtFig. 1.1. Aperçu du greffon G’MIC-Qt en version 3.4.0, ici lancé depuis GIMP 2.10, avec le filtre « Comicbook » sélectionné.

          2. Quoi de neuf dans cette version 3.4.0 ?

          La version 3.4.0 de G’MIC_ se focalise sur la stabilité et le support long-terme : Après plus de 15 ans de développement continu du projet, les concepts et codes qui constituent G’MIC ont eu le temps d’être éprouvés, et nous voulons maintenant assurer la stabilisation des API des différents composants du projet : l’API de la libgmic (pour intégrer les fonctionnalités de G’MIC dans un code C ou C++), celle du greffon G’MIC-Qt (pour implémenter une version du greffon au sein d’un nouveau logiciel hôte), celle des fonctions de base définissant la bibliothèque standard de G’MIC (stdlib), ainsi que la syntaxe du langage G’MIC lui-même.

          Ainsi, toutes les versions de cette branche 3.4.x seront consacrées à la correction de bugs et le développement de fonctionnalités ne nécessitant pas de modification de ces fondations du projet (par exemple, le développement de nouveaux filtres ou d’opérateurs de traitement d’images), avec le souhait d’assurer au maximum une rétro-compatibilité entre ces versions. En ce sens, on considère que la version 3.4.0 représente un jalon dans l’histoire du projet.

          En ce qui concerne les améliorations générales apportées aux différentes interfaces utilisateurs, on peut citer principalement :

          G’MIC Online (G’MICol)

          Ce service, qui permet d’appliquer les filtres de G’MIC sur des images, directement à partir d’un navigateur web, existe depuis plusieurs années. En 2024, les membres du service DDA (Développement et Déploiement d’Applications) du laboratoire GREYC ont initié une refonte totale de ce service, avec à la clé un nouveau look, une amélioration nette de l’interface utilisateur (widgets plus intuitifs, amélioration de la fenêtre de prévisualisation, apparition de thèmes clair/sombre, gestion des filtres favoris…) et une automatisation des mises à jour de G’MIC et des filtres associés. La liste des améliorations réalisées serait trop longue à énumérer, et une figure valant mille mots, voici à quoi ressemble aujourd’hui la nouvelle version de ce service web :

          Aperçu du service _G’MIC Online_
          Fig.2.1. Aperçu du service web G´MIC Online, remis au goût du jour à l’occasion de la sortie de la version 3.4.0 de G’MIC (ici, avec le thème clair).

          Si vous souhaitez l’essayer, foncez voir G’MIC Online, ça sera pour nous l’occasion d’avoir un test grandeur nature 😱 ! Et n’hésitez pas à nous faire remonter des soucis éventuels. Dans tous les cas, un grand bravo à nos collègues de l’équipe DDA pour ce travail important de refonte !

          Greffon G’MIC-Qt

          En l’espace d’une année, ce sont plus de 40 nouveaux filtres de traitement d’images qui ont fait leur apparition dans le greffon. La plupart seront détaillés dans la suite de cette dépêche. Mentionnons également l’apparition dans l’interface, d’un nouveau bouton « Paramètres aléatoires », qui assigne des valeurs aléatoires aux paramètres d’un filtre sélectionné, ce qui permet d’obtenir un aperçu rapide de la variété de rendus possibles pour un filtre donné.

          Bouton « Paramètres Aléatoires » dans le greffon G´MIC-Qt
          Fig.2.2. Greffon G´MIC-Qt : Le nouveau bouton « Paramètres aléatoires » assigne des valeurs aléatoires aux paramètres du filtre sélectionné.

          Outil CLI gmic

          L’ensemble des filtres réalisés par la communauté des développeurs est maintenant inclus dans l’exécutable dédié à la ligne de commande, ce qui fait qu’il n’y a plus de différences concernant le nombre de filtres disponibles par défaut entre le greffon G’MIC-Qt et l’outil CLI gmic (il fallait auparavant forcer la mise à jour des filtres avec $ gmic update). Aujourd´hui, gmic dispose d’un arsenal de plus de 4000 fonctions pour traiter vos images en ligne de commande. Notons que des efforts particuliers ont été faits pour améliorer le visualiseur intégré d’images (commande display). On peut dorénavant visualiser plus aisément des collections d’images 2D, des images volumiques 3D ou même des maillages 3D, dans une unique interface, comme illustré sur la figure ci-dessous :

          Commande 'display'
          Fig.2.3. Outil CLI gmic : Le visualiseur d’images de G’MIC a été entièrement ré-implémenté et permet de visualiser des types d’images différents au sein d’une même interface.

          C’est également le cas pour le visualiseur de fonctions mathématiques ou de signaux 1D (commande plot), qui a été refait à neuf :

          Commande 'plot'
          Fig.2.4. Commande plot: Le visualiseur de fonctions/signaux 1D a été entièrement repensé.

          Tout ceci fait de gmic un outil bien pratique, même si on ne se limite qu’à la visualisation d’images en ligne de commande.

          Autres améliorations

          • L’évaluateur intégré d’expressions mathématiques a encore bien évolué : c’est l’une des briques essentielle du langage G’MIC, puisqu’il est en charge d’évaluer le résultat des opérations mathématiques dont on a besoin dans les scripts (autant dire qu’en traitement d’images, on fait tout le temps des calculs). Cet évaluateur s’est enrichi de nombreuses fonctions, en particulier pour le calcul et le traitement de vecteurs, de matrices, et la manipulation native de tas.
          • De nombreuses fonctions natives (C++) de la bibliothèque ont pu être ré-écrites intégralement en langage G’MIC. Ceci va faciliter l’évolution et la maintenance de ces fonctionnalités, puisque leur modification/amélioration future ne nécessitera plus de mise à jour obligatoire des binaires du projet.
          • Les commandes de chargement/sauvegarde de maillages 3D en format .obj (Wavefront) ont été améliorées, et de nouvelles commandes de traitement/création de maillages 3D ont vu le jour (par exemple pour visualiser les vecteurs normaux aux sommets d’un maillage, comme illustré sur la vidéo ci-dessous). Et, non, ceci n’est pas une pomme pourrie :

          Exemple de rendu 3D
          Fig.2.5. La gestion des maillages 3D au sein de G´MIC a été enrichie de nouvelles commandes.

          Voilà pour ce qui concerne les améliorations générales des différentes interfaces proposées par le cadriciel.
          Passons maintenant au détail des nouveaux filtres et traitements d’images apparus dans G’MIC ces douze derniers mois.

          3. Détails des nouveaux filtres

          Dans cette (longue) section, nous catégorisons et décrivons les filtres récents, par type d’utilisation : Retouche photographique, Filtres de déformations, Filtres de dégradations, Filtres de rendu et de textures, et enfin Effets artistiques.

          3.1. Retouche photographique

          Trois filtres intéressants ont fait leur apparition dans le greffon G’MIC-Qt pour aider les photographes à retoucher leurs clichés numériques.

          Tout d’abord, le filtre Colors / Mixer [Generic], un filtre de mixage de canaux couleur qui offre la possibilité de choisir parmi pas moins de 16 espaces/représentations de couleurs différents pour le mixage (CMY, CMYK, HCY, HSI, HSL, HSV, Jzazbz, Lab, Lch, OKlab, RGB, RYB, XYZ, YCbCr, YIQ et YUV_). Cela constitue une bonne alternative aux outils traditionnels de rehaussement de contrastes ou de couleurs, pour retoucher les photographies qui pourraient être un peu palôtes.

          Filtre 'Colors / Mixer (Generic)'
          Fig.3.1.1. Le filtre Colors / Mixer [Generic] vient enrichir l’arsenal de filtres déjà disponibles pour la retouche des contrastes et des couleurs.

          Parlons également du filtre Details / Sharpen [Alpha], qui comme son nom l’indique, permet de rehausser les détails fins dans des photographies. Il est basé sur une technique originale de décomposition pyramidale de l’image relativement à un opérateur d´Alpha blending. Cette technique cherche en particulier à minimiser l’apparition de « halos » près des contours, qui est un artefact classique rencontré avec les filtres usuels de rehaussement de détails.

          Filtre 'Details / Sharpen (Alpha)'
          Fig.3.1.2. Le filtre Details / Sharpen [Alpha] permet de rehausser assez finement les détails dans les photographies, en minimisant l’apparition de « halos ».

          Filtre 'Details / Sharpen (Alpha)'
          Fig.3.1.3. Détails « Avant/Après » illustrant l’intérêt du filtre Details / Sharpen [Alpha].

          Enfin, le filtre Layers / Spatial Blend Multi-Layers permet de fusionner plusieurs prises d’un même point de vue en une seule image, avec la possibilité de générer un gradient linéaire spatial entre ces différentes vues. On peut par exemple photographier une même scène à plusieurs moments de la journée (et de la nuit), et utiliser ce filtre de fusion spatiale pour créer une image telle que celle illustrée ci-dessous, en un ou deux clics de souris :

          Filtre 'Layers / Spatial Blend Multi-Layers'
          Fig.3.1.4. Le filtre Layers / Spatial Blend Multi-Layers permet de fusionner plusieurs photographies avec un gradient spatial linéaire, réglable par l’utilisateur.

          (Crédits : les images utilisées dans la figure ci-dessus proviennent de la vidéo « Stunning New York City skyline timelapse: Day to night » de la chaîne Youtube « Rumble Viral »).

          La vidéo suivante illustre le processus complet, en utilisant le greffon G´MIC-Qt sous GIMP 2.10 :

          Filtre 'Layers / Spatial Blend Multi-Layers'

          3.2. Filtres de déformations

          Passons maintenant à un ensemble de nouveaux effets disponibles pour déformer vos images un peu dans tous les sens.

          Avec tout d’abord un premier filtre Deformations / Distort [RBF], qui déforme une image à partir de points clés définis par l’utilisateur et d’une fonction d’interpolation de type RBF (Fonction de base radiale) dont la formule mathématique est spécifiable par l’utilisateur.

          Filtre 'Deformations / Distort (RBF)'
          Fig.3.2.1. Le filtre Deformations / Distort [RBF] permet d’appliquer des déformations variées, basées sur des RBFs. Ici, en spécifiant la fonction de base radiale phi(r) = log(0.1+r).

          Mentionnons ensuite l’apparition d’une nouvelle catégorie Map Projection, qui contient 14 filtres différents dédiés à la transformation de cartes initialement sous la forme de projection cylindrique équidistante (cartes équirectangulaires), pour les convertir sous la forme d’autres types de projections. Cette série de filtre est une contribution de Kristian Järventaus, un membre du Cartographers Guild forum, forum spécialisé dans la cartographie.

          Filtres de la catégorie 'Map Projection'
          Filtres de la catégorie 'Map Projection'
          Fig.3.2.2. La nouvelle catégorie de filtres Map Projection propose plusieurs algorithmes de projection de cartes géographiques.

          Notons également l’arrivée du filtre Deformations / Square to Circle [alt], dont le but est de transformer tout rectangle (ou carré) centré dans une image, en une ellipse (ou un cercle), et vice-versa. Un filtre certes très spécialisé, avec évidemment peu d’applications évidentes au premier abord, mais le jour où on en a besoin, on est bien content de l’avoir sous la main ! Nous l’avons par exemple utilisé ci-dessous pour transformer un cadre de peinture initialement rond, en un cadre carré :

          Filtre 'Deformations / Square to Circle (alt)'
          Filtre 'Deformations / Square to Circle (alt)'
          Fig.3.2.3. Le filtre Deformations / Square to Circle [alt] permet de convertir des objets carrés ou rectangulaires en objets ronds ou elliptiques, et inversement.

          Enfin, terminons cette revue des nouveaux filtres de déformations d’images, avec le filtre Deformations / Poincarré Disk. Celui-ci permet d’une part de générer des disques de Poincaré, une famille de figures géométriques basées sur des géométries hyperboliques, comme illustrée sur la figure suivante :

          Filtre 'Deformations / Poincaré Disk'
          Fig.3.2.4. Quelques exemples de disques de Poincaré, générés par le filtre Deformations / Poincaré Disk.

          Mais là où ça devient intéressant, c’est que ce filtre permet aussi de déformer des images en les projetant sur ces géométries si particulières :

          Filtre 'Deformations / Poincaré Disk'
          Fig.3.2.5. Projection d’une image sur un disque de Poincaré.

          Par exemple, nous avons utilisé ce filtre (avec quelques modifications maison) pour générer la courte animation suivante, « Survol de la planète Poincaré », qui illustre les étonnantes propriétés fractales de ces bizarreries géométriques :

          Filtre 'Deformations / Poincaré Disk'

          3.3. Filtres de dégradations

          Il arrive que l’on cherche volontairement à dégrader des images, soit pour simuler une altération réelle (par exemple un flou de bougé, du bruit de capteurs…), soit dans la recherche d’un effet purement esthétique (Glitch Art). Dans ces buts, les nouveaux effets suivants ont été ajoutés à G’MIC :

          • Les filtres Rendering / CRT Scanlines et Degradations / CRT Phosphors cherchent à imiter la restitution d’images sur des écrans à tube cathodique (CRT), en simulant deux effets caratéristiques de ces types d’afficheurs, à savoir l’effet Scanline et l’affichage par phosphores. Ces deux filtres ont été réalisés en collaboration avec Romain Hérault, nouveau contributeur (qui a rejoint le GREYC récemment).

          Filtre 'Rendering / CRT Scanlines'
          Fig.3.3.1. Le filtre Rendering / CRT Scanlines imite l’effet « Scanline » typique des afficheurs CRT.

          Filtre 'Degradations / CRT Phosphors'
          Fig.3.3.2. Le filtre Degradations / CRT Phosphors quant à lui simule la technique d’affichage par phosphore lumineux des afficheurs CRT.

          • Le filtre Degradations / Blur [Motion] permet, lui, de synthétiser un flou de bougé, avec des trajectoires de type splines possiblement complexes, réglables par l’utilisateur directement en modifiant des points clés dans la fenêtre de prévisualisation de G’MIC-Qt, comme illustré sur la figure ci-dessous :

          Filtre 'Degradations / Blur (Motion)'
          Fig.3.3.3. Le filtre Degradations / Blur [Motion] simule un flou de bougé.

          • Le filtre Degradations / Sloppy Mess est quant à lui plutôt destiné aux amateurs de Glitch Art. C’est l’un des premiers filtres d’un nouveau contributeur, Prawnsushi, qui s’est récemment intéressé au langage G’MIC pour la création de filtres. C’est un effet un peu long à calculer, mais qui possède de nombreux paramètres et une grande palette de rendus différents.

          Filtre 'Degradations / Sloppy Mess'
          Fig.3.3.4. Le filtre Degradations / Sloppy Mess crée volontairement des artefacts numériques artistiques sur vos images.

          3.4. Filtres de rendu et de textures

          Les filtres de rendu ont cette particularité de ne pas nécessiter d’images d’entrée pour fonctionner, puisqu’ils créent de nouvelles images (ou de nouveaux calques) en partant de zéro, par génération procédurale.

          • Le filtre Rendering / Underwoods, un deuxième filtre réalisé par Prawnsushi, n’est rien de moins qu’un générateur de sous-bois ! On pourra nous dire que ça ne sert pas forcément à grand-chose, et évidemment ce n’est pas un filtre qui va être indispensable aux traiteurs d’images, photographes ou illustrateurs pour leur travail de tous les jours.

          Mais en quelque sorte, ce filtre illustre pourtant toute la philosophie du projet G’MIC : Produire un logiciel qui favorise la créativité algorithmique, facilite l’implémentation de toutes sortes de filtres (utiles ou moins utiles), et permet le libre partage avec des utilisateurs. En pratique, ce filtre a le mérite d’exister, chacun peut l’essayer, et il n’utilise que peu de ressources mémoire (quelques dizaines d’octets, grâce à la compacité du langage G’MIC par construction). Et en plus, les résultats sont plutôt cool ! Et soyez assurés qu’il servira immanquablement, un jour ou l’autre, à un artiste voulant synthétiser une image de sous-bois en deux clics de souris !

          Filtre 'Rendering / Underwoods'
          Filtre 'Rendering / Underwoods'
          Fig.3.4.2. Exemples de rendus d’images de sous-bois par le filtre Rendering / Underwoods.

          • Le filtre Patterns / Reaction-Diffusion synthétise des textures du type de celles qu’on rencontre dans la modélisation des systèmes de Réaction-Diffusion.

          Filtre 'Patterns / Reaction-Diffusion'
          Fig.3.4.3. Le filtre Patterns / Reaction-Diffusion dans le greffon G’MIC-Qt.

          Là encore, l’intérêt de ce type de filtres peut paraître assez limité. Pourtant c’est l’exemple même de texture qui peut servir de base à la création d’œuvres d’art génératif. Prenez une texture créée par ce filtre, appliquez-lui quelques-uns des autres effets disponibles dans G’MIC (au hasard, le filtre Deformations / Drop Water), et vous voilà prêt à produire des animations amusantes, telles que celle ci-dessous :

          Filtre 'Patterns / Reaction-Diffusion'

          • Le filtre Rendering / Spline Spirograph s’inspire du jeu du Spirographe pour le processus de génération de courbes paramétriques, créant des effets de texture et de couleurs intrigants. La présence du bouton Paramètres aléatoires dans le greffon G’MIC-Qt est ici plus que bienvenue, pour obtenir rapidement un panorama varié des résultats possibles de ce filtre !

          Filtre 'Rendering / Spline Spirograph'
          Filtre 'Rendering / Spline Spirograph'
          Fig.3.4.1. Le filtre Rendering / Spline Spirograph et quelques exemples de rendus possibles.

          Ce filtre propose également un mode de sortie animé, produisant plusieurs calques consécutifs qui représentent différentes frames d’une animation, ce qui permet de synthétiser de courtes vidéos comme celle-ci :

          Filtre 'Rendering / Spline Spirograph'

          • Le filtre Rendering / ABN Filigrees sait lui aussi tracer des courbes paramétriques intéressantes, en s’inspirant cette fois des filigranes que l’on trouve sur les certificats d’actions ou de papier-monnaie. Ce filtre rend hommage à l’American Bank Note Company, un graveur de papier financier ayant été actif à Wall Street du milieu du XIXᵉ siècle jusqu’à il y a une soixantaine d’années.

          Filtre 'Rendering / ABN Filigrees'
          Fig.3.4.4. Le filtre Rendering / ABN Filigrees en action.

          Ce filtre a été réalisé par Garry Osgood, contributeur de longue date et rédacteur des pages de tutoriels du projet. Garry a détaillé tous les aspects techniques de ce filtre-là en particulier, sur cette page.

          • Le filtre Rendering / Random Signature est lui aussi un générateur de courbes amusant : il se propose de dessiner des signatures aléatoires, comme l’illustre la vidéo ci-dessous :

          Filtre 'Rendering / Random Signature'
          Fig.3.4.4. Le filtre Rendering / Random Signature permet de créer des signatures aléatoires.

          Là encore, un filtre dont l’utilité ne peut pas faire débat : « C’est complètement inutile, donc rigoureusement indispensable ! ».

          • Et pour finir cette section, citons le filtre Rendering / Twisted Rays qui génère, comme son nom l’indique, un effet de rayons torsadés. Là encore, l’utilisation de ce filtre restera probablement assez confidentielle. Mais qui sait si dans les milliers d’utilisateurs de G’MIC, il n’y a pas justement quelqu’un qui cherchait à réaliser cet effet en particulier ? Et bien maintenant, il peut ! ☺

          Filtre 'Rendering / Twisted Rays'
          Fig.3.4.5. Le filtre Rendering / Twisted Rays crée un tourbillon de rayons sur vos images.

          Ce filtre peut par exemple être utilisé pour créer ce genre d’effets animés psychédéliques :

          Filtre 'Rendering / Twisted Rays'

          3.5. Effets artistiques

          Et pour finir avec cette énumération des nouveaux filtres de G’MIC, voici quelques filtres en vrac, que l’on va regrouper sous la dénomination « Artistique » (c’est généralement le terme employé dans les logiciels de traitement d’images, pour qualifier des filtres qu’on ne sait pas trop catégoriser…).

          • Le filtre Artistic / Stringify décompose une image d’entrée en blobs de couleurs quantifiés, et relie les points (sous-échantillonnés) localisés sur les contours de ces blobs par des segments de couleur. Là encore, le rendu peut faire penser aux courbes que l’on obtient avec le jeu du Spirographe.

          Filtre 'Artistic / Stringify'
          Fig.3.5.1. Le filtre Artistic / Stringify crée des abstractions d’images à partir de segments de couleur.

          • Le filtre Black & White / Filaments est lui, basé sur le lancer de milliers de particules à partir d’un ou plusieurs bords de l’image, avec des trajectoires qui sont déformées par la géométrie des contours de l’image. Le tracé de ces milliers de trajectoires avec des couleurs semi-transparentes permet de produire ce genre d’images :

          Filtre 'Black & White / Filaments'
          Filtre 'Black & White / Filaments'
          Fig.3.5.2. Le filtre Black & White / Filaments transforme vos images en ensembles de filaments qui se déforment.

          • Le filtre Arrays & Tiles / Loose Photos simule un effet de lancer de photos en vrac sur une table, de telle manière que le contenu des photos recrée une image globale, spécifiée comme entrée du filtre. Beaucoup de paramètres sont réglables (densité, taille et ratio des photographies, paramètres d’ombrage, etc.), afin de laisser à l’utilisateur une grande liberté sur le choix du rendu final.

          Filtre 'Arrays & Tiles / Loose Photos'
          Fig.3.5.3. Exemple de rendu par le filtre Arrays & Tiles / Loose Photos.

          • Le filtre Rendering / Quick Copyright, qui existait déjà dans les versions précédentes, a été ré-implémenté à partir de zéro. Il s’agit d’un filtre facilitant l’insertion d’un texte de copyright (ou d’une signature texte) sur une image numérique. Il possède maintenant de nombreux paramètres permettant de régler finement la position du texte, sa taille, sa fonte, etc. Combiné avec les possibilités d’automatisation du langage G’MIC, c’est un filtre avantageux pour insérer facilement du texte, de manière normalisée, sur des milliers de photographies.

          Filtre 'Rendering / Quick Copyright'
          Fig.3.5.4. Le filtre Rendering / Quick Copyright en action pour l’insertion de texte de copyright sur une image.

          • Et enfin, le filtre Patterns / Random Rectangles transforme une image en une partition aléatoire de rectangles colorés, pour donner un effet d’abstraction d’image, s’inspirant vaguement du style de certains tableaux de Piet Mondrian.

          Filtre 'Patterns / Random Rectangles'
          Fig.3.5.5. Le filtre Patterns / Random Rectangles crée une partition colorée de rectangles aléatoirement placés sur l’image.

          Là encore, on peut imaginer utiliser ce filtre pour générer des textures qui pourront par exemple servir à décorer des objets, comme cela a été fait dans l’animation ci-dessous (en partant d’une image de bruit pur) :

          Filtre 'Patterns / Random Rectangles'

          4. Un logiciel aux utilisations variées

          Comme nous avons essayé de vous le montrer, G’MIC possède de multiples facettes, avec une vaste palette d’applications. La communauté des utilisateurs ne se limite d’ailleurs pas aux artistes numériques, mais comporte également des chercheurs, des programmeurs, des algorithmiciens… Nous montrons ci-dessous quelques autres utilisations variées du logiciel.

          • Débruitage d’images du JWST :

          En octobre 2023, nous avons appris par l’intermédiaire de M.J. McCaughrean, chercheur senior à l´ESA (European Spatial Agency) (parti à la retraite en 2024), que G´MIC était utilisé par certaines personnes au sein de l’ESA pour traiter des images provenant du James Webb Space Telescope (JWST), en particulier pour l’atténuation du bruit fréquentiel apparaissant sur certaines images acquises par le télescope (via le filtre Repair / Banding Denoise notamment).

          G’MIC a par exemple été utilisé (entre autres logiciels) pour la réalisation de l’image de couverture du magazine Nature, vol. 622, issue 7981 du 5 octobre 2023, comme confirmé par M.J. McGaughrean, et indiqué d’ailleurs dans la publication associée, dont il est le co-auteur.

          Utilisation de G’MIC par l’ESA
          Fig.4.1. Utilisation de G´MIC dans le cadre du débruitage d’images de la proto-étoile Herbig-Haro 211, acquises par le JWST.

          Pour nous les développeurs, ça a vraiment été une bonne surprise d’apprendre ça, et de nous rendre compte que G´MIC était utilisé dans le domaine de l’astrophysique.

          • Code créatif :

          G’MIC se révèle être un allié précieux lorsque l’on cherche à faire du code créatif, de par sa capacité à générer/manipuler facilement des images, et de par sa bibliothèque standard d’opérateurs fournie. Durant cette année écoulée, nous nous sommes amusés à explorer ses possibilités pour la création algorithmique d’images et d’animations, dont voici un petit florilège :

          Commençons tout d’abord par cette petite animation de flocons de neige tourbillonnants (code source, 30 lignes) :

          Animation de flocons de neige
          Fig.4.2. Animation de flocons de neige, générée par un script G´MIC.

          Puis enchaînons avec cette variante amusante du jeu de Pierre-Feuille-Ciseaux, où l’on fait d’abord jouer consécutivement chaque pixel d’une image (dont les valeurs initialement aléatoires représentent soit 0 : une pierre, 1 : une feuille, ou 2 : des ciseaux) avec ses 8 voisins, en gardant à chaque fois l’élément qui a été gagnant le plus souvent. Dans un deuxième temps, on stylise la séquence de ces différentes images de labels, là encore, avec le filtre Drop Water, pour aboutir à l’animation suivante, que l’on pourrait intituler « La soupe de l’enfer » (code source, 30 lignes),

          Animation du jeu Pierre-Feuille-Ciseaux
          Fig.4.3. Animation du jeu de Pierre-Feuille-Ciseaux, où tous les pixels d’une image jouent simultanément.

          Et enfin, (re-)plongeons dans le monde merveilleux des fractales de Mandelbrot, tout d’abord avec ce rendu de l’ensemble de Mandelbrot utilisant la technique du Orbit Trap permettant de faire un rendu en y plaquant une image couleur :

          Rendu de l’ensemble de Mandelbrot par la méthode de l’« Orbit Trap »
          Fig.4.4. Rendu de l’ensemble de Mandelbrot par la méthode du Orbit Trap.

          Puis, avec un autre type de rendu, connu sous le nom de Buddhabrot, mais ici en considérant des séries complexes de type zn+1 = zn^p + c, et en faisant varier linéairement l’exposant réel p entre 0 et 6 (plutôt qu’en gardant p=2 comme pour l’ensemble de Mandelbrot classique), pour générer chaque image de l’animation ci-dessous (code source et détails sur cette page) :

          Rendu de type 'Buddhabrot' pour des séries complexes avec exposant
          Fig.4.5. Variations fractales autour du Buddhabrot.

          À noter que pour générer ces images du Buddhabrot modifié à bonne résolution, cela requiert déjà un temps de calcul important (quelques minutes par image). Je trouve cette animation intrigante : il est assez facile d’y retrouver/halluciner des formes familières quand on regarde en détail certaines frames de l’animation, un peu comme quand on regarde les nuages dans le ciel (si vous croyez apercevoir dans cette animation, une tête d’ours, un vieux monsieur assis, une silhouette de personnage, une tête de dragon… alors vous n’êtes pas les seuls à être un peu rêveurs ☺).

          • Conversion d’images pour le String Art :

          Le String Art est une forme de création artistique caractérisée par l’utilisation de fils de couleurs reliés entre des points (le plus souvent des clous) pour former un motif ou reproduire une photographie (classiquement des portraits). Dans un but d’expérimentation, nous avons écrit un script G’MIC qui cherche à transformer une image d’entrée en niveaux de gris choisie par l’utilisateur, sous la forme d’une série d’instructions à suivre pour relier des clous numérotés avec un fil monochrome, afin de reproduire l’image le plus fidèlement possible (en considérant les contraintes propres à ce mode de création) :

          Tentative d’utilisation de G´MIC pour le 'String Art'
          Fig.4.6. Tentative plus ou moins réussie d’utilisation de G´MIC pour le String Art.

          Saurez-vous reconnaitre qui est censé être représenté sur la photo ci-dessous (il n’y a rien de spécial à gagner…) ? Une tentative pas forcément couronnée de succès, qui mériterait d’être approfondie (notamment en gérant des fils de différentes couleurs), mais qui illustre cependant les possibilités multiples d’expérimentations que permet le cadriciel G’MIC !

          • Autres liens connexes :

          Pour finir, citons ces quelques liens en vrac, qui permettent d’apprécier la polyvalence de G’MIC :

          1. Stéganographie : Ou comment cacher des données dans une image de bruit ? La commande rand est capable de générer des valeurs aléatoires à densité, c’est-à-dire dont la densité de probabilité est une fonction spécifiée par l’utilisateur. Cela a par exemple comme application de cacher des images de taille 256x256 dans des histogrammes d’images de bruit à 16bits/canal, comme détaillé sur cette page.
          2. Galeries artistiques : Ivelieu et Gannjondal sont deux artistes fréquentant le site Deviant Art qui utilisent parfois G´MIC dans leur processus de création artistique. Allez faire un tour sur leurs galeries respectives, ça vaut le coup d’œil !

          Images de la galerie d’Ivelieu
          Fig.4.7. Quelques réalisations de Ivelieu / Devian Art.

          Images de la galerie de Gannjondal
          Fig.4.8. Quelques réalisations de Gannjondal / Devian Art.

          1. Nous avons appris que la prochaine version du programme de gestion de photos digiKam 8.4.0 inclura un outil de traitement G’MIC au sein du Batch Queue Manager, ce qui permettra aux utilisateurs de digiKam d’intégrer les filtres G’MIC dans les flux de travail de post-traitement.
          2. Thiojoe est un Youtubeur produisant des vidéos autour de la technologie, et programmeur à ses heures. Il a commencé à développer un outil libre basé sur G´MIC pour générer facilement des animations, outil que vous pouvez retrouver ici. Ne fonctionne que sous Windows pour le moment, mais nous garderons un œil dessus.
          3. Enfin, mentionnons la chaîne Youtube de JustCallMeInsane, illustratrice numérique utilisant Krita. Elle a récemment réalisé une série de vidéos qui explore les différentes catégories de filtres du greffon G´MIC-Qt pour Krita. On espère en passant que l’équipe de développement de Krita, qui gère sa propre version du greffon, pourra le mettre à jour assez rapidement.

          5. Conclusion

          On pourrait résumer cette dépêche en disant que le projet G’MIC « continue son petit bonhomme de chemin ».

          G’MIC reste bien sûr un projet modeste, développé et maintenu par une petite équipe (de passionnés), mais avec un nombre d’utilisateurs croissant et des retours d’utilisation de plus en plus variés. Ce cadriciel a la chance de pouvoir être développé au sein du GREYC, un laboratoire de recherche publique assurant au projet un contexte de développement favorable, d’être soutenu par les tutelles du laboratoire (l’institut « Sciences Informatiques » du CNRS, l’Université de Caen et l’ENSICAEN) et même encouragé par la direction dudit laboratoire.

          Et même si le plus gros du développement sur ce projet a probablement déjà été réalisé (plus de 15 ans de développement quand même), nous sommes confiants dans le fait que nous allons continuer à faire évoluer G’MIC, en tout cas, tant qu’on verra qu’il peut s’avérer utile aux traiteurs et traiteuses d’images de tout poil ! Et nous en reparlerons certainement dans une prochaine dépêche.

          Commentaires : voir le flux Atom ouvrir dans le navigateur

          • ✇LinuxFr.org : les dépêches
          • Les langues peu documentées et le libre : quelques enjeux scientifiques
            Comme beaucoup de domaines scientifiques, la documentation de la diversité linguistique entretient une relation forte avec les mondes du Libre. Dans cette dépêche, je vous propose de découvrir ce domaine à travers la présentation de plusieurs logiciels et ressources libres ou en accès ouvert. La documentation des langues étant un thème peu courant sur LinuxFr.org, on commencera par une présentation de cette problématique. Nous continuerons par une description des deux ressources principales exis

          Les langues peu documentées et le libre : quelques enjeux scientifiques

          Comme beaucoup de domaines scientifiques, la documentation de la diversité linguistique entretient une relation forte avec les mondes du Libre. Dans cette dépêche, je vous propose de découvrir ce domaine à travers la présentation de plusieurs logiciels et ressources libres ou en accès ouvert. La documentation des langues étant un thème peu courant sur LinuxFr.org, on commencera par une présentation de cette problématique. Nous continuerons par une description des deux ressources principales existantes pour cataloguer et se repérer au sein de cette diversité linguistique. Je parlerai ensuite d’ELAN et de FLEX, deux logiciels utilisés pour annoter des enregistrements audio-visuels, une étape clef dans l’analyse linguistique, et qui permet le partage et la réutilisation de ces enregistrements. Enfin, après un court passage sur la question de l’archivage, je présenterai deux compilations de corpus de documentation en accès libre, une pratique récente qui permet de nouveaux questionnements quantitatifs sur les langues orales peu documentées, et qui contribue également à la transparence et la traçabilité des analyses linguistiques.

            Sommaire

            L’étude des langues à travers le monde

            Actuellement, environ 7000 langues ont été recensées à travers le monde. Ce chiffre ne peut être qu’une approximation car, il n’y a pas de consensus sur la définition de ce qu’est une langue. Une difficulté par exemple est de définir à quel moment une langue est distincte d’une autre. Lorsqu’il y a variation, mais intercompréhension, de nombreux linguistes s’accordent à dire qu’il s’agit alors de dialectes d’une même langue, et donc, lorsqu’il n’y a pas intercompréhension, alors il s’agit différentes langues. Cette perspective considère que tout le monde parle un dialecte (que ce soit celui de référence, ou un plus régional comme celui de Paris, de Marseille, du Québec), la langue n’étant qu’une abstraction permettant de regrouper les diverses pratiques langagières. En ce qui concerne l’intercompréhension, ce critère n’est malheureusement pas absolu car elle peut varier selon les personnes et leur parcours personnel. Et lorsqu’on considère l’évolution d’une langue à travers le temps, sa diachronie, définir ce qu’est une même langue à travers ses évolutions temporelles se complexifie d’autant plus.

            Si certaines langues ont émergé récemment, on pense assez souvent aux langues dites créoles (le Bichelamar, les créoles malais, à Madagascar ou au Cap Vert), ou également lorsque certains dialectes se distinguent suffisamment pour ne plus être intercompréhensibles, la tendance actuelle est surtout à la disparition massive des langues. Cette disparition est souvent rapportée à travers la mort des derniers locuteurs et locutrices, on peut aussi considérer qu’une langue meurt lorsqu’elle n’est plus parlée d’une part, et qu’elle disparait si elle n’est pas documentée. Si certains aujourd’hui se questionnent sur la corrélation entre la diversité culturelle et la diversité écologique, il est évident que la disparition des langues correspond également à des inégalités et des tensions socio-politiques.

            Bref, la documentation des langues, c’est un sujet actuel, et d’un point de vue scientifique, la perte de cette diversité aura de tristes conséquences sur la connaissance des langues et de l’univers des possibles languagiers, encore souvent sous-estimé :

            • l’article The myth of language universals : Language diversity and its importance for cognitive science d’Evans donne un bel aperçu du débat qui existe entre les linguistes fonctionnalistes, notamment les approches générativistes telles que proposées par Noam Chomsky. Pourtant, régulièrement à travers la documentation des langues, des catégories cognitives jusque-là non-soupçonnés, voire rejetées car non-observées, sont identifiés. Nous nous sommes rendu compte récemment qu’un quart des langues grammaticalisaient l’emploi d’évidentiels, ces morphèmes qui indiquent la source d’une information. Au niveau de l’odorat, des neurologistes pensaient que si nous n’avions pas de termes abstraits pour catégoriser les odeurs, c’était lié au fait que notre cerveau ne le permettait pas. La description des termes liés à l’odorat en Jahai (par ici si vous souhaitez écouter du Jahai), qui possède donc des termes spécifiques pour catégoriser les odeurs, a montré le contraire.
            • accéder à des facettes non-matérielles de la préhistoire, non-accessibles à travers l’archéologie. La documentation des langues nous permet d’accéder, dans une certaine mesure, aux termes et aux concepts utilisés durant les différentes préhistoires à travers la comparaison des langues et de leurs structures. Les travaux sont nombreux et anciens en ce qui concerne les langues européennes, mais les recherches en linguistique historique (ou comparée) portent également sur toutes les langues connues à travers le monde. Les chercheurs et chercheuses de ce domaine collaborent assez régulièrement avec les archéologues pour retracer les mouvements de population.
            • mettre au point des systèmes d’écriture pour les langues orales, ou simplement des traitements de texte adapté aux écritures existantes. Parfois, certaines personnes savent écrire dans la ou les langues officielles du pays, mais ne connaissent pas d’écriture pour une de leurs langues régionales. C’est ainsi souvent le cas pour les personnes au Vanuatu. Le pays reconnait même le droit d’enseigner les langues locales à l’école, mais il n’existe que très rarement des ressources (que ce soit les personnes ou les manuels) pour cela. Parfois, les gens ne connaissent tout simplement pas de système d’écriture.

            Quelques concepts et termes liés à la documentation des langues

            Comme tout domaine de recherche, la terminologie et les concepts linguistiques évoluent au gré des discussions et peut se distinguer de l’usage attendu des termes. Une étape importante dans la documentation d’une langue est la production d’une grammaire décrivant les structures linguistiques de cette langue. De nombreux linguistes estiment alors qu’on peut dire que cette langue est décrite. Il ne faut pas se tromper cependant, aucun linguiste ne considère qu’une langue est alors complètement décrite. Une grammaire ne contient que quelques aspects estimés actuellement essentielles par les linguistes de terrain. Ces points sont, le plus souvent, une description du système phonologique d’une langue (c’est-à-dire comment les sons d’une langue sont organisés les uns vis-à-vis des autres), des morphèmes et des processus morphologiques associés (la conjugaison, l’expression de la possession, les déclinaisons, les genres, les classifications, etc.) d’une langue et souvent un début de description des processus syntaxiques. Il existe de nombreuses approches pour décrire les faits linguistiques, et la description d’une langue se fait souvent en dialogue avec les pratiques et terminologies qui ont été employées dans l'aire linguistique concernée.

            Depuis l’article Documentary and descriptive linguistics de Nicholaus Himmelman, qui a promu la distinction entre la documentation linguistique et la description linguistique, on accorde beaucoup plus d’importance à la production d’un corpus d’enregistrements annotés. On dit alors d’une langue qu’elle est documentée si des enregistrements annotés, de préférences audio-visuels, de cette langue existe. Enfin, il existe la problématique de l’outillage d’une langue, c’est-à-dire si ses locuteurs et locutrices ont accès ou non aux outils informatisés, du traitement texte aux dictionnaires informatisés en passant par la reconnaissance vocale, la transcription automatique, voire aujourd’hui aux modèles de langues et autres ressources nécessitant des corpus beaucoup plus grands.

            Les catalogues et base de données pour l’identification des langues

            Une problématique récurrente dans le domaine des langues est de clairement identifier la langue sur laquelle on travaille. Cependant, identifier une langue, ce qui relève ou non de cette langue, où elle est parlée, est l’enjeu de nombreux débats, souvent politique, et n’est pas une tâche simple. Quoi qu’il en soit, il existe des ressources, bases de données, qui proposent d’associer à des noms de langues, endonymes ou exonymes, des codes pour rendre leur identification univoque.

            L’Ethnologue et l’ISO 639 : une norme gérée par le Summer Institute of Linguistics (SIL)

            Ethnologue, Languages of the World, ou plus simplement l’Ethnologue, est une base de données développée et maintenu par l’organisme évangélique SIL, Summer Institute of Linguistic depuis 1951. Elle vise à recenser toutes les langues du monde. L’ISO 639 est une norme issue de ce catalogue, également maintenue par le SIL. Cet organisme est très actif au niveau de la documentation des langues et de la création d’écritures, car un de ses objectifs est de traduire la Bible dans toutes les langues du monde. Historiquement, l’Ethnologue est un des premiers catalogues dont l’objet a été de recenser les langues. Si cette norme semble le plus souvent suffisamment exhaustive pour les besoins liés à l’informatique, après tout, les internautes consultent Internet en très peu de langue, d’un point de vue linguistique, il possède de nombreuses lacunes.

            La liste SIL des langues

            Un premier souci est la nécessité d’avoir une granularité plus importante que simplement la langue. Les linguistes travaillent sur des dialectes et des variétés, sur des familles de langues, et parfois ont travaillé sur des distinctions qui n’ont parfois plus cours. Afin de pouvoir associer ces ressources à des langues, ou des entités linguistiques particulières, l’approche du SIL ne suffit pas.

            Enfin, la gestion du catalogue par un organisme religieux, donc avec parfois d’autres enjeux qu’uniquement scientifiques, le fait qu’il s’agisse d’une norme, donc la nécessité de collaborer avec l’ISO, et le fait que seule une partie du catalogue est accessible (il faut un abonnement pour accéder à la totalité de la ressource) rend la ressource moins pertinente pour de nombreux linguistes. Ces limites ont poussé des linguistes à proposer une ressource alternative.

            Glottocode : par le Max Planck Institute for Evolutionary Anthropology.

            Le projet Glottolog, initialement développé par Sebastian Nordhoff et Harald Hammarström, catalogue non seulement les langues du monde actuelles et passés, les familles de langues et leurs différentes branches, mais également « les restes » des hypothèses de langues ou de regroupements historiques. Cette granularité permet de retrouver les documents associés à chacun de ces objets. Si le catalogue est dédié aux langues moins connues, les langues les plus centrales sont elles aussi répertoriées. Il s’agit actuellement du catalogue mis en avant par les linguistes documentant les langues à travers le monde. L’application Glottolog est disponible via la licence MIT.

            Aperçu du Glottolog à travers la liste des langues

            Si aux premiers abords, la liste des langues du Glottolog ne se distingue pas franchement de celle de l’ISO 639, c’est parce qu’il faut regarder plus en détail pour comprendre les différences essentielles entre les deux ressources. Notons tout de même la colonne « Child dialects » : « Dialectes enfants », et les champs vides au niveau des colonnes Top-level-family et pour la langue Abai Tubu-Abai Sembuak dans la colonne « ISO-639-3 ». La colonne « Child dialects » représente une information qui n’est pas documenté dans l’ISO 639, ce n’est pas son objet après tout, mais qui est intéressant pour les linguistes travaillant sur cette langue, indiquant qu’un minimum de données sociolinguistiques sont disponibles. Les champs vides dans la colonne « Top-level family » sont dus au fait que ces langues sont des isolats, c’est-à-dire que la linguistique comparée ne trouve pas de correspondances significatives entre cette langue et d’autres langues qui permettraient de les regrouper en une famille. Enfin, le vide dans la colonne ISO-963-3 révèle que la langue Abai Tubu-Abai Sembuak ne possède pas d’entrée dédiée dans la norme.

            Ainsi, lorsque l’on consulte une langue en particulière, ici le Nisvai, on voit apparaitre tous les embranchements existants associés à cette langue :

            La langue Nisvai dans le Glottolog

            Cette vue de l’arborescence associée à une langue particulière révèle tous les embranchements auxquels peut⁻être associée une langue. Et à chacun de ces embranchements, si des ressources linguistiques ont été identifiées par les mainteneurs du Glottolog, celles peuvent être proposées. Cette fonction permet aux linguistes de trouver des ressources sur les langues proches, non pas géographiquement (même si en pratique c’est le plus souvent le cas), mais d’un point de vue généalogique.

            Les autres

            Il existe d’autres initiatives pour cataloguer les langues du monde, que ce soit la liste proposée par Wikipedia, la liste de la CIA ou encore The Linguasphere Register, mais ces initiatives ne sont pas aussi pertinentes du point de vue de la documentation des langues.

            Documenter les langues

            ELAN : des schémas d’annotation flexibles

            ELAN est un des logiciels libres (GPL3) les plus utilisés par les linguistes pour annoter des enregistrements audio et vidéo. Il permet d’élaborer des structures d’annotation complexes permettant ainsi de rendre compte des analyses que les linguistes souhaitent associer à un enregistrement. Ces couches d’annotation sont reliées les unes aux autres par des relations logiques, avec le plus souvent une couche de référence indexée temporellement à l’enregistrement. Les annotations les plus courantes sont une transcription, une traduction et une annotation morphologique. Mais des nombreuses autres analyses peuvent être incluses, que ce soit les parties du discours, les références et anaphores, l'animéité, mais aussi les gestes, la structuration du discours, les signes pour les sourds et malentendants.

            Extrait d’une narration présente dans DoReCo, et vue sur les différentes couches d’annotation pouvant être associés à un enregistrement.

            Dans cette capture d’écran issu d’un texte de DoReCo retravaillé par l’auteur, on aperçoit un extrait de quelques secondes d’une narration nisvaie. Il s’agit d’un des modes de visualisation des annotations proposées par ELAN pour représenter les différentes couches d’annotation. Certaines de ces annotations ont été réalisées à la main par l’auteur, d’autres ont été retravaillées par les algorithmes mis en place par DoReCo, puis manuellement corrigés. Enfin, il y a également des couches d’annotation de la prosodie par le biais de SLAM+.

            FLEX : gérer un projet de documentation

            FLEX est un logiciel développé par le SIL et dont le code source est régie par la licence LGPL 2.1. Il est conçu davantage pour coordonner l’ensemble d’une documentation linguistique, de la gestion des textes à l’élaboration d’un dictionnaire, en passant par les analyses linguistiques. En revanche, il ne gère pas réellement l’annotation d’enregistrements. De nombreux linguistes l’utilisent en complément d’ELAN.

            Si le logiciel est prometteur sur le papier, à chaque fois que je l’ai essayé, j’ai été rebuté par son côté usine à gaz, et surtout ses nombreux plantages notamment lorsqu’on essaie de gérer des fichiers multimédia avec. Et il en est de même pour les autres logiciels développé par le SIL, tel que SayMore pour gérer les métadonnées des enregistrements, WeSay pour faire des dictionnaires en collaboration avec les locuteurs et locutrices, à chaque fois que je les ai essayés, enthousiasmé par leurs fonctionnalités, j’ai été déçu par le fait qu’ils ne fonctionnaient pas correctement sur mon ordinateur.

            Aperçu de Flex

            Cette capture d’écran illustre un des modes de saisie de FLEX, ici la vue tabulaire du lexique, qui permet de rentrer et gérer les définitions des lexèmes (les entrées du dictionnaire) de manière assez rapide. On aperçoit dans la partie en haut à gauche les autres modes d’édition du lexique, et en dessous les autres catégories liées à la gestion d’un projet de documentation : Texts & Words, Grammar, Notebook et Lists. C’est à travers la catégorie Texts & Words que l’on peut par exemple importer des textes transcrits, voire des fichiers ELAN pour peupler la base de données lexicales. Grammar permet de décrire les paradigmes grammaticaux, FLEX propose d’ailleurs quelques algorithmes qui aident à la construction des paradigmes grammaticaux. Notebook et Lists servent à la gestion du projet, le premier pour prendre des notes diverses, et le second pour créer des listes, en particulier des tâches encore à réaliser.

            Et il y en a bien d’autres encore

            Il existe de nombreux autres logiciels similaires, tels qu’EXmaralda pour l’annotation des enregistrements (surtout utilisé en Allemagne à ma connaissance), Sonal (non libre, et dont le développement semble arrêté) qui est utilisé par les sociologues et les anthropologues pour une annotation thématique de leurs entretiens, Anvil, qui semble intéressant mais que je n’ai jamais réellement vu utilisé, ou enfin le vieux Transcriber qui lui était encore employé par certains projets il y a quelques années. Rentrer dans le détail de tous ces logiciels dépasserait le cadre d’une dépêche comme celle-ci, mais énumérer la diversité logicielle montre qu’il s’agit d’un secteur un minimum dynamique, d’ailleurs la question de la transcription et de l’annotation des enregistrements ne se limite pas du tout qu’au domaine de la documentation des langues du monde.

            L’archivage et la compilation de corpus

            Afin de conserver et partager les corpus et donnée enregistrées par les linguistes, chercheurs voire simplement les personnes ayant documenté une langue, il existe des archives, le plus souvent en ligne. Il y a en France par exemple Pangloss, géré par le LACITO, dédié aux langues orales, ou ORTOLANG, plus générique, pour les corpus de langue. En Océanie, il y a Paradisec. Il y a aussi ELAR, autrefois à Londres, et qui a déménagé récemment à Berlin récemment.

            Ces archives proposent diverses interfaces pour déposer, gérer et parfois même consulter les enregistrements et les annotations réalisés par les linguistes et leurs collaborateurs·e·s. À noter que pour ces archives, Ortolang décrit son architecture logicielle qui repose sur des briques ouvertes, en revanche concernant Paradisec et Pangloss, bien que leur statuts soient sûrement similaires du fait de la démarche générale de ses ingénieurs, je n’ai pas trouvé de liens vers les logiciels employés. Quant à ELAR, le logiciel utilisé est Preservica, une solution propriétaire qui, quand on a le malheur de devoir l’utiliser, fonctionne bien lentement.

            La compilation de corpus, si elle se rapproche de l’archivage en ce qu’il s’agit également de recueillir, conserver et publier les corpus des linguistes, correspond également à une édition particulière de ces corpus. La compilation de corpus est réalisé à travers la mise en place de processus de qualité, d’annotations et de conventions particulières. Les deux compilations de corpus présentées ici sont des compilations de corpus de documentation de langues orales. Les enregistrements ont été systématiquement annotés en utilisant une convention nommée les gloses interlinaires (le nom fait en fait référence à la pratique ancienne d’insérer des explications entre les lignes d’un texte. En pratique aujourd’hui, ce n’est plus vraiment ce que font les linguistes, puisque le travail est informatisé et les annotations ne sont plus entre les lignes, mais, le terme a cependant été conservé).

            DoReCo

            DoReCo est une compilation de 52 corpus en accès ouvert (NdR : auquelle l’auteur a contribué). La compilation a nécessité la mise en place de processus de qualité afin d’assurer la cohérence de l’ensemble et de fournir un certain nombre de garanties quant aux qualités du corpus.

            Les langues dans DoReCo

            Une première qualité, et l’une des originalités de DoReCo, est de proposer un alignement temporel est très fin. La durée de chaque phonème, de chaque morphèmes, de chaque mot (ici suivant la définition de la personne à l’origine du corpus, car la définition d’un mot n’a rien d’une évidence) et enfin de chaque groupe de souffle est fournie. Une deuxième qualité a été de s’assurer que pour l’ensemble des retranscriptions, chacun des termes et des morphèmes possède une glose, c’est-à-dire qu’ils possèdent une explication linguistique.

            La compilation totalise une centaine d’heures d’enregistrements audio, en grande majorité des narrations monologiques. À noter que les corpus de la compilation sont accès ouvert, via une licence Creative Commons, mais que les droits d’utilisation varient d’un corpus à l’autre. Les données sont accessibles aux formats d’ELAN : .eaf, de Praat : . TextGrid, TEI.xml, et.csv.

            Multi-CAST

            Multi-CAST est également une compilation de 18 corpus de documentation de langues différentes. Les textes annotés via le logiciel ELAN. Contrairement à DoReCo, l’alignement temporel des annotations n’est pas réalisé de manière précise, mais manuellement, par les personnes à l’origine du corpus, à l’échelle de l’énoncé. Les textes sont également en grande majorité des narrations monologiques. L’originalité de cette compilation de corpus vient du fait que les textes contiennent trois couches d’annotation particulières : GRAID, Grammatical Relations and Animacy in Discourse, (voir), puis RefIND et ISNRef (Referent Indexing in Natural Language Discourse, voir Schiborr et al. 2018).

            La page d’accueil de Multi-Cast

            Cette compilation de corpus est aussi disponible dans plusieurs formats. XML évidemment, puisque c’est le format natif d’ELAN, mais aussi TSV et il existe également un paquet pour R. Tout cela est disponible via la licence CC-BY 4.0.

            Conclusion

            J’espère que vous avez apprécié cette introduction à la documentation des langues à travers les logiciels libres. L’idée est surtout d’attiser la curiosité, car il reste évidemment encore de nombreux aspects ou points à discuter et à approfondir. La prochaine fois que j’aborderai le thème de la documentation linguistique ici, j’espère que ça sera pour présenter mon application basée sur Django pour faire de la lexicographie.

            Il y a également un autre sujet sur lequel j’aimerais bien échanger ici prochainement : la question des licences des données collectés et la négociation lorsque l’on travaille avec des personnes à tradition orale. Si ouvrir l’accès aux données de recherche et aux corpus peut sembler être une évidence pour certains, il ne faut pas oublier que souvent, les chercheurs et chercheuses de terrain collectent des informations personnelles, que la connaissance n’est pas forcément considérée comme un bien public et les enregistrements, notamment les narrations, qui ne sont pas forcément perçues comme des fictions, sont souvent couverts par des droits locaux. Enfin, ouvrir ses données de recherche, si c’est permettre à d’autres de réutiliser ses données, requiert beaucoup de travail de la part des linguistes, c’est une tâche longue, ingrate et surtout peu valorisée. Alors qu’il est de plus en plus précaire d’être chercheur en sciences humaines, il est aussi difficile de demander à ces chercheurs et chercheuses de consacrer une grande partie de leur temps à des tâches qui ne leur permettront pas de se constituer un CV, nécessaire si l’on souhaite avoir un poste stable (c’est-à-dire plus de deux ans).

            Label sans IA : ce texte a été rédigé sans aucun aide de la part d’une LLM.

            Commentaires : voir le flux Atom ouvrir dans le navigateur

            ❌
            ❌