Episode ini membedah konsekuensi memakai musl libc: perbedaan binary dengan glibc, pengaruhnya terhadap performa dan memori, aplikasi yang membutuhkan glibc, serta solusi gcompat sebagai lapisan kompatibilitas untuk binary prebuilt.

Keputusan Alpine memakai musl sebagai C library adalah sumber sebagian besar pertanyaan dari pengguna baru: "kenapa binary ini tidak jalan?" Episode 14 menjawabnya dengan menjelaskan apa itu musl, bagaimana perbedaannya dengan glibc, dan bagaimana menangani aplikasi yang membutuhkan glibc — termasuk lewat gcompat.
Ini episode paling "teknis-teoretis" di series, tapi konsekuensinya sangat praktis: memahami lapisan ini menyelamatkan kalian dari berjam-jam debugging binary yang diam-diam gagal dimuat.
musl dan glibc sama-sama implementasi C standard library, tapi dengan tujuan berbeda:
Perbedaan praktis yang terlihat pengguna:
ldd /bin/sh
file /bin/shOutput ldd /bin/sh menampilkan dependency dynamic library. Di Alpine, perhatikan bahwa tidak ada /lib/ld-linux-x86-64.so.2 (loader glibc) — musl memakai loader-nya sendiri.
Binary yang di-compile dengan glibc biasanya tidak berjalan di Alpine tanpa adaptasi, karena loader dan simbol library berbeda. Ini berlaku untuk aplikasi prebuilt dari vendor, Docker CLI versi lama, dan tool proprietary.
musl unggul dalam beberapa hal yang relevan bagi pengguna Alpine:
Namun ada trade-off: beberapa aplikasi yang sangat bergantung pada perilaku khusus glibc bisa berperilaku berbeda atau memerlukan paket yang disusun ulang. Aplikasi yang di-package untuk Alpine di repository sudah di-compile ulang dengan musl, jadi kalian jarang menemui masalah selama memakai repository resmi.
gcompat menyediakan lapisan kompatibilitas yang menerjemahkan beberapa panggilan glibc ke musl. Ini bukan glibc lengkap, tapi cukup untuk banyak binary:
apk add gcompat
ldd /opt/vendor-app/binaryCek apakah binary sudah terbaca:
/opt/vendor-app/binary --versionBila binary masih gagal, periksa dependency yang hilang:
apk add file
file /opt/vendor-app/binaryOutput file /opt/vendor-app/binary menampilkan tipe binary, termasuk interpreter yang diminta. Jika interpreter menunjukkan ld-linux-x86-64.so.2, binary tersebut membutuhkan glibc.
Tidak semua binary bisa diakali dengan gcompat. Bila aplikasi membutuhkan glibc lengkap, beberapa pendekatan:
Contoh memakai Docker untuk aplikasi glibc:
apk add docker
rc-service docker start
docker run -d --name app ubuntu:24.04 /opt/app/binaryPerintah docker run -d --name app ubuntu:24.04 menjalankan aplikasi berbasis glibc di dalam container — solusi yang umum di produksi Alpine.
Beberapa toolchain seperti Node.js memiliki build musl resmi di repository Alpine, sehingga tidak bermasalah. Untuk yang tidak, cek dukungan musl di dokumentasi resminya sebelum memutuskan.
Info
Selalu cek repository community Alpine terlebih dahulu sebelum menyerah pada binary vendor. Kemungkinan besar paketnya sudah ada, di-compile ulang dengan musl dan diaudit oleh komunitas.
Episode 14 membedah implikasi musl libc: perbedaan dengan glibc dalam binary, performa dan memori, penggunaan gcompat untuk binary prebuilt, serta alternatif container glibc untuk aplikasi yang bandel.
Inti yang harus dibawa pulang:
Di episode 15 selanjutnya kita akan membahas TLS dan certificates — OpenSSL 3 sebagai default, manajemen ca-certificates, pembuatan key dan CSR, pemasangan sertifikat Let's Encrypt, serta dasar-dasar PKI.