Lançamento do Mold Linker Versão 3.0.0 – Reescrito em Rust

Um linker ELF de alto desempenho, o mold, lançou a versão 3.0 após migrar sua base de código de C/C++ para Rust, supostamente com ajuda substancial de grandes modelos de linguagem. Comentadores ponderam os benefícios do Rust — segurança de memória, concorrência mais segura e suporte crescente do ecossistema — contra desvantagens como suporte mais fraco a arquiteturas obscuras e um bootstrapping significativamente mais complexo, o que é uma grande preocupação para distribuições Linux focadas em segurança que recompilam tudo a partir de código mínimo confiável. A mudança também gera comparações com outros linkers rápidos e linguagens de sistemas como Zig, além de preocupações mais amplas sobre a pegada de dependências do Rust e suas implicações para builds reproduzíveis e seguros contra ataques à cadeia de suprimentos.

Motivação para a Reescrita em Rust

  • Alguns especulam que os principais motivos sejam segurança de memória, tratamento robusto de entradas corrompidas e, especialmente, concorrência mais segura e mais granular.
  • Outros argumentam que endurecer C/C++ contra entradas malformadas é possível, mas vários participantes respondem que provar que grandes bases de código em C/C++ permanecem seguras ao longo do tempo é extremamente caro e propenso a erros.

Uso de IA/LLM na Reescrita

  • Vários comentaristas observam commits que creditam um LLM e links para comentários onde o autor supostamente confirma o uso de assistência de LLM.
  • Há debate sobre se isso é uma “reescrita” ou uma “transpilação”; o consenso tende a ser que Rust agora é a fonte principal, editada por humanos.

Rust vs C/C++/Zig e Segurança/Desempenho

  • Muitos veem Rust como permitindo “concorrência sem medo” e eliminando classes inteiras de bugs (use-after-free, data races, double free).
  • Alguns enfatizam que verificações de limites são apenas uma pequena parte das garantias de segurança do Rust.
  • Zig é discutido como “C melhorado”, mas sem as garantias de memória em tempo de compilação do Rust; modos de build seguro vs rápido e UB por verificações desativadas são preocupações.
  • Outros apontam fatores não técnicos: a maturidade do ecossistema do Rust, apoio da indústria e adoção, em contraste com a relativa juventude do Zig.

Suporte de Plataforma e Backend

  • Discussão sobre a cobertura de plataforma do Rust: backends LLVM vs GCC.
  • O LLVM não oferece suporte a várias arquiteturas legadas/obscuras que o GCC suporta (por exemplo, Alpha, Itanium, PA‑RISC, SuperH); o backend GCC do Rust é mencionado como uma resposta parcial a isso.

Comparação com o Wild Linker

  • Wild é descrito como outro linker ELF muito rápido, focado principalmente em linking incremental (embora, segundo relatos, ainda não suporte linking incremental de fato).
  • Os benchmarks são considerados próximos; o Wild costuma ser mais rápido, mas ambos “trocam golpes” e estão muito à frente dos linkers tradicionais.

Bootstrapping de Distribuições Linux e Segurança da Cadeia de Suprimentos

  • Um co-mantenedor de uma distribuição altamente reproduzível, bootstrapada do zero, usava mold2 (C/C++) como linker inicial de bootstrap e está insatisfeito com a reescrita em Rust.
  • O modelo deles: bootstrap de tudo a partir de código de máquina mínimo, passando por compiladores C pequenos → GCC/LLVM → Rust, com builds estritamente sem binários, determinísticos e herméticos.
  • Rust é descrito como extremamente caro de bootstrapar (grande grafo de dependências: Python, Perl, OpenSSL, LLVM, etc.), então ter mold em Rust o coloca tarde demais na cadeia para acelerar o próprio Rust.
  • Outros propõem soluções: usar binários pré-compilados, cache, compiladores Rust stage0/stage2, ou continuar usando mold2; o mantenedor da distribuição rejeita essas opções por enfraquecerem o modelo de ameaça (não confiar em binários anteriores).

Manutenção de Código Aberto e Compatibilidade Retroativa

  • Tensão entre expectativas de downstream e liberdade de upstream:
    • Alguns argumentam que mold “desresolveu” uma necessidade real dos usuários; queriam mais consulta e mudanças mais lentas.
    • Outros enfatizam que os mantenedores não devem garantias além da licença, e que usuários podem fazer fork se dependem de comportamentos de nicho.
    • Há debate sobre se grandes reescritas deveriam ser projetos novos em vez de grandes incrementos de versão.

Ferramentas de Bootstrap do Rust

  • mrustc (compilador de bootstrap de Rust para C) é citado como uma forma de alcançar um Rust moderno o suficiente para então se auto-hospedar.
  • Alguns se mostram intrigados com a “obsessão” por bootstrap completo; outros apontam o rápido aumento dos ataques à cadeia de suprimentos como justificativa.

Outras Observações

  • Reações positivas à velocidade da reescrita e ao status consolidado do Rust como linguagem de sistemas.
  • Observa-se que o Cargo.lock do mold3 é relativamente pequeno em comparação com alguns projetos em Rust, com preocupação de que o uso pesado de crates possa enfraquecer as alegações de segurança.