uutils: Um coreutils escrito na linguagem Rust

uutils: Um coreutils escrito na linguagem Rust

uutils: Um coreutils escrito na linguagem Rust


 Sylvestre Ledru, que é desenvolvedor do Debian, está trabalhando em uma reimplementação do pacote coretuils chamado uutils ou Rust coreutils. Esse pacote tem como intuído ter os mesmos comandos do pacote coreutils do GNU que já conhecemos porém escritos em uma linguagem mais moderna, a linguagem mais moderna é Rust para ser mais específico.

Rust Coreutils (in my home directory)
Rust Coreutils (no meu diretório home)

 Tudo começou quando Sylvester andava estudando a linguagem Rust e pensou como poderia replicar algo similar com a linguagem. Sylvester pensou em alguns projetos e chegou até a descartar as algumas das ideias por se tratar de projetos muito complexo (glibc seria algo complexo demais, o projeto LLVM/clang (escrito em C++) ou kernel Linux seriam muito mais complexos ainda) chegando a conclusão do coreutils.

Rust coreutils installation
Instalação do Rust coreutils

Rust coreutils installation completed
Instalação do Rust coreutils, quando concluída, fica armazenado em um diretório oculto do seu home

 A intenção do uutils é ser um pacote Cross-platform (características da linguagem Rust que além de ser rápida e segura, é ótima para escrever código cross-platform: Disponível para Linux, Windows, MacOS, Android, FreeBSD, Fuchsia, etc. O que garante que scripts sejam facilmente transferidos entre plataformas) e não é necessariamente para competir contra o projeto do GNU, mas servir como uma alternativa. O Rust/coreutils está disponível para o Debian/Ubuntu desde Janeiro de 2021 e já é bom o suficiente para realizar seu boot do Debian com o GNOME, instalar os top 1000 pacotes e compilar o Firefox, o kernel Linux e o LLVM/Clang.

 Rust coreutils conta com mais ou menos 120 comandos sendo que 19 ainda estão como trabalho em progresso e seu progresso pode ser conferido clicando aqui. Os testes estão sendo realizados com o GNU test suite e estão progredindo bem tornando-o compatível com as ferramentas do GNU. Alguns comandos possuem desempenho melhor do que os do GNU (alguns chegam a ser 4.63 vezes mais rápido do que os comandos do GNU) e outros mais lentos.

Rust coreutils Status
Progresso do desenvolvimento do Rus coreutils

 Também foram adicionados novos recursos aos comandos como barra de progresso nos comandos cp e mv (algo que já vimos aqui com os comandos cpadv e mvadv no pacote avanced copy) e cut -w do FreeBSD separando campos por espaços (algo que vimos aqui que fizeram o mesmo no cut do toybox 0.8.6 para ter uma saída parecida com a da linguagem awk) além de estarem trabalhando na implementação de opções que faltam em vários binários. Ao final da instalação é gerado um único binário com todos os comandos assim como o busybox, o toybox, o 9base, o sbase e o ubase (todos que podem ser conferidos aqui no blog). Este binário recebe exatamente o nome de coretutils e fica abrigado dentro de um diretório oculto de seu home chamado ~/.cargo/bin. Os comandos podem ser executados da mesma forma que os demais binários com ./coreutils.


Rust coreutils cut command options
Opções do comando cut do Rust coreutils

Progress option on Rust coreutils cp command
Opção de progresso no comando cp do Rust coreutils que vimos no cpadv

I copied Rust coreutils from my home directory to /opt just to test the progress cp option
Copiei o Rust coreutils para o diretório /opt somente para testar o recursos de barra de progresso. Essa opção se comporta exatamente como a opção do cpadv além de também possuir o recurso de dedeuplicação e é o que me leva a elimiar o cpadv

 O Rust coreutils está sob licença MIT e conta com boas documentações. Espero em breve poder vê-lo sendo utilizado como substituto ao coreutils. Há também o coreutils escrito na linguagem V que conta com 109 comandos porém, apenas 41 estão prontos. Um único defeito que posso mencionar por enquanto é que, apesar de ser um único binário concentrando todos os seus comandos (assim como os demais projetos já mencionados), ele é muito grande; com apenas 87 comandos e sendo linkado dinamicamente, o Rust coretutils ocupa mais de 12MB enquanto que o toybox que é linkado estaticamente e possui 233 comandos, ocupa apenas 724KB. Podemos considerar que o toybox é mais de 17 vezes menor se levarmos em conta não somente o tamanho e sim todos os fatores (sua ligação e a quantidade de comandos).

Rust Coreutils X toybox
Rust Coreutils X toybox

 Mesmo assim, espero poder ver o Rust coreutils progredir. Sucesso ao projeto e para todos nós.


Comente com o Facebook:

Nenhum comentário:

Postar um comentário

Viu algum erro e quer compartilhar seu conhecimento? então comente aí.

Observação: somente um membro deste blog pode postar um comentário.

Marcadores

A pior história sobre Linux que já ouvi (5) A.I (2) ambiente gráfico (19) AMD (14) analise (10) Andriod (16) android (7) Apple (1) arm (5) artigo (5) aws (1) bc (23) benchmark (6) BetrFS (1) blackhat (1) BSDs (30) btrfs (32) bugs (2) Caixa de Ferramentas do UNIX (19) canto do Diego Lins (2) certificações Linux (7) Código Fonte (54) comandos (31) comp (1) compressores (6) container (7) CPU (19) cracker (1) criptografia (5) crowdfunding (9) cursos (24) daemons (13) Debian (31) desempenho (1) desenvolvimento (90) desktop (19) DevOps (3) DevSecOps (4) dic (1) Dica de leitura (90) dica DLins (2) dicas do Flávio (27) Dicas TechWarn (1) diet libc (3) diocast (1) dioliunx (3) distribuições Linux (14) Docker (12) DragonflyBSD (22) driver (1) dropbear (3) ead Diolinux (2) edição de vídeo (5) embarcados (1) EMMI Linux (4) emuladores (9) endless (5) English interview (3) Enless OS (2) entrevista (17) espaço aberto (82) evento (6) facebook (1) Fedora (11) filesystem (82) financiamento coletivo (2) fork (4) fox n forests (4) FreeBSD (20) Funtoo Linux (13) games (94) gerenciadores de pacotes (4) glaucus (4) GOG (3) google (9) gpu (3) hacker (2) hardware (104) hash (1) helenos (3) I.A (1) init system (11) Intel (15) inteligencia artificial (2) IoT (1) ispconfig (1) jogos (38) kde (1) kernel (138) lançamento (64) leis (1) LFCS (1) libs (2) licenças (8) Linus (16) linus torvalds (2) Linux (194) linux foundation (3) linux para leigos (1) live (5) LPI (8) LTS (1) Mac (1) machine learning (1) matemática (9) mesa redonda (27) microcontroladores (1) microsoft (6) microst (1) muito além do GNU (167) musl (3) não viva de boatos (9) navegadores (5) NetBSD (7) newlib (1) nim (1) nintendo (1) novatec (17) novidades (1) nuvem (1) o meu ambiente de trabalho (3) off-topic (12) open source (84) OpenBSD (7) OpenShift (1) oracle (1) os vários sabores de Linux (43) padrim (2) palestras e eventos (5) partições (6) pentest (8) performance (1) pipewire (1) plan9 (1) playstation (1) processadores (30) professor Augusto Manzano (11) Programação (64) promoção (1) propagandas com Linux (8) ps4 (1) real-time. (1) Red Hat (23) redes (4) resenha nerd (4) Resumo da Semana do Dlins (2) resumo do Tux (19) retrospectiva Linux (1) risc-V (14) RISCV (13) rtos (1) runlevel (2) rust (12) segurança digital (24) servidor web (2) servidores (3) shell (9) shell script (8) sistema operacional (25) skarnet (1) smartphones (3) Software livre e de código aberto (151) sorteio (3) Steam (10) Steam no Linux (8) supercomputadores (4) suse (6) systemd (7) terminal (89) terminal de comandos (18) toca do tux (1) toybox (27) tutorial (6) Tux (3) unboxing (7) UNIX (17) UNIX Toolbox (14) vartroy (1) vga (1) virtualização (2) vulnerabilidade (6) wayland (5) web (1) whatsapp (1) whitehat (1) Windows Subsystem for Linux (2) wine (14) WoT (1) yash (1) ZFS (15) zsh (3)