URL:
https://linuxfr.org/news/muttum-un-nouveau-jeu-de-devinette-de-mots-pour-linux
Title: muttum, un nouveau jeu de devinette de mots pour Linux
Authors: Adrien Dorsaz
Julien Jorge, cli345, palm123 et Benoît Sibaud
Date: 2025-07-06T15:58:57+02:00
License: CC By-SA
Tags:
Score: 4
[muttum](
https://muttum.org/) 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](
https://flathub.org/apps/org.muttum.muttum) depuis le début de l’été.
----
[site du projet](
https://muttum.org/)
[muttum sur Flathub](
https://flathub.org/apps/org.muttum.muttum)
[code source](
https://gitlab.adorsaz.ch/muttum/muttum)
----
# Histoire

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](
https://gtk.org/) et [GObject](
https://docs.gtk.org/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](
https://linuxfr.org/users/trim/journaux/utilisation-de-gtktreemodel-gtktreeview-et-consorts), 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](
https://fr.wiktionary.org/wiki/muttum), 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](
https://fr.wiktionary.org/wiki/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_](
https://gnome.pages.gitlab.gnome.org/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_.

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](
https://www.bassi.io/articles/2017/02/13/on-vala/) d’Emmanuele Bassi) ;
3. les éditions _ENI_ m’ont offert le livre [_Rust, Développez des programmes robustes et sécurisés_](
https://www.editions-eni.fr/livre/rust-developpez-des-programmes-robustes-et-securises-9782409035289) pour une de mes contributions à LinuxFr.
Enfin, en juin 2025, la première version publique a été [publiée sur Flathub](
https://flathub.org/apps/org.muttum.muttum).
# 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](
https://salsa.debian.org/gpernot/wfrench.git) pour le français
* [scowl](
http://wordlist.aspell.net/) pour les dictionnaires anglais
* [igerman98](
https://j3e.de/ispell/igerman98/) pour les dictionnaires allemands
muttum permet aux distributeurs de définir n’importe quel dictionnaire avec un [fichier de configuration](
https://gitlab.adorsaz.ch/muttum/muttum/-/blob/48fa54192b589553c0aaa13d89d1573f88983087/doc/muttum.toml). 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.

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_](
https://linuxfr.org/users/trim/journaux/vous-avez-dit-caractere) 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](
https://doc.rust-lang.org/stable/clippy/configuration.html) et je voudrais corriger les points qu’il remonte pour avoir un meilleur style de code.
5. la bibliothèque [_icu_](
https://docs.rs/icu/latest/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.