AI

Claude Code escribió un driver de macOS para una impresora HP que nunca lo tuvo: 4 horas de odisea de ingeniería inversa

La HP Laser 1008a es una impresora host-based de Samsung rebautizada que habla un lenguaje raster propietario (SPL3), no tiene driver de macOS y no soporta AirPrint. En una sesión de 4 horas de Claude Code, el desarrollador Kuber Mehta y Opus 4.8 revirtieron el lenguaje de impresión desde las propias páginas de error de la impresora, sortearon el sandbox USB de macOS, ejecutaron el códec real de HP dentro de un contenedor Linux y publicaron un instalador MIT de un solo comando. Desglose técnico completo y qué significa para los agentes de IA haciendo trabajo de drivers.

Keeping this site alive takes effort — your support means everything.
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分! 無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!
Claude Code escribió un driver de macOS para una impresora HP que nunca lo tuvo: 4 horas de odisea de ingeniería inversa

Conclusiones clave

  • La HP Laser 1008a es una impresora host-based de Samsung rebautizada que solo habla el lenguaje raster propietario SPL3/QPDL3 — nunca hubo driver de macOS, ni AirPrint, ni PostScript/PCL. El PCL genérico se cuelga en 'connecting-to-device', splix 2.0.1 imprime rayas corruptas, y foo2zjs provoca una página física 'SPL ERROR - Please use the proper driver' desde la propia impresora.
  • En una sesión de ~4 horas de Claude Code (Opus 4.8, contexto 1M), el agente revirtió la solución: descubrió la trampa IPP-over-USB (bInterfaceProtocol=4) de la impresora vía ioreg, escribió un script PyUSB a nivel root para reclamar la interfaz USB cruda y escribir en el endpoint bulk 0x02, decodificó las páginas de error autoimpresas (offset 0x2000 = primera scanline raster; 'Illegal Resolution' = el hardware exige 600x600dpi), y luego contenerizó el códec rastertospl real de HP dentro de Colima para producir SPL3 genuino.
  • La arquitectura de producción sortea elegantemente el sandbox de CUPS en macOS 26: CUPS renderiza raster y lo canaliza vía el backend socket:// bendecido por sandbox a 127.0.0.1:9108, donde un LaunchDaemon root lo transmite al contenedor Ubuntu con el códec propietario de HP, y direct_write.py empuja el SPL3 resultante al endpoint bulk OUT de la impresora — habilitando impresión nativa Cmd-P.
  • La comunidad HN respondió con una revisión arquitectónica adversarial (splix 2.0.2 añadió soporte Laser 10x en julio 2026, crítica al framing I/O del daemon, PID USB hardcodeado), que el autor respondió con una prueba A/B clean-room: incluso el splix 2.0.2 actualizado produjo salida corrupta, probando empíricamente que el enfoque del códec oficial contenerizado era necesario.
  • La lección mayor: los agentes de IA con contextos largos ya pueden hacer ingeniería inversa real de drivers de hardware — leer protocolos binarios de la salida de error del dispositivo, navegar sandboxes de SO y orquestar contenedores — colapsando semanas de trabajo especializado en una tarde. El resultado está bajo MIT en github.com/Kuberwastaken/hp-laser-1008a-macos.

Respuestas clave

¿Cuál es el problema de la HP Laser 1008a?

La HP Laser 1008a es una impresora láser host-based de Samsung rebautizada que solo habla Samsung Printer Language 3 (SPL3 / QPDL v3), un formato raster propietario. HP nunca lanzó un driver de macOS y no soporta ni AirPrint ni lenguajes estándar como PostScript o PCL. En Macs con Apple Silicon está efectivamente muerta — los drivers PCL genéricos se cuelgan en 'connecting-to-device' en CUPS, y los intentos open source (splix, foo2zjs) producen salida corrupta o hacen que la impresora imprima su propia página 'SPL ERROR - Please use the proper driver'.

¿Cómo revirtió Claude Code el lenguaje de impresión?

El truco clave fue usar la propia impresora como documentación: al recibir datos en formato incorrecto, la HP Laser 1008a imprime una página física de autodiagnóstico que indica la posición exacta del fallo (ej. 'SPL ERROR at POSITION: 0x2000', donde empieza la primera scanline raster comprimida) y la resolución aceptada ('Illegal Resolution' para cualquier cosa que no sea 600x600dpi). Claude Code también usó ioreg para descubrir la trampa bInterfaceProtocol=4 (IPP-over-USB) que hacía que el backend USB crudo malinterpretara el dispositivo como permanentemente ocupado.

¿Cómo funciona la arquitectura final del driver?

El pipeline es: app macOS → CUPS (renderiza raster sin comprimir) → backend socket de CUPS a 127.0.0.1:9108 (stream localhost bendecido por sandbox) → hpl1008-daemon (LaunchDaemon root) → contenedor Linux ARM64 de Colima ejecutando el rastertospl propietario de HP + libscmssc.so → salida SPL3 genuina → direct_write.py (script root PyUSB/libusb que desacopla el driver del kernel y escribe en el endpoint bulk OUT 0x02) → la impresora. Esto sortea el sandbox de CUPS de macOS 26, que bloquea a los filtros personalizados tocar USB crudo o ejecutar docker.

¿Por qué no usar simplemente el driver open source splix?

El intento original del autor usó splix 2.0.1, que producía scanlines rayadas y corruptas. Un revisor de HN señaló que splix 2.0.2 (julio 2026) añadió soporte oficial de la familia HP Laser 10x con QPDLVersion 3 y paquetes forzados de 512 bytes. El autor hizo una prueba A/B clean-room compilando splix 2.0.2 nativamente en macOS — y aún así produjo salida corrupta. Solo el códec rastertospl real de HP, contenerizado vía Colima, produjo páginas perfectas. El códec del vendor codifica compresión que los drivers open source no replican.

¿Qué opinó la comunidad de Hacker News?

El proyecto llegó a la portada y recibió una revisión arquitectónica adversarial: las críticas incluyeron la dependencia pesada de Colima/Docker, un timeout silencioso frágil de 2 segundos para el framing de trabajos en el daemon, y un ID de producto USB hardcodeado (0x069E) que excluye impresoras hermanas (1003/1006). El autor respondió a cada una — incluyendo la prueba A/B empírica que demostró que splix 2.0.2 aún falla — y el repo ganó ~50 estrellas en horas.

Claude Code escribió un driver de macOS para una impresora HP que nunca lo tuvo

El 17 de agosto de 2026, un desarrollador llamado Kuber Mehta publicó algo inusual en X: una transcripción completa, ligeramente redactada, de una sesión de 4 horas de Claude Code en la que un agente de IA hizo que una impresora oscura solo-Windows funcionara nativamente desde Cmd-P en macOS — una impresora para la que HP nunca lanzó un driver de Mac.

El post explotó. Luego el repo de GitHub (github.com/Kuberwastaken/hp-laser-1008a-macos) llegó a Hacker News. El hilo de HN entregó lo que HN siempre entrega: una revisión de código adversarial brutal, respondida con una prueba A/B clean-room.

Esta es la historia de esa sesión — y lo que dice sobre agentes de IA haciendo trabajo que solía llevar semanas a ingenieros de drivers.

El problema: una impresora que solo habla Samsung

La HP Laser 1008a es una impresora láser host-based de Samsung rebautizada y barata. “Host-based” significa que es un dispositivo tonto: el ordenador debe rasterizar todo en scanlines comprimidas crudas y empujarlas por el cable en SPL3 (Samsung Printer Language 3 / QPDL v3), un formato propietario.

  • Sin driver de macOS — HP nunca lanzó uno para esta familia
  • Sin AirPrint — ni siquiera IPP driverless
  • Sin PostScript, sin PCL — los drivers genéricos no pueden hablarle

En un Mac con Apple Silicon, el dispositivo está efectivamente muerto. Los intentos previos fallaron todos:

EnfoqueResultado
PPD genérico PCL/PostScriptCUPS se cuelga para siempre en connecting-to-device
splix 2.0.1 (driver SPL open source)Scanlines rayadas corruptas + páginas en blanco infinitas
foo2zjs / foo2qpdlLa impresora imprime una página de error física: SPL ERROR - Please use the proper driver

El viaje de 4 horas

Paso 1: La trampa del falso offline

Claude añadió la impresora con el driver PCL genérico. El trabajo se colgó en connecting-to-device y CUPS reportó la impresora offline. Excavando con ioreg, Claude encontró el verdadero culpable: la impresora expone bInterfaceProtocol = 4IPP-over-USB (modo AirPrint-over-USB). El backend USB crudo de macOS malinterpreta ese byte de estado como “permanentemente ocupado,” atascando el dispositivo en STATUS:BUSY hasta un ciclo de energía.

Paso 2: El muro del sandbox de macOS

En macOS 26, solo los procesos root pueden hablar con interfaces USB crudas — y los filtros de impresión de CUPS están estrictamente sandboxeados, bloqueados del USB crudo por completo. La respuesta de Claude: un script Python independiente a nivel root (direct_write.py) usando PyUSB/libusb para reclamar Interface 0 / Alternate Setting 0 (impresión bidireccional cruda clásica), desacoplar el driver del kernel de Apple, y escribir directamente al endpoint bulk OUT 0x02. Transporte resuelto: 56.738 bytes empujados limpiamente.

Paso 3: La impresora enseña a Claude su propio lenguaje

El transporte crudo no era suficiente — el encoder open source producía basura. Claude compiló foo2qpdl de foo2zjs y la impresora respondió imprimiendo una página de error de autodiagnóstico nítida y legible:

SPL ERROR - Please use the proper driver at POSITION: 0x2000 (8192)

0x2000 es exactamente donde empieza la primera scanline raster comprimida — la impresora parseó las cabeceras PJL pero se atragantó con la compresión. Una segunda prueba a 1200x600dpi produjo Illegal Resolution. El hardware estaba literalmente diciéndole a Claude lo que quería: 600x600dpi, y un encoder que pudiera decodificar.

Paso 4: Contenerizando el códec real de HP

La impresora exigía “el driver adecuado” — que HP distribuye como un binario Linux arm64 (rastertospl) dentro del HP Unified Linux Driver. Claude arrancó Colima (una VM Linux ARM64 ligera para macOS), construyó un contenedor Ubuntu con el rastertospl propietario de HP + libscmssc.so, le alimentó raster CUPS estándar por stdin, y recibió SPL3 genuino compilado por el vendor por stdout. Empujado por direct_write.py — se imprimió una página perfecta.

Paso 5: Conectándolo a Cmd-P (el bypass del socket de CUPS)

El desafío final: el sandbox endurecido de CUPS bloquea a los filtros personalizados ejecutar docker o incluso loguear. La solución elegante de Claude — dividir la arquitectura:

App macOS (Cmd-P)
Cola de impresión CUPS (renderiza raster sin comprimir)
Backend Socket de CUPS → 127.0.0.1:9108   ← stream localhost bendecido por sandbox
hpl1008-daemon (LaunchDaemon root)
      │  (transmite raster CUPS por stdin)
Contenedor Linux ARM64 de Colima (hp-spl)
   └── rastertospl propietario de HP + libscmssc.so
      │  (SPL3 por stdout)
direct_write.py (root PyUSB/libusb, endpoint 0x02)
HP Laser 1008a ✅

El backend socket:// JetDirect integrado de CUPS ya está bendecido por sandbox para streams de red a localhost — así que el daemon escucha en el puerto 9108, recibe el raster, lo transmite por el contenedor, y empuja el SPL3 a la impresora. Impresión nativa Cmd-P, segura ante reinicios (LaunchDaemon), entregada como un instalador MIT de un solo comando.

El guante de HN: revisión → A/B test → veredicto

HN entregó su revisión adversarial de marca:

  1. “splix 2.0.2 arregló esto” — el revisor notó que SpliX 2.0.2 (julio 2026) añadió soporte HP Laser 10x con QPDLVersion 3, paquetes forzados de 512 bytes y una tabla de ancho de banda que imita a Samsung
  2. Crítica al daemon — el timeout silencioso de 2 segundos para el framing de trabajos es frágil; usa límites de EOF de TCP
  3. PID USB hardcodeado (0x069E) — excluye a las hermanas 1003/1006

La respuesta del autor fue la mejor clase de ciencia: una prueba A/B clean-room. Claude compiló splix 2.0.2 nativamente en macOS, verificó que la nueva lógica de ancho de banda se activaba (608 bytes para A4), y alimentó la salida QPDL-v3 cruda por el mismo writer USB.

Resultado: fracaso total. Scanlines corruptas otra vez. La compresión del códec del vendor simplemente no está replicada por los drivers open source — el códec oficial contenerizado era el camino necesario.

Qué significa para el futuro del trabajo de drivers

Esta sesión es un hito genuino para los agentes de IA:

  • Leer protocolos del comportamiento del dispositivo — las páginas de error de la impresora se volvieron documentación
  • Navegar modelos de seguridad del SO — análisis de sandbox, daemons root, bypasses de socket
  • Orquestar toolchains heterogéneas — macOS + VM Linux + contenedor + binarios del vendor
  • Iterar con feedback de hardware — páginas físicas como salida de test, ~4 horas de cierre de bucle

Tradicionalmente, esto era semanas de ingeniería de drivers especializada: revertir un formato raster propietario, luchar contra el sandboxing de macOS, y empaquetar un instalador. Un agente, una sesión, una tarde — y publicado bajo MIT para el mundo.

La impresora sigue sin AirPrint. Pero ahora funciona desde Cmd-P en cualquier Mac — porque un agente de IA decidió que “no existe driver” no era una respuesta. 🖨️