Mostrando postagens classificadas por relevância para a consulta riscv. Ordenar por data Mostrar todas as postagens
Mostrando postagens classificadas por relevância para a consulta riscv. Ordenar por data Mostrar todas as postagens

Alpine Linux poderá receber em breve port para RISC-V

Alpine Linux no RISC-V
Alpine Linux no RISC-V
Alpine Linux é uma distribuição segura, pequena e leve que faz uso da musl como biblioteca C no lugar da GlibC e do Busybox como terminal no lugar do Bash. Outras distribuições já passaram a adotar a musl como biblioteca C e há planos também por parte do Debian para a sua adoção (como já houve no passado).


 Drew DeVault trabalha em adicionar melhor suporte a RISC-V na musl enquanto trabalha no port do Alpine Linux para a arquitetura baseado no patch abaixo:
https://github.com/riscv/riscv-musl
 Drew já escreveu três patches e integrou outro que foi encontrado no github ao seu port. Em contato com a equipe da musl, Ricth Felker solicitou a lista de contribuidores para conferir se não há omissões de nomes; o que foi lhe passado um dia depois. Vale acrescentar aqui que o toybox também receberá port para a arquitetura que é bem promissora.

Projeto do Drew DeVault
Projeto do Drew DeVault

Primeira placa mãe para Linux baseada na arquitetura RISC-V está preparada para ser lançada

A arquitetura RISCV
A arquitetura RISCV
Como ando falando muito de arquiteturas (que inclusive pouco falada aqui no Brasil), resolvi publicar esta noticia. E depois tem um vacilão que falar que o único processador que Linux se sai melhor do que o Windows é no Ryzen e em mais nenhum outro processador no mercado (leitorzinho de tutorial é do caramba viu).

A primeira vez que ouvi falar da arquitetura RISC-V foi através do sistema operacional HelenOS quando apresentaram essa arquitetura no FOSDEM. Dois sistemas operacionais que não abro mão são Linux e HelenOS por conta do ganho de conhecimento que ambos me proporcionam, espero que o HelenOS ganhe cada vez mais espaço também pois ele conquistou.

RSICV é um conjunto de instruções de arquitetura de processador com princípios do RISC (que é baseado em um conjunto reduzido de instruções), mas evitando erros e anacronismos possuindo um design limpo.

Existe até mesmo uma distribuição Linux para o RISCV. Esta arquitetura está sob licença BSD ao invés de GPL, possui suporte a modularidade e escalabilidade, suporte nativo a 32 e 64 bits (128 bits no futuro) e não será focado somente em educação e pesquisas. Esta arquitetura (que está sendo financiada pela DARPA, Intel, Microsoft e Google, HP, Lattice, Oracle, lowRISC, Indian Institute, Bluespec e muitas outras empresas e projetos) será usada desde embarcados a grandes computadores.

Processador SoC para a placa mãe que rodará Linux
Processador SoC para a placa mãe que rodará Linux

Em Outubro, a SiFive anunciou o primeiro RISC-V SoC controlado por Linux com quatro núcleos sob o nome de U54-MC Coreplex. A SiFive abriu sua pre-venda no FOSDEM abrindo um financiamento coletivo no site Crowd Supply e já conseguiram arrecadar a grana (faltando pouco mais de 25 dias para acabar a campanha). Agora é esperar para ver no futuro a sua aplicação :)

HiFive da SiFive
HiFive da SiFive

Firefox portado para RISCV

Firefox ported to RISCV64

Firefox portado para RISCV


 Noticia com seis meses de atraso, mas como eu não vi ninguém falando nada, aqui estou eu. No dia 05 de Novembro de 2021, a equipe de desenvolvimento da distribuição T2 SDE anunciou que havia portado Firefox para RISCV64.
"Enquanto esse é um grande passo para a usabilidade geral do RISCV no desktop e móvel, ainda há mais trabalho, exemplo portar JavaScript JIT para RISCV, também."
 Em seu canal, René Rebe (que é o mantenedor do minised) explica o processo de portar o Firefox para RiscV64 (que em partes foi uma acidente).


 O firefox para RISCV pode ser acompanhado no próprio repositório da distribuição T2 e pode até mesmo conferir o patch clicando aqui que foi escrito na linguagem Rust e está sob dual license. Com isso, Linux se torna (novamente) o primeiro sistema operacional a ter o navegador Firefox disponível para RISCV.

Musl receberá suporte a arquitetura RISCV64

Musl receberá suporte a arquitetura RISC-V64
Musl receberá suporte a arquitetura RISC-V64
 musl já possui suporte a pelo menos quinze arquiteturas (sendo uma delas, RiscV) e vem sendo adotada cada vez mais pelas distribuições Linux. Há planos por exemplo de portar o Debian para a musl (no passado Debian já havia sido portado para outra biblioteca que, como se tratava de um fork da GlibC que fundiram os dois projetos, por esse motivo o Debian acabou retornando para a GlibC). Uma distribuição não fica atrelada a um único projeto tenda a liberdade de escolher outras ferramentas e até de se desvincular do que já tem.
curso-linux-da-migração-a-administração-do-sistema-operacional
CLIQUE AQUI, VENHA APRENDER LINUX COMIGO E TORNE-SE UM VERDADEIRO PROFISSIONAL.
 Mas mesmo tendo suporte à varias arquiteturas, há um trabalho sendo feito para a biblioteca venha a ter suporte a arquitetura RiscV64 vindo de empresas como a Mforney, a cmpwn, a  SiFive e até a Google.

 Nesta versão a equipe removeu por hora o suporte a riscv32 (já que a ABI de 32 bits ainda não está estável) e portaram a distribuição Alpine Linux para riscv64 sem se depararem com problemas. Atualmente a comunidade Adélie Linux também está envolvida em um trabalho portando musl libc para arquitetura SPARC.

 Aqui você pode assistir um vídeo do canal e conhecer um pouco mais sobre a história e características da biblioteca musl:

Core Semiconductor possui sua própria versão o processador do SEGA Saturn para IoT

Core Semiconductor tem como um de seus produtos, o processador J2
Core Semiconductor tem como um de seus produtos, o processador J-core
 Desde mais de 2017 eu venho falando sobre o re-desenvolvimento dos SuperH que é uma família de processadores Risc Hibrido da Hitachi focado em dispositivos embarcados, eletrônicos, foi utilizado na industria automobilística e no SEGA 32x, SEGA Saturn e SEGA Dreamcast. Diferente dos tradicionais processadores RISC (como os ARMs por exemplo) que realizam processamento procedural (um processamento de cada vez), os SuperH realizam processamentos em paralelo (vários processamentos simultaneamente).
Visão geral do J-core
Visão geral do J-core
 No dia 30 de Junho de 1999 Linux recebeu suporte ao SuperH (sete meses após o primeiro local de lançamento do Dreamcast que foi no Japão em Novembro de 1998) e até hoje mantem o seu suporte no kernel Linux. Por isso acho que talvez teria sido interessante se o Dreamcast rodasse Linux e não Windows CE. Mas as coisas não são tão simples o quanto achamos, a parte comercial é bem delicada a ser tratada e deve ser respeitado. Como pode ser lido na revista 101 games #11 dreamcast da warpzone (e que inclusive eu tenho essa edição autografada pelo Ivan :) já havia feito acordo com empresas dividindo  em duas equipes (uma no japão e a segunda nos Estados Unidos) para apresentarem dois projetos diferentes e que, é claro, no final das contas, um seria o novo console da empresa. O que ocorreu é que a 3dfx (uma das empresas que perdeu) processou a SEGA. Imagina a SEGA resolver mudar de Windows CE para Linux depois de tudo pronto e tomar mais um processo, só que desta vez da Microsoft. Melhor não né ;)
Clique aqui para obter a edição numero 11 da revista Warpzone 101 games que é a edição especial do Dreamcast
 Com a crise asiática várias empresas foram afetadas, inclusive a Hitachi. Sem muitos detalhes, mas por conta disso, as patentes dos processadores SuperH não foram renovadas e o resultado disso você confere no vídeo abaixo:

 Uma vez que suas patentes caíram em domínio publico, as empresas podem produzir suas próprias versões de SuperH livremente assim como o RiscV e uma das versão open source do SuperH que ganha destaque no mundo é o J-Core. Eu escrevi um artigo chamado "O que é Disposable Computing?" onde explico alguns dos projetos do J-Core que pretendem trazer (inclusive uma versão x86). Já a Core Semicondutor possui sua própria versão de SH2 chamado J-32 (inclusive o artigo "O que é Disposable Computing?" foi onde pela primeira vez mencionei sobre o J32).

 Honestamente eu fiquei impressionado com as características do J32; pois eu tinha condicionado em mente que sim, seria algo melhor do que o SH2, mas não a ponto de ser melhor que certos ARMs como pode ser conferido na tabela abaixo:
Tabela comparativa entre o ARM Cortex-M1, ARM Cortex-M4 e o J32 Core.
Tabela comparativa entre o ARM Cortex-M1, ARM Cortex-M4 e o J32 Core.
 Enquanto o SH2 possuía clock de 29MHz, o J32 possui clock de 150MHz (cinco vezes mais que o SH2) além de suporte a SMP, 8kB de cache de instrução mais 8kB cache de dados por CPU, suporte a Boot ROM, SRAM, MMU (não é esperado que o J2 tenha suporte a MMU), DMAC, DDR controller, dual EMAC, GPIO, dual SPI I/F, dual UARTs, dual I²C I/F e JTAG.

 Quando falamos de J-core, vale também mencionar a Turtle board que é um protótipo de placa inspirado na placa do Raspberry Pi e que teria sido apresentado em eventos esse ano no Canada e no Japão se não fosse o caso que estamos enfrentando. A Core Semicondutor possui também o seu próprio protótipo chamado Jx IoT (como a placa mãe também é open source, todas as empresas tem permissão de produzir suas próprias versões sem a necessidade de autorização).
Jx IoT
Jx IoT
 Se o J32 chegou a esse ponto, imagina o que podemos esperar do J4 ou do J6 e até do J64. Será que o J32 motivará a galera apaixonada pelo SEGA Saturn a criar uma iniciativa de trazer o console de volta a vida em um novo hardware? Quem sabe? Espero que sim.

Lançado toybox 0.8.0

lancado-toybox-0.8.0
Imagem velha, mas serve somente como ilustração para o 0.8.0
Ontem, dia 08/02/2019, foi lançada a versão 0.8.0 do terminal de comandos do Linux, o toybox. Esses últimos meses tem sido interessante onde pudemos acompanhar o port do toybox para o FreeBSD.

 toybox é terminal de comandos feito exclusivamente para Linux com o código mais limpo, mais claro e mais fácil de manter do que o do Busybox. Ele combina muitas utilidades de linha de comando comuns no Linux em um único binários (assim como o Busybox). Está sob clásula zero  da BSD (0-BSD) e é compatível com a POSIX-2008 LSB4.1.


 Essa nova versão temos as novidades como poder construí-lo para FreeBSD e Mac OS com as opções "make macos_defconfig" e "make freebsd_defconfig" (Elliott Hughes e Ed Maste realizam  um ótimo trabalho no toybox).

 Novos comandos foram adicionados como sntp client/server baseados na RFC 4330 (Simple Network Time Protocol, compatível com a sub-configuração do ntp) e o comando test que foi reescrito e promovido para fora do pendente.

 Novas opções foram adicionadas a comandos como "--color" ao comando grep, o comando netcat agora possui suporte a ipv6 e UDP, mkdir aceita --parent e --parents como sinônimos para -p, o touch ignora -f, basename com -s para remover um sufixo, dirname com suporte a múltiplos argumentos, cmp aceita --quiet e --silent como sinonismos para -s, hostname com suporte a -sfd, head com --bytes como um sinonimo para -c e --lines para -n, mktemp com suporte a -t e correção a -u, sed com -z e -iEXT para manter arquivos de backup, md5sum e sha1sum com --status e --check como sinônimos para -s e -c, readlink com --cannonicalize como sinonimo para -f, sort com -V, patch com -s e --quiet e melhor suporte a tab no nome, stat com --format como sinonimo para -c, xargs com -p -t -r, umount ignora -c, pequena otimização a file.c, file reconhece binários ELF do riscv e ls -t agora utiliza o campo de nanosegundos.

 Aconteceram correções também como nos comandos cp, sort, sed, host, hostname, ps e top. O diretório pending também foi atualizado, houveram mudanças no build, no coding style e nas bibliotecas. Houveram bem mais coisas que poderiam ser mencionadas, mas já está de bom tamanho.
Então é isso, baixem e confiram a nova versão do toybox, o terminal de comandos do Linux.

  • Comunidade FreeBSD pretende portar o toybox
  • Pré-lançamento da linguagem bc 1.1 para o toybox
  • NÃO SE ESQUEÇA DE SE INSCREVER NO MEU CURSO DE MIGRAÇÃO PARA LINUX.
     QUER APRENDER A UTILIZAR O BTRFS NO FEDORA, ENTÃO VENHA APRENDER LINUX COMIGO ;)

    Lançado novo Minicurso de atributos no Linux

    Lançado LLVM 9.0.0

    Linux e o LLVM
    Lançado LLVM 9.0.0
     LLVM é a coleção de compiladores que tende a substituir o GCC no Linux (gostemos ou não) sendo já adota pelo Android (O Android é todo compilado com o LLVM), Debian (de mais 50 mil pacotes, 32.757 foram compilados com o LLVM e somente 1314 apresentaram falha (4 %)),  o Open Mandriva (quase 100% do Open Mandriva) e o Fedora está tomando o mesmo rumo. Fora as distribuições Linux, outros sistemas operacionais também já o adotam como o MacOS X (sendo uma das pioneiras no seu uso), o FreeBSD, o TrueOS e o DragonflyBSD (tendo suporte a ambos compiladores). Em Março foi lançada a versão 8.0.0 e como de costume, a cada seis meses é lançada uma nova versão.
    curso-linux-da-migração-a-administração-do-sistema-operacional
    CLIQUE AQUI, VENHA APRENDER LINUX COMIGO E TORNE-SE UM VERDADEIRO PROFISSIONAL.
     Foi anunciado no 19 de Setembro o lançamento da versão 9.0.0 do LLVM (um trabalho que levou seis meses depois do ultimo lançamento). Nesse lançamento foi adicionado suporte a asm goto, habilitando para construir a mainline do kernel Linux para x86_64 com o Clang, RISCV agora construído por padrão (não é mais experimental), suporte experimental a C++ para o OpenCL. Correções de bugs, otimizações e melhorias no diagnósticos.

    Qual o futuro do Bzip2?

    Qual o futuro do Bzip2?
    Fonte da imagem: PNGWING

     Por volta de Março de 2024 testemunhamos uma vulnerabilidade no SSH devido a um backdoor no xz e como todos se lembram, esse backdoor foi inserido pelo próprio "atual mantenedor" do xz que até ninguém faz a mínima ideia quem seja. Coincidência ou não o bzip2 anda passando por problema similar com seus mantenedores. O que nos leva a seguinte questão: Qual o futuro do bzip2?

     Historicamente, o nível de compactação do bzip2 é tão potente (muito próximo ao do xz; confiram a minha aula sobre des/compactadores e empacotadores disponível livremente no meu curso de migração para Linux) que a medida que o kernel crescia em recursos e ficava maior, a solução acabou sendo disponibiliza-lo compactado com bzip2.

    Aula de des/compactadores e empacotadores no Linux. É possível reparar o nível de compactação de cada um dos compactadores

     
     Apesar do seu nível de compactação ser melhor do que a do gzip, uma de suas desvantagens do bzip2 é o seu alto uso de CPU e o tempo de compactação e descompactação.

     porém o real problema do bzip2 é que durante muito tempo ele não recebeu atualizações significativas, o que acarretou em acumulo de falhas, vulnerabilidades, não havendo repositório de controle de código fonte e nem rastreamento de bugs. Uma das poucas atualizações que o bzip2 recebeu eu cheguei a publicar no meu antigo blog em 2010. Por estes motivos, no final de 2013 o kernel passou a ser disponibilizado compactado sob o xz (leiam o artigo Happy new year and good-bye bzip2). Quando foi descoberta a vulnerabilidade no xz detectada no SSH, o kernel passou a ser disponibilizado temporariamente compactado com o gzip mesmo ficando um pacote bem maior e nem mesmo cogitando disponibiliza-lo sob o bzip2.

    Happy new year and good-bye bzip2
    Happy new year and good-bye bzip2

    Transições entre mantenedores

     Em Junho de 2019, Federico Mena Quintero, um dos fundadores do projeto GNOME, anunciou que passou a ser o mantenedor do bzip2 chegando a lançar a versão 1.0.7 poucos dias depois do seu anuncio. Em julho de 2019 Mark Wielaard disponibilizou a versão 1.0.8 e depois disso não houveram mais grandes novidades. Federico Não tinha tempo o suficiente para concluir os objetivos que havia proposto e Micah não teve respostas claras sobre o futuro do bzip2 não fazendo revisão do trabalho de Micah para a versão 1.1.0. Então em Junho de 2021 Micah D. Snyder anunciou em seu blog que havia se tornado o principal mantenedor do bzip2. Se o xz passou por situação similar entre os mantenedores fazendo com que nos deparássemos com um backdoor, será que não estamos diante da mesma história só que desta vez no bzip2? Essa situação nos leva ao próximo questionamento: Quem é Micah D. Snyeder?


    QUEM É MICAH D. SNYDER?

     Micah D. Snyder é desenvolvedor da empresa Talos Intelligence, uma divisão da Cisco focada em pesquisas sobre ameaças comprovadas e confiabilidade. A Talos é responsável pelo desenvolvimento do IPS Snort e do antivirus ClamAV sendo Micah um dos principais responsáveis pelo seu avanço. Há até mesmo uma carta de celebração de 20 anos do ClamAV que entre eles, está o nome de Micah nas notas de agradecimento. Além de entusiasta em python, Micah também é fascinado por Rust. Então estamos seguros quanto a possibilidade de se repetir história parecida com a do xz que teve um mantenedor anônimo e acabou injetando um backdoor em seu código (deem valor a estas pessoas).


    Qual o futuro do Bzip2?

     Micah quer trabalhar no lançamento da versão 1.1.x do bzip2 que já era uma promessa antiga dos mantenedores. O status desta versão pode ser conferido no site oficial do sourceware que ainda está em estado experimental; Micah pretende modernizar a base de código do bzip2 como utilizar Meson build system e CMake build system ao invés de somente de Makefiles; coletar os vários patches da comunidade e melhorias significativas na compatibilidade com C99.


    bzip2 sendo portado para Rust?

     Como Micah é um entusiasta da linguagem Rust, foi lhe perguntado sobre a possibilidade de portar bzip2, a o que Micah respondeu que abandonou esse projeto. Na verdade estão preferindo trabalhar no suporte a multithreading em C (que para Micah é algo que seria muito interessante principalmente nas futuras versões 1.2 or 2.0 SE alguém trabalhar nisso) do que qualquer coisa em Rust. Houve no passado o projeto BZIP2SMP baseada na versão v1.0.2 que falhou portar para a versão 1.0.8 e já que existe outro projeto de port do bzip2 para Rust sendo desenvolvido por outro grupo e que Micah apoia que as pessoas contribuam para ele. Esse projeto está em melhor estágio de evolução, boa licença, bom suporte a compressão e descompressão. Mas estranhamente, a versão 1.1.x virá com um port experimental para Rust... Vai entender a vida...

    Este projeto de port de bzip2-Rust pode ser conferido clicando aqui.

     Eu estou testando o bzip2-rust porém com cautelas pois, como menciona o próprio projeto, "você utiliza por sua própria conta e risco". por enquanto parece que está completo na questão de opções (minha critica ainda fica na questão do tamanho dos binários.


    Rust bzip2 implementation
    Implementação do bzip2 em Rust

     Trabalhem nisso, galera de rust; vocês ainda nem usam garbage collectors para justificarem esse exagero). Outras observações feitas pela equipe do bzip2 quanto portar o bzip2 para rust é que rust trabalha muito bem na maioria dos processadores i686 e x86_64 porém, em outras plataformas como armel, armhf, armv7, mips{64}, powerpc{64} e riscv{64} carece de suporte de primeira classe. Muita cautela ao pensar na adoção de Rust, não vão com muita sede ao pote. Ao invés disso, conheçam e analisem também outras linguagens Nim e Odin (Zig também é promissora) que também possuem suporte a segurança em memória e melhor suporte a arquiteturas.


    CONCLUSÃO

     Na questão do bzip2, vemos que estamos bem amparados se comparado com a recente história do xz, espero que tenhamos aprendido algo com isso e que possamos nos planejar melhor para as situações ao invés de perdemos tempo com conversas ideológicas. 




    Rust no kernel Linux: A guerra sem trégua

    Strap in, get ready for more Rust drivers in Linux kernel

    Rust no kernel Linux: A guerra sem trégua

     Em 2023 eu escrevi o artigo Rust no Linux: Um caso de amor e ódio e depois dessa nova temporada de Rust no kernel, eu estava pensando em fazer um vídeo porém, como ando muito ocupado, preferi escrever aqui no blog mesmo.

     Bom, a treta de Rust no kernel Linux continua. Tentaram de todas as formas e contra todos os gostos promover Rust no kernel Linux, houve resistência por parte de muitos desenvolvedores e até mesmo de Linus Torvalds mas por fim, foi feita a adoção. Depois disso houveram novos problemas, o principal responsável por Rust no kernel saiu do projeto e em Fevereiro desse ano, começou o processo tudo de novo; ninguém dá trégua nessa bagaça. Muitos desenvolvedores não apoiam sua adoção mas a cartada final dada por Greeg Kroah-Hartman:

    "Adicionar outra linguagem não deveria ser um problema, já lidamos com coisas muito piores no passado."

    "Sim, bases de códigos de linguagens mistas são grosseiras e difíceis de manter, mas somos desenvolvedores de kernel, droga. A gente vem mantendo e fortalecendo o Linux por mais tempo que qualquer um já pensou que fosse possível"

     Não tem como discordar do Gregg nesse ponto já que nós sysadmins passamos bastante por situações parecidas, mas alguns até mesmo abandonaram o desenvolvimento como Karol Herbst que deixou o desenvolvimento do driver nouveau depois que adotaram o driver Nova como substituto do Nouveau; Christoph Hellwig bateu de frente com todos (inclusive com Linus) e esse debate parece não tem fim.

     Estamos em um período de transição na tecnologia onde novos processadores, novos chips e novas linguagens estão surgindo. Muito se fala hoje em dia sobre segurança de memória (apesar que este assunto já dura mais de 30 anos) e seus benefícios; Em 2017 foram reportados cerca 40 CVEs somente do kernel Linux relacionados a falhas de segurança de memória. Então, se for para o bem, sim eu acredito que uma linguagem que possua recursos relacionados a segurança de memória deva ser adotada no desenvolvimento do Linux, mas Rust não é esta linguagem; outras linguagens são muito mais interessantes para se integrar ao kernel Linux do que Rust, como é o caso de Lua e Nim. Bom, o argumento que podem apresentar é que Lua é uma linguagem interpretada por scripts. Sim, porém o NetBSD possui drivers escritos em Lua, o carregador de boot do FreeBSD é escrito em Lua e o interpretador do rpm é escrito em Lua:


     Lua é uma linguagem que facilmente se comunica com a linguagem C e C se comunica com tudo; geralmente é comum incorporar códigos C a alguma aplicação Lua para se comunicar com outras coisas. Lua na verdade já nasceu tendo como uma de suas características ser amigável com a linguagem C; inclusive um dos melhores recursos da linguagem Lua é exatamente o design de sua API que lhe permite integrar seu código a bibliotecas C ou fazer com que scripts Lua sejam executados de forma muito rápida junto ao código C dos jogos. Alias, se precisar portar seu código Lua para C, se torna uma tarefa muito mais fácil do que qualquer outra linguagem. E SIM, LUA POSSUI SUPORTE A SEGURANÇA DE MEMÓRIA!

     Eu conheci Lua por volta de 2007 ou 2008 em um PDF como uma linguagem para integrar a linguagem C e fazer coisas que a linguagem C não faz; depois eu descobri que Lua já era amplamente utilizada em muitas aplicações como desenvolvimento da maioria dos jogos (inclusive liderando a parte de scripts de jogos e já até ganhou prêmios na parte de jogos), aplicações industriais, estações espaciais e petrolíferas, sistemas embarcados, os sites Wikipedia e Github são implementados em Lua, Netflix faz forte uso de Lua, Adobe Photoshop Lightroom, Ultradefrag, VLC, nmap, wireshark (1, 2), snort (1, 2), Metaplace, teclados da Logitech. Lua é um grande caso de sucesso e mais presente do que imaginamos sem essa necessidade de propaganda e comoção que foi feito em cima de Rust.

     Nim é outra linguagem muito mais apropriada e interessante para o kernel Linux (existem ao menos dois sistemas operacionais escritos em Nim) e seus recursos únicos, que eu vou descrever mais a frente, são muito mais interessantes do que Rust.

     Muitos projetos se beneficiarão de Rust e há exemplo real disso que é o caso do Android que se beneficiou de Rust tendo redução de 76% para 24% de seus bugs; por outro lado o port do fish shell de C++ para Rust não resultou em nenhum benefício, não entregou nenhum novo recurso e quando estes surgiram, não estavam vinculados a linguagem Rust... já por outro lado, outros projetos poderão ser afetados ao adotar Rust tanto que há programas que estão sendo migrados de Rust para outras linguagens como é o caso do gerenciador de pacotes da distribuição Glaucus Linux que foi portado de Rust para Nim (sintax mais simples e mais fácil de manter, melhor desempenho e menos uso de memória, de CPU) e a linguagem Roc que está sendo reescrita de Rust para Zig pela sua eficiência no processo de compilação ser maior e possuir menos dependências (1; 2. Valeu Nilton por compartilhar estas informações); o projeto Prisma que migrou de Rust para JavaScript e que tornou seu código 90% menor, mais de 3,4 vezes mais rápido, utilizar menos uso de CPU, ter menos complexidade no deploy e mais fácil de a comunidade fazer contribuições (23 de Julho de 2025: Prisma ORM Rust to TypeScript Migration: Rationale, Benchmarks, & GA launch, Prisma ORM without Rust: Latest Performance Benchmarks). Outro grande exemplo de projeto que foi prejudicado ao adotar Rust é o Ubuntu que ao adotar o Rust coreutils, teve seu desempenho afetado em até 17 vezes se comparado com as ferramentas tradicionais.

     É questão de adotar o que se adéqua ou não a necessidade corretamente (aprendam isso). Honestamente, esta terceira opção é a mais provável que venha acontecer com o kernel Linux. Sim, eu vejo isso acontecer e sou bem pessimista quanto a Rust.

     Não é de hoje que tentam substituir a linguagem C como menciona o próprio autor da linguagem C Plus Prolog (ou simplesmente C+P) que descreve sobre a  linguagem C como sendo a única linguagem útil* (*portável, com desempenho que mais se aproxima de Assembly e consegue se comunicar com tudo) e que cientistas vem tentando há quase 50 anos encontrar uma solução para (digamos) substituir a linguagem C. E alguns até criaram C mais parecida com a linguagem Prolog e outros criaram o inverso, Prolog parecido com C."

     O grande problema não é a linguagem Rust, o problema é mais uma questão psicológica. Os usuários estão querendo adotar Rust de forma eufórica e irracional, sem pesar na balança as vantagens e desvantagens assim como todas as linguagens possuem, sem pensar nas consequências; só estão querendo adotar acreditando que Rust é a oitava maravilha do mundo que solucionará todos os problemas da humanidade. A maioria não são desenvolvedores e os que são, além de nunca nem mesmo terem explorado o real potencial da linguagem C, estão cheios de amores por Rust... Rob Landley, autor do toybox que eu sempre menciono, disse em seu artigo de 21/09/2024 da melhor forma:

    "Eu desisti de Rust porque todo puritano de Rust que eu encontro há anos trata NÃO escrever código em Rust como um pecado... ...A multidão "all must rust away" não conseguem explicar as vantagens de Rust a não ser "não é C"...

     A única coisa que vemos é essa frescura de "rewrite in Rust", o que é uma bela de uma burrice já que o kernel Linux possui quase 1 Gigabyte somente de código na linguagem C. Levariam vários anos só para porta-lo para Rust e mais muitos outros anos somente para torna-lo estável (reescrever drivers será uma mão de obra intensa e que introduzirá mais problemas do que soluções — reescritas sempre introduzem bugs). Por vezes eu já vi desenvolvedores sugerir aos desenvolvedores de Rust desenvolverem as mesmas soluções do zero ao invés de ficarem querendo reescrever tudo em Rust. O autor da linguagem Hare sugeriu:

    "Um grupo motivado de talentosos desenvolvedores de sistema operacional em Rust poderiam construir muito rápido um kernel compatível como Linux do zero e sem necessidade de se envolverem na política LKML"... 

    "Eu acho que se o montante de esforços sendo colocados no Rust-for-Linux fossem aplicados em um novo sistema operacional compatível com Linux, poderíamos ter algo pronto para produção para alguns casos de uso dentro de alguns anos."

    ..."desenvolver um sistema operacional baseado em um design comprovado como o do Linux é muito mais fácil e pode ser feito muito rápido. Eu trabalho em meu próprio sistema operacional de novo design (um microkernel) há alguns anos e ainda está travado no design e precisa urgentemente ser repensado; por outro lado eu escrevi um clone aceitável do Unix em menos de 30 dias."

     O MIT também já desenvolveu um kernel assim chamando Biscuit o e apresentou no Usenix de 2018. Biscuit é kernel monolítico POSIX escrito na linguagem Go e é tão compatível com Linux que roda as aplicações do próprio Linux sem nenhuma necessidade de modificação do código fonte das aplicações. Por que a galera de Rust não acata essa proposta? Outro grande exemplo de escrever algum programa do zero e não de porta-lo é o bzip2; no meu artigo Qual o futuro do Bzip2? descrevi que os novos mantenedores foram questionados se portariam bzip2 para Rust, o que foi respondido que eles preferem trabalhar no suporte a multithreading em C, que para Micah é algo que seria muito interessante principalmente nas futuras versões 1.2 ou 2.0, do que qualquer coisa em Rust (lembram-se que eu mencionei que muitos que estão cheios de amores por Rust nunca nem mesmo exploraram o real potencial da linguagem C? Aqui está uma prova disso) e por fim foi indicada a implementação do Bzip2 em Rust desenvolvida do zero.

     Lanldey também argumenta sobre o desenvolvimento de um sistema operacional escrito em Rust do zero e ainda apresenta a percepção das intenções da comunidade Rust:

    "Se quizerem escrever um novo sistema operacional inteiramente em Rust, com kernel e userspace e toolchain, tudo em Rust, eu respeitaria isso e desejaria tudo de bom para eles. Mas não é o que eles querem. eles acreditam que lhes é devido Linux e eles querem sequestrar Linux (ainda que majoritariamente escrito em C)"... ..."E eles acreditam que ADICIONAR COMPLEXIDADE ADICIONAL resultará em sistemas melhores"

     Sim, essa é percepção que se passa; não é que querem ter uma linguagem secundária no kernel Linux com a intenção de melhorar sua segurança e sim de aos poucos dominar o kernel substituindo todo o código por Rust para se autopromover. Rescrever algo em Rust pode se tornar uma cilada; imaginem a complexidade será reescrever o código rust para outra linguagem; você pode acabar ficando atrelado a ela (coincidência ou não, já vi desenvolvedores reclamando de coisas parecidas do projeto GNU).

     O que esquecem de nós contar é exatamente os contras da linguagem: Curva de aprendizado terrível; difícil de debugar; complexa (não é a toa que o autor do minibase diz que o Rust coreutils o forneceu uma grande inspiração por lhe mostrar como não escrever o coreutils); tempo de compilação enorme; ecossistema pequeno; otimizada para a maioria dos processadores i686 e x86_64 porém, em outras plataformas como armel, armhf, armv7, mips{64}, powerpc{64} e riscv{64} carece de suporte de primeira classe, fora "recursos" de Rust que podem causar erros e bugs no LLVM; utilizar  HLL pode causar perdas de desempenho, uso excessivo de CPU, memória e I/O; foram o tamanho dos biários ser enorme.

    rust coreutils
    Diferença de tamanho dos binários UUtils e toybox



     Se gabam unicamente de segurança de memória sem mencionar à que custo... E tudo tem um custo. O artigo The benefits and costs of writing a POSIX kernel in a high-level language faz uma ótima análise descrevendo os benefícios de escrever seus programas e sistemas operacionais em linguagens com segurança de memória ao custo de sacrificar o desempenho que foi de 5% a 15%. Segurança de memória pode também afetar os seus programas; o autor da linguagem C3 descreve em seu artigo Por que eu parei tudo e comcei a escrever  em C de novo:

    "...Quem consegue escrever um jogo de estratégia com milhares de units cada tendo sua própria versão de mundo sem ter um garbage collector rodando o inferno? De fato meu amigo tentou escrever o jogo e falhou. Garbage collectors são péssimos e todos os meu projetos em Lisp possuem aplicações muito limitadas apenas por causa do garbage collector. ..."

     Ok, o segundo argumento que podem querer apresentar é que Rust não utiliza garbage-collection por acreditarem não ser um recurso eficiente. Ao invés disso, Rust aplica a técnica de analisar o código fonte durante o processo de compilação para garantir que não haja brechas de segurança; PORÉM este tipo de recurso já é empregado na linguagem C há muito, mas muito tempo. A biblioteca dietlibc emprega ao menos seis linker warnings (avisos) durante o processo de compilação para ajudar os desenvolvedores escrever melhores códigos:

    1. Avisa se assert for utilizado (pode indicar debug code)
    2. Avisa se stdio for utilizado (bloat)
    3. Avisa se sprintf for utilizado  e indica utilizar snprintf por ser melhor e mais seguro¹
    4.  Avisa se *printf/*scanf for utilizado (bloat e recomenda utilizar -lowfat)
    5. Avisa se system for utilizado (risco de segurança)
    6. Avisa se mktemp/tempnam/tmpnam for utilizado (race condition)

     E esse é um dos grandes problemas; Rich Felker, autor da biblioteca musl, descreveu em seu artigo intitulado Overcommit que "há um monte de mal entendidos relacionados a gerenciamento de memória no Linux que levam à um monte de programas ruins que falham de forma robusta com condições de baixa memória e geram mitos". OK, gerenciamento de memória e segurança em memória são coisas diferentes, mas a mesma situação se aplica-se a ambos os casos, ou seja, não vai adiantar nada adotar outra linguagem se os desenvolvedores não souberem tratar corretamente seus códigos.

     Falando em musl, além de também fazer a mesma coisa por trabalhar com o conceito de quality safe code (visando ser correta no senso conformidades padrões e segurança) é utilizada para encontrar bugs através do recurso fail-safe da biblioteca.

     A Red hat adicionou a flag -FORTIFY_SOURCE aos compiladores GCC e Clang para detectar falhas como buffer over flow (1). O GCC também possui (desde 1998) a extensão StackGuard que é uma Stack Smashing Protection (SSP) (1) que ajuda o compilador detectar e prevenir ataques buffer-overflow que alias, o OpenBSD faz forte uso deste recurso.

     O tinycc possui a opção -b (bound checker) há no mínimo 15 anos... E o GCC há uns 10... E se perguntar para boa parte dos que estão estão com fascínios por Rust, eles nem sabem disso...


    TinyCC Bound checker
    Bound checker no tinycc

    Como bound checker funciona no TinyyCC

    Opção -b em invoke no manual do tinyCC

     Fora o recurso ASan (AddressSanitizer) que é um plugin detector de erros de memória para C/C++ utilizado inclusive no Google Chrome do Android, no Chrome OS, simulador do iOS, Linux, Mac, e Windows de 64 bits e disponível no LLVM há mais ou menos uns 15 anos (1, 2, 3), -fstack-protector, -fsanitize=safe-stack, UBSan (-fsanitize=bounds) e o SafeCode. Alias, a própria Wiki do  ASan sugere o uso da ferramenta como cgroups para limitar o consumo de memória. Por que não incluir Pledge a esta lista? Ou seja, existem vários mecanismos para se utilizar somente com a linguagem C, mas a solução que encontraram foi adotar outra linguagem que pode gerar uma série de outros problemas... ... ... Enquanto isso Rust possui um recurso chamado unsafe que a galera de rust se refere como o "segredinho sujo" que eles utilizam em todos os lugares mas está tudo bem... São eles que estão usando... não é?

     Está certo que utilizar recursos como verificação do código fonte acaba gerando binários um pouco maiores por acabar adicionando mecanismos de segurança, mas em Rust isso tinha que ser tão exagerado? O Rust coreutils por exemplo, contendo apenas apenas 87 comandos e sendo linkado dinamicamente, possui o tamanho de mais de 12MB enquanto o toybox, sendo linkado estaticamente e contendo 233 comandos (quase três vezes mais que o Rust Coreutils), ocupa apenas 724KB (mais de 17 vezes menor levando em conta sua ligação estática e a quantidade de comandos). Já houve quem dissese que isso acontecem em Rust apenas em X86 por conta das dependências e não ocorre em embarcados. O que não é verdade pois geralmente Rust gera binários praticamente do mesmo tamanho.   

     O interessante mesmo é poder decidir quando utilizar segurança de memória. No livro Nim in action descreve que algumas linguagens de programação, como C, não possuem segurança de memória porque ela permite que programas sem atribuição possa acessar a memória. Por outro lado, linguagens possuem segurança de memória oferecem essa segurança ao custo de não permitir que programas acessem detalhes de baixo nível da memória quando se faz necessário; e é aí que Nim se torna uma linguagem muito interessante. Por padrão Nim já oferece proteção contra erros de memória porém, porém Nim oferece as duas opções (escrever códigos com ou sem segurança de memória) permitindo que você decida quando utilizar cada uma delas. Ainda no livro Nim in Action descreve que "...há situações quando muitos querem evitar garbage collectors; eles são considerados por muitos ser inadequados para certas aplicações como embarcados e jogos. Por essa razão, Nim possui suporte a um número diferente de garbage collectors com diferentes aplicações em mente. Garbage collector pode também ser removido completamente, lhe dando a habilidade de você mesmo gerenciar memória." ... "Aplicações escritas em Nim são muito rápidas, em muitos casos, tão rápidas quanto aplicações escritas em C, e mais de trinta vezes mais rápido do que aplicações escritas em Python. Eficiência é  maior prioridade, e alguns recursos toram otimização de código fácil. Isso vai de mãos dadas com um soft real-time garbage collector, que lhe permite especificar o montante de tempo que deve ser gasto coletando memória. Esse recurso se torna importante durante desenvolvimento de jogos, onde um garbage collector comum pode desacelerar a renderização de frames na tela se utilizar muito tempo coletando memória. Também é útil em sistemas real-time que precisam rodar em frames de tempo muito estrito." Nim, além de por padrão já proteger seu programa contra todos os tipos de erro de memória, possui também recursos muito mais interessantes como meta programação, style intensitivity; seu type system (que apesar de ser estática, incorpora o recurso type inference que lhe permite acelerar o desenvolvimento do seu código sem sacrificar a segurança), type safety e type-checking dinâmico; Generics (que lhe permite reutilizar o código sem sacrificar type safety) e muito mais.

     (13/08/2025) Linguagens como C e C++ possui suporte a segurança em memória, mas algo que é feito manualmente. Os desenvolvedores que devem verificar seus próprios códigos e identificar o problema (algo que já vimos aqui Rich Felker denunciando). Os desenvolvedores do Busybox por exemplo fazem isso muit bem, no dia 03/08/2025, Denys Vlasenko corrigiu o vazamento de memória  causado pela otimização do compilador.



     (13/08/2025) Além destes recursos, a equipe do Btrfs implementou no dia 12/08/2025 o ref_tracker que detecta vazamentos e printa os traços da pilha que ainda não liberadas e assim poderem corrigir os problemas.

     Vale ressaltar que essas técnicas de memory safety também são possíveis na linguagem C e C++ não somente manualmente como muitos acreditam mas também através de garbage collector para C e C++ que foi desenvolvido pelos três pesquisadores Hans-J. Boehm, Demers e Weiser (por isso o nome bdwgc) em meados da década de 90... Este recurso lhe permite utilizar garbage collector nas duas linguagens quando quiser bastabdo definir #include "gc.h" em seu código. O bdwgc também oferece o recurso Leak Detector.

     (28/03/2025) No dia 26 de Fevereiro de 2025 a equipe de desenvolvedores do XFS implementou o recurso garbage collection no zoned do XFS todo desenvolvido em C (e que vai para o kernel 6.15-rc). E no dia 19 de Março foi adicionado a opção gc_pressure no mount do XFS para evitar um risco no garbage collection em circunstancias distintas. O que nos leva a questionar se realmente se faz necessário a adoção de uma linguagem secundária no kernel Linux somente pelo recurso de segurança em memória ao custo de perda de desempenho, binários enormes, alto consumo de memória, CPU e etc sendo que tal recurso já está presente de tantas formas (linguagens mais adequadas, algoritmos, bibliotecas, flags, extensões), há tanto tempo (uns há quase trinta anos) e que já poderiam estar sendo empregados...

    xfs: implement zoned garbage collection
    Garbage Collection no zoned do XFS

    Garbage Collection no f2fs


     E o mais interessante de tudo: Se lembram do artigo da Casa promovendo que todos deveriam migrar de linguagens como C e C++ para linguagens com segurança de memória? Pois é, estranhamente parece que a Casa Branca voltou atrás e não vai mais promover segurança de memória já que o mesmo link está indisponível.


     Bom, eu acho que agora sim neste segundo artigo eu tenha abordado elementos o suficiente para pensar no assunto; o assunto de segurança em memória vai muito além do que simplesmente adotar uma linguagem com tal recurso achanado que solucionará os problemas de forma definitiva.


    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 :)

    Lançado novo Minicurso de atributos no Linux
    E não esqueçam de conferir também o meu mini curso de atributos no Linux


    Marcadores

    A pior história sobre Linux que já ouvi (6) A.I (2) ambiente gráfico (19) AMD (14) analise (10) Andriod (17) android (9) Apple (1) arm (5) artigo (5) aws (1) bc (24) benchmark (6) BetrFS (1) biglinux (1) blackhat (1) BSDs (36) 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 (34) comp (1) compressores (9) consoles (1) container (8) CPU (20) cracker (1) criptografia (5) crowdfunding (9) cursos (24) daemons (14) Debian (31) desempenho (2) desenvolvimento (105) 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 (15) 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 (23) Funtoo Linux (13) games (96) garbage collector (1) gerenciadores de pacotes (4) glaucus (8) GOG (3) google (9) gpu (4) hacker (2) hardware (104) hash (1) helenos (3) I.A (1) init system (13) Intel (16) inteligencia artificial (2) IoT (1) ispconfig (1) jogos (40) kde (1) kernel (144) lançamento (64) leis (1) LFCS (1) libs (2) licenças (10) Linus (16) linus torvalds (2) Linux (196) 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 (183) musl (3) não viva de boatos (9) navegadores (5) NetBSD (7) newlib (1) nim (13) nimlang (5) nintendo (2) 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 (72) promoção (1) propagandas com Linux (8) ps4 (1) real-time. (1) Red Hat (23) redes (4) resenha nerd (5) Resumo da Semana do Dlins (2) resumo do Tux (19) retrospectiva Linux (1) risc-V (14) RISCV (13) rtos (2) runlevel (2) rust (16) Sega (1) Sega Saturn (1) segurança digital (28) servidor web (2) servidores (3) shell (13) shell script (10) sistema operacional (26) skarnet (2) smartphones (3) Software livre e de código aberto (150) sorteio (3) Steam (11) Steam no Linux (9) supercomputadores (4) suse (7) systemd (9) terminal (91) terminal de comandos (22) toca do tux (1) toybox (32) tutorial (6) Tux (3) ubuntu (1) unboxing (7) UNIX (17) UNIX Toolbox (13) vartroy (1) vga (1) virtualização (3) vulnerabilidade (7) wayland (5) web (1) whatsapp (1) whitehat (1) Windows Subsystem for Linux (2) wine (14) WoT (1) yash (1) ZFS (16) zsh (3)