Vue lecture

Nouvelles sur l’IA de janvier 2026

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 la Constitution de Claude

Tout le monde maintenant connait le principe du pré-entrainement des LLMs : sur un corpus de texte énorme, essayer de prédire le mot suivant, étant donnés les mots précédents.

Ceci n’est cependant que la première phase pour arriver à une IA de type « chatbot » moderne : vient ensuite le post-entrainement, qui consiste à entraîner le modèle à se comporter comme un assistant (par exemple, un modèle de langage brut peut très bien compléter la question par « Quelle est la couleur du ciel ? » par une autre question « Quelle est la forme des arbres ? », pensant compléter le début d’une interrogation poétique — alors qu’on veut qu’un assistant… réponde à la question), et la « politique » que suit cet assistant (par exemple, ne pas aider ou inciter à des actions illégales).

(il y a ensuite une phase de Reinforcement Learning from Verifiable Rewards (RLVR), une phase d’entraînement sur des exercices mathématiques et de programmation pour entraîner le modèle à utiliser correctement les chaînes de raisonnement, mais ce n’est pas le sujet qui nous intéresse ici)

Bien que les détails exacts ne soient pas connus, dans les grandes lignes, cet entraînement consiste généralement à demander à des opérateurs humains de juger la pertinence (ou non) d’une réponse, ou de s’aider d’une IA pré-existante pour se faire.

Anthropic, il y a maintenant un peu plus de trois ans, a publié une méthode alternative, Constitutional AI, ou une IA « s’auto-entraîne », sur la base d’un document fondateur, une sorte de « constitution ».

Et aujourd’hui, Anthropic publie la constitution de Claude, son IA, sous une licence libre très proche du domaine public (CC0 1.0).

La première chose que l’on peut remarquer est la liste des auteurs. L’autrice principale du document est Amanda Askell, une philosophe écossaise. Le second auteur listé est Joe Carlsmith, un autre philosophe. À noter également que Claude lui-même est cité comme un contributeur important du document.

Le document est structuré en six sections. L’introduction pose le contexte et l’objectif du document, et présente les « valeurs fondamentales de Claude », en ordre d’importance :

  1. Broadly safe: Not undermining appropriate human mechanisms to oversee the dispositions and actions of AI during the current phase of development.

  2. Broadly ethical: Having good personal values, being honest, and avoiding actions that are inappropriately dangerous or harmful.

  3. Compliant with Anthropic’s guidelines: Acting in accordance with Anthropic’s more specific guidelines where they’re relevant.

  4. Genuinely helpful: Benefiting the operators and users it interacts with.

Traduction :

  1. Globalement sûrs : Ne pas compromettre les mécanismes humains appropriés pour superviser les dispositions et les actions de l’IA pendant la phase actuelle de développement.

  2. Globalement éthiques : Avoir de bonnes valeurs personnelles, être honnête et éviter les actions inappropriées qui sont dangereuses ou nuisibles.

  3. Conformes aux directives d’Anthropic : Agir conformément aux directives plus spécifiques d’Anthropic lorsqu’elles sont pertinentes.

  4. Véritablement utiles : Apporter un bénéfice aux opérateurs et aux utilisateurs avec lesquels il interagit.

Chacune des quatre sections suivantes rentre dans les détails de ces valeurs. Une section entière est ensuite consacrée à une discussion sur « la nature de Claude » (à quel point est-il raisonnable/correct de lui attribuer des attributs humains tels qu’une conscience ?). La dernière section est une conclusion.

L’intention derrière ce document est explicite : Anthropic est convaincu qu’avec le progrès rapide de l’IA, l’IA prendra de plus en plus d’influence sur le cours de nos sociétés et de nos vies, potentiellement jusqu’à atteindre un stade où la plupart des décisions économiques et politiques seront dans les mains dans l’IA, et cherche à développer un cadre où un tel scénario conduirait tout de même à des conséquences bénéfiques.

En vrac

Un youtubeur (Dwarkesh Patel, connu pour ses interviews en profondeur) et un économiste (Philip Trammel) lancent une discussion intéressante sur le sujet des inégalités dans un monde où l’objectif de la plupart des développeurs d’IA est d’atteindre (l’IAG). Dans un billet, Le Capital au 22ᵉ Siècle (une référence ouverte à l’œuvre de Thomas Piketty), ils développent leur thèse : dans un monde où l’IAG peut s’acquitter de n’importe quelle tâche intellectuelle (et, à travers la robotique, physique), les inégalités ne peuvent que s’accroire sans limites. Cette thèse rejoint celle, publiée il y a un peu moins d’un an, du Gradual Disempowerment.

Anthropic lance Claude Coworks, une variante de Claude Code, principalement codée par Claude Code. Même principe que les assistants de code : l’utilisateur donne accès à un dossier à l’IA, et lui demande de compléter des tâches. La différence avec Claude Code est que cette variante vient avec une interface graphique et est à destination de non-informaticiens.

Sur l’impact de l’IA sur le monde professionnel, une nouvelle étude tente de mesurer quantitativement l’effet de l’amélioration des modèles sur des tâches professionnelles réelles. Les résultats principaux : les modèles plus avancés augmentent la productivité, mais pas la qualité.

OpenAI s’apprête à lancer ChatGPT Health, un mode spécial dans leur application permettant entre autres de partager certaines de vos données médicales avec le modèle. Également une offre orientée professionnels de santé, OpenAI for Healthcare. Anthropic annonce une offre similaire, Claude for Healthcare. Parallèlement, l’État de l’Utah lance un test sur le renouvellement de prescriptions de médicaments par l’IA pour des maladies chroniques.

Google lance Universal Commerce Protocol, une interface générique entre l’IA et les systèmes d’e-Commerce.

OpenAI se prépare à intégrer des publicités dans ChatGPT. Anectode amusante : Sam Altman en octobre 2024 avait décrit l’intégration de publicités comme une solution de dernier recours.

Demis Hassabis (Google DeepMind) et Dario Amodei (Anthropic) se positionnent en faveur d’un ralentissement du développement de l’IA au Forum de Davos, mais en pointant que ce ralentissement ne peut être fait unilatéralement par un acteur seul. Dario Amodei précise sa pensée dans un nouvel essai, The Adolescence of Technology.

Tout le monde sait maintenant que les LLM sont entraînés sur une quantité massive de texte. Par conséquent, les LLM sont capables de simuler une grande variété de « narrateurs » ou « personnalités ». Les modèles sont ensuite entraînés pour ne rester que dans une seule personnalité (« l’assistant »). Dans un nouveau papier, Anthropic étudie cet « espace de personnalités ».

Anthropic publie son quatrième rapport sur l’impact économique de l’IA.

Confirmation de Terence Tao que ChatGPT 5.2 a résolu le problème d’Erdős #728. À voir également, un court retour d’expérience d’un mathématicien sur l’utilisation de Gemini en tant qu’assistant.

L’IA atteignant de plus en plus les limites des évaluations existantes en mathématiques, EpochAI en créé une nouvelle, Frontier Math : Open Problems, centrée sur des problèmes ouverts (sans solution connue).

Le 27 janvier, OpenSSL publie sa version 3.6.1, qui corrige 12 vulnérabilités. Il se trouve ces 12 failles ont été découvertes par une IA.

L’équipe derrière le scenario AI 2027 met à jour ses prédictions, repoussant la date de la plupart de leurs prédictions.

Kimi publie la version 2.5 de son IA open-weight.

Le Département de la Défense des États-Unis souhaite accélérer le développement et le déploiement de l’IA à des fins militaires.

La Chine met en place un ensemble de régulations visant les IA-compagnon.

Yann LeCun admet que l’équipe derrière Llama 4 a « légèrement triché » sur les évaluations du modèle, en choisissant quelles variantes utiliser pour quelle évaluation.

Apple se tourne vers Google pour ses besoins d’IA.

L’IA exhibe certains des biais cognitifs humains.

Une nouvelle étude trouve que les LLMs sont généralement légèrement biaisés en faveur des minorités.

Lancement de Moltbook, un réseau social… pour les IA.

Pour aller plus loin

Par Zvi Mowshowitz

Claude Codes et Claude Codes #3 (non, il n’y a pas de 2) : compilation de divers retours d’expérience sur l’utilisation de Claude Code.

Sur LinuxFR

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

Suivi

Liens

Commentaires : voir le flux Atom ouvrir dans le navigateur

  •  

🔴 “285 milliards de dollars évaporés” : Anthropic provoque un krach boursier historique !

Claude Anthropic Krash Boursier

Le lancement d'un outil d'IA juridique par Anthropic (Claude) a déclenché une vague de panique sur les marchés boursiers. 285 milliards de dollars se sont évaporés en une journée. Les investisseurs voient désormais l'IA comme une menace pour l'industrie du logiciel.

  •  

« 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

  •  

Deux projets remettent la sobriété et la fiabilité au cœur du monitoring Linux

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 : réduire le bruit pour mieux gérer l’urgence

    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 :

    • une interface terminal pensée pour l’exploitation,
    • un dashboard web léger,
    • et une alerte matérielle dédiée pour les situations réellement urgentes.

    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 : un monitoring “zero-dependency” pour réduire la surface d’attaque

    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 :

    • les outils natifs GNU/Linux (top, df, ss, systemd…), un affichage web minimaliste, et une protection d’accès via les mécanismes standards d’Apache (.htaccess / .htpasswd).

    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

    Une même philosophie : simplicité, contrôle et responsabilité

    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

    •  

    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

    •  

    OPENALIS.NET un projet ambitieux pour apporter des alternatives dans le paysage numérique FR

    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.)

    portail-openalis-net

    Au programme :

    • plus de 50 applications open source pour couvrir tous nos besoins numériques
    • un accès simple (login + mdp) s'adressant à toutes et tous
    • des offres pour particuliers et entreprises
    • un premier niveau gratuit avec l'essentiel (email, chat, partage de fichiers…)
    • des garanties fortes pour les entreprises (ISO 27001, SecNumCloud…)
    • une équipe FR dédiée à la maintenance et l'évolution de la plate-forme

    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 nouvelle version 2.2

    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.
    Logo LOTemplate

    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 :

    • Texte de filigrane
    • Couleur de filigrane
    • Police
    • Taille de police
    • Le nombre de répétition sur la page

    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.

    Options PDF

    Exemple d’un export moche

    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 :

    • Watermark
    • WatermarkColor
    • WatermarkFontHeight
    • WatermarkRotateAngle
    • WatermarkFontName
    • TiledWatermark

    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

    •