Mold se reescribe en Rust y quiere ser el enlazador por defecto de Linux
El enlazador de alto rendimiento Mold migra de C++ a Rust y se fija como meta sustituir a GNU ld como enlazador del sistema en las distribuciones Linux.
El enlazador Mold, que suele superar en velocidad a LLVM lld, GNU ld, gold y Wild, se está reescribiendo en Rust. Ha salido la versión 2.42.1, un parche menor, pero el anuncio lleva dentro algo más gordo: los planes para Mold 3.0, que además del cambio de lenguaje se marca como objetivo acabar siendo el enlazador por defecto de las distribuciones Linux.
De C++ a Rust
La migración de C++ a Rust lleva tiempo en marcha. Rui Ueyama, autor principal del proyecto, considera que el lenguaje ya ha madurado lo suficiente y quiere aprovechar sus garantías de seguridad, entre otras cosas. Wild ya demostró que un enlazador orientado a rendimiento se puede escribir en Rust, así que Mold no abre camino en eso. Lo que sí promete es que la versión 3.0 rinda como la serie 2.xx, que es de donde viene su reputación.
Quiere ser /usr/bin/ld
Ahí está el cambio de ambición. Ueyama lo explica sin rodeos:
“En los últimos 20 años se han desarrollado varios enlazadores rápidos, como gold, lld y mold. Aun así, el enlazador del sistema, /usr/bin/ld, sigue siendo GNU ld en la mayoría de las distribuciones Linux. Como consecuencia, trabajos de enlace que mold resuelve en unos cientos de milisegundos pueden seguir tardando varios segundos, decenas de segundos o incluso minutos con el enlazador por defecto. Creo que es una situación desafortunada para la comunidad Linux. Como autor original tanto de lld como de mold, siento cierta responsabilidad. He dedicado mucho esfuerzo a hacer enlazadores más rápidos, pero no el suficiente al trabajo de compatibilidad que hace falta para que un enlazador rápido sirva como reemplazo directo del enlazador del sistema. Con mold 3.0 queremos cambiar eso.”
Para llegar ahí no basta con ser rápido. Primero hay que implementar las características de linker script que faltan, de modo que mold pueda enlazar no solo programas de espacio de usuario sino también kernels y firmware. Después toca una batería de pruebas de compatibilidad y trabajar codo con codo con los desarrolladores de distribuciones para que adoptar mold como /usr/bin/ld sea algo práctico. El propio Ueyama lo sitúa entre las prioridades más altas de la serie 3.x.
Hay otra pieza que el proyecto nunca ha tenido: el enlazado incremental. No está garantizado. Si encuentran una forma sencilla de añadirlo, lo harán, porque mejoraría bastante algunas cargas de trabajo; ahora mismo exploran diseños que den ese beneficio sin cargarse la simplicidad y la fiabilidad del enlazador.
Que mold sea más rápido da igual si nadie lo usa: la mayoría de las cadenas de herramientas siguen invocando a GNU ld sin que el desarrollador lo piense. Cambiar el enlazador del sistema es un trabajo de compatibilidad, no de benchmarks, y ahí es donde se han quedado cortos los intentos anteriores. El detalle de la versión 2.42.1 está en las notas de la versión.
