В списке рассылки uClibc Рич Фелкер (Rich Felker) объявил о первом публичном выпуске musl — новой реализации библиотек общего назначения языка C. Основные отличия от существующих решений:
- В отличие от glibc, musl легче и конструктивно проще. Компиляция musl из исходных кодов на Intel Atom D510 занимает менее 40 секунд. Поддержка локалей ограничена UTF-8, что позволяет применять более прямые подходы и улучшает производительность. stdio также проще, меньше и, во многих случаях, ощутимо быстрее. В терминах big-O большинство используемых операций musl сопоставимы с glibc. При этом все алгоритмы более оптимальны по использованию памяти, в частности, многие операции, потенциально рискующие не завершиться из-за нехватки памяти в glibc, удачно сработают в musl, благодаря её более эффективному распределению O(1).
- В отличие от dietlibc, разработчики не стремятся урезать каждый возможный байт, жертвуя производительностью и корректностью. musl не пытается отвратить вас от использования stdio, тредов, регулярных выражений и т.д., а стремится сделать эти элементы эффективными (размер бинарников, потребление памяти в рантайме и производительность).
- В отличие от uClibc, musl имеет стабильное, хорошо определённое ABI. Особое внимание было уделено тому, чтобы не создавать лишних зависимостей между компонентами библиотеки, таким образом, при статической линковке будет использован только необходимый код.
- В отличие от Google Bioinc (Android libc), musl не жертвует совместимостью со стандартами ради уменьшения размера библиотеки и не основан на старом коде BSD.
- В отличие от всех вышеупомянутых реализаций, musl объединяет все стандартные функции в одну библиотеку (.a или .so), что значительно уменьшает время запуска, количество используемой памяти, упрощает процесс обновления и нивелирует риски несовпадения версий.
На данный момент musl реализует следующие стандарты:
- ISO C99;
- IEEE754;
- POSIX 2008 base;
- большую часть XSI и других из группы POSIX;
- никаких заметных усилий на поддержку устаревших SVID и BSD направлено не было.
Целевая аудитория:
- разработчики встраиваемых систем;
- разработчики легковесных дистрибутивов Linux;
- разработчики rescue disk;
- любой, кто хочет собрать статически слинкованный бинарник для безболезненной установки на любой ОС с ядром Linux;
- любой, чья программа может вызываться десятки или сотни тысяч раз в секунду и ей необходим минимальный оверхэд по времени старта и используемой памяти.
Текущий выпуск работает на платформе x86 с ядром Linux не старее 2.6 (список платформ будет увеличен в следующих релизах).
Полный набор .a имеет размер 160k, а .so — 220k. Подробную сравнительную таблицу возможностей musl и других реализаций можно посмотреть на сайте проекта.
>>> Подробности