This episode compares the two libcs Void Linux offers: glibc as the default choice with broad compatibility, and musl as a lightweight option with a small footprint. You will understand their implications for repositories, applications, runtime, and containers.

One of the most important decisions when installing Void Linux is choosing your libc: glibc or musl. Both are implementations of the standard C library — the layer that connects applications to the kernel. Episode 6 compares the two honestly: strengths, weaknesses, and when to choose which.
This decision isn't easy to reverse once the system is installed. You can't mix glibc and musl packages in one system, because both provide the same symbols in different ways. For that reason, understand the differences before choosing.
Let's dissect both libcs.
The libc provides the basic functions every program uses — opening files, memory allocation, networking, and threading. Without a libc, almost no program could run on top of the Linux kernel. Every program on your system is linked to a libc, either dynamically or statically.
Check which libc a particular program uses:
ldd /bin/ls | headThe output of ldd /bin/ls shows libc.so.6 on a glibc system, or libc.musl-x86_64.so.1 on a musl system.
glibc is the libc used by the majority of Linux distros. Its advantage is very broad compatibility: almost all software — including proprietary applications and prebuilt binaries — runs smoothly on top of it. glibc is also feature-rich, including full locale support, NSS (Name Service Switch), and mature threading.
Void provides the current repository for glibc with the most complete package set. For desktop users or users who need proprietary software, glibc is the safest choice.
glibc's weakness is its size and complexity. Its files are larger, and some of its extra behaviors aren't always needed on a minimal server. For systems that value a small footprint, glibc feels too heavy.
musl is a libc designed for simplicity and efficiency. It's smaller, loads faster, and has a narrower attack surface. musl also makes static compilation practical — a big advantage for containers and binary distribution. For those building minimal container images or single-binary applications, the combination of musl and static linking eliminates many cross-system compatibility problems.
du -sh /usr/lib/libc.so.6 2>/dev/null || du -sh /usr/lib/libc.musl-*On a musl system, the du -sh /usr/lib/libc.musl-* command shows musl's size, which is much smaller than glibc's.
Not all software supports musl. Some applications — especially proprietary ones or those relying on glibc-specific behavior — need adjustments or aren't available in the musl repository. Locale support is also more limited than glibc's.
Void manages one package template tree for both libcs. XBPS distinguishes repositories by arch and flavor:
current : glibc x86_64 (default)
current/musl : musl x86_64
current-musl : musl repo (multiarch)This policy means the same package is recompiled for each libc. Most packages in the repository are available for both, though some proprietary packages exist only in the glibc flavor.
musl is very popular for containers because of its small footprint. Many minimal Linux base images are built on musl. Another advantage: binaries compiled statically with musl can run on a glibc system and vice versa without issues.
There's no single right answer for everyone. This decision should be based on your main workload, not on trends. Also consider that switching flavors later means a reinstall, because glibc and musl packages can't be mixed. Use this guide:
The easiest way to know which flavor your running system uses:
xbps-query -l | head -n 1
cat /etc/os-release | grep MUSLIf the output includes MUSL=yes in /etc/os-release, your system uses musl. Without that line, the system uses glibc.
Episode 6 compared glibc and musl in depth: glibc excels in compatibility and features, while musl excels in small size and security. You also understood how Void manages both flavors in a single repository ecosystem and when to choose each.
Key takeaways:
In the next episode, episode 7, we will cover users, groups, network, and boot — creating users and groups with useradd, managing sudo and doas access via the wheel group, configuring static and dynamic networking, and understanding Void's boot flow from kernel to runit.