A equipe do Rust Coreutils anunciou a disponibilização da versão 0.9.0, publicada em 30 de maio. O lançamento concentra‑se em endurecimento de segurança após auditoria externa, diminuição do código unsafe e melhorias de desempenho via I/O zero‑copy. Além disso, o projeto ampliou o suporte a plataformas como WebAssembly (WASI), Cygwin e Windows, mantendo a compatibilidade com o conjunto de testes do GNU coreutils.
Segurança reforçada (auditoria Zellic)
- Uma auditoria de segurança realizada pela Zellic identificou 44 CVEs, principalmente relacionadas a condições de corrida TOCTOU e casos de borda em sistemas de arquivos.
- Foram implementados módulos resistentes a TOCTOU, como
uucore::safe_copy, e correções emcp,mv,chmod,rmenohup. - O comportamento agora segue mais de perto o do GNU coreutils, eliminando divergências que geravam vulnerabilidades.
Redução de código unsafe e migração para rustix
- Projeto passou a remover trechos
unsafeem utilitários, testes e alvos de fuzz, substituindo chamadas de sistema denix/libcpor rustix. - Utilitários impactados:
id,tr,timeout,sort,wc,tail,cp,whoe rotinas de I/O de processos.
Desempenho zero‑copy (splice/tee/pipe)
- Implementação de caminhos rápidos para
splice(),tee()epipe()em comandos comocat,wc,head,tail,yes,cp,teeeunexpand. - Resultados notáveis: +7,5 % de ganho em
unexpand;cpmais rápido ao ler de um pipe no Linux;yesutiliza a syscalltee.
Compatibilidade com o GNU Test Suite
| Resultado | 0.8.0 | 0.9.0 |
|---|---|---|
| Pass | 630 | 625 |
| Skip | 14 | 8 |
| Fail | 21 | 56 |
| Error | 0 | 1 |
| Total | 665 | 690 |
O aumento de falhas deve‑se à atualização da referência para o GNU coreutils 9.11, que adicionou 25 novos testes; não há regressões nas funcionalidades existentes.
Novas funcionalidades e correções
- numfmt: tratamento de precisão, rejeição de notação científica, suporte a
LC_NUMERIC, zero‑padding para números negativos e limites de precisão IEC. - ls: indicadores de link simbólico (
-lF), correções de contagem de links, ordenação por versão e largura independente da coluna de permissões. - Suporte multiplataforma: builds para WASI/wasm (
ln,dd,mktemp,tty.wasm), CI para Cygwin, suporte a TTY no Windows (incluindo caminhos msys2) e melhorias de triagem no OpenBSD. - Internacionalização:
numfmteduagora obedecem ao separador decimal definido porLC_NUMERIC.
Contribuições da comunidade
A versão contou com a participação de 30 novos contribuidores, ampliando o ecossistema e facilitando integrações, como o uso de ls por projetos externos (ex.: nushell).
Como experimentar
- Playground online: teste os utilitários diretamente no navegador via WebAssembly.
- Traduções: ajude a localização no Weblate.
- Patrocínio: apoie o desenvolvimento em https://github.com/sponsors/uutils.
Principais alterações por utilitário (exemplos)
- cat: eliminação de alocações desnecessárias, remoção de
unsafeem testes, otimização para FUSE. - cp: uso de pipe para melhorar taxa de transferência em Linux; migração de chamadas
libcpara rustix. - date: parser de formato escrito à mão substitui regex, correções de timezone.
- dd: suporte a
wasm32-wasip1, tratamento de tamanhos de bloco não positivos. - sort: limpeza de diretórios temporários em caso de interrupção, benchmark de desempenho para ordenação UTF‑8.
- tail: throughput aprimorado com
splice()para opções-c +0e-c N.
(A lista completa de mudanças está disponível no changelog oficial.)
Rust Coreutils 0.9.0 representa um salto significativo em segurança, performance e alcance multiplataforma, consolidando a alternativa em Rust aos utilitários clássicos do GNU coreutils. Usuários de Linux, Windows, macOS e ambientes WebAssembly podem agora contar com uma base mais robusta e eficiente para scripts e ferramentas de linha de comando.