- Artikel ini menelusuri sejarah deployment server dan masalah isolasi proses, serta menyoroti bahwa FreeBSD jails telah mewujudkan konsep kontainer modern 10 tahun lebih awal dari industri
- Diperkenalkan pada FreeBSD 4.0 pada tahun 2000, jails memperluas
chroot untuk menyediakan isolasi penuh filesystem, jaringan, dan proses sebagai fitur native kernel
- Linux mencapai kontainer melalui LXC pada 2008 dan Docker pada 2013, tetapi dalam prosesnya menumpuk lapisan abstraksi kompleks seperti namespace, cgroups, dan OCI
- Yang berhasil diselesaikan Docker dengan baik adalah masalah packaging dan deployment (shipping) aplikasi, sedangkan jails unggul dalam isolasi tetapi lemah karena tidak memiliki standar deployment native
- Bagian lanjutan akan membahas cara operasional nyata seperti membangun infrastruktur berbasis jails, snapshot ZFS, dan provisioning dengan Ansible
Masalah deployment server pada masa awal
- Beberapa dekade lalu, cara standar untuk mendeploy sesuatu ke server adalah menyalin file secara manual melalui FTP menggunakan Total Commander, FileZilla, FAR Manager, dan sejenisnya; pengguna tingkat lanjut memakai
scp atau rsync, tetapi esensinya sama
- Dalam proyek yang dikerjakan sendirian, kesalahan bukan masalah besar, tetapi saat mengelola puluhan proyek klien, ini menjadi fatal
- Dalam konfigurasi backend yang umum, banyak situs web berbagi instance Apache web server yang sama dan memiliki siklus hidup yang sama; jika Apache mati, semuanya ikut mati
- Saat trafik melonjak, satu situs dapat menghabiskan semua resource sehingga situs lain di server yang sama mati pelan-pelan tanpa terlihat jelas
- Administrator sistem mencoba otomatisasi dengan shell script, tetapi tidak ada metode standar untuk versioning atau rollback, sehingga lazim memberi nomor increment atau timestamp pada nama folder proyek
Dua masalah inti yang harus diselesaikan
- Deployment: diperlukan solusi umum yang mampu menjamin pengiriman yang andal, mencegah human error, menerapkan versioning dan rollback, serta mencakup semua business case
- Isolasi proses (Process Isolation): diperlukan perlindungan timbal balik antara aplikasi dan sistem, pencegahan agar kebutuhan satu aplikasi tidak diam-diam merusak aplikasi lain, serta penyelesaian konflik dependensi
- Upaya menyelesaikan masalah deployment berkembang menjadi pipeline CI/CD modern, standar packaging, dan sistem version control, tetapi sejarah masalah isolasi relatif kurang dikenal
Dari chroot ke mesin virtual
chroot, yang diperkenalkan Bell UNIX pada 1979, memberi proses sebuah pandangan filesystem yang terisolasi, sehingga proses tidak bisa mengakses di luar subtree; ini ide yang primitif tetapi berguna
- Keterbatasan: hanya mengisolasi filesystem; proses masih bisa berinterferensi dengan jaringan, proses lain, dan resource sistem, serta masih mungkin keluar dari batasannya
- Jawaban enterprise serius pertama adalah mesin virtual (VM), yang dipopulerkan VMware pada akhir 1990-an
- VM menyediakan lingkungan OS yang sepenuhnya terisolasi untuk setiap aplikasi, tetapi karena setiap VM membawa OS lengkap, ada biaya berupa overhead yang signifikan dan waktu startup dalam hitungan menit
Lahirnya FreeBSD Jails
- Pada tahun 2000, sebuah revolusi senyap terjadi bukan di Windows Server atau Linux, melainkan di FreeBSD
- FreeBSD berbeda secara mendasar dari Linux: Linux hanya menyediakan kernel, lalu userland GNU, ekosistem paket, dan pilihan tiap distribusi digabungkan; sementara FreeBSD mengembangkan, memberi versi, dan menguji kernel, userland, tool dasar, dan library sebagai satu OS yang utuh
- Solusi yang dibangun di atas fondasi konsisten ini adalah jails, diumumkan oleh Poul-Henning Kamp dan Robert Watson, lalu dimasukkan sebagai fitur kernel native di FreeBSD 4.0 (Maret 2000)
- Setiap jail memiliki pandangan filesystem, stack jaringan, dan ruang proses sendiri, sehingga sistem host tidak terlihat
- Karena berbagi kernel host, jails mencapai overhead yang nyaris nol dan waktu startup yang hampir seketika
- FreeBSD telah mencapai implementasi praktis dari apa yang sekarang kita sebut kontainer 10 tahun lebih awal dari industri, dan melakukannya di production
Timeline teknologi isolasi
- Jalur evolusi nyata untuk masalah isolasi adalah: server bersama tanpa isolasi → mesin virtual yang berat tetapi terisolasi → kontainer yang ringan namun terisolasi
- FreeBSD mencapai tahap ketiga pada tahun 2000, Linux mencapainya lewat LXC pada 2008, dan Docker muncul pada 2013
- Saat Docker dipuji sebagai sesuatu yang revolusioner, FreeBSD jails sebenarnya sudah matang dan teruji di lapangan selama 13 tahun
Mengapa Linux menang
- Keunggulan teknis tidak selalu memenangkan perang ekosistem
- Linux menang berkat pengambilan keputusan yang cepat, efek viral lisensi GPL, serta dukungan enterprise yang kuat dari Red Hat dan IBM
- Setelah itu Google, Facebook, dan Amazon mengembangkan tool untuk data center berskala besar, lalu menentukan arah seluruh industri
- Linux berubah dari "OS gratis untuk orang yang tidak bisa membeli lisensi komersial" menjadi "satu-satunya pilihan untuk server"
Kompleksitas ekosistem kontainer Linux
- Untuk menyelesaikan masalah isolasi dan deployment, para engineer Linux membangun primitive kernel seperti namespace, cgroups, seccomp, lalu menumpuk lapisan abstraksi kompleks di atasnya: LXC (2008) → OCI/runc (2015) → Docker/Podman (2013/2018) → Docker Hub
- Hasilnya adalah tumpukan abstraksi bocor (leaky abstractions) yang terlalu banyak direkayasa untuk infrastruktur berbasis cloud dan bergantung vendor
- Kini, untuk menjalankan aplikasi dalam sistem berskala besar, mengontainerkannya dengan Docker dan mengorkestrasinya dengan Kubernetes telah menjadi default implisit, bukan lagi salah satu dari banyak opsi melainkan pilihan yang dianggap wajar
Kontribusi Docker dan kelemahan Jails
- Hal yang benar-benar diselesaikan Docker dengan baik adalah masalah shipping: memaketkan aplikasi bersama semua dependensinya, mendistribusikannya lewat registry, dan menjalankannya secara identik di mesin mana pun sebagai standar umum
- Format image OCI menjadi standar industri de facto
- Jails sangat baik dalam menyelesaikan masalah isolasi, tetapi tidak memiliki solusi native untuk shipping, dan inilah alasan utama ekosistem jails terasa kurang matang dibanding ekosistem Docker
- Komunitas juga menyadari kesenjangan ini, dan beberapa tool seperti cbsd, bastille, pot, appjail, dan lainnya mencoba meniru ekosistem kontainer modern, sementara ada juga pendekatan lain yang memanfaatkan primitive native FreeBSD
Cuplikan bagian selanjutnya
- Pada bagian berikutnya akan dibahas kesederhanaan dan keanggunan infrastruktur berbasis FreeBSD, mulai dari dasar-dasar jails dan cara kerjanya, pengurangan boilerplate lewat jail manager, provisioning dan deployment dengan Ansible, kekuatan snapshot ZFS, serta cara menggabungkan semuanya untuk membangun infrastruktur yang kokoh dan skalabel bagi Hypha
1 komentar
Komentar Hacker News
Keunggulan teknis saja tidak cukup untuk menang dalam perang ekosistem
Pada pertengahan 90-an, Linux tumbuh berkat pengambilan keputusan yang cepat, sifat menyebar dari lisensi GPL, serta dukungan perusahaan dari Red Hat dan IBM
Saya memasang Linux pada 1994, tetapi komunitas FreeBSD meremehkan PC saya yang seharga $3.500 dengan mengatakan itu “tidak terlalu bagus”
Ada bug pada antarmuka IDE, tetapi Linux mengeluarkan solusi sementara hanya dalam hitungan hari, sedangkan pihak BSD cuma menyuruh saya membeli perangkat SCSI
Saat itu saya masih mahasiswa dan tidak punya uang, jadi Linux akhirnya menjadi pilihan yang realistis
Belakangan saya mencoba FreeBSD lagi, tetapi Linux sudah melakukan semua yang saya butuhkan
Bug terkait dirangkum di artikel wiki CMD640
Meski begitu, saya menyukai FreeBSD karena konsistensi sistemnya lebih tinggi, dan komponen inti seperti audio maupun API event dipertahankan secara stabil
Dukungan driver untuk hardware terbaru masih lebih baik di Linux, tetapi saya berharap FreeBSD tidak menjadi terlalu “mirip Linux”
Sebenarnya, dengan *nix modern, hampir semuanya bisa dilakukan di kedua sisi. Sekarang ini lebih soal preferensi dan kebiasaan daripada performa
Sementara itu, BSD dihindari perusahaan karena gugatan dengan AT&T, dan selama masa itu Linux menguasai pasar
Sampai sekarang masih ada tulisan yang membela FreeBSD, tetapi sulit membalikkan arah yang sudah terbentuk sejak 90-an
Meski begitu, saya tetap merasa dukungan hardware masih punya banyak ruang untuk ditingkatkan sampai sekarang
Tulisannya menarik
Saya tidak setuju dengan penilaian bahwa primitif kernel Linux seperti namespaces, cgroups, seccomp pada akhirnya menciptakan ekosistem abstraksi yang rumit
Linux menjadi rumit karena ia sukses, bukan karena desainnya gagal
Jika BSD yang menjadi arus utama, kemungkinan besar ekosistem yang sama “over-engineered”-nya juga akan muncul
Container pada akhirnya hanyalah VM ringan, jadi saya merasa lebih baik memakai VM sungguhan saja
Docker populer karena kemudahan pakai ulang dan ekosistemnya, bukan karena isolasi keamanannya
Jail di FreeBSD itu sederhana dan elegan, tetapi container OCI di Linux jauh lebih mudah digunakan
Container bukan fitur kernel yang berdiri sendiri, melainkan ilusi yang dibangun dari gabungan berbagai namespace, mount, dan isolasi proses
Desain Linux ini memang disengaja, dan cgroups serta seccomp dipakai luas bukan hanya untuk container, tetapi juga di systemd atau flatpak
Filosofi “ternak vs hewan peliharaan” bisa diterapkan di level VM dan orkestrasi
Klaim bahwa jails lebih baik terasa kurang masuk akal di dunia nyata
Docker menang bukan karena isolasi teknis, melainkan karena ekosistem
Berkat alat seperti Dockerfile, public registry, dan compose, lingkungan yang bisa dijalankan dapat dibuat hanya dalam 30 detik
Jail FreeBSD sangat bagus secara teknis, tetapi hambatan masuknya tinggi
Belakangan ini, karena kompleksitas stack container, juga terlihat gerakan untuk kembali ke jail atau VM yang lebih sederhana
Namun ini bukan soal persaingan; masing-masing punya peran yang berbeda
FreeBSD tidak punya konsep seperti ini, dan sistem image-nya juga kurang memadai
Jika FreeBSD berinvestasi pada UX dan ekosistem seperti Docker, basis penggunanya mungkin akan bertambah beberapa kali lipat
Sekitar 2005, saya pernah menjalankan seluruh perusahaan di atas FreeBSD
Tetapi seiring waktu, Linux menguasai baik penggunaan pribadi maupun pekerjaan
Sekarang Docker pun sudah cukup bagus, jadi tidak ada lagi alasan logis untuk kembali
Namun responsnya terhadap era CPU multicore terlambat, sehingga tertinggal dari Linux dan Windows
Sekarang performanya sudah pulih, tetapi tetap kurang diuntungkan karena kekurangan driver dan keterbatasan jumlah developer
Saya memakai Linux untuk kebutuhan GPU atau CUDA, dan FreeBSD untuk server yang butuh stabilitas
UX FreeBSD lebih konsisten, tetapi secara realistis Linux sudah menjadi “jalur yang membuat hidup lebih mudah”
Tulisan yang memperkenalkan FreeBSD selalu menyenangkan untuk dilihat
FreeBSD memperkenalkan jail pada 2000, tetapi Linux sudah punya teknologi serupa seperti OpenVZ dan VServer
Pada akhirnya, ketika LXC muncul di akhir 2000-an, barulah muncul persepsi bahwa “FreeBSD memang lebih dulu unggul”
Saya penasaran apakah ada tulisan yang menjelaskan secara teknis cara implementasi isolasi pada container dan VM
Bukan sekadar sampai level “karena memakai kernel yang sama maka lebih lemah”, tetapi saya ingin tahu detail implementasinya yang sebenarnya
Akhir-akhir ini, fitur seperti systemd-oomd membuat saya ingin kembali ke FreeBSD
Dulu saya biasa membuka beberapa proses di terminal sambil menyimpan log untuk bekerja,
tetapi sekarang systemd mematikan seluruh proses sekaligus pada level cgroup, sehingga pekerjaan saya hilang
Perubahan sistem yang tidak kompatibel seperti ini merusak alur kerja development, dan situasi yang mengharuskan memakai systemd-run atau Docker setiap kali demi isolasi proses terasa sangat menjengkelkan
Kunci keberhasilan Linux adalah sifat menular GPL dan efek jaringan
Ketika para pengguna mulai menganggap Linux sebagai standar, produsen hardware pun secara alami mulai merilis driver untuk Linux
Berkat fleksibilitas kernel, ekosistem driver open source berkembang sangat pesat