17 points par baeba 2025-05-12 | Aucun commentaire pour le moment. | Partager sur WhatsApp

1. Aperçu du projet et objectif

Eta Labs a comparé les implémentations de la bibliothèque standard C/POSIX pour Linux en se concentrant sur les fonctionnalités et la légèreté (« bloat »). Les éléments comparés sont musl, uClibc, dietlibc et glibc, avec l’ajout prévu à l’avenir de bionic et des libc BSD.

2. Comparaison de l’utilisation mémoire et de la légèreté (Bloat)

  • musl et dietlibc sont très légères et permettent de produire de petits exécutables (hello statique : 13k contre 662k pour glibc).
  • glibc est la plus lourde, avec une taille totale de .so atteignant 7.9M, mais elle inclut de nombreuses fonctionnalités comme iconv.
  • uClibc a été testée avec de nombreuses fonctionnalités optionnelles activées.

3. Gestion des situations de pénurie de ressources

  • musl signale clairement les échecs et les traite souvent sans arrêt anormal.
  • glibc et uClibc peuvent dans certains cas appeler abort en cas de manque de mémoire ou ne pas gérer correctement certaines exceptions.
  • dietlibc a certaines fonctionnalités non implémentées, ou seulement avec un niveau de prise en charge très limité.

4. Comparaison des performances

  • glibc offre les meilleures performances pour les opérations mémoire (strchr, memset, etc.) et les E/S (putc/getc).
  • musl présente des performances équilibrées et un faible overhead, ce qui la rend compétitive.
  • dietlibc est extrêmement lente pour strstr, putc/getc et les opérations liées aux thread.

5. Stabilité de l’ABI et compatibilité des versions

  • musl et glibc offrent une ABI stable et compatible, mais seule glibc prend en charge la gestion des versions de symboles.
  • dietlibc et uClibc sont globalement insuffisantes ou non officielles en matière de compatibilité ABI et de compatibilité entre versions.

6. Algorithmes et implémentation interne

  • musl et glibc utilisent une recherche avancée de sous-chaînes (twoway), des expressions régulières basées sur DFA et des implémentations de malloc orientées performance.
  • dietlibc s’appuie sur un quicksort naïf et des regex à backtracking, ce qui la fragilise en performances et en stabilité.
  • Pour le tri et l’allocation mémoire, glibc utilise des approches avancées comme introsort et ptmalloc.

7. Étendue de la prise en charge des fonctionnalités et des standards

  • glibc prend en charge presque toutes les fonctionnalités de C99/C11 et POSIX, avec en plus un support étendu des locales, d’iconv et de fonctions de débogage.
  • musl implémente les fonctionnalités essentielles tout en conservant une petite taille.
  • dietlibc reste incomplète ou insuffisante sur la plupart des fonctionnalités, avec une faible compatibilité POSIX.

8. Prise en charge des architectures et des environnements de build

  • musl prend largement en charge la plupart des grandes architectures (x86, ARM, MIPS, etc.) et tient compte des environnements non-MMU.
  • glibc offre traditionnellement la prise en charge la plus large et bénéficie d’une diffusion étendue.
  • dietlibc ne prend en charge qu’un nombre minimal d’architectures et offre peu de portabilité et de flexibilité de build.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.