Kalian yang baru migrasi dari Windows atau macOS ke Linux khususnya ubuntu bertanya-tanya “Kenapa aplikasi di ubuntu lebih kecil ukurannya daripada yang ada di Windows atau macOS?”. Saya akan mencoba menjawab pertanyaan ini dari pengalaman Saya sendiri dan juga rangkuman dari tulisan yang ada di internet.
Bisa dilihat ketika install aplikasi. Pada Windows biasanya dikemas dalam satu paket installer yang setelah dipasang langsung bisa digunakan meskipun pemasangan sedang tidak terkoneksi internet. Berbeda pada Ubuntu, aplikasi utama akan dipasang setelah dependency atau library yang dibutuhkan sudah ada di sistem, dimana package manager biasanya akan memasang sendiri dengan mengunduh langsung dari repository. Pada Windows dependency atau library ini biasanya sudah termasuk pada paket installer itu sendiri kecuali beberapa shared object seperti .NET Framework dan lainnya. Hal ini juga menjadi salah satu penyebab size sistem yang dibutuhkan pada Windows lebih besar daripada Ubuntu karena banyaknya *.dll* yang duplicate.
Hal ini membuat mulai bermunculannya package manager lain yang lebih memudahkan pengguna, dan juga pengembang. Pengguna akan lebih mudah karena aplikasi yang diunduh bisa langsung digunakan tanpa harus memikirkan tentang dependency yang tidak sesuai. Contoh kasus yang biasanya terjadi adalah:
- Udin memasang sistem operasi Ubuntu yang baru rilis beberapa hari.
- Udin biasa menggunakan aplikasi office yang bukan open-source, karena memang sudah terbiasa dengan aplikasinya itu.
- Ketika Udin mau mengunduh aplikasi office itu, dia tidak menemukan untuk versi OS yang baru rilis dalam beberapa hari kebelakang.
- Karena Udin membutuhkannya, maka dia mencoba mengunduh aplikasi itu dengan target OS 1 tingkat dibawah OS yang sekarang dipasang.
- Ketika install, aplikasi office itu membutuhkan library a-lib dengan versi diatas 2.4 dan dibawah 2.8 untuk bisa dipasang.
- Tetapi karena versi OS yang Udin pasang adalah OS terbaru, a-lib yang sudah terpasang adalah versi 3.2 .
- Udin memaksa untuk mengunduh manual library a-lib versi 2.8 dan memasangnya sendiri, tetapi karena a-lib membutuhkan lagi library b-lib dengan versi 1.2 kebawah, maka Udin juga harus mencari library b-lib versi 1.2 kebawah yang bisa dipasang.
Kasus diatas biasa disebut Dependency hell. Bisa dilihat bagaimana ketergantungan dari aplikasi dan library tertentu akan sangat memusingkan dan mengganggu. maka dari itu package manager seperti Snapcraft, Flatpak, dan AppImage bermunculan untuk membantu user.
Tetapi meskipun kelihatannya ini menyebabkan banyak masalah, kenapa sampai sekarang tidak membuat package manager seperti Snapcraft, Flatpak, dan AppImage menjadi default? Karena aplikasi dan library pada linux biasanya open-source, keamanan adalah alasan kenapa dependency yang diperlukan oleh aplikasi tidak di bundle dalam 1 paket. Ketika terdapat masalah keamanan seperti sebuah library terdapat bug bisa akses remote tanpa auth apapun, ketika maintainer mendapatkan laporan, akan segera diperbaiki dan user akan diberitahu untuk mengupdate library tersebut. Hal ini tidak akan bisa diatasi dengan cepat jika library itu ada dalam 1 paket aplikasi.
Jadi, OS yang baru rilis beberapa hari boleh dicoba untuk mengobati rasa penasaran tentang fitur baru, tetapi biasanya belum bisa dipakai untuk daily usage karena masih terdapat banyaknya bug, dan juga aplikasi yang masih terbatas untuk bisa dipakai diversi terbaru itu. Saya biasanya menunggu sekitar 6 bulan dari awal rilis versi itu sebelum upgrade untuk daily usage, agar OS yang nantinya akan digunakan lebih stabil, dan juga menunggu ketersediaan aplikasi yang biasa saya pakai sudah resmi tersedia. Ada ungkapan yang biasa muncul di komunitas, “If it ain’t broke, don’t fix it”.
Beberapa sumber: