17 pontos por baeba 2025-05-12 | Ainda não há comentários. | Compartilhar no WhatsApp

1. Visão geral e objetivo do projeto

A Eta Labs comparou implementações da biblioteca padrão C/POSIX para Linux com foco em funcionalidade e leveza ("bloat"). Os alvos da comparação são musl, uClibc, dietlibc e glibc, e futuramente também devem ser adicionadas bionic e outras libcs BSD.

2. Comparação de uso de memória e leveza (Bloat)

  • musl e dietlibc são muito leves e conseguem gerar executáveis pequenos (hello estático: 13k vs 662k do glibc).
  • glibc é a mais pesada, com tamanho total de .so chegando a 7.9M, mas inclui muitos recursos como iconv.
  • O uClibc foi testado com muitos recursos opcionais incluídos.

3. Resposta a situações de falta de recursos

  • musl frequentemente relata falhas com clareza e lida com elas sem encerramento anormal.
  • glibc e uClibc às vezes abortam em caso de falta de memória ou não conseguem tratar exceções corretamente.
  • dietlibc tem funcionalidades que simplesmente não foram implementadas ou cujo tratamento é muito fraco.

4. Comparação de desempenho

  • glibc apresenta o melhor desempenho em operações de memória (strchr, memset etc.) e em I/O (putc/getc).
  • musl mostra desempenho equilibrado e baixo overhead, sendo competitiva.
  • dietlibc é extremamente lenta em operações relacionadas a strstr, putc/getc e thread.

5. Estabilidade de ABI e compatibilidade de versões

  • musl e glibc oferecem estabilidade e compatibilidade de ABI, mas apenas a glibc oferece suporte a versionamento de símbolos.
  • dietlibc e uClibc, de modo geral, são insuficientes ou informais em compatibilidade de ABI e de versões.

6. Algoritmos e implementação interna

  • musl e glibc usam busca avançada de substring (twoway), expressões regulares baseadas em DFA e malloc voltado para desempenho.
  • dietlibc usa quicksort ingênuo e regex com backtracking, o que a torna frágil em desempenho e estabilidade.
  • Nos algoritmos de ordenação e alocação de memória, a glibc é mais sofisticada, com introsort, ptmalloc etc.

7. Escopo de suporte a recursos/padrões

  • glibc oferece suporte a quase todos os recursos de C99/C11 e POSIX, além de locale, iconv e até recursos de depuração.
  • musl implementa os recursos essenciais em conformidade com os padrões, mantendo tamanho pequeno.
  • dietlibc tem a maior parte dos recursos incompleta ou insuficiente, e sua compatibilidade com POSIX também é baixa.

8. Suporte a arquiteturas e ambientes de build

  • musl oferece amplo suporte às principais arquiteturas (x86, ARM, MIPS etc.) e considera até ambientes non-MMU.
  • glibc tradicionalmente oferece o suporte mais amplo e é amplamente distribuída.
  • dietlibc oferece suporte apenas ao mínimo de arquiteturas, com baixa portabilidade e pouca flexibilidade de build.

Ainda não há comentários.

Ainda não há comentários.