17 puntos por baeba 2025-05-12 | Aún no hay comentarios. | Compartir por WhatsApp

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)

  • musl y dietlibc son muy ligeras y pueden generar ejecutables pequeños (hello estático: 13k frente a 662k en glibc).
  • glibc es la más pesada, con un tamaño total de .so de 7.9M, pero incluye muchas funciones como iconv.
  • uClibc fue probada con muchas funciones opcionales incluidas.

3. Respuesta ante situaciones de escasez de recursos

  • musl suele reportar los fallos con claridad y manejarlos sin terminar de forma anormal.
  • glibc y uClibc a veces hacen abort o no manejan correctamente las excepciones cuando falta memoria.
  • dietlibc tiene 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/getc y thread.

5. Estabilidad del ABI y compatibilidad entre versiones

  • musl y glibc ofrecen estabilidad y compatibilidad de ABI, pero solo glibc soporta versionado de símbolos.
  • dietlibc y uClibc en general son deficientes o no oficiales en compatibilidad de ABI y entre versiones.

6. Algoritmos e implementación interna

  • musl y glibc usan búsqueda avanzada de subcadenas (twoway), expresiones regulares basadas en DFA y malloc orientado al rendimiento.
  • dietlibc es 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

  • glibc soporta casi todas las funciones de C99/C11 y POSIX, y además ofrece amplio soporte para locales, iconv y depuración.
  • musl implementa las funciones esenciales cumpliendo los estándares y manteniendo un tamaño pequeño.
  • dietlibc tiene 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

  • musl ofrece 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.
  • dietlibc solo soporta un conjunto mínimo de arquitecturas y tiene menor portabilidad y flexibilidad de compilación.

Aún no hay comentarios.

Aún no hay comentarios.