После трёх лет разработки представлен первый значительный релиз новой стандартной Си-библиотеки Musl 1.0.0 (libc), ориентированной для использования в Linux-устройствах нового поколения. Библиотека отличается небольшим размером, высокой производительностью, безопасностью, простотой и соблюдением стандартов. Автором проекта является Рич Фелкер (Rich Felker), участник проекта Openwall и член группы Austin Group, развивающей и поддерживающей стандарты POSIX. Код Musl поставляется под свободной лицензией MIT, допускающей использование библиотеки в закрытых проектах.

Musl является универсальной реализацией libc и подходит для применения как на стационарных ПК и серверах, так и на мобильных системах, сочетая полноценную поддержку стандартов, свойственную для полновесных библиотек, таких как Glibc (GNU C library), с небольшим размером, низким потреблением ресурсов и высокой производительностью, свойственными специализированным вариантам libc для встраиваемых систем, таких как uClibc, dietlibc и Android Bionic. Musl предоставляет полную поддержку всех обязательных интерфейсов C99 и POSIX 2008, а также частично C11 и набор расширений, получивших распространение в Linux-окружениях. В том числе библиотека предоставляет средства для многопоточного программирования (POSIX threads), управления памятью и работы с локалями.

Проект Musl старается придерживаться совместимости с Glibc в части функциональности, как на бинарном уровне, так и на уровне исходных текстов. При этом, Musl не ставит перед собой цель обеспечения совместимости с Glibc на уровне ошибок, идущих вразрез со стандартами. На уровне исходных текстов обеспечена достаточно неплохая совместимость с Glibc. На бинарном уровне совместимость ещё оставляет желать лучшего - хотя уже можно загружать при использовании musl некоторые динамические библиотеки, собранные с Glibc, запуск приложений при замене /lib/ld-linux.so.2 на musl пока не поддерживается.

Что касается несовместимости на уровне кода, если работающее с Glibc приложение не удаётся собрать с Musl, то, как правило, проблемы вызваны ошибками при формировании списка директив include, указанием нестандартных элементов (например, __pid_t вместо pid_t) или использованием программных интерфейсов, пока не доступных в musl. Из возможностей Musl, которые отсутствуют в Glibc, можно отметить поддержку атомарного обновления, обеспечение совместимости с будущими версиями (Forward compatibility), поддержку TCB. В настоящее время сборка с Musl успешно протестирована на более чем 5000 пакетах из архива pkgsrc.

Musl поддерживает работу только в Linux и может работать с ядрами Linux, начиная с выпуска 2.6.39. Официально поддерживаются следующие архитектуры: i386, x86_64, ARM (armv4t и новее), MIPS, PowerPC и Microblaze. Экспериментальная поддержка обеспечена для SuperH (SH) и x32. Из компиляторов поддерживаются GCC 3.4.6+, Clang 3.2+, PCC 1.1.0+ и CParser/firm. При статическом связывании все компоненты Musl занимают примерно 400 Кб, при динамическом - 500 Кб (для сравнения в Glibc 1.5 Мб и 2 Мб). Минимальный размер статически собранной программы составляет 1.8 Кб, Hello World - 13k (в Glibc - 508 Кб), при динамическом связывании прибавляется 20 Кб. По производительности, Musl в основном близка к Glibc, за исключением операций динамического связывания и декодирования UTF-8, которые выполняются в Musl быстрее в несколько раз.

На базе Musl уже развивается несколько дистрибутивов Linux, среди которых проекты OSv, Sabotage, LightCube OS, starchlinux, morpheus и Snowflake. Musl также применяется в компиляторе Emscripten, используемом для преобразования C/C++ проектов в представление на JavaScript. Из известных дистрибутивов, в которых обеспечена опциональная поддержка Musl, можно отметить Debian, Ubuntu, OpenWrt, Gentoo и Arch Linux. Среди дистрибутивов, планирующих переход по умолчанию на Musl: Aboriginal, Alpine и Dragora.

Источник: http://www.opennet.ru/opennews/art.shtml?num=39365