Musl, pronounced such as the term “mussel” or “muscle”, is definitely a “libc”, an implementation of the conventional library features outlined into the ISO C and POSIX guidelines, plus typical plug-ins, constructed on the surface of the Linux method refers to API.

Whilst the kernel controls usage of electronics, memory, filesystems, and the rights for being able to access these resources, libc is in charge of:

creating C bindings towards OS interfaces

making higher-level buffered stdio, storage allotment management, thread manufacturing and synchronisation activity, discussed collection loading, etc . utilising the lower-level connects the kernel offers

implementing the 100 % pure selection regimens for the C code like strstr , snprintf , strtol , exp , sqrt , etc.

musl provides background and development sources returning to 2005, but ended up being known as and 1st launched as musl in 2011, as an option to glibc and uClibc with a serious objective to satisfy the requirements of both tiny embedded devices and common personal desktop computers and hosts.

Since 2012, musl happens to be licensed beneath the permissive MIT permission.

Trick Principles


The simpler signal are, the little area it offers for bugs, plus the cheaper its to produce key updates if they’re required. Ease-of-use can result the natural way to best laws size and reasonably-good abilities. musl prefers easy formulas over more complex data unless there is a compelling explanation to try to do if not. musl furthermore favors lessening abstractions, trying to keep rule as self-contained/uncoupled as you are able to. This tends to make it readable (although in some cases thick) and size-efficient whenever static-linked.

Source results

Scaling better “as n would go to 0” can make a difference just as much or even more than scaling “as n goes to ?”. Design for this process started with inserted and low-end desktops in your head, but wound up carrying musl (and similar distributions) to prominence in the containers implementation revolution.

With shortage of heavier internal coupling between libc elements, fixed linking with musl brings in hardly any code that application is not really using. Minimum static-linked binaries might end up being under 10 kB of rule, even with threads, or of use services can be under 50 kB.

The idea of lower continuous cost is applicable to runtime reference consumption and. libc’s personal worldwide data dimensions are stored as small as conceivable – under 8k, and potentially significantly less as soon as fixed connecting. For dynamic linking, all features is in one particular common library file (without becoming split across libm , libpthread , librt , etc.) to make sure that there’s certainly no per-component memory space and startup time overhead.

A part of musl’s scaling “as n visits 0” could be the capability to run using little piles, generating brands regarding a lot of posts practical even in resource-constrained settings.

Awareness to correctness

musl would be the best Linux libc having mutexes safe inside reference-counted pieces, the first one to have got condvars where newly-arrived waiters can’t rob get activities from preceding waiters, together with the 1st having doing work line cancellation without group situations making resource-leak or double-close. All of these tends to be needs of the specs that have been disregarded by some other implementations, and getting these people best ended up being due to careful learning of these requirements.

musl’s entire improvement historical past is an activity of reading through criteria, getting clarifications once corner cases are not acceptably discussed, and continuing with extreme caution as soon as employing function that is definitely underspecified.

Protection under reference tiredness

Aspect of correctness will never be in for an awful scenario without way out. musl always reserves sources for an operation before committing to it, supporting out and about if guides usually are not offered. Low-memory and other source tiredness circumstances will never be critical; they are usually captured (assuming a no-overcommit program setting) at a time just where they could be said, permitting the application form to address them the way it deems compliment.

Generally, musl stays clear of unwanted powerful allowance, and has no powerful allowance at all in code routes where reporting breakdown towards caller will never be a chance.

Easy deployment

musl’s MIT permission works with all FOSS permits, static-linking-friendly, and produces industrial make use of pain-free. Binaries statically associated with musl have zero outside dependencies, even for specifications like DNS lookups or fictional character established sales conversions which are put in place with powerful load on glibc. A credit card applicatoin may become deployed as one binary document and operate on any maker on your right coaching adjust structures and Linux kernel or Linux syscall ABI emulation film.

Superior help for UTF-8/multilingual words

From before musl would be musl, treating all phrases as UTF-8, and remedy for non-ASCII people as superior, am a main needs. No exterior location files or sales modules are needed to undertaking UTF-8 or query belongings of arbitrary Unicode figures. Even musl’s getopt brings haphazard Unicode characters used as choice.

DNS help for non-ASCII domain names (IDN) is not at all full yet but is going to be recognized later.

Localization functionality, an associated but different count, can presently restricted but scheduled for significant improvements.

Getting going

On your musl-gcc (or musl-clang ) wrapper shipped with musl starting point, it is also possible on x86 Linux alongside famous archs to judge musl and construct straightforward C applications by repurposing your system’s active glibc-based toolchain. For much more advanced application involving libraries or C++, however, a passionate cross toolchain or structure in a musl-based circulation is usually recommended. Information can be found the society wiki’s Making an actual start page.