O FreeBSD 16 ainda não foi lançado (previsto para Dezembro de 2027), mas vários sites como FOSS Force, FOSSLinux, Slashdot e Phoronix veem publicando desde o dia 14 de Julho que o FreeBSD 16 conta com um dos seus principais destaques, ter removido completamente todo código fonte que seja regido sob a licença GPL da base do sistema operacional. No dia 21 de Fevereiro foi aberto o ticket D55424 intitulado "Retire dialog" que descreve:
"Esse é o ultimo restante de software GPL na base do sistema. O instalador fez transição para o bsddialog quatro anos atrás e o ultimo consumidor de dialog restante, o dpv, foi desligado mais de dois anos atrás. Aposentem o dpv, libdpv, libfigpar (utilizado apenas pelo dpv), e o próprio dialog."
"Com o diff e cdialog do GNU removidos, isso agora é apenas uma casca vazia."
Com esse commit, foi concluída a remoção completa da subtree do GNU da arvore de código fonte do FreeBSD (inclusive até das notas do arquivo README) tendo todos eles entrado para obsoletefiles.inc.
bsddialog
A equipe do FreeBSD vem fazendo este pesado trabalho ao longo de um bom tempo. Duas soluções que o FreeBSD adotou eu já apresentei aqui no meu blog, sendo elas o comando bc de autoria de Gavin Howard e que é utilizado também no Android como dependencia para compilar seu kernel (e que já reportei um bug) e o pacote libarchive que contem comandos como tar, minitar, cpio e unzip.
Migrar para alternativas sob outras licenças open-source ou remover todo código sob alguma GPL se tornou um processo natural, coisa tal que já foi feito no próprio Android há muito tempo. Nas notas de rodapé do about do toybox é descrito:
"Desde que o Android não era "GNU/Linux" de jeito nenhum, nós precisávamos limpar todos os vestígios de software gnu de sua compilação para obter um sistema auto-suficiente limpo."
Como mostro no artigo É possível que um dia Linux saia da GPL? a popularidade da GPL vem caindo cada vez mais desde de 2007 tanto para novos projetos quanto para projetos já consolidados que migraram para outras licenças. No próprio Android explicitamente se desencoraja o uso das licenças GPL e LGPL em seus produtos e gradativamente reimplementaram componentes (como sua pilha bluetooth) que estavam sob tais licenças por outros sob licença Apache (sim para quem não acreditam, o Android é uma distribuição Linux open-source). O Android ainda carrega a política de não conter nada sob GPL em seu user space; apenas em seu kernel space utiliza GPL já que que se trata do kernel linux vanilla onde não removem e nem modificam nada do kernel, apenas adicionando o que necessitam.
Já a Apple congelou o Xcode nas últimas versões do GPLv2 (GCC 4.2.1 com binutils 2.17) por mais de 5 anos enquanto patrocinava o desenvolvimento de novos projetos (clang/llvm/lld) para substituí-los, implementou um novo servidor SMB do zero para substituir o Samba, substituiu o bash pelo zsh e assim fez com toda a sua pilha de programas da base do MacOS X.
Existem até projetos que mesmo que continuem utilizando GPL em seus projetos, acabam deixando notas autorizando o uso e a promessa de não processar os usuários. Veja como exemplo a FAQ da dietlibc:
"Q: GPL é ruim! Agora eu não posso compilar meus programas BSD com a diet libc!
A: Errado. você pode compilá-los e utilizá-los. Você só não pode redistribuir os binários. Dito isso: Eu não vou processar ninguém por distribuir binários de programas BSD linkados à dietlibc, contanto que o código fonte esteja disponível em algum lugar público."
A própria Linux Foundation fundou a SPDX (System Package Data EXchange: ISO/IEC 5962:2021) para que, de forma simples de explicar, proteger legalmente os projetos evitando que eles tenham conflitos entre as licenças open-source. O toybox por exemplo, sendo regido sob a clausula zero BSD (0BSD) possui um identificador da SPDX que te direciona ao site oficial BSD Zero Clause License | Software Package Data Exchange (SPDX).
Ainda é possível utilizar software licenciado sob GPL no FreeBSD através de instalação separada (o que é algo que ocorre também no Android).
Como eu já disse no passado:
Nem todas as ferramentas que utilizamos nas distribuições Linux são do projeto GNU como alegam. A maioria são do próprio Linux* ou de outros Unix.
As ferramentas do GNU são substituíveis.
Nem toda ferramenta que o projeto GNU alega ser deles é deles de fato.
A maioria do código das ferramentas do projeto GNU é desenvolvido por outros projetos (incluindo o próprio Linux) e outras empresas, menos pelo próprio projeto GNU (foram quando não dão créditos as pessoas).
*Pois é, mentiram para você esse tempo todo alegando que Linux é somente o kernel do sistema operacional.
Depois do lançamento da versão 0.35 no dia 7 de Novembro do ano passado (3 dias após o lançamento da versão 0.35), a dietlibc recebeu mais três patches e um git request enviados por Friedrich Beckmann que trabalha no provedor de e-mail alemão posteo.de.
Os dois primeiros patches estão relacionados a arquitetura aarch64. O primeiro trabalhando com o símbolo __clone que é necessário para pthread_internal.c e solucionar o problema que Friedrich notou ao tentar construir gatling no Raspberry Pi linkando-o ao t.c da libowfat; o que acabou reportando missing symbol __clone required pela dietlibc libpthread. O segundo já relacionado ao símbolo __getauxval da libgcc também necessário para aarch64.
Finalmente, depois de seis anos, foi lança a versão 0.35 da biblioteca dietlibc que é muito abordada tanto aqui no blog quanto no canal. Por mais que não seja popularmente conhecida, essa é uma biblioteca fortemente utilizada em vários ambientes, especialmente em embarcados assim também como a Newlib.
Eu já realizei testes de binários linkados à dietlibc (como o embutils que é um pacote parecido com o coreutils, minised, runit e muitos outros) e os resultados são surpreendentes. Por esse motivo eu torço para que a dietlibc continue recebendo cada vez mais atenção de várias grupos. A versão 0.34 da dietlibc havia sido lançada em 2018 porém, no últimos dois anos, alguns grupos vem enviando tanto patches quanto testes para a biblioteca.
No dia 5 de Janeiro de 2023 por exemplo, Gabriel Ravier enviou um patch com algumas correções no retorno de valores do recurso wcs{,n}cmp (para near-limits assinado com valores wchar_t) correções em seu comportamento e correções que evitam overfalow. Mas esta não foi a sua única contribuição; Gabriel fez o total de dez contribuições corrigindo várias falhas (especialmente do printf), adicionando melhor segurança, definindo valores e adicionando novos recursos (um deles no scanf).
Já no dia 13 de Janeiro do mesmo ano, Jai Arora, Abhishek Rose, Shubhani Gupta e Sorav Bansal da empresa indiana CompilerAI Research GroupIIT reportaram uma série de bugs em funções da dietlibc. A empresa foi tão organizada que disponibilizou códigos fonte em seu próprio repositório no Githube quais flags foram utilizadas durante o processo de compilação para que os bugs possam ser reproduzidos, analisados e assim futuramente corrigidos. Acredito que boa parte possa ter sido corrigido nessa nova versão.
Bessel e ARM na dietlibc
Ficamos um bom tempo sem noticias até que Larry Doolittle, que participa também do desenvolvimento do TinyCC, enviou no final do ano passado dois patches; um com apenas nove linhas e outro com mais sete, para que sejam utilizados nos sub-testes runtests.sh e funcionarem melhor. Sem eles, há certos bugs que fazem com que o shell reclame que cada arquivo dentro de test/*/runtests.sh não seja executado. Outro trabalho que Larry está atuando é na função de Bessel que aponta das versões 12 e 13 do GCC.
"Eu sei algo sobre funções de Bessel, então isso despertou meu interesse e comecei a me aprofundar. Eu aprendi duas coisas principais: bessel.c inclui uma seção escrita somente para x86 e não possui nenhum banco de testes."
Larry criou um tarball de 8 kbyte e postou em seu site pessoal contendo implementações de código de pesquisa bessel.c reescritos de forma simples e portável. O arquivos pode ser baixado em:
Bessel function test with sizeof(double) == 8 and sizeof(long double) == 8
in 176: J max errors 0.0000000000456691 0.00000000007 0.00000000008 0.0000000009
in 175: Y max errors 0.00000000014 0.00000000023 0.000000005 0.000000084
max |J| at known zeros 0.00000000002 0.0000016 0.0000011
max |Y| at known zeros 0.00000000087 0.0000011 0.0000007
Y_0 at first zero 0.00000000327
Hankel modulus-squared max error 0.00000000139
FAIL
O novo banco de testes é quatro vezes maior e Larry trabalha para concluir a documentação antes de submeter o patch. E por ultimo, Larry reportou um problema que ocorre na dietlibc com a arquitetura ARM quando utilizadas algumas flags. Não se trata de um problema exclusivo na arquitetura ARM, esses erros ocorrem em muitas arquiteturas, menos em x86_64 e x32.
"DEFAULTCFLAGS e seu -nostdinc também é problemático para construir json em qualquer arquitetura exceto em x86_64 and x32... ...gamma.h sofre da mesma codificação específica 387 assim como bessel.c. ... ... Tentar consrtuir código de usuário utilizando quaisquer funções matemática falha, faltando coisas como sin cos exp log, que são definidas em assembly em x86_64 e i386. ..."
Estes são alguns trechos que eu traduzi e que notei que o grande problema é que estes recursos não foram portados para outras arquiteturas. Agora é esperar que as comunidades trabalhem nos problemas. Reports já temos.
More working around optimiser bugs (04/07/2024)
Thorsten Glaser da Evolvis informou que a dietlibc entra em um loop interminável na arquitetura arm64 devido o GCC otimizar a implementação da chamada strlen. Uma solução sugerida por Thorsten foi adicionar a opção -ffreestanding na variável DEFAULTCFLAGS (e IMHO bootloaders, kernels e libcs também precisam ser construídas com essa opção) que corrige esse problema.
Eu baixei e testei a nova versão da dietlibc compilando tanto em embutils, quanto o minised e o runit e todos foram bem sucedidos; não houve incompatibilidade com a nova versão.
Muito além do GNU: Os vários sabores de bibliotecas C
Alguns dias atrás me deparei com o link do site osdev.org sobre implementações de biblioteca C; trata-se de um artigo bem interessante mas muito curto. Como eu já fiz vídeos e artigos relacionados ao tema para a minha série Muito além do GNU(lembrem-se que tudo no Linux é uma questão de escolha. Escolha diz mais respeito a liberdade do que uma ideologia ou uma simples licença), eu resolvi então explorar este texto fazendo minhas observações sobre cada uma delas acrescentando mais informação e adicionando outras.
As bibliotecas C mais populares são a glibc, uclibc, musl e dietlibc; mas há um mundo muito mais vasto e amplo do que você pode imaginar e aqui vou eu abordar muitas outras. No total, até o momento eu cataloguei por volta de 18 diferentes implementações de biblioteca C.
Eu não pretendo seguir na mesma ordem que está descrita no artigo e sim na minha própria ordem; basicamente, a ordem que eu conheci ou de forma que eu considero mais coerente de explicar.
De autoria de Roland McGrath e graças aos esforços de vários projetos e empresas que a mantem para que possam utilizá-la no Linux, é uma biblioteca absolutamente completa e possui suporte a quase todas as arquiteturas. Uma observação muito interessante feita no site:
"Ela não é escrita com nada além do Linux em mente, tornando-a um port difícil."
Sim, apesar de a glibc ser uma biblioteca do projeto GNU, tecnicamente a glibc é uma biblioteca do Linux. Isso ocorreu porque no inicio dos anos 90 os desenvolvedores de Linux perceberam que glibc carecia de muitos recursos necessários para Linux e assim eles criaram um fork da versão 1.x que foi nomeada simplesmente libc e que conhecemos como libc4 que foi a ultima com suporte ao padrão a.out, a libc5 (/lib/libc.so.5 a primeira a ter suporte ao padrão ELF no lugar do a.out. Há algumas fontes que afiram que havia código da bibliotecas C do 4.4BSD, mas o link do projeto gnu não está mais disponível) e libc6 (/lib/libc.so.6) e foram o padrão nas distribuições Linux durante um bom tempo. A glibc 2.0 surgiu da libc6 e com o tempo, por uma questão de padronização, as distribuições voltaram a utilizar a glibc. Mais informações da libc5 e libc6 podem ser lidos clicando aqui. Já para saber mais sobre libc4, libc5 e libc6 consulte a manpage (man 7 libc).
Houve também a Eglibc que foi uma variante da glibc fortemente focada em embarcados e com uma série opções e de suporte a arquiteturas que a glibc não possuía (especialmente PowerPC). A Eglibc foi a biblioteca padrão do Debian 5 e possuía suporte de um consorcio. O código da Eglibc foi fundido ao código da glibc na versão 2.20.
No final das contas a GlibC se beneficiou muito do Linux assim como quase todas as ferramentas do projeto GNU. É difícil prever a linha do tempo das ferramentas GNU sem o Linux.
Uma das grandes desvantagens da glibc podemos mencionar é o fato de gerar binários muito grandes. no artigo Analisando 6 diferentes implementações do comando sed eu descrevo uma curiosidade relatada por Rob Landley que, um simples código "hello World" linkado estaticamente à glibc, gera um binário de 400k... Não é a toa que os desenvolvedores de embarcados se declaram inimigos mortais da glibc.
E a outra desvantagem é estar sob a licença GPL que está em decadência desde 2007por ser uma licença muito restritiva (até hoje não entendo o conceito de liberdade em algo tão restritivo. Algo totalmente incoerente).A criação da GPLv3 foi uma corda no pescoço da licença e já houveram planos no passado para migra a glibc para a terceira versão. Ainda bem que isso não ocorreu pois geraria um grande colapso nos projetos.
uClibc (pronuncia-se yew-see-lib-see) é uma biblioteca para Linux em embarcados no projeto µClinux. Bem menor do que a glibc porém com suporte a quase todas as suas aplicações e quase todas as arquiteturas (alpha, amd64, ARM, Blackfin, cris, h8300, hppa, i386, i960, ia64, m68k, mips/mipsel, PowerPC, SH, SPARC e v850).
Foi escrita do zero por Erik Andersen, ex mantenedor do Busybox (que passou a bola para Rob Landley, autor do terminal de comandos toybox), iniciando em 1999 tendo apenas algumas partes de código derivados da glibc como pthreads (threads do Linux, o mesmo recurso que querem fazer uso dentro do sistema operacional RTOS X5) e o suporte a números randomicos.
O uClibc foi descontinuada por volta de 2012 e criaram um fork chamado uClibc-ng. Aé aonde se sabe, existem poucos mantenedores da uClibc-ng, ou talvez somente um, sob o argumento que é a única que possui suporte a algumas plataformas de hardware antigos.
Musl já apareceu várias vezes tanto aqui no blog quanto no canal. É construída sobre a API do Linux e a API POSIX e tem como princípios a simplicidade, eficiência de recursos, atenção em correções, segurança sob exaustão de recurso, fácil deploy e suporte de primeira classe para textos UTF-8/multilingual. A musl permite gerar binários menores (mesmo linkados estaticamente) e rápidos. Rich Felker criou o conceito Quality Safe Code; o que leva a biblioteca a ser correta no quesito conformidade e segurança.
Com o fim da uClibc e depois de ter péssima experiência com programas linkados a outras bibliotecas (seja de forma dinâmica ou estática) que apresentaram falhas, Rich Felker desenvolveu a musl como uma alternativa a glibc e a Uclibc para oferecer melhor experiência no uso de aplicações linkadas estaticamente (tanto no conceito de segurança quanto eficiência) em embarcados, servidores de desktops.
Inicialmente esteve sob a licença GPL porém, depois de conversa com Rob Landley (autor do toybox) passou a disponibilizar a musl sob a licença MIT. Hoje a musl é utilizada como padrão nas distribuições Alpine Linux que é inclusive utilizada nas imagens Docker; Adelie Linux que é baseada no Gentoo Linux e eu pretendo fazer um vídeo de Os vários Sabores de Linux; Void Linux que foi criada para implementar os gerenciador de pacotes xbps (haja coragem); Alpaquita Linux criada pela empresa Bell soft para a execução de aplicações Java; Glaucus Linux que, diferente da distribuição Alpine Linux, faz uso do toybox como userspace ao invés do busybox (tive a honra de receber seu autor no meu canal) e há planos para a sua adoção no Debian e no Android.
Possui em torno de 1200 funções além de todo um conjunto de funções matemática e de printf, porém ainda faltam system calls para serem implementadas. Natanael Copa, autor da distribuição Alpine Linux descreve em sua palestra o que é necessário para substituir a glibc pela musl. Foi a primeira biblioteca a adotar mutexes safe que o pessoal considera incrível, condvars e a primeira a ter working thread cancellation sem race conditions (todos recursos que foram ignorados por outras implementações).
De autoria do alemão Felix von Leitner, foi criada com foco em otimização de tamanho dos binários assim como a musl e cumpre muito bem esse papel. Eu mesmo já fiz analises tanto no canal quanto aqui no blog compilando o embutils, o minised e o init systemrunit e os resultados de sua otimização de binários são surpreendentes. Há um vídeo no meu canal onde relato a sua história e recursos interessantes.
skalibs é um pacote que centraliza bibliotecas C pequenas e seguras utilizadas para a construção de todos programas da skarnet.org. A ideia é não ter que baixar e compilar bibliotecas grandes e se preocupar com problemas de portabilidade. skalibs está sob a licença ISC e pode ser baixada através do comando
Newlib é uma biblioteca fortemente focada em embarcado. Alias, essa é uma das bibliotecas mais amada pelos desenvolvedores de embarcados. É utilizado até mesmo pelos amantes de Dreamcast (e eu não gosto, né). Ela conglomera várias partes de biblioteca sob licenças open-source. e em seu site oficial só é disponibilizada na forma de código fonte.
Possui suporte a mais ou menos 400 funções e requer threading. Nesse embalo surge a Relibc.
relibc é uma biblioteca C POSIX escrita em Rust. De origem do sistema operacional redoxOS e possui port para Linux. Foi desenvolvida para ser uma alternativa a newlib (por isso coloquei nessa ordem) no RedoxOS e também possuir suporte a system calls do Linux (se system calls Linux tem muito bem) por meio do sc crate.
Bionic é a principal biblioteca do Android; foi construída com porões de bibliotecas do NetBSD, do OpenBSD, porções de bibliotecas de FreeBSD e partes próprias. Está sob a licença BSD para evitar os conflitos que vem ocorrendo com a GPL; existe até uma política do Android de não haver programas sob GPL no user space do Android.
Possui suporte a arquiteturas ARM e depois foi estendida a x86 além de suporte a interfaces do kernel Linux. existem algumas limitações como não possuir suporte a locales (até aonde me lembro, a musl também não possui quando tentei compilar o htop que descobri isso), a libthread_db ou libm e possui sua propria implementação pthreads baseada nos futexes do Linux. Existe um relato do Rob Landley que para poder executar o X11 no Android, seria necessário reescrever várias parte do X11 para ser compatível com a Bionic.
olibc (Another C Library optimized for Embedded Linux) derivada da bionic, o objetivo da olibc é fundir as melhorias feitas por várias empresas de SoC como a Qualcomm, Texas Instruments, Linaro, etc. A olibc pode se beneficiar de recursos do ARMv7 como NEON, Thumb-2, VFPv3/VFPv4 e as ultimas otimizações de recentes versões dos compiladores.
PDCLib (ou The Public Domain C Library) visa fornecer uma implementação completa do padrão C99 (nada mais, nada menos do que definido no ISO/IEC 9899. Nem mesmo outras extensões como POSIX) sob a licença CC0 ("No rights reserved").
Foi desenvolvida originalmente por Martin “Solar” Baute em 2002 e depois de 10 anos, Erin Shepherd assumiu o desenvolvimento até 2018 que implementou muitos recursos significativos (o currículo da Erin é incrível). Em 2018, Martin retornou ao desenvolvimento da PDClib.
Não confunda PDCLIB (The Public Domain C Library visto anteriormente) com a PDPCLIB (Public Domain Project C Library. Um P a mais e pode confundir dois projetos). Essa biblioteca faz parte do projeto PDOS (Public Domain Operating System) que se trata (digamos) de um clone antigo MSDOS. (mas com suporte tanto a 32 bits do Windows e do MSDOS. Há uma de suas distribuições com suporte a API MVS API em AMODE de 24, 31, 32 e 64 bit).
A PDPCLIB é biblioteca do PDOS que visa ser uma biblioteca C que visa junto ao GCCMVS (um port do GCC para mainframes da IBM) produzir binários sem restrições devido a sua licença (domínio público). A PDPCLIB segue os padrões da ISO/IEC 9899:1990 (aka ANSI X3.159-1989 aka C90 aka C89) e funciona não somente no MSDOS, no Win32 e no PDOS/386 mas também no OS/2, MVS (mainframe), CMS, VSE e AmigaOS.
Escrita em C++, mlibc tem como foco ser totalmente portável e na modularidade. mlibc possui uma variedade de recursos POSIX/Linux/ANSI e é capaz de executar vários programas como Weston, GCC, LLVM, Bash, GTK2/3 e muitos outros mas sem perder o foco na portabilidade (assumindo poucas systemcalls do sistema operacional hospedeiro). Está sob a licença MIT.
Como o próprio nome já menciona, é focada em ser escrita totalmente na implementação do padrão C11 (ISO/IEC 9899:2011) e nada mais. Está sob a licença unlicense (public domain), teve seu inicio em 2014 porém seu desenvolvimento anda bem parado. Seu antigo site (http://libc11.org/) está fora do ar, mas existem alguns repositórios git que podem ser encontrados.
Na computação, klibc é um subconjunto minimalista da biblioteca C padrão desenvolvida por H. Peter Anvin. Ele foi desenvolvido principalmente para ser usado durante o processo de inicialização do Linux e faz parte do espaço inicial do usuário, ou seja, componentes usados durante a inicialização do kernel, mas que não são executados no modo kernel.
Essa é uma biblioteca do kernel Linux. Foi adicionada ao kernel 5.0 no commit 66b6f755ad45como umabiblioteca mínima que fornece emulação de baixo nível quando o Linux for inicializado somente para executar um único e minúsculo programa.
Foi criado por Paul McKenney ao trabalhar para reduzir o tamanho do initrd (que é de 40MB) e do initramfs (que é 10MB) gerados pelo comando mkinitramfs e pelo dracut onde a maioria das coisas eram inúteis. Assim, eliminando o que não era necessário para o dash (e a maioria eram coisas relacionadas a biblioteca), Paul conseguiu reduzir para ~2MB.
Neatlibc foi desenvolvida pelo iraniano Ali Gholami Rudi para focar principalmente em bootstrapping de seu compilador neatcc. a neatlibc possui suporte as arquiteturas x86, x86_64, ARM de 32 bits; há muitas funções que não são implementadas na neatlibc mas a maioria dos programas desenvolvidos por Ali (http://litcave.rudi.ir/) podem ser compilados com o neatcc e linkados a neatlibc.
Escrita do zero para o sistema operacional Sortix OS, foi implementada grandes partes do padrão POSIX que permite ter suporte a ~70 partes de software de terceiros.
Libslack é uma pequena biblioteca de utilidades gerais que foi projetada com uma coleção de módulos e várias funcionalidades para torar a programação no UNIX/C um pouco mais fácil. A principio foi implementada para ser parte do programa daemon embora alguns códigos datam de antes do do daemon. A libslack possui vários recursos que podem ser conferidos clicando aqui. Está sob a licença GPLv3 e disponível para Linux, Solaris/OpenSolaris,OpenBSD, FreeBSD, NetBSD, MacOSX/macOS, kFreeBSD e GNU/Hurd.
MyOS libc
E por ultimo temos a myOS libc que resumidamente seria você mesmo desenvolver sua própria biblioteca C. A ideia é servir como uma das soluções mais óbvias implementando os recursos personalizados que precisa a seu kernel e ao resto do sistema operacional sem camadas de portabilidade. Outra parte interessante seria a melhor integração com funcionalidades do seu hardware.
O artigo não inclui o link para o desenvolvimento da biblioteca, então eu resolvi adicionar por conta própria.
minised é uma versão menor e melhor do que o tradicional sed que conhecemos. Antes que haja choro e ranger de dentes, afirmando que estou falando mal do GNU, o minised era utilizado pelo próprio GNU até que eles resolveram criar sua própria versão baseado em um pacote de regexp (que eu duvido que eles vão ter coragem de assumir isso).
Comparado ao GNU sed, minised possui um terço do seu tamanho.
Mesmo compilado estaticamente com a diet libc, o binário do minised manteve-se pequeno aumentando apenas 4k.
O terminal de comandos toybox também proporciona sua própria versão de sed que, se compilado separadamente, também é tão pequeno quanto o minised porém possuindo muito mais recursos que o GNU sed (digite toybox sed --help e compare com o GNU sed).
O minised foi desenvolvido por Erick Raymond (autor do livro A Catedral e o Bazar já mencionado várias vezes por mim e é um ótimo livro, diga-se de passagem) e René Rebe que também possui um longo portfólio (iniciando em 1997). Além do projeto GNU, o minised é a versão padrão de sed do sistema operacional Minix, utilizado em projetos embarcados da ExactCode e na distribuição da T2_SDE (inclusive fundado por René Rebe)
Comparado ao GNU sed, o minised conclui operações em menos tempo e utilizando menos recurso de hardware. O resultado pode ser conferido no vídeo a seguir.
O desempenho do toybox sed também fica dentro dos padrões de desempenho do minised.
Após a ExactCODE buscar por uma implementação do comando sed que pudesse ser utilizada em embarcados e que fosse compatível com à diet libc, a empresa alemã acabou descobrindo o minised que, mesmo não recebendo mais suporte há um bom tempo e contendo vários bugs, ainda assim o minised se apresentou ser melhor do que o GNU sed em certos casos, o que levou a empresa se tornar mantenedora oficial do minised realizando correcções, limpezas, melhorias, adicionando recursos que faltavam e conformidades POSIX (espero que a ExactCODE passe a manter a diet libc também :).
O minised esteve sob a licença GPL desde a versão 1.3 passando a ser regido sob a licença BSD a partir da versão 1.14 estando Erick Raymond de acordo com a migração. A versão atual do minised é a 1.16 e de acordo com as notas de lançamento, parece que a versão 1.17 já está para ser lançada (o trabalho pode ser acompanhado clicando aqui). Além da versão do toybox, os pacotes 9base (conjunto de comandos do sistema operacional Plan9 portado para outros sistemas operacionais) e sbase (conjunto de comandos do Unix portado para outros Unix) também possuem suas próprias versões do comando sed. Tenham em mente que sempre há uma variedade de versões dos mesmos recursos disponíveis para Linux. Não se limitem á uma única fonte de recurso; sempre busque as que melhor adequam as suas necessidades.