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)
musledietlibcsã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.sochegando 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
muslfrequentemente relata falhas com clareza e lida com elas sem encerramento anormal.glibceuClibcàs vezes abortam em caso de falta de memória ou não conseguem tratar exceções corretamente.dietlibctem 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,memsetetc.) 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/getcethread.
5. Estabilidade de ABI e compatibilidade de versões
musleglibcoferecem estabilidade e compatibilidade de ABI, mas apenas aglibcoferece suporte a versionamento de símbolos.dietlibceuClibc, de modo geral, são insuficientes ou informais em compatibilidade de ABI e de versões.
6. Algoritmos e implementação interna
musleglibcusam busca avançada de substring (twoway), expressões regulares baseadas em DFA e malloc voltado para desempenho.dietlibcusa 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,ptmallocetc.
7. Escopo de suporte a recursos/padrões
glibcoferece suporte a quase todos os recursos de C99/C11 e POSIX, além de locale, iconv e até recursos de depuração.muslimplementa os recursos essenciais em conformidade com os padrões, mantendo tamanho pequeno.dietlibctem a maior parte dos recursos incompleta ou insuficiente, e sua compatibilidade com POSIX também é baixa.
8. Suporte a arquiteturas e ambientes de build
musloferece 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.
dietlibcoferece suporte apenas ao mínimo de arquiteturas, com baixa portabilidade e pouca flexibilidade de build.
Ainda não há comentários.