Publicodes, l’étrange langage de développement en français
Cocoricode
Illustration : Flock
Le 19 décembre 2024 à 09h15
Une partie des simulateurs proposés aujourd’hui par l’administration et le gouvernement français sont basés sur un langage spécifique, nommé Publicodes. L’une de ses particularités est d’être intégralement en français. Il a été créé en 2017 par un développeur, Maël Thomas, avec qui nous nous sommes entretenus.
Publicodes, l’étrange langage de développement en français
Cocoricode
Illustration : Flock
Une partie des simulateurs proposés aujourd’hui par l’administration et le gouvernement français sont basés sur un langage spécifique, nommé Publicodes. L’une de ses particularités est d’être intégralement en français. Il a été créé en 2017 par un développeur, Maël Thomas, avec qui nous nous sommes entretenus.
Logiciel
Logiciel
10 min
Voilà un langage bien étrange, dont la syntaxe est basée sur des mots courants en français, pour en simplifier l’utilisation. Si vous n’en avez jamais entendu parler, on le trouve pourtant sur bon nombre de services proposés par l’administration directement ou dans des projets affiliés. mon-entreprise.fr a par exemple été incubé par l’URSSAF et s’en sert pour calculer les coûts liés aux salaires. Nos Gestes Climat a été incubé par l’ADEME et propose un calculateur pour estimer les empreintes carbone et eau. Le Code du travail numérique s’en sert aussi pour répondre aux questions sur le droit du travail.
De quoi parle-t-on exactement ? D’un langage déclaratif créé pour coder les algorithmes d’intérêt public. Il génère automatiquement une documentation permettant d’expliquer les opérations. Dès sa création, ses concepteurs ont cherché à fournir un code interprétable et explicable. Publicodes se veut particulièrement adapté à la modélisation des domaines métiers pouvant être décomposés en règles élémentaires. Sur le GitHub du projet (le langage est sous licence MIT) et le site officiel, on trouve plusieurs cas d’usage : législation socio-fiscale, bilan carbone, estimateur de rendement locatif, etc.
Le langage a été créé en 2017 par le développeur Maël Thomas, alors qu’il travaillait à la Direction du numérique (DINUM) sur un projet de simulateur d’embauche (devenu depuis mon-entreprise.fr après une reprise par l’URSSAF). Aujourd’hui, il souhaite faire plus largement connaitre Publicodes, pour attirer des personnes intéressées, collecter des retours critiques, voire des retours pratiques d’autres membres des administrations. Nous lui avons posé quelques questions.
Comment vous est venue l’idée de créer Publicodes ?
J’ai commencé à travailler pour l’État en 2016, avec un CDD de deux ans. Je suis arrivé dans l’équipe qui travaillait sur le simulateur d’embauche. On utilisait alors un outil qui s’appelle OpenFisca, assez lourd, en Python, mais qui a joué un rôle crucial dans l’ouverture des calculs de l’administration et dans l’évolution des pratiques. On avait alors une écriture vectorielle et des formules de calcul et on devait coder les fiches de paye avec ça. C’était démesurément compliqué. On ne pouvait pas faire de choses simples comme « if ». Je me suis dit que l’on pouvait faire beaucoup plus simple.
Il y avait une autre contrainte, inhérente à tout projet : l’inertie devant le coût d’une transition, avec tous les tests. J’ai quand même commencé à travailler sur le langage et un collègue, Laurent, m’a rejoint rapidement. À ce moment-là, on devait travailler sur la partie CDD du simulateur. On a fini par la créer avec le nouveau langage, ça a fonctionné, on l’a mis en ligne. Tout est parti de là. J’avais écrit une genèse complète du projet en 2021.
Je suis le créateur du langage, mais je ne participe plus directement au cœur du projet aujourd’hui. C’est mon ancien collègue de l’équipe Mon-Entreprise, Johan Girod, qui a repris le rôle de contributeur principal.
Sur quoi est basé le langage ?
Derrière, c’est du TypeScript, avec une syntaxe YAML. Pourquoi YAML alors qu’elle est décriée ? Elle nous évite en fait de créer une syntaxe dédiée à Publicodes. Ça nous a permis de créer quelque chose de simple et d’universel. YAML, ce sont des objets et des listes. Notre syntaxe est aussi composée d’objets et de listes.
L’entrée du langage se fait en JSON. À partir de là, Publicodes propose des fonctions d’évaluation des variables. On a un moteur type qui produit ensuite le script qui tourne dans le navigateur, le serveur, le client, au choix. Par contre, nous n’avons pas de compilateur, pour utiliser ça en Python, Java ou autre. Dans ces cas-là, on propose de mettre en place une petite API.
Publicodes a-t-il fait des émules depuis sa création ?
Oui ! Aujourd’hui, il y a une douzaine d’équipes de l’État qui l’utilisent pour des projets assez divers. En ce moment, je travaille sur Mes Aides Réno au sein d’une startup d’État. C’est le calculateur officiel des aides à la rénovation thermique. Il est open source et basé sur Publicodes. Je suis d’ailleurs en train de travailler sur la mise à jour 2025.
On a beaucoup d’employés, de membres d’équipes ou même du grand public qui ont fait pas mal d’améliorations sur le code, pour avoir une autocomplétion intelligente, ce genre de chose. Émile Rolley est par exemple l’auteur de la bibliothèque d’autocomplétion. Il est aussi contributeur sur le langage Catala.
Après, je ne sais pas si on peut parler d’émulation, Catala est assez équivalent, mais avec des choix très différents sur la syntaxe. Il est conçu pour l’annotation des textes de loi et peut créer facilement des simulateurs. Il n’est pas encore utilisé en production, c’est une expérimentation de la Direction générale des finances publiques, mais on pourrait le trouver dans de nouveaux projets à la CNAF, à Pôle Emploi, etc. Et c’est aussi en open source (licence Apache 2.0).
À quoi correspond aujourd’hui cette volonté de parler plus ouvertement de Publicodes ? Quel est votre objectif ?
C’est une très bonne question. Je n’ai pas de réponse simple, mais je peux donner plusieurs éléments. Il y a d’abord un enjeu public. On a refait le site officiel récemment, c’est plus propre et plus pro. On essaie d’améliorer substantiellement la documentation pour guider les nouveaux venus.
Je pense que ce qui nous intéresse surtout, c’est de collecter des retours. Plus il y a de gens qui viennent nous voir, plus on a de remises de question, de points de vue, de retours d’usage. C’est très important pour nous et il y a sans doute beaucoup de gens qui l’utilisent sans qu’on le sache. On aimerait bien recruter quelqu’un à temps plein aussi sur le langage.
Par ailleurs, nous restons beaucoup dans la continuité des changements provoqués par l’arrivée d’Henri Verdier comme administrateur général des données. On parlait alors beaucoup d’open data, d’open algorithme, d’open gouvernement, une idée qui a été portée par Etalab pendant longtemps. On est dans cette optique : la transparence des algorithmes de l’État. Et quand ce n’est pas ouvert, on voit bien le résultat, comme avec Parcoursup. Tout ce travail continue. Il y a par exemple la mission code.gouv.fr qui doit répertorier tous les travaux open source de l’État.
La fragmentation y est prononcée ?
Prononcée je ne sais pas, mais il y a une certaine fragmentation oui. Chaque administration peut choisir par exemple de publier du code sur GitHub, GitLab ou une autre forge.
Si le but de Publicodes est de coder la loi, y a-t-il des problèmes d’interprétations de cette loi ? Comment obtenez-vous les retours ?
Oui, il y a parfois des erreurs. On a eu par exemple le mois dernier une correction pour un cas classique. On pensait qu’il fallait multiplier la base en euros par un taux qui était plafonné, mais c’était la base elle-même qui était plafonnée.
Après, pour les retours, c’est très variable. Ils viennent parfois des « utilisateurs experts », via notre formulaire de retour. Ça peut être aussi des conseillers de France Rénov qui se servent de notre calculateur. On peut avoir aussi des sollicitations de relecture par un membre de l’administration centrale qui travaille sur les politiques publiques en question.
Cette volonté de mieux faire connaitre Publicodes se heurte au mur de la francophonie, car centré sur la loi française. Y a-t-il une volonté d’internationaliser le projet ?
Ah oui, complètement ! sur l’aspect francophone, c’est très vrai. Mais puisque c’est un langage simple avec un jeu de syntaxe assez limité, ce serait relativement facile de le traduire en anglais. On en a souvent parlé, on a fait des plans. Le mécanisme « Somme » deviendrait simplement « Sum ».
C’est exactement ce qui se passe en fait dans Excel. C’est un des rares langages polyglotte. Les utilisateurs d’Excel font des (somme) ou des (sum), sans aucune différence. Alors que dans le monde du dev, on est tous habitués à une situation historique où tout est en anglais. Toutes les structures sont en anglais. Souvent, pour un Français, voir des langages en français peut sembler ridicule. Mais en fait ce n’est pas plus ridicule qu’un Anglais observant un langage en anglais.
Ce sujet de la francophonie est très intéressant. On aimerait pouvoir dire que tel bout de code, paf on lui ajoute un entête et on peut écrire en français ou en anglais. Voir ne pas utiliser d’entête du tout. Le langage serait alors assez intelligent pour comprendre la langue que la personne utilise. Ça pourrait être intéressant pour d’autres pays qui auraient les mêmes problématiques. Par exemple s’il y a des Italiens qui font des langages en italien pour coder la loi italienne. Peut-être que c’est encore plus le cas en Allemagne parce qu’ils sont assez avancés sur le numérique.
Et quitte à comparer avec Excel, c’est l’une des manières que l’on a de décrire Publicodes, parce qu’il peut remplacer Excel pour des modèles de calcul. Il permet d’éviter les problèmes habituels des grosses feuilles de calcul, notamment l’absence d’archives et de versions quand les gens se les échangent par e-mail. À l’ADEME avant, quand j’y travaillais, il y avait un fichier Excel pour recenser la quantité de carbone contenue dans les sols français. Il pesait 300 Mo. Il y avait même une documentation intégrée. L’une des motivations de transformer tout ça avec Publicodes c’est qu’une partie des vieux ordinateurs n’arrivaient même pas à ouvrir le fichier.
Publicodes pourrait-il être utilisé pour autre chose que de la simulation ?
C’est vrai que Publicodes vient du monde de la simulation de la paie et qu’il a été repris pour d’autres projets qui faisaient un peu la même chose. Ce que je comprends très bien. Les gens regardaient le projet, voyaient que ça avait bien marché et se disaient qu’ils pouvaient s’en servir dans des situations équivalentes.
Mais le travail sur le Code du travail numérique, c’est autre chose. Même si c’est de la simulation et pas une transaction financière, à partir du moment où c’est de l’information règlementaire sur un site officiel, ce doit être exact. Donc oui Publicodes peut être utilisé pour d’autres types de projets.
Commentaires (24)
Le 19/12/2024 à 10h30
D'autre part, dans mon métier, je suis amené à fournir à des utilisateurs non informaticiens (juste curieux) des outils de configuration. Parfois, un simple fichier de configuration de type INI ne suffit pas, il faut pouvoir y coder quelques règles. Demander aux gens d'apprendre Python ou Lua, c'est un peu trop exigeant.
Quand je vois Publicodes, je me dis que c'est justement adapté à la cible. Excel devient trop vite le bordel, et il est difficile de partager son document.
C'est clairement pas un outil pour les développeurs de métier. C'est justement le but, j'ai l'impression.
Le 19/12/2024 à 10h58
On dit souvent de lire le code source, mais un peu comme pour lire les textes de loi, il faut avoir un certain niveau de connaissances avant de pouvoir l’interpréter. Cette initiative pourrait-elle un jour permettre à Mr Tout-Le-Monde de comprendre les calculs et décisions qui en découlent ?
Le 19/12/2024 à 11h22
Côté dev : il est plutôt facile de générer du code à partir de ce langage
Côté métier : il est plutôt facile à lire, et donc de voir s'il y a des erreurs.
La lecture ne nécessite pas un gros bagage technique, et ceux qui font déjà du Excel s'en sortirons très bien.
Qui plus est, je vois un avantage très rare par rapport aux autres langages plus "classiques" : le support des unités.
Enfin, le métier peut facilement faire des cas de tests et vérifier que les résultats sont bons (toujours d'un point de vue métier). Louvois aurait bien eu besoin de cette approche !
Le 20/12/2024 à 11h29
Le 20/12/2024 à 11h58
A ma connaissance, je ne vois que C++ et F# qui proposent ce genre de fonctionnalité. Des langages beaucoup plus répandus (Python, Javascript, PHP, Java, C#, etc.) ne proposent pas nativement ce concept (bien que parfois il soit possible de l'approcher)
Le 19/12/2024 à 11h24
Le 19/12/2024 à 11h30
Le studio* remplit en partie cette fonction, mais pas complètement.
https://publi.codes/studio
Le 19/12/2024 à 11h46
Le 19/12/2024 à 12h47
Si @laem sait répondre, ce serait top !
Le 19/12/2024 à 13h08
Mais sur publicodes, on n'utilise que les fonctions très basiques. D'ailleurs, on conseille maintenant d'utiliser des fichiers .publicodes pour la coloration syntaxique. Un parser simple pourrait être une option un jour.
Dans tous les cas, Publicodes prend en entrée du JSON. Libre à l'utilisateur d'utiliser du TOML s'il le désire, tant qu'il produit un JSON compatible :)
Le 21/12/2024 à 03h44
Et YAML n'est pas un superset de JSON en plus ?
Le 19/12/2024 à 12h04
Mais pour le coup, c'est beaucoup moins convivial 😅
Le 19/12/2024 à 12h09
Modifié le 19/12/2024 à 13h07
Le 19/12/2024 à 19h21
Modifié le 19/12/2024 à 20h24
Edit : voir aussi cette interface qui donne l'équivalent en Python.
Le 19/12/2024 à 12h34
Le 19/12/2024 à 12h48
Le 19/12/2024 à 13h06
Le 19/12/2024 à 13h49
Mais on pourrait appliquer la même chose et venir enrichir au fur et à mesure avec la prise en compte du nombre de parts, du calcul du montant imposable à partir des revenus, etc...
Ca peut être assez itératif comme descriptif
montant imposable : 35000€
impot revenu :
somme :
avec :
tranche 1 taux : 0%
tranche 1 plafond : 11520 €
tranche 2 taux : 11%
tranche 2 plafond : 29373 €
tranche 3 taux : 30%
tranche 3 plafond : 83988 €
tranche 4 taux : 41%
tranche 4 plafond : 180648 €
tranche 5 taux : 45%
revenu tranche 1 :
valeur : montant imposable
plafond : tranche 1 plafond
revenu tranche 2 :
valeur :
valeur : montant imposable
plafond : tranche 2 plafond
abattement : revenu tranche 1
plancher : 0 €
revenu tranche 3 :
valeur :
valeur: montant imposable
plafond : tranche 3 plafond
abattement : revenu tranche 1 + revenu tranche 2
plancher : 0€
revenu tranche 4 :
valeur :
valeur : montant imposable
plafond : tranche 4 plafond
abattement : revenu tranche 1 + revenu tranche 2 + revenu tranche 3
plancher : 0€
revenu tranche 5 :
valeur : montant imposable
abattement : revenu tranche 1 + revenu tranche 2 + revenu tranche 3 + revenu tranche 4
plancher : 0€
Bon, pas utilisable en l'état car l'indentation n'est pas conservée :/
Le 19/12/2024 à 13h51
J'ai cru comprendre que tu ne gérais plus trop l'évolution, mais si c'est syntaxiquement faisable, ce serait un ajout intéressant pour gagner en clarté je pense ;)
Le 20/12/2024 à 07h16
Dans le genre arrêtez de nous péter de nouveaux langages qui ont en gros la même syntaxe qu'avant ou pire, le langage M de MS dans PowerQuery est impressionnant pour la transformation de données.
Deux langages qui ont été pensés autrement que "C et trop compliqué, il faut le simplifier", mais plutôt "C est niveau CPU, j'ai besoin d'un langage niveau utilisateur".
Je pense que je vais modifier des programmes pour intégrer ce langage pour les règles.
Le 22/12/2024 à 13h37
Le 25/12/2024 à 20h44
Au contraire de cette bouse infâme d'Office, vendue dans tous les pays, publicodes est conçu à destination des administrations françaises et n'a pas lieu d'être converti/partagé vers d'autres langues. Du coup, proposer des instructions en Français à des utilisateurs pas forcément rompus à l'Anglais pour réaliser des calculs pour administrations françaises n'est pas stupide.
Signaler un commentaire
Voulez-vous vraiment signaler ce commentaire ?