Comment fonctionnent les disques durs ? 💻💿🛠 - YouTube
(via https://lehollandaisvolant.net/?id=20260122124513)
(Permalink)
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.
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.
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 :
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 :
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.
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 :
ILLEGAL CPU INSTRUCTION
Program Counter %pc qui nous donne l’adresse de l’instruction exécutée au moment de l’erreur%npc (ici c’est l’adresse juste après %pc, rien de surprenant)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.
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 :
0x12345678 (il corrige, mais uniquement la valeur envoyée au software. Pas la valeur enregistrée en mémoire)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.
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à.
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 ?
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 :
XXX (l’EDAC est toujours calculé sur 4 octets d’une adresse alignée, même si on lit décalé)%pc
XXX+3
XXX+3
ILLEGAL CPU INSTRUCTION, allez en prison sans passer par la case départSur 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
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)
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 :
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 :
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.
Qu’est-ce que je retiens principalement ?
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
Alors que les solutions de monitoring serveur deviennent toujours plus complexes et dépendantes de stacks lourdes, deux projets open source (NdM: absence de licence) récents prennent le contre-pied de cette tendance : MonitorBox et Monitux. Leur objectif commun : revenir à un monitoring lisible, fiable et maîtrisable, pensé avant tout pour les administrateurs Linux.
MonitorBox part d’un constat largement partagé dans les équipes techniques : la multiplication des alertes engendre une fatigue des notifications, au point que les incidents critiques risquent d’être ignorés.
Le projet introduit une logique volontairement simple mais efficace : réduction des faux positifs par vérifications successives, séparation claire entre alertes critiques et informationnelles, et retour d’un outil longtemps abandonné mais redoutablement efficace : le pager (bipper).
En complément des notifications classiques, MonitorBox propose :
Le projet assume une philosophie pragmatique : mieux vaut peu d’alertes fiables que beaucoup d’alertes ignorées.
Code source : https://github.com/simple-group/MonitorBox
Présentation : https://www.ihaveto.be/2026/01/pourquoi-jai-ressuscite-le-pager-des.html
Monitux s’inscrit dans une démarche encore plus radicale de sobriété technique. Le projet se définit comme un outil de monitoring serveur sans base de données, sans langage interprété (PHP, Python, Node.js), et sans dépendances externes.
Il repose exclusivement sur :
Ce choix permet de limiter fortement la surface d’attaque, de simplifier l’installation et de garantir une excellente lisibilité du code. Monitux se destine particulièrement aux environnements où la stabilité, la sécurité et la compréhension priment sur la sophistication fonctionnelle.
Code source : https://github.com/simple-group/Monitux/
Présentation : https://www.ihaveto.be/2025/12/monitux-le-monitoring-serveur-revient.html
Bien que différents dans leur approche, MonitorBox et Monitux partagent une vision commune :
le monitoring ne doit pas devenir une boîte noire, ni un empilement de dépendances difficile à auditer. Ces projets s’adressent aux administrateurs et équipes techniques qui souhaitent reprendre le contrôle, réduire la complexité et privilégier des outils compréhensibles, durables et open source.
Les deux projets sont publiés sous licence libre et ouverts aux contributions.
NdM: aucune licence n'est mentionnée sur les deux projets en question, qui ne sont donc pas libres en l'état.
Commentaires : voir le flux Atom ouvrir dans le navigateur
Keep your data in Europe, support local innovation, and simplify business operations. Our directory connects you with European digital service providers.
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.
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) :
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.
Les événements touchant à l’IA au 39e Chaos Communication Congress :
Les contenus communautaires sont répertoriés selon ces deux critères :
intelligence_artificielle (indication d'un rapport avec le thème de la dépêche)Certains contenus non recensés en raison du second critère peuvent être visualisés en s'aidant de la recherche par étiquette.
Commentaires : voir le flux Atom ouvrir dans le navigateur
Et si nous développions un portail collaboratif communautaire ?
OPENALIS.NET est un projet 100% open source en recherche d'un coup de boost pour arriver sur le marché FR très prochainement.
Un premier tour de table sera mené à partir de la fin du premier trimestre 2026 en fonction des retours de potentiels investisseurs afin de créer une nouvelle structure proposant LE portail collaboratif libre FR à la fois pour les particuliers et les entreprises.
(NdM.: LE ça semble ambitieux pour un nouveau projet avec Cozy/Twake, Nextcloud, Yunohost, etc. en libre sur des secteurs similaires)
Un accès simple pour tout le monde et une plateforme crédible pour les entreprises.
(Le nom du projet est voué à changer par la suite.)
![]()
Au programme :
Une campagne participative est lancée sur Ulule : https://fr.ulule.com/openalis-net/
Les informations du projet sont disponibles sur : https://openalis.net
Lors du dernier salon de l'OSXP sur Paris, OPENALIS.NET a reçu un accueil très chaleureux.
Avec plusieurs centaines de participants à cette campagne nous pourrions changer définitivement la donne en termes d'alternative souveraine sur notre sol et partout ailleurs.
Commentaires : voir le flux Atom ouvrir dans le navigateur
LOTemplate est un générateur de documents sous licence AGPL v3 qui permet de générer des documents (ODT, DOCX, ODS, XLSX, PDF, …) à partir d'un document modèle avec des variables et d'un fichier json pour les données.
![]()
Comment faire faire à LibreOffice (headless, sans interface graphique) ce que l’on ne peut pas faire avec LibreOffice (GUI, avec interface graphique) ?
Et comme c’est Noël nous avons ajouté un meilleur système de log en cadeau.
Dans la version 2.2 de LOTemplate, nous avons ajouté la possibilité d’exporter des PDF en y ajoutant un filigrane de son choix avec comme paramètres :
Pour cela, nous utilisons l’API uno de LibreOffice, qui expose plus de paramètres que l’interface graphique de LibreOffice. En effet, si l’on cherche a faire cela dans l’interface graphique de LibreOffice, on ne peut choisir que le texte. Le filigrane apparaît ensuite en vert et à la verticale.
![]()
![]()
Mais en cherchant dans l’aide de LibreOffice, on trouve sur la page d’aide de l’outil d’export PDF en ligne de commande qu’il existe les options suivantes :
C’est donc possible, LibreOffice peut le faire mais uniquement avec l’API uno. Pour faire court, rien ne l’indique dans la doc de l’API uno. Toutefois on retrouve cette page (EN) en date de décembre 2022 qui explique l’amélioration qui permet cela.
En suivant un des liens de la page on arrive à cette page (EN).
Et là on peut lire : Fix the problem by only adding the option at an UNO API level for now, this relaxes the hardcoded color without cluttering the UI.
Super, c’est possible !
Ce ne sont que des propriétés de l’export PDF. La solution a donc été simple à implémenter, avec un peu de recherche.
En résumé, savoir chercher sur internet et lire la doc reste encore utile !
Commentaires : voir le flux Atom ouvrir dans le navigateur

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.
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) :
Et c’est au tour de Google de pousser la frontière des capacités avec la dernière version de son IA, Gemini.
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.
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.
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.
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.
Commentaires : voir le flux Atom ouvrir dans le navigateur
Très bon reportage de Micode sur la société Gemplus.
https://fr.wikipedia.org/wiki/Gemplus
— Permalink