Mengenal Flatpak, Snaps dan AppImage pada OS Linux

1 komentar

 


Di Linux, paket perangkat lunak adalah kumpulan file yang membentuk aplikasi perangkat lunak. Tujuannya adalah untuk menyederhanakan instalasi dan pemeliharaan aplikasi perangkat lunak dalam sistem. Ada dua jenis utama format paket di Linux: format kemasan distro-native (seperti deb dan rpm) dan format kemasan aplikasi kontainer (seperti Snap, Flatpak, dan AppImage).

Perbedaan utama antara dua jenis format paket adalah cara mereka menangani dependensi aplikasi. Kelompok sebelumnya mengharapkan dependensi tersedia pada sistem, meskipun sebagian besar manajer paket frontend (seperti apt dan yum) akan membaca daftar dependensi dan memastikan bahwa itu ada di dalam sistem.

Di sisi lain, format kemasan aplikasi kontainer – seperti Flatpak – mengemas dependensi bersama dengan aplikasi dalam paket yang sama. Ini memastikan bahwa tidak akan ada konflik dependensi antara aplikasi yang berbeda. Misalnya, jika aplikasi A dan B memerlukan versi yang berbeda dari ketergantungan yang sama, paket akan dikemas aplikasi A dan B dengan ketergantungan yang diperlukan dalam paket. Kelemahan memiliki dependensi dalam paket aplikasi adalah bahwa ukuran aplikasi umumnya lebih besar.

Dalam lanskap kemasan aplikasi kontainer, format kemasan yang paling populer adalah Snap, Flatpak, dan AppImage.

1. Flatpak 

Flatpak adalah format kemasan lain di Linux yang bertujuan untuk memudahkan mendistribusikan aplikasi. Di Flatpak, setiap paket aplikasi dibangun terhadap runtime. Runtime ini memberikan dependensi dasar untuk aplikasi. Salah satu contoh runtime adalah runtime Freedesktop, yang menyediakan satu set perpustakaan penting seperti D-Bus, GLib, Gtk3, dan X11.

Ketika aplikasi membutuhkan lebih banyak ketergantungan daripada yang tersedia pada waktu runtime, pengembang dapat menggabungkan dependensi sebagai bagian dari aplikasi. Hal ini memungkinkan penulis untuk menggunakan pustaka yang tidak tersedia pada runtime atau menggunakan versi yang berbeda dari yang disediakan runtime.

Untuk mengelola paket Flatpak, kita bisa menggunakan alat command-line . Melalui alat ini, kami dapat mencantumkan, menginstal, memperbarui, dan menghapus paket. Selain itu, flatpak-builder adalah alat command-line untuk membangun paket Flatpak.


 

 2. Snaps

Snaps adalah format kemasan yang dikembangkan oleh Canonical, perusahaan di balik distribusi Ubuntu Linux. Paket Snap mengemas aplikasi bersama dengan semua dependensinya, menghilangkan kebutuhan untuk mengelola dependensi aplikasi secara terpisah. Selain itu, paket Snap terdaftar pada repositori terpusat, yang dikenal sebagai Snap Store. Repositori terpusat ini memudahkan pengguna akhir untuk menelusuri dan menginstal aplikasi yang tersedia.

Di balik layar, ada proses daemon, snapdterkunci, yang melakukan berbagai tugas untuk mengelola paket Snap - misalnya, mengambil file paket dari repositori jarak jauh ketika kita menginstal paket Snap. Selain itu, ia juga menjalankan langkah-langkah ini sebelum menjalankan paket Snap, seperti pemasangan, membuat kotak pasir, dan menjalankan aplikasi. Untuk berinteraksi dengan snapd daemon, kita menggunakan snap command-line tool. Selain itu, kita dapat menggunakan alat command-line snapcraft untuk membuat paket Snap dan menerbitkannya secara opsional ke Snap Store.


 

3. AppImage

AppImage adalah format kemasan yang mengemas seluruh aplikasi, termasuk dependensinya, ke dalam satu file. Bahkan, pada halaman yang meng-host paket AppImage, kita selalu dapat melihat moto AppImage: "satu aplikasi = satu file". Berbeda dengan Flatpak dan Snap, paket AppImage itu sendiri adalah program executable terakhir. Ini berarti tidak ada instalasi paket AppImage dalam arti tradisional. Dengan kata lain, paket AppImage di Linux mirip dengan file .exe portabel pada Windows.

 


Perbandingan  Flatspak, Snaps dan AppImage

Meskipun berbagi tujuan yang sama untuk membuat siklus hidup aplikasi lebih mudah dikelola, ada berbagai perbedaan antara format kemasan yang berbeda. Di bagian berikut, kita akan melihat perbedaan detail ini.

 

1. Instalasi Aplikasi 

Untuk Snap dan Flatpak, kami menjalankan perintah pemasangan pada alat command-line snap dan flatpak, masing-masing, untuk menginstal paket. 

Misalnya, mari kita lihat bagaimana kita akan menginstal aplikasi Discord menggunakan snap dan flatpak.

$ sudo snap install discord
$ sudo flatpak install com.discordapp.Discord
 

Secara internal, alat akan mencari paket pada repositori jarak jauh dan mengunduh file secara lokal. Selain itu, alat memasang runtime yang hilang (di Flatpak) atau base snaps (di Snap) yang dibutuhkan paket. Kemudian, untuk Flatpak, itu akan dekompress paket sebelum menyimpannya di disk, menyelesaikan proses instalasi.

Namun, untuk AppImage, secara teknis tidak ada proses instalasi seperti itu. Ini karena paket itu sendiri dapat dieksekusi yang dapat kita jalankan untuk memulai program. Satu hal yang perlu dilakukan pengguna akhir setelah mengunduh paket adalah mengatur izin bit yang dapat dieksekusi dari paket untuk membuatnya dapat dieksekusi.

 

2. Ukuran Aplikasi

 Paket aplikasi selalu didistribusikan dalam bentuk terkompresi. Ini membantu dengan bandwidth internet mendistribusikan aplikasi. Ketika aplikasi diinstal di sisi klien, tergantung pada paket, paket dapat disimpan dan dijalankan sebagai terkompresi atau terdekompresi. Misalnya, paket Snap selalu disimpan dan dijalankan dikompresi. Demikian pula, paket AppImage tidak pernah tidak terkompresi di sisi klien. Menyimpan dan menjalankan paket terkompresi memiliki manfaat tambahan dari berkurangnya penggunaan ruang disk.

Di sisi lain, pada pengguna paket Flatpak selalu tidak dikompresi. Ini berarti paket Flatpak hampir selalu lebih besar dari paket Snap dan AppImage.

Untuk mengilustrasikan perbedaan ukuran file antara format kemasan yang berbeda, kita dapat menginstal versi aplikasi Discord 0.0.28 dengan masing-masing dari tiga jenis paket. Dengan menggunakan paket Snap, ukuran aplikasi pada disk adalah 89,1 MB, yang merupakan yang terkecil. Kemudian, AppImage dari program yang sama dengan versi yang sama adalah 98 MB dalam ukuran. Akhirnya, paket Flatpak dari aplikasi Discord berukuran 237,1 MB, yang terbesar di antara tiga paket.

 

3. Isolasi Aplikasi (Sandboxing)

Sandboxing mengacu pada praktik menjalankan aplikasi di lingkungan yang terisolasi dari aplikasi lain pada sistem. Isolasi Sandboxing ini mencegah aplikasi yang tidak berfungsi dari mengganggu stabilitas sistem operasi. Selain itu, sandboxing meningkatkan keamanan karena kode berbahaya di dalam aplikasi sandboxed tidak dapat memengaruhi sistem. 

Paket Snap dan Flatpak selalu berjalan di lingkungan kotak pasir. Di sisi lain, paket AppImage tidak, secara default, berjalan di lingkungan sandboxed. Untuk menjalankan AppImage di lingkungan sandboxed, kita harus secara eksplisit menjalankan paket AppImage menggunakan perangkat lunak sandboxing seperti firejail

 

 4. Distribusi

Saluran distribusi utama untuk Snap, Flatpak, dan AppImage adalah Snap Store, FlatHub, dan AppImageHub, masing-masing. Saluran distribusi utama ini berisi paket terbanyak yang diterbitkan untuk format kemasan masing-masing.

Selain saluran distribusi utama, alat command-line Flatpak mendukung repositori jarak jauh lainnya yang dihosting sendiri. Di sisi lain, snapd tidak memungkinkan mengubah repositori jarak jauh. Oleh karena itu, untuk memanfaatkan fungsi manajer paket Snap, paket Snap harus selalu datang dari Snap Store.

 

 5. Pembaruan Aplikasi (Update)

Sebagian besar waktu, aplikasi jarang tetap sama terlalu lama. Kita harus memperbarui aplikasi sesekali sehingga kita mendapatkan fitur dan tambalan keamanan yang lebih baru. Untuk memastikan paket aplikasi selalu up to date, snapd daemon memeriksa pembaruan paket Snap empat kali per hari. Jika ada pembaruan yang tersedia, snapd daemon menerapkan pembaruan secara otomatis. Berbeda dengan paket Snap, Flatpak dan AppImage tidak memiliki proses daemon yang terus-menerus memperbarui aplikasi secara otomatis. Sebagai gantinya, pengguna diharapkan untuk memeriksa pembaruan yang tersedia dan menerapkannya secara manual.

Untuk memperbarui paket, ketiga format paket mendukung pembaruan delta biner yang efisien. Ini berarti klien hanya perlu mengunduh perbedaan antara binari dan menerapkannya ke paket lokal. Ini menghasilkan proses pembaruan yang lebih efisien karena klien tidak harus mengambil seluruh konten paket lagi. Untuk AppImage, dukungan dari update delta biner tidak datang secara default dan ditangani oleh program terpisah, AppImageUpdate.

 

6. Tabel Perbandingan


Snaps Flatpak AppImage
Alat-alat command-line diperlukan snap flatpak -
Sumber terkompresi Ya Tidak Ya
Ukuran dari Discord versi 0.0.028 89.1MB 237.1MB 98MBMB
Repositori utama Snap Store FlatHub AppimageHub
Mendukung repositori alternatif Tidak Ya -
Pembaruan Otomatis Ya Tidak Tidak
Delta Biner Ya Ya Ya (melalui alat AppImageUpdate)

 

 


1 komentar :