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.