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)
musletdietlibcsont très légères et permettent de produire de petits exécutables (hellostatique : 13k contre 662k pour glibc).glibcest la plus lourde, avec une taille totale de.soatteignant 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
muslsignale clairement les échecs et les traite souvent sans arrêt anormal.glibcetuClibcpeuvent dans certains cas appeler abort en cas de manque de mémoire ou ne pas gérer correctement certaines exceptions.dietlibca 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/getcet les opérations liées auxthread.
5. Stabilité de l’ABI et compatibilité des versions
musletglibcoffrent une ABI stable et compatible, mais seuleglibcprend en charge la gestion des versions de symboles.dietlibcetuClibcsont globalement insuffisantes ou non officielles en matière de compatibilité ABI et de compatibilité entre versions.
6. Algorithmes et implémentation interne
musletglibcutilisent une recherche avancée de sous-chaînes (twoway), des expressions régulières basées sur DFA et des implémentations demallocorientées performance.dietlibcs’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
introsortetptmalloc.
7. Étendue de la prise en charge des fonctionnalités et des standards
glibcprend 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.muslimplémente les fonctionnalités essentielles tout en conservant une petite taille.dietlibcreste 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
muslprend 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.
dietlibcne prend en charge qu’un nombre minimal d’architectures et offre peu de portabilité et de flexibilité de build.
Aucun commentaire pour le moment.