El enlazador de alto rendimiento Mold, que habitualmente supera a alternativas como LLVM lld, GNU LD o Wild, está siendo reescrito en el lenguaje de programación Rust, y suma además un objetivo ambicioso: ser adoptado como el enlazador por defecto de los sistemas Linux.

Mold 2.42.1 se liberó hoy como una nueva versión de parche para este enlazador de código abierto. Pero lo más interesante del anuncio de la 2.42.1 son los planes para Mold 3.0, la versión que lo sucederá. El proyecto viene atravesando una reescritura desde C++ hacia Rust. Ahora que el lenguaje maduró lo suficiente con los años, Mold planea aprovechar sus garantías de seguridad y otras características que lo vuelven atractivo para Rui Ueyama, su desarrollador principal. La decisión sigue el camino del enlazador Wild, otro proyecto orientado al rendimiento que ya está escrito en Rust.

¿Por qué quiere reemplazar a GNU ld?

Ueyama apunta a que Mold 3.0 en Rust funcione tan bien como lo ha hecho la serie 2.xx para enlazado de alta velocidad. Más allá de eso, espera ver a Mold convertido en el enlazador por defecto de los sistemas Linux:

"Durante los últimos 20 años se han desarrollado varios enlazadores rápidos, entre ellos gold, lld y mold. Sin embargo, el enlazador del sistema, /usr/bin/ld, en la mayoría de las distribuciones de Linux sigue siendo GNU ld. Como resultado, trabajos de enlazado que mold puede terminar en unos pocos cientos de milisegundos todavía pueden tomar varios segundos, decenas de segundos o incluso minutos con el enlazador por defecto. Creo que esta es una situación desafortunada para la comunidad Linux."

El desarrollador asume parte de la responsabilidad por ese escenario.

"Como autor original tanto de lld como de mold, creo que cargo con algo de responsabilidad en esta situación. He dedicado un gran esfuerzo a hacer los enlazadores más rápidos, pero no el suficiente al trabajo de compatibilidad que se necesita para que un enlazador rápido sirva como reemplazo directo del enlazador del sistema. Con mold 3.0 pretendemos cambiar eso."

El plan técnico tiene un orden definido. Uno de los objetivos principales de la serie 3.x es volver a Mold apto para su adopción como /usr/bin/ld por parte de las distribuciones. Para lograrlo, según Ueyama, primero hay que implementar las características faltantes de los guiones de enlazado, de manera que Mold pueda enlazar no solo programas de espacio de usuario sino también núcleos y firmware. Después vendrán pruebas de compatibilidad extensivas y trabajo conjunto con quienes desarrollan las distribuciones, para que adoptar Mold como enlazador del sistema sea práctico. El propio Ueyama lo describe como una de las mayores prioridades de la serie 3.x.

¿Habrá enlazado incremental?

El proyecto también está evaluando incorporar por fin el enlazado incremental, una característica que el enlazador no ha soportado hasta ahora:

"Dicho eso, si encontramos una forma simple de agregar enlazado incremental a mold, estaríamos felices de hacerlo. Todavía podría mejorar de manera significativa algunas cargas de trabajo. Actualmente estamos explorando diseños que puedan entregar esos beneficios preservando la simplicidad y la confiabilidad de mold."

El detalle de este giro para el proyecto está en el anuncio de Mold 2.42.1.

El punto que menos se comenta es el de los núcleos y el firmware. Esa capacidad no es un requisito abstracto de compatibilidad: es exactamente lo que separa a un enlazador útil para compilar aplicaciones de uno que puede construir un sistema operativo completo o el binario que corre sobre un microcontrolador. Para quien compila firmware embebido, donde los guiones de enlazado definen a mano la distribución de memoria flash y RAM del chip, esa es la diferencia entre poder usar Mold y no poder hacerlo.