1. Resumen y propósito del proyecto
Eta Labs comparó implementaciones de la biblioteca estándar C/POSIX para Linux centrándose en funcionalidad y ligereza ("bloat"). Los objetos de comparación son musl, uClibc, dietlibc y glibc, y en el futuro se planea añadir también bionic y las libc de BSD.
2. Comparación de uso de memoria y ligereza (Bloat)
muslydietlibcson muy ligeras y pueden generar ejecutables pequeños (hello estático: 13k frente a 662k en glibc).glibces la más pesada, con un tamaño total de.sode 7.9M, pero incluye muchas funciones como iconv.- uClibc fue probada con muchas funciones opcionales incluidas.
3. Respuesta ante situaciones de escasez de recursos
muslsuele reportar los fallos con claridad y manejarlos sin terminar de forma anormal.glibcyuClibca veces hacen abort o no manejan correctamente las excepciones cuando falta memoria.dietlibctiene funciones que directamente no están implementadas o cuyo manejo es muy limitado.
4. Comparación de rendimiento
- glibc muestra el mejor rendimiento en operaciones de memoria (
strchr,memset, etc.) y en I/O (putc/getc). - musl ofrece un rendimiento equilibrado y bajo overhead, por lo que resulta competitiva.
- dietlibc es abrumadoramente lenta en operaciones relacionadas con
strstr,putc/getcythread.
5. Estabilidad del ABI y compatibilidad entre versiones
muslyglibcofrecen estabilidad y compatibilidad de ABI, pero sologlibcsoporta versionado de símbolos.dietlibcyuClibcen general son deficientes o no oficiales en compatibilidad de ABI y entre versiones.
6. Algoritmos e implementación interna
muslyglibcusan búsqueda avanzada de subcadenas (twoway), expresiones regulares basadas en DFA y malloc orientado al rendimiento.dietlibces más débil en rendimiento y estabilidad por usar naive quicksort y regex con backtracking.- En algoritmos de ordenamiento y asignación de memoria, glibc está más avanzada con
introsort,ptmalloc, etc.
7. Alcance de funciones/estándares soportados
glibcsoporta casi todas las funciones de C99/C11 y POSIX, y además ofrece amplio soporte para locales, iconv y depuración.muslimplementa las funciones esenciales cumpliendo los estándares y manteniendo un tamaño pequeño.dietlibctiene la mayoría de sus funciones incompletas o insuficientes, y su compatibilidad con POSIX es baja.
8. Soporte de arquitecturas y entornos de compilación
muslofrece amplio soporte para la mayoría de las arquitecturas principales (x86, ARM, MIPS, etc.) e incluso contempla entornos non-MMU.- glibc tradicionalmente brinda el soporte más amplio y está distribuida extensamente.
dietlibcsolo soporta un conjunto mínimo de arquitecturas y tiene menor portabilidad y flexibilidad de compilación.
Aún no hay comentarios.