O que é o mold

O mold e um linker (ligador) de código criado por Rui Ueyama, o mesmo desenvolvedor por trás do lld, o linker do projeto LLVM. O objetivo do mold e uma coisa só: ligar arquivos objeto e gerar o executável final muito mais rápido que qualquer linker tradicional.

Um linker e a ferramenta que roda depois do compilador, juntando todos os arquivos objeto compilados separadamente em um único binário executável. Em projetos grandes de C ou C++, essa etapa pode levar minutos inteiros a cada build, mesmo quando só um arquivo mudou.

O mold foi reescrito do zero em Rust (a partir de uma versão inicial em C++) com foco total em paralelismo, aproveitando todos os núcleos da CPU disponíveis durante a ligação, algo que linkers clássicos como GNU ld e gold não fazem de forma eficiente.

Como funciona

A grande sacada do mold e paralelizar etapas que os linkers tradicionais fazem sequencialmente. Resolução de símbolos, layout de secoes e escrita do binário final acontecem em paralelo usando múltiplas threads.

Isso e possível porque o mold usa estruturas de dados pensadas para acesso concorrente desde o inicio, em vez de adaptar um design antigo pensado para máquinas de um núcleo só, como e o caso do GNU ld.

Na prática, isso significa que builds de projetos gigantes, como o próprio Chromium ou o kernel Linux, podem ter a etapa de ligação reduzida de dezenas de segundos para poucos segundos.

💡
Dica

Quanto mais núcleos de CPU sua máquina tiver, maior o ganho relativo do mold em comparação ao GNU ld.

Principais recursos

O mold não tenta reinventar a interface de um linker, ele mantem compatibilidade com as flags do GNU ld para facilitar a adoção. Os principais diferenciais são:

  • Ligação paralela real: usa todos os núcleos disponíveis durante praticamente todas as fases do processo
  • Suporte a ELF, Mach-O e WebAssembly: funciona em Linux, macOS e alvos WASM, não apenas na plataforma original
  • Drop-in replacement: pode substituir o GNU ld ou o LLD sem mudar o código do projeto, só trocando a flag do compilador
  • Hot reload de linkagem: em alguns cenários, o mold consegue reaproveitar trabalho de builds anteriores para acelerar ainda mais
  • Código aberto: disponível no GitHub, com uma versão gratuita (AGPL) e uma versão Pro comercial com recursos adicionais para empresas

Vale notar que a versão gratuita do mold e licenciada sob AGPL, o que exige atenção em projetos comerciais fechados. A versão mold Pro remove essa exigência mediante pagamento.

Como começar: instalação ou acesso passo a passo

Instalar o mold e rápido na maioria das distribuições Linux modernas.

Passo 1: instale via gerenciador de pacotes da sua distribuição, quando disponível.

# Ubuntu/Debian
sudo apt install mold

# Arch Linux
sudo pacman -S mold

Passo 2: configure o compilador para usar o mold como linker, adicionando a flag apropriada.

gcc main.c -fuse-ld=mold -o main
# ou para Rust, no Cargo.toml / .cargo/config.toml:
# rustflags = ["-C", "link-arg=-fuse-ld=mold"]

Passo 3: rode um build normal do projeto e compare o tempo antes e depois, geralmente a diferença já aparece no primeiro build limpo.

Exemplo prático

Imagine um projeto Rust de tamanho médio, com varias dependências, que normalmente leva 8 segundos só na etapa de ligação usando o linker padrão do sistema.

[target.x86_64-unknown-Linux-gnu]
rustflags = ["-C", "link-arg=-fuse-ld=mold"]

Depois de adicionar essa configuração no arquivo .cargo/config.toml do projeto, o mesmo build passa a usar o mold automaticamente. Em máquinas com 8 núcleos ou mais, essa etapa costuma cair para 1 ou 2 segundos, dependendo do tamanho do projeto.

Para projetos em C++ com CMake, a mesma lógica se aplica passando a flag de linker customizado na configuração do build, sem precisar alterar nenhuma linha de código fonte.

Comparação com alternativas

As alternativas mais usadas são o GNU ld (padrão histórico), o gold (mais rápido que o GNU ld, mas já meio abandonado) e o LLD, do projeto LLVM.

O GNU ld e o mais compatível e estável, mas o mais lento dos quatro em projetos grandes. O gold foi uma tentativa de acelerar a ligação no ecossistema GNU, mas o desenvolvimento ativo praticamente parou.

O LLD e rápido e bem mantido pelo projeto LLVM, sendo uma opcao solida, mas em benchmarks publicados o mold costuma superar o LLD em builds muito grandes graças ao paralelismo mais agressivo.

O diferencial do mold e ter sido desenhado do zero para paralelismo, enquanto os concorrentes carregam decisões de arquitetura de décadas atrás.

⚠️
Atenção

A versão gratuita do mold usa licença AGPL. Revise as implicações legais antes de usar em produto comercial fechado, ou considere a versão Pro paga.

Pontos positivos e limitações

O ganho de velocidade e o ponto forte mais evidente, especialmente em projetos grandes com builds frequentes, como em integração continua rodando varias vezes por dia.

Por outro lado, o suporte a plataformas fora de Linux e mais recente e menos maduro que o do GNU ld, que roda praticamente em qualquer lugar ha décadas.

A licença AGPL da versão gratuita também é um ponto de atenção real para empresas com políticas rígidas de compliance de licenciamento de software.

Casos de uso reais

Time de infraestrutura com CI pesado: troca o linker padrão pelo mold nos pipelines de build para reduzir o tempo total de cada execução de CI em minutos por dia.

Desenvolvedor Rust em projeto grande: configura o mold no ambiente local para reduzir o tempo de espera entre cada `cargo build` durante o desenvolvimento ativo.

Mantenedor de projeto C++ open source: documenta o uso do mold como opcional para contribuidores que querem builds locais mais rápidos.

Empresa de software com produto fechado: avalia a licença mold Pro para evitar as obrigações da AGPL em builds de produção.

Dicas e boas práticas

🚀
Pro tip

Combine o mold com cache de compilação como sccache ou ccache para reduzir tanto o tempo de compilação quanto o de ligação no mesmo pipeline.

💡
Dica

Meca o tempo de build antes e depois de trocar o linker, usando `time cargo build` ou equivalente, para confirmar o ganho real no seu projeto específico.

🔴
Cuidado

Nem todo projeto ganha o mesmo tanto com o mold. Projetos pequenos podem não notar diferença perceptivel, já que a ligação já era rápida antes.

Vale a pena?

O mold vale muito a pena para quem trabalha com projetos grandes em C, C++ ou Rust e sente o tempo de build no dia a dia. A troca costuma ser simples e o ganho e mensurável logo no primeiro teste.

Para projetos pequenos, onde a ligação já leva menos de um segundo, o ganho pode ser imperceptivel. O próximo passo e instalar o mold no seu ambiente local e comparar o tempo de build antes e depois, o teste leva poucos minutos.