Los ingenieros de NVIDIA llevan meses trabajando en un nuevo formato binario para las imágenes de firmware de sus GPUs, específicamente pensado para el driver open source Nova que aún está en desarrollo. El nuevo formato TLV (Tag-Length-Value) apunta a ser mucho más fácil de parsear desde el código Rust del driver.

¿Qué motiva un formato binario nuevo?

Timur Tabi, ingeniero de NVIDIA, publicó la nueva versión de los parches que migran el código nova-core al formato TLV. Tabi explicó la motivación en el mensaje que acompaña el patchset:

"Este set de parches transiciona nova-core para usar los nuevos archivos de imagen de firmware TLV, en lugar de los que Nouveau usa. Las imágenes r570.144 actuales son una mezcla de headers binarios y archivos ELF que son engorrosos de parsear en Rust. Hay una cantidad significativa de código que solo lee un struct, extrae algún offset, y lo usa para encontrar otro struct, solo para que nova-core use unos pocos campos. El nuevo formato usa una secuencia de campos tag/length/value que pueden iterarse. El script que genera los archivos TLV, extract-firmware-nova.py, hace el trabajo extra de encontrar la metadata específica que Nova necesita y empaqueta cada una por separado."

¿Qué gana Nova con TLV vs el formato Nouveau?

El punto crítico es el impedance mismatch entre estructuras binarias legacy pensadas para C y el modelo de tipos de Rust. En Rust, deserializar un struct posicional con offsets internos requiere código unsafe explícito, o abstracciones que introducen overhead. El formato Tag-Length-Value es iterable de forma segura: cada elemento tiene su tag identificador, su longitud declarada y su valor. El código de Nova puede pedir "dame el field X" sin conocer la posición absoluta ni el layout completo del binario.

En números concretos:

  • Formato actual (Nouveau): mix de headers binarios y ELF, con lectura posicional de structs anidados.
  • Formato nuevo (TLV): secuencia lineal de tag/length/value, iterable en Rust sin unsafe.
  • Herramienta de conversión: script extract-firmware-nova.py extrae solo los campos que Nova consume desde los binarios r570.144 originales.

Rust en el kernel Linux y drivers de GPU

Nova es parte del esfuerzo mayor de portar drivers de GPU al lenguaje Rust dentro del kernel Linux. NVIDIA impulsa Nova como reemplazo a mediano plazo de Nouveau para su línea moderna de GPUs, aprovechando que Rust ofrece garantías de memoria y de tipos que reducen la superficie de bugs en código de drivers, históricamente una de las zonas más frágiles del kernel.

El formato sigue en iteración. Los interesados en el detalle pueden revisar los parches del driver Nova en la lista rust-for-linux.

¿Por qué importa esto fuera del círculo del kernel?

Para el ecosistema Linux, un driver open source de NVIDIA con soporte de primera calidad significa mejor experiencia en laptops con dGPU discretas y estaciones de trabajo Linux con Blackwell y sucesoras. Para desarrolladores en Chile y LatAm que trabajan con IA local o inferencia sobre hardware NVIDIA en workstations Linux, la calidad y velocidad del stack open source afecta directamente qué tan usable es la máquina fuera del stack propietario. Un formato binario más limpio acelera el camino a un driver Nova en producción.