removido
(usa Nenhuma)
Enviado em 21/10/2017 - 13:26h
mithrandir escreveu:
Busybox
- um único binário multi-call por padrão;
- configuração feita a partir de um menu em dialog;
- otimizado para 'o tamanho';
- compatível com as 'opções longas' características do projeto GNU;
- inclui diversos softwares de outros projetos (debian, runit, selinux, util-linux, e2fsprogs, sysklod);
- dependências básicas: libc e sh POSIX, GNU Make e um compilador C (não achei referências a outros compiladores, mas funciona do tcc e gcc);
- saídas pouco verbosas
- construção da userland a partir de links simbólicos (e.g busybox ln -s /bin/busybox ln );
- não oferece man pages muito grandes e explicativas;
- extremamente pequeno (o pacote busybox-static do Alpine, com quase tudo 'ativado', tem aproximadamente 936KB);
1- O bom de um binario unico é que evita a repetição de codigo, resultando em um tamanho final ridiculamente menor.
4- Adicionar compatibilidade fora dos posix (que já tem coisa desnecessaria), ajuda a nascer scripts não portaveis.
Eu adicionaria o seguinte:
- Codigo de dificil leitura, entendimento e manutenção.
mithrandir escreveu:
Coreutils
- pode ser construído como um único binário ou em arquivos separados (ver configure);
- configuração feita a partir do script "configure" (opções, basicamente);
- compatível com 'opções curtas e longas';
- 'código original';
- dependências básicas: libc e sh POSIX, GNU Make e um compilador C (mesmo caso do busybox, testei com o gcc);
- saídas muito verbosas
- construção da userland a partir de binários separados e/ou links simbólicos;
- manpages gigantes e cheias de exemplos;
- extremamente grande (todas as aplicações, compiladas 'por padrão' e estaticamente linkadas, somam quase 45MB);
Coreutils é o exemplo perfeito de como não programar, codigo ilegivel, inchado e de dificil a impossivel manutenção. (deixarei comparações no final)
mithrandir escreveu:
Bem, essas foram algumas das diferenças que eu encontrei utilizando os dois softwares como userland. Atualmente utilizo o Busybox como userland e estou muito satisfeito.
Ficaria extremamente grato se os senhores falassem o que acham dos dois projetos, qual é o mais rentável, pontos relevantes, etc.
Qualquer erro, por favor, corrija-me.
Acredito que o Busybox seja infinitamente melhor que o Coreutils.
Tomarei a liberdade de adicionar outros projetos:
Sbase:
- compila tanto para binario unico quanto separados;
- configuração feita no config.mk (arquivo de texto);
- codigo portavel, limpo, legivel;
- compatível, em boa parte, com os argumentos definidos pelo posix-2016 (opções curtas);
- dependências básicas: libc, make e um compilador C com compatibilidade c99;
- erros que apontam qual chamada falhou, facilitando a manutenção.
- caso compilado em binario unico, construção da userland a partir de links simbólicos (e.g ln -s sbase ln);
- manpages simples;
- extremamente pequeno (o sbase compilado de forma estatica com o "ellcc" possui 431K);
UtilChest: (aproveitar a oportunidade para divulgar o meu projeto : ) )
- incompleto
- segundo o coverity sem bugs (os apontados pelo mesmo são falsos positivos);
- compila tanto para binario unico quanto separados;
- compilação feita no config.mk (arquivo de texto);
- codigo portavel, limpo e legivel;
- bem compatível com o padrão posix (opções curtas);
- dependências básicas: libc, make e um compilador C com compatibilidade c99;
- erros apontam a chamada que falhou, usando os erros definidos em "errno" (sempre que possivel);
- caso compilado em binario unico, construção da userland a partir de links simbólicos (e.g ln -s utilchest ln);
- falta manpages no momento;
- extremamente pequeno (o utilchest compilado de forma estatica com o "ellcc" possui 77K);
E adicionarei algumas comparações:
CoreUtils ls: 5300 linhas (https://git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c)
BusyBox ls: 1250 linhas (https://git.busybox.net/busybox/tree/coreutils/ls.c?h=1_27_stable)
Sbase ls: 486 linhas (
https://git.suckless.org/sbase/tree/ls.c)
*sbase ls: da realloc ao invez de usar uma lista linkada, e falta as flags para organizar o output.
UtilChest ls: 767 linhas (
https://github.com/eltanin-os/utilchest/blob/master/src/ls.c)
sbase:
https://git.suckless.org/sbase
utilchest:
https://github.com/eltanin-os/utilchest