Pular para o conteúdo
Rust Coreutils 0.9.0: segurança reforçada, desempenho zero‑copy e suporte ampliado

Rust Coreutils 0.9.0: segurança reforçada, desempenho zero‑copy e suporte ampliado

Lançamento do Rust Coreutils 0.9.0 traz auditoria de segurança, redução de código unsafe, I/O zero‑copy e novidades para WASI, Windows e Cygwin.

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 em cp, mv, chmod, rm e nohup.
  • 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 unsafe em utilitários, testes e alvos de fuzz, substituindo chamadas de sistema de nix/libc por rustix.
  • Utilitários impactados: id, tr, timeout, sort, wc, tail, cp, who e rotinas de I/O de processos.

Desempenho zero‑copy (splice/tee/pipe)

  • Implementação de caminhos rápidos para splice(), tee() e pipe() em comandos como cat, wc, head, tail, yes, cp, tee e unexpand.
  • Resultados notáveis: +7,5 % de ganho em unexpand; cp mais rápido ao ler de um pipe no Linux; yes utiliza a syscall tee.

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: numfmt e du agora obedecem ao separador decimal definido por LC_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 unsafe em testes, otimização para FUSE.
  • cp: uso de pipe para melhorar taxa de transferência em Linux; migração de chamadas libc para 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 +0 e -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.

Via github.com. Você pode conferir o post original em inglês:

Rust Coreutils 0.9.0 Release

Por · Última atualização: