Le 18 août, le dépôt hp-laser-1008a-macos faisait fonctionner une imprimante HP sur Mac en cachant un petit Linux dans macOS. CUPS envoyait son raster vers un daemon root, Colima lançait le codec propriétaire rastertospl de HP, puis libusb poussait le résultat vers l’imprimante.1
C’était déjà assez bricolé pour faire un bon titre, et Tom’s Hardware l’a raconté exactement comme ça : Claude Code, un codec Linux, un conteneur et enfin Cmd-P depuis n’importe quelle application.6 Sauf qu’entre cette première version et le dépôt que l’on peut cloner aujourd’hui, presque toute cette pile a disparu.
Dans son historique Git, la première architecture est commitée le 18 août à 00:02. Le 19 août à 14:13, soit environ 38 heures plus tard, Kuber Mehta supprime Docker, Colima et le pilote Linux propriétaire au profit de SpliX patché. Vingt-quatre minutes après, Python, pyusb et libusb disparaissent aussi au profit d’un helper C utilisant IOKit. À 15:33, même le socket local et le LaunchDaemon deviennent inutiles : le helper USB est transformé en backend CUPS exécuté directement avec les privilèges nécessaires.1
Le slogan « Claude a écrit un pilote » rate donc une bonne partie du travail visible dans Git, où un hack de compatibilité fonctionnel est démonté presque aussitôt au profit d’une compréhension plus précise de la machine.
38 heures
La demande de départ était presque insultante de simplicité : « installe les drivers de cette HP Laser 1008a, elle est connectée ».2
Le transcript publié par Mehta contient 45 interventions utilisateur, 200 réponses de Claude Code et 176 appels d’outils. IRZ a extrait ces nombres directement du JSON embarqué dans la page du transcript : 132 appels Bash, 28 écritures de fichiers, 6 récupérations Web, 5 recherches et 5 éditions. La session initiale est présentée par Mehta comme environ quatre heures de travail avec Claude Opus 4.8.2
Le transcript ressemble beaucoup moins à une génération en un prompt qu’à une session de dépannage assez banale : pilote générique, CUPS qui voit la machine mais reste bloqué, flux envoyés directement au périphérique, feuilles couvertes de bandes, photo du résultat, nouvelle hypothèse, nouvel essai.2
À un moment, l’utilisateur résume cinq feuilles ratées par « it printed... something LOL back to back 4-5 times » ; plus tard, l’imprimante sort elle-même une erreur SPL Illegal Resolution, deux indices très concrets que le matériel accepte le flux sans l’interpréter correctement.2

Le premier résultat fonctionnel choisit la voie la plus courte : réutiliser le morceau qui sait déjà parler à l’imprimante. HP distribue rastertospl pour Linux ; le projet le fait tourner dans un conteneur Colima, et garde le reste de l’intégration côté macOS.12
Ça imprime, ce qui suffit pour continuer à enquêter ; personne n’a vraiment envie de garder une VM de deux gigaoctets en arrière-plan juste pour sortir une feuille A4.
Le faux codec
Le détour Linux aurait pu rester là des années puisqu’il marche ; pour une imprimante familiale, deux gigaoctets de VM en arrière-plan sont une taxe grotesque mais encore supportable.
Puis une revue adversariale signalée dans le transcript ramène le projet vers SpliX. Le support de la famille HP Laser 10x venait justement d’être ajouté en amont ; le problème n’était plus que SpliX ignorait complètement cette imprimante, mais que sa sortie provoquait encore ces bandes répétées.128
La suite se joue dans un diff entre deux flux d’impression, et c’est là que le conteneur cesse d’être la solution évidente.
Mehta compare alors, pour un raster identique, le flux du binaire HP et celui de SpliX : les bandes ont la même taille, 4864 × 128, avec le même mode de compression 0x11, ce qui déplace l’attention vers l’en-tête de page : HP annonce 2480 × 3507, une géométrie exprimée sur une grille 300 dpi, alors que SpliX annonce 4960 × 6912, comme si cette taille devait suivre la résolution raster 600 dpi.1
Pour le firmware du 1008a, cette seconde valeur décrit en pratique une page énorme : l’imprimante pose une bande, atteint le bord physique de l’A4, éjecte la feuille puis continue parce que la page logique lui paraît toujours inachevée.1
La correction locale tient dans un patch de 26 lignes de diff, dont une dizaine modifient réellement la logique : la géométrie 300 dpi déjà utilisée par SpliX pour certains modèles est aussi activée lorsque specialBandWidth() identifie cette famille, sans toucher au rendu des bandes.1
À partir de là, le binaire propriétaire de HP n’est plus nécessaire au runtime : il a servi d’oracle pour comprendre le format, puis le projet peut le retirer.
Docker disparaît
La chaîne se raccourcit alors très vite. La première version : CUPS produit un raster, un socket local le transmet à un daemon root, le daemon lance rastertospl dans Colima, récupère le SPL3 et l’envoie en USB avec Python/libusb.1
Version suivante : CUPS appelle rastertoqpdl, le filtre SpliX compilé avec le patch 300 dpi, puis le flux SPL3 passe encore par un helper root pour atteindre l’USB.1
Version actuelle : le filtre SpliX reste, mais le helper C devient lui-même un backend CUPS installé en 0700 et possédé par root. CUPS l’exécute donc avec les droits nécessaires ; le backend ouvre l’interface USB avec IOKit et appelle directement WritePipe.1
Le détail le plus agaçant arrive encore après : cette imprimante expose un mode USB classique et un mode IPP-over-USB ; macOS peut la laisser sur le second, où elle attend du HTTP et ignore silencieusement le SPL3 brut, si bien que le backend lit le descripteur USB et force l’alternate setting classique avant d’écrire.1
Autrement dit, même après avoir trouvé le bon langage d’impression, il faut encore remettre la prise USB dans le bon « dialecte » logiciel.
HP se contredit
La documentation officielle ajoute une petite absurdité : la page HP de téléchargement des pilotes du 1008a propose actuellement Windows 7, 8, 10, 11 et Linux, sans macOS dans le sélecteur.3 Pourtant, une autre page HP de spécifications liste Catalina, Big Sur, Monterey, Ventura et Sonoma parmi les systèmes compatibles, puis ajoute dans sa note de support : « Windows 10 or higher ».4
IRZ ne peut donc pas transformer « HP n’a jamais livré de pilote Mac fonctionnel » en une vérité administrative parfaitement propre. Ce qu’on peut vérifier est plus précis : la page actuelle des téléchargements ne propose pas macOS, le développeur dit n’avoir trouvé aucun pilote fonctionnel, et son transcript montre CUPS sans modèle adapté sur la machine testée.123
C’est presque une miniature du problème de réparabilité logicielle : le matériel existe, la fiche produit promet des choses, le logiciel réellement disponible en promet d’autres, et l’utilisateur découvre la vérité au moment où il branche le câble.
Pas vraiment fini
La version actuelle reste elle-même assez legacy, avec un PPD, un filtre et un backend CUPS « classique ». OpenPrinting a déprécié ce modèle et pousse les vieux périphériques vers des Printer Applications, des programmes qui se présentent comme des imprimantes IPP modernes tout en traduisant ensuite vers le protocole ancien.5 Le roadmap du projet prévoit précisément cette étape, mais la classe comme chantier plus gros pour un bénéfice immédiat faible.1
Une version DriverKit serait encore plus « Apple », avec une extension système USB signée. Le développeur s’arrête ici pour une raison très concrète : SDK complet Xcode, compte développeur payant, entitlement DriverKit approuvé par Apple et provisioning correspondant.1
La réparation logicielle rencontre donc une nouvelle frontière après celle du protocole propriétaire : la plateforme moderne autorise moins facilement le petit pilote improvisé.
Claude, où ?
Le transcript rend difficile de raconter cette histoire comme une génération autonome, même si Claude Code exécute énormément de travail : scripts, recherches de protocoles, modifications de code et hypothèses successives. Mehta fournit en permanence ce que l’agent ne possède pas : l’imprimante physique, les redémarrages, les photos, les feuilles ratées, les erreurs affichées, le choix de continuer et parfois une correction venue d’une autre revue LLM.2
The Register rapporte 30 à 40 prompts et environ 4 % de la consommation mensuelle de Mehta, qui dit connaître peu les pilotes macOS avant cette session.7 Notre extraction du transcript en trouve 45 interventions utilisateur, dont plusieurs sont simplement des photos ou des sorties de commandes copiées depuis la machine.
Ce qui a changé avec l’agent n’est peut-être pas la nature du reverse engineering. Les mêmes ingrédients restent là : documentation, code existant, diff binaire, expérimentation physique et beaucoup de mauvais essais. Ce qui change, c’est le coût d’entrée pour relier ces morceaux assez vite pour qu’un utilisateur qui voulait juste imprimer continue au lieu d’abandonner.
Et le meilleur signe de réussite n’est pas que Claude ait produit beaucoup de code. C’est qu’en moins de deux jours, une bonne partie de ce code et de l’architecture initiale ait déjà pu être supprimée.
