wak: Uma implementação do awk para o toybox


wak -- an awk implementation for toybox and standalone

wak: Uma implementação do awk para o toybox

 Em 2024, Ray Gardner com contribuição de Oliver K. Webb disponibilizaram o wak, uma implementação POSIX compacta da linguagem de programação awk para o toybox ou para poder também ser utilizado como standalone. O professor Nelson H. F. Beebe da Universidade de Utah também está envolvido em seu desenvolvimento dando conselhos relacionados a melhorias do programa e do uso do makefile.

 O wak é realmente compacto; escrito em apenas 4500 linhas de código que quando compilado, linkando estaticamente, o wak possui apenas 244  kbytes. O wak entrou no diretório pending do toybox em Janeiro de 2025, na versão 0.8.12 porém, como awk e não wak.


Informações de binário do wak
Informações de binário do wak

wak no diretório pending do toybox com o nome awk
wak no diretório pending do toybox com o nome awk

 O wak é em sua maioria compatível com as implementações awk POSIX, o One True Awk de Brian Kernighan, também conhecido como nawk, este é o original awk do Unix que recebeu uma atualização em 2022 e que é utilizando inclusive pelo Android,  o awk do Busybox e o gawk do GNU com axceção de sua extensões. O wak tenta ser compatível com a POSIX.1-2024, exceto onde conflita com praticas tradicionais e comuns de outras implementações do awk como exemplo, tentar ser o tanto UTF-8 safe (confiram as informações de Oliver Webb) quanto razoavelmente possível, seguindo as abordagens do toybox. Neste vídeo eu apresento alguns dos testes manuais que eu fiz para testar a sua compatibilidade com outros awks: 



 O wak é mantido sob a clausula zero BSD (BSD0) para manter dentro dos padrões de licença do toybox porém, como os arquivos do diretório test pertencem ao gawk 5.3.1, então estes arquivos são mantidos sob a GPL2. O código é escrito em C99 (exceto o recurso anonymous unions) tanto no GCC quanto no Clang mas também é possível compilar o wak com TinyCC. Report de bugs são sempre bem vindos.


A IMPORTÂNCIA DE AWK

 Ao longo do tempo, awk foi perdendo espaço para outras linguagens como Python e Perl, porém a especificação POSIX e especificalmente a Single UNIX Specification (SUS) determinam que todo sistema operacional que declaram ser um Unix (ou totalmente POSIX) deva disponibilizar uma versão de awk compatível com a POSIX para assim ser oficialmente Unix legítimo e certificado. Essa exigência está relacionada a awk fazer parte do conjunto de comandos necessários para tornar scripts portáveis entre outros Unix.

 Além do mais, awk é uma das dependências para se compilar o kernel Linux pois é utilizado por vários build scripts e configurações. Enquanto compiladores e outras ferramentas são responsáveis por gerar os binários, awk e outros comandos são responsáveis pela parte de scripts que tratarão de informações como saber os ranges de memória, preempção do kernel e muito mais.

scripts awk presentes no kernel
scripts awk presentes no kernel

 Rob Landley descreveu em seu blog em 2021:

" Estou imaginando que dd, expr, tr, awk, sh, bc, bison, flex, make, ar, e gzip são necessários para construir o kernel..."

 E continuamos em seu roadmap a série de comandos necessários para construir um ambiente mínimo de uma distribuição capas de bootar o sistema executando init scripts e outros shell scripts e oferecer uma sessão do shell.


 A intenção é oferecer ferramentas necessárias para o Android ser capaz de compilar o kernel Linux e suas próprias ferramentas.


An awk implementation for toybox and standalone

wak - An awk implementation released

Writing a UTF-8 Safe AWK | Oliver Webb

Confira mais sobre o toybox clicando aqui


QUER APRENDER LINUX? ENTÃO CONFIRA O MEU CURSO DE MIGRAÇÃO PARA LINUX CLICANDO AQUI :)
QUER APRENDER LINUX? ENTÃO CONFIRA O MEU CURSO DE MIGRAÇÃO PARA LINUX CLICANDO AQUI :)

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 (6) 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 (34) btrfs (32) bugs (2) Caixa de Ferramentas do UNIX (18) canonical (1) canto do Diego Lins (2) certificações Linux (7) Código Fonte (53) comandos (33) comp (1) compressores (9) consoles (1) container (8) CPU (19) cracker (1) criptografia (5) crowdfunding (9) cursos (24) daemons (14) Debian (31) desempenho (2) desenvolvimento (102) desktop (19) DevOps (3) DevSecOps (4) dic (1) Dica de leitura (91) dica DLins (2) dicas do Flávio (27) Dicas TechWarn (1) diet libc (4) diocast (1) dioliunx (3) distribuições Linux (14) Docker (13) DragonflyBSD (24) driver (2) 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 (21) Funtoo Linux (13) games (95) garbage collector (1) gerenciadores de pacotes (4) glaucus (8) GOG (3) google (9) gpu (3) hacker (2) hardware (104) hash (1) helenos (3) I.A (1) init system (13) Intel (15) inteligencia artificial (2) IoT (1) ispconfig (1) jogos (39) kde (1) kernel (141) lançamento (64) leis (1) LFCS (1) libs (2) licenças (10) Linus (16) linus torvalds (2) Linux (194) linux foundation (3) linux para leigos (1) live (4) lkgr (1) 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 (180) musl (3) não viva de boatos (9) navegadores (5) NetBSD (7) newlib (1) nim (10) nimlang (2) nintendo (1) novatec (17) novidades (1) nuvem (1) o meu ambiente de trabalho (3) off-topic (12) ONLYOFFICE (5) open source (85) OpenBSD (8) OpenShift (1) oracle (1) os vários sabores de Linux (46) padrim (2) palestras e eventos (5) partições (6) pentest (8) performance (1) pipewire (1) plan9 (3) playstation (1) processadores (30) professor Augusto Manzano (11) Programação (71) 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 (16) Sega (1) Sega Saturn (1) segurança digital (27) servidor web (2) servidores (3) shell (11) shell script (8) sistema operacional (25) skarnet (2) smartphones (3) Software livre e de código aberto (150) sorteio (3) Steam (10) Steam no Linux (8) supercomputadores (4) suse (7) systemd (9) terminal (90) terminal de comandos (21) toca do tux (1) toybox (30) tutorial (6) Tux (3) ubuntu (1) unboxing (7) UNIX (17) UNIX Toolbox (13) vartroy (1) vga (1) virtualização (3) vulnerabilidade (6) wayland (5) web (1) whatsapp (1) whitehat (1) Windows Subsystem for Linux (2) wine (14) WoT (1) yash (1) ZFS (16) zsh (3)