Mengapa perangkat lunak tidak dikemas dalam satu file?

15

Kami melihat Sebagian besar perangkat lunak Windows dikemas dalam satu file yang dapat dieksekusi. Ketika saya mengklik dua kali file Pengaturan, itu mengatur semua file, binari dan perpustakaan dengannya.

Saya mengerti ketergantungan Ubuntu atau paket linux yang lebih umum. Tetapi saya bertanya-tanya, Mengapa ini ada. Apakah tidak mungkin membuat satu file dengan semua dependensi? Apa masalah dengan metode ini?

Silakan coba berikan alasannya secara rinci.

Anwar
sumber

Jawaban:

17

Alasan utama bahwa dependensi tidak termasuk dalam program itu sendiri adalah agar komponen sistem dapat dengan mudah diperbarui.

Bayangkan satu ketergantungan digunakan oleh lima program yang berbeda. Jika kerentanan keamanan ditemukan dalam ketergantungan itu, hanya satu salinan yang harus diperbarui, bukan lima salinan.

Bagi pengguna, tidak masalah bahwa beberapa paket perlu diinstal - menginstal satu perangkat lunak yang Anda inginkan secara otomatis menginstal dependensinya.


Perbedaan utama antara kemasan .deb dan .exe bukanlah bahwa perangkat lunak Ubuntu tidak diterbitkan dalam satu file. Perbedaan utama adalah seluruh konsep repositori perangkat lunak yang berisi paket-paket, dan bahwa pembaruan dapat dengan mudah disediakan.

Ini kadang-kadang bisa menjadi masalah bagi komputer tanpa koneksi internet langsung. Ada alat, seperti APTonCD , yang membantu meminimalkan kesulitan ini.

8128
sumber
2
kadang-kadang masalah dengan pengguna seperti kami tanpa akses yang tepat ke Internet
Anwar
2
Bagaimanapun saya benci fitur ini karena internet saya lambat. Dan berbagi perangkat lunak ubuntu yang diunduh sangat sulit, (Jangan menyarankan pencadangan apt-cache Karena saya melakukannya setiap hari)
Tachyons
1
Namun, Anda harus benar-benar menyukai fitur ini! Karena, alih-alih mengunduh perpustakaan lima kali, Anda cukup mengunduhnya satu kali. Bayangkan setiap program pada instalasi Ubuntu Anda datang dengan instalasi GTK + atau Qt sendiri! Hal-hal itu sangat besar .
Michael Wild
4

Itu tidak sepenuhnya benar. Perangkat lunak Ubuntu biasanya datang dalam satu file .deb. Menjadi sangat sederhana (dan tidak akurat), file .deb adalah file .exe koresponden untuk windows. Semua program, termasuk yang di windows menggunakan dependensi ke file lain di sistem operasi (perpustakaan). Proses instalasi kurang lebih eksplisit di OS yang berbeda. Ketika Anda menggunakan pusat perangkat lunak di Ubuntu untuk mengunduh program, Anda hanya mengunduh dependensi yang tidak diinstal di sistem Anda dan file program yang sebenarnya. Itu mencegah sistem dari kelebihan dengan file duplikat dan fungsi duplikat yang akan berakhir dalam konflik.

Percaya atau tidak, satu-satunya perbedaan antara menginstal program di windows atau Ubuntu adalah jumlah informasi yang mereka berikan kepada pengguna. Windows berpikir bahwa para penggunanya bodoh dan tidak ingin mereka tahu apa yang sedang diinstal ketika menjalankan file exe. Di linux Anda mendapatkan informasi itu .. bagi sebagian pengguna terlalu banyak detail, tetapi yang lain (paling) sangat menghargai itu.

harap itu masuk akal.

leousa
sumber
2
Benar-benar tepat. Bahkan distro lain (tidak sebagus Ubuntu) menggunakan .rpms. Hal tentang .exe, .deb, atau apa pun, adalah bahwa pada dasarnya .tar besar yang mengekstrak dirinya ke tempat yang berbeda! Pada Windows, ia pergi ke Program Files dan menunjukkan Anda progress bar, tetapi di linux itu menunjukkan Anda lebih banyak.
WindowsEscapist
1
Saya pikir saran bahwa file exe seperti file tar besar akan terlalu jauh ke arah penyederhanaan. File tar tidak dapat dieksekusi. File exe (secara alami) adalah. Yaitu, dengan file deb (yang memang merupakan file tar) itu adalah manajer paket yang menangani proses aktual dari memindahkan file, sehingga sistem dapat tetap di atas hal-hal yang cukup elegan. Dengan program penginstal (seperti pada Windows), penginstal itu sendiri yang melakukannya. Mungkin berbicara dengan beberapa komponen sistem untuk menjaga hal-hal tetap rapi, tetapi hanya jika rasanya seperti itu.
Dylan McCall
1
Cara terbaik untuk meringkas ini adalah bahwa Windows memiliki pembuat program pemasang seperti InstallShield dan NSIS. Ada alat seperti itu untuk Linux juga. MojoSetup adalah yang populer. Di situlah Anda kadang-kadang mengunduh program dan memiliki file yang dapat dieksekusi (biasanya berakhir dengan .sh atau .run) dan itu memberi Anda sedikit wizard. Mereka biasanya tidak berbicara dengan manajer paket, dan mereka bekerja sangat mirip dengan program penginstal di Windows. Pada catatan itu, Penginstal Windows (dengan file .msi) adalah sesuatu dari upaya untuk membersihkan kekacauan itu pada akhirnya;)
Dylan McCall
Saya pikir cara Linux jauh lebih baik daripada cara Windows. Tapi ya cara Windows sederhana dan mudah
Anwar
2
Format file Windows yang sesuai .debadalah .msi.
Eliah Kagan
3

Di Ubuntu, sebagian besar perangkat lunak datang dalam satu file. Ini adalah *.debfile paket debian yang diunduh, dibuka dan diinstal dari manajer paket Anda.

Mengapa Ubuntu tidak menginstal perangkat lunak dari executable yang mengekstrak sendiri seperti kebanyakan perangkat lunak Windows lakukan?

Karena self extracting *.exefiles adalah proposisi yang sangat berbahaya untuk diterima.

Perbedaan paling kritis antara executable yang mengekstrak diri dan sistem pengemasan, seperti yang debian / Ubuntu, adalah:

  • Keamanan
  • Transparansi
  • Lebih banyak kontrol granular

Lebih detail:

Keamanan

Di dunia windows Anda harus mempercayai satu *.exefile itu. Bagaimana seseorang bisa benar-benar yakin itu bisa dipercaya? Bagaimana Anda bisa tahu bahwa itu menginstal sesuatu? Bagaimana Anda bisa yakin itu tidak melakukan hal-hal lain di belakang Anda?

Di Ubuntu, semua paket ditandatangani secara digital, jadi dengan menggunakan file paket terpisah - manajer paket (baik itu muon, sinaptik, aptitude, atau bahkan apt langsung) - Anda mendapatkan konten diverifikasi sebelum dibongkar, apalagi diinstal. Tentu saja ini mengasumsikan bahwa Anda mempercayai repositori. Saya lebih suka mempercayai repositori Ubuntu (satu otoritas) daripada ratusan sumber berbeda yang sering tidak dikenal untuk diunduh.

Kontrol Granular

Dengan sebuah *.exefile, Anda pada dasarnya dapat melakukan satu hal: menjalankannya. Di Ubuntu Anda dapat memeriksa isi paket, deskripsi, konfigurasi, file individual, perubahan terbaru, perbaikan bug, dll dari kenyamanan manajer paket Anda, sebelum memutuskan apakah akan menginstal atau tidak.

Ketika Anda menginstal dari suatu *.exefile, Anda juga harus memercayai kaitnya 'copot' (dan tidak semua *.exefile dijamin memilikinya). Di Ubuntu, semua file milik paket standar yang diinstal oleh manajer paket, selalu dapat dihapus karena itu adalah fungsi dari manajer paket, bukan paket itu sendiri. Pengelola paket adalah aplikasi yang terpisah dan tepercaya, yang menyediakan penginstal dan pencopot pemasangan, paket tidak dapat mengambil kaitan pencopot pemasangan dari Anda. Tentu saja, paket jahat dapat menyelundupkan barang melalui tindakan pasca-instal, tapi itu sebabnya kami memiliki sistem repositori resmi dan orang yang sama yang kami percaya untuk memeliharanya.

Transparansi

Lebih jauh. Di Ubuntu saya benar-benar dapat mempercayai sistem saya, karena saya dapat memverifikasi perangkat lunak pada banyak tingkatan. Level tertinggi adalah dapat melihat kode sumber. paket biner memiliki paket sumber yang sesuai. Saya benar-benar dapat melihat sumbernya (Contoh: ' apt-get source bash ' akan memberi Anda sumber lengkap ke bash shell). Dalam dunia file * .exe, biasanya hanya ada binari, dan siapa yang tahu apa yang sebenarnya mereka lakukan di balik layar?

Yang mengatakan, selalu ada pengecualian untuk aturan, tetapi bagi saya keamanan dan kepercayaan berarti saya tidak dapat menerima mengeksekusi binari dari ratusan sumber yang berbeda yang sulit diverifikasi sebagai cara standar untuk menginstal komponen pada sistem saya.

diri sendiri
sumber
2

Selain apa yang telah dikatakan oleh orang lain, terkadang satu perangkat lunak dipecah menjadi beberapa paket karena tidak semua fitur relevan untuk semua pengguna. Misalnya, jika dokumentasi suatu program banyak, biasanya akan disediakan oleh paket terpisah. Ini memungkinkan pengguna yang tidak tertarik dengan fitur opsional ini untuk menghemat ruang disk dan bandwidth / waktu untuk mengunduh.

omacs
sumber
0

Mari kita coba berbagi pemahaman saya tentang dependensi (Ya, saya menyadari manfaat Ubuntu atau cara Linux menangani perangkat lunak yang lebih umum. Saya hanya mencoba mengumpulkan semua pendapat dan alasan yang baik dengan cara yang sentral, sehingga saya dapat menunjukkan beberapa teman saya) .

Perangkat Lunak Windows sebagian besar dikemas dalam satu file. Apakah ini menyiratkan bahwa mereka tidak memiliki ketergantungan?

Tidak, Hampir semua perangkat lunak memiliki ketergantungan pada beberapa perangkat lunak lainnya. (Kecuali jika perangkat lunaknya sangat rendah dan dapat berbicara dengan perangkat keras secara langsung, seperti Sistem Operasi itu sendiri) . Perangkat lunak Microsoft tidak bebas dari ketergantungan. Jadi, pertanyaan penting adalah: bagaimana mereka menangani ini?

Jawab: Mereka menangani ini dengan cara tradisional mereka sendiri. Dengan asumsi sebagian besar pengguna mereka bodoh, mereka hanya menempatkan semua ketergantungan pada file tunggal, sehingga Perangkat Lunak berukuran lebih besar (1 diajukan).
Sebagai contoh, Lihat Game yang dirilis untuk Microsoft. Hampir setiap game menyertakan pengaturan DirectX, meskipun pengguna mungkin sudah memperbarui versi mereka.

Ini adalah sesuatu yang saya temukan di Google tentang Mengapa DirectX disertakan dengan setiap game.

Bahkan jika versi biner yang lebih baru sudah diinstal, versi itu tidak dapat digunakan, dan bahkan jika instalasi DirectX Anda mutakhir karena Anda telah menjalankan versi yang lebih baru dari penginstal yang tidak dijamin telah menginstal semua versi sebelumnya. Lebih buruk lagi, jika versi diinstal untuk x86 itu tidak menjamin versi yang sama diinstal untuk x64, jadi game 64 bit dan 32 bit mungkin perlu menjalankan versi penginstal yang persis sama tetapi menargetkan platform yang berbeda saat dijalankan.

klik di sini untuk artikel lengkap. Jelas mereka tidak melakukan penanganan ketergantungan dengan sangat baik.

Sebagian besar waktu, terlepas dari dependensi yang sudah ada, mereka menyediakannya untuk mendapatkan kesederhanaan (untuk pengguna mereka) . Juga lihat berapa banyak tema perangkat lunak yang menyertakan komponen .NET runtime.
Contoh lain dari pengalaman saya: Setelah saya mengunduh dan menginstal perangkat lunak MS. Menjadi puas dengan prosesnya, saya mengklik ikon untuk membuka perangkat lunak, Hanya kemudian itu memberitahu saya bahwa "Saya perlu Java untuk menjalankan". Situasi seperti itu tidak pernah terjadi di dunia Linux melalui manajemen paketnya. (kecuali Anda mencoba mengunduh file deb dari situs repositori dan menginstalnya dengan mengklik ganda, dengan cara MS) .

Bagaimana Linux menangani masalah ketergantungan ini?

Nah, Linux atau Ubuntu tidak menyembunyikan fakta bahwa, Anda harus menginstal dependensi untuk menggunakan perangkat lunak (tidak seperti cara Microsoft). Tetapi ketika Anda menginstal komponen, perangkat lunak lain yang bergantung pada komponen yang sama menggunakan depencies diinstal diinstal sebelumnya (tidak seperti perangkat lunak MS termasuk semua hal).

Anwar
sumber