Lanzamiento de Mold Linker versión 3.0.0 – Reescrito en Rust

Mold, un enlazador ELF de alto rendimiento, ha lanzado la versión 3.0 tras migrar su base de código de C/C++ a Rust, al parecer con una ayuda sustancial de modelos de lenguaje grandes. Los comentaristas sopesan las ventajas de Rust —seguridad de memoria, concurrencia más segura y un ecosistema cada vez más sólido— frente a desventajas como un soporte más débil para arquitecturas poco comunes y un bootstrap significativamente más complejo, algo que preocupa especialmente a distribuciones Linux centradas en la seguridad que recompilan todo desde código mínimo de confianza. El cambio también provoca comparaciones con otros enlazadores rápidos y lenguajes de sistemas como Zig, así como preocupaciones más amplias sobre la huella de dependencias de Rust y sus implicaciones para compilaciones reproducibles y seguras frente a ataques a la cadena de suministro.

Motivación para la reescritura en Rust

  • Algunos especulan que los principales impulsores son la seguridad de memoria, el manejo robusto de entradas corruptas y, especialmente, una concurrencia más segura y de grano más fino.
  • Otros sostienen que es posible reforzar C/C++ frente a entradas malformadas, pero varios comentaristas responden que demostrar con el tiempo que grandes bases de código en C/C++ son seguras es extremadamente costoso y propenso a errores.

Uso de IA/LLM en la reescritura

  • Varios comentaristas señalan commits que acreditan a un LLM y enlazan a comentarios donde, según se informa, el autor confirma haber usado asistencia de un LLM.
  • Hay debate sobre si esto es una “reescritura” o una “transpilación”; el consenso se inclina a que Rust es ahora la fuente principal, editada por humanos.

Rust frente a C/C++/Zig y seguridad/rendimiento

  • Muchos ven Rust como una forma de habilitar “concurrencia sin miedo” y eliminar clases enteras de errores (use-after-free, data races, double free).
  • Algunos enfatizan que las comprobaciones de límites son solo una pequeña parte de las garantías de seguridad de Rust.
  • Zig se discute como un “mejor C”, pero sin las garantías de memoria en tiempo de compilación de Rust; se plantean preocupaciones sobre los modos de compilación seguro vs. rápido y el UB derivado de desactivar comprobaciones.
  • Otros señalan factores no técnicos: la madurez del ecosistema de Rust, el respaldo de la industria y su adopción frente a la relativa juventud de Zig.

Soporte de plataforma y backend

  • Se debate la cobertura de plataformas de Rust: backends de LLVM frente a GCC.
  • Se menciona que LLVM carece de varias arquitecturas antiguas o poco comunes que GCC sí soporta (por ejemplo, Alpha, Itanium, PA‑RISC, SuperH); se cita el backend GCC de Rust como una solución parcial.

Comparación con Wild Linker

  • Wild se describe como otro enlazador ELF muy rápido, centrado principalmente en el enlazado incremental (aunque, según se informa, todavía no soporta el enlazado incremental real).
  • Se dice que los benchmarks están muy parejos; Wild suele ser más rápido, pero “intercambian golpes”, ambos muy por delante de los enlazadores tradicionales.

Arranque de distros Linux y seguridad de la cadena de suministro

  • Un co-mantenedor de una distro altamente reproducible, arrancada desde cero, usó mold2 (C/C++) como enlazador inicial del bootstrap y no está contento con la reescritura en Rust.
  • Su modelo: arrancar todo desde código máquina mínimo pasando por pequeños compiladores de C → GCC/LLVM → Rust, con compilaciones estrictamente sin binarios, deterministas y herméticas.
  • Se describe Rust como extremadamente costoso de arrancar (gran grafo de dependencias: Python, Perl, OpenSSL, LLVM, etc.), por lo que tener mold en Rust lo sitúa demasiado tarde en la cadena como para acelerar Rust en sí.
  • Otros proponen soluciones: usar binarios precompilados, cachés, compiladores Rust de stage0/stage2 o seguir usando mold2; el mantenedor de la distro rechaza estas opciones por debilitar su modelo de amenazas (no confiar en binarios previos).

Mantenimiento de código abierto y compatibilidad hacia atrás

  • Tensión entre las expectativas de los usuarios aguas abajo y la libertad aguas arriba:
    • Algunos sostienen que mold “desresolvió” una necesidad real de los usuarios; querían más consulta y un cambio más lento.
    • Otros subrayan que los mantenedores no deben garantías más allá de la licencia, y que los usuarios pueden hacer un fork si dependen de comportamientos de nicho.
    • Se debate si las reescrituras grandes deberían ser proyectos nuevos en lugar de saltos de versión mayor.

Herramientas de bootstrap para Rust

  • Se cita mrustc (compilador de bootstrap de Rust a C) como una forma de llegar a un Rust suficientemente moderno para luego autoalojarse.
  • Algunos se muestran desconcertados por la “obsesión” con el bootstrap completo; otros señalan el rápido aumento de ataques a la cadena de suministro como justificación.

Otras observaciones

  • Reacciones positivas a la velocidad de la reescritura y al estatus consolidado de Rust como lenguaje de sistemas.
  • Se señala que Cargo.lock de mold3 es relativamente pequeño en comparación con algunos proyectos Rust, con preocupación de que un uso intensivo de crates pueda socavar las afirmaciones de seguridad.