Mengapa pengembang Linux tidak dapat membuat format kemasan universal?


14

Pilihan format paket biner vendor tampaknya ditentukan oleh bentuk Hukum Murphy: semua distro yang tidak Anda gunakan memiliki paket. (Corralary: tidak ada distribusi yang memenuhi ketergantungan distribusi tumpukan perangkat lunak Anda).

Apakah ini masalah politik, atau sesuatu yang lebih dalam, bahwa kita belum melihat munculnya format paket "build sekali, jalankan di mana saja"?


3
Anda tampaknya hanya memiliki pemahaman yang dangkal tentang apa yang membedakan distribusi dari satu sama lain. menyatukan sistem paket masih tidak berarti bahwa paket dapat dipertukarkan di antara distribusi. dengan demikian pertanyaan Anda tidak ada artinya.

3
hop, mengapa Anda tidak menulis jawaban yang memberikan deskripsi yang kurang dangkal tentang perbedaan antara distribusi? Pertanyaannya dinyatakan secara naif, tetapi ada jawaban teknis mendalam yang menunggu untuk diberikan.
jldugger

Anda benar-benar mencari "Linux Standard Base"
Bill Weiss

Mengapa pengembang Windows juga tidak dapat membuat format kemasan universal? Tidak mengantongi Windows di sini, tetapi mereka memiliki banyak metode untuk menginstal perangkat lunak, dan tidak ada satu pun repositori seperti Linux yang memiliki ... (ini adalah pertanyaan retoris, btw)
Mark Henderson

Jawaban:


24

Tampaknya tepat mengutip Joel Spolsky yang satu ini:

(Omong-omong, bagi Anda yang mengikuti format feed sindikasi blog yang misterius namun bermuatan politis, Anda dapat melihat hal yang sama terjadi di sana. RSS menjadi terfragmentasi dengan beberapa versi yang berbeda, spesifikasi yang tidak akurat, dan banyak pertarungan politik, dan upaya untuk membersihkan semuanya dengan membuat format lain yang disebut Atom telah menghasilkan beberapa versi berbeda dari RSS plus satu versi Atom, spesifikasi yang tidak akurat dan banyak pertarungan politik. Ketika Anda mencoba untuk menyatukan dua kekuatan yang berlawanan dengan menciptakan alternatif ketiga, Anda hanya berakhir dengan tiga kekuatan yang berlawanan. Anda belum menyatukan apa-apa dan Anda belum benar-benar memperbaiki apa pun.)

(penekanan ditambahkan)

Anda memiliki (setidaknya) dua sistem pengemasan untuk Linux. Sebenarnya itu hal yang baik. Satu sistem hanya akan membuat sistem ketiga.


Re: Ketika Anda mencoba untuk menyatukan dua kekuatan yang berlawanan dengan menciptakan alternatif ketiga, Anda hanya berakhir dengan tiga kekuatan yang berlawanan. lihat juga : xkcd.com/927
JamesBarnett

20

Ada banyak alasan untuk ini, dan sedikit sejarah adalah untuk meletakkan segala sesuatu ke dalam perspektif.

Ingatlah bahwa ketika kita berbicara tentang "Linux" yang biasanya kita maksud adalah salah satu dari banyak distribusi Linux yang berbeda . "Linux" sebenarnya hanya sebuah kernel sistem operasi.

Tujuan asli Linux adalah untuk menciptakan sistem berbasis Unix yang akan berjalan pada PC (awalnya 386). Langkah pertama adalah membuat kernel itu sendiri. Sementara Linus Torvalds sedang mengerjakan kernel Richard Stallman sedang mengerjakan sistem Free Unix miliknya sendiri , di bawah proyek GNU (Not Unix) GNU . Singkatnya, keduanya agak konvergen karena GNU memiliki utilitas terkait (C compiler / library / tools build, shell, editor teks dll.) Tetapi tidak ada inti untuk menjalankannya, dan Linux memiliki inti tetapi tidak memiliki utilitas untuk berjalan di atasnya untuk membuatnya berguna bagi massa.

Konvergensi ini kemudian dikenal secara resmi sebagai GNU / Linux. Anda akan melihat bahwa banyak distro masih menyebut diri mereka sebagai distribusi GNU / Linux.

Karena GNU / Linux bersifat gratis dan terbuka, siapa pun dapat mengambilnya dan membuat sistem paket sesuai dengan selera spesifik mereka. Hasilnya adalah banyak aliran berbeda dari berbagai metode konfigurasi yang digunakan untuk membuat sistem ini, yang memiliki efek samping menciptakan hampir sama banyak sistem manajemen paket yang berbeda agar sesuai dengan masing-masing.

Setiap sistem lengkap yang berbeda memiliki pengikut yang kuat yang bertahan bersama mereka selama bertahun-tahun, menghasilkan apa yang kita miliki saat ini: beberapa sistem manajemen paket yang digunakan secara luas, berakar dalam dan stabil seperti RPM , APT / dpkg dan Portage Gentoo .

Ada beberapa proyek, seperti Autopackage , yang berusaha menyelesaikan masalah, tetapi evolusi berkelanjutan dari berbagai sistem manajemen paket yang didukung berarti ada banyak target bergerak yang harus diikuti.

Apa yang akhirnya dilakukan oleh beberapa vendor perangkat lunak adalah menggabungkan binari spesifik dan salinan dependensi yang mereka perlukan ke dalam satu paket besar yang akan bekerja pada sistem tertentu.


8
Ada yang lebih dari ini. Bahkan jika seluruh dunia bersatu pada katakanlah rpm, Anda masih tidak akan memiliki paket itu sekali pun, jalankan di mana pun dunia yang diperkirakan OP. Paket khusus untuk sebagian besar distro mereka, karena mereka bergantung pada semua paket lainnya. Satu-satunya cara untuk memiliki dunia "paket sekali, jalankan di mana saja" adalah tidak hanya memiliki satu sistem paket, tetapi juga hanya satu distro.
Cian

9

Memiliki format paket yang sama tidak akan membantu. Anda tidak bisa menggunakan paket yang sama di distribusi lain. Anda bahkan tidak sering menggunakannya dalam versi berbeda dari distribusi yang sama. Dan bahkan membangun paket dapat memiliki masalah yang sama.

Untuk menginstal paket Anda harus memenuhi dependensi yang terbentuk selama pembuatan paket. Untuk membangun paket, Anda harus memenuhi dependensi build. Dan hal-hal ini berubah. Untuk dapat mengimplementasikan perubahan, lebih mudah untuk mendukung hanya paket yang dapat Anda modifikasi agar berfungsi setelah perubahan.

Jika semua dependensi akan sama, itu tidak akan menjadi distribusi yang berbeda atau versi berbeda dari distribusi yang sama.


4
Tidakkah mungkin untuk pustaka versi dan menggunakan dependensi versi untuk memecahkan masalah yang Anda sebutkan?
jldugger

Anda menyebutkan bahwa Anda tidak dapat menggunakan deb dari satu versi ke versi lain. Itu tidak sepenuhnya benar, ada pengecualian untuk aturan itu. Jika paket sebagian besar python, atau jika semua bit mana dikompilasi secara statis maka Anda bisa. Bahkan ada beberapa vendor yang hanya menyertakan semua dependensi sebagai bagian dari paket, ini menghabiskan ruang disk, tetapi membuat paket cross-platform.
Sakit kepala

Bahkan jika sebuah paket adalah arch: all, atau bahasa scripting, ada perbedaan yang signifikan antara python2.4 dan python2.6 yang akan menyebabkan paket yang berfungsi di platform yang dibuatnya, dan gagal pada yang lain.
jldugger

Ya, ini bukan hanya tentang dependensi perpustakaan.
iny

Beberapa pembaruan debian telah berubah di mana file seharusnya diletakkan, atau menyediakan sistem standar untuk memperbarui file konfigurasi yang sebelumnya dikelola secara manual .. hal semacam ini sangat khusus untuk versi / distro.
pjc50

7

Ada sedikit "Sindrom Tidak Diciptakan Di Sini", saya pikir. Sistem pengemasan Debian mendahului RedHat, namun lebih unggul dalam banyak hal, tetapi Anda tidak akan pernah melihat RedHat beralih. Sebaliknya, Anda melihat banyak orang menggunakan "apt-rpm" yang mencoba memberi Anda beberapa keuntungan dari apt dengan file rpm.


4
apt-rpm telah mati cukup lama (rilis terakhir lebih dari 1½ tahun yang lalu) sekarang dan kebanyakan orang telah pindah untuk menggunakan yum. Yum sendiri menyediakan cukup banyak fitur bagus yang melebihi penawaran apt ..
rasjani

1
Saya tidak percaya kemasan Debian lebih baik daripada Redhat hari ini. Dulu Debian memiliki sistem pembaruan yang lebih baik , tetapi sejauh ini tampaknya tidak benar lagi. Yum menjadi sangat baik. Masih lambat dibandingkan dengan Smart , tetapi sangat mudah dikelola.
niXar

1
Yang saya tahu adalah bahwa terakhir kali saya mengerjakan CentOS, kami jauh lebih mungkin untuk masuk neraka ketergantungan, dan beralih ke apt-rpm memperbaiki sebagian besar masalah tersebut.
Paul Tomblin

1
Kemasan RPM Redhat menderita EDS (sindrom dependensi ekstrim.) Ini bukan komentar tentang RPM melainkan Redhat. Yum adalah salinan yang bagus dari apt-get plus apt-search, dan membawa kegunaan untuk dunia yang sebelumnya misterius dari pemanggilan baris perintah RPM.
kmarsh

3
sebenarnya, format paket .deb dan .rpm adalah tentang bahkan secara teknis (tetapi, IMO .deb memiliki penanganan ketergantungan yang lebih baik, terutama dependansi versi, penyediaan, konflik, dan paket virtual). apt-get adalah apa yang bersinar pada tingkat teknologi, tetapi apa yang benar-benar membuat paket debian menonjol adalah seperangkat kebijakan pengembang yang didefinisikan dengan baik yang menetapkan standar yang harus dipatuhi paket. paket ubuntu mewarisi sebagian besar, dan ubuntu juga mewarisi juga budaya pengembang yang menyertainya.
cas



2

Saya pikir cletus, Wayne, dan mereka menjawab ini dengan cukup baik. Saya ingin menambahkan itu benar-benar, ini bukan masalah besar. Saya bekerja di lingkungan campuran di mana kami memiliki Gentoo (portage), SUSE (rpm / zypper), dan OpenBSD (paket dan port). Menginstal paket pada salah satu dari mereka tidak sulit, dan saya tidak terlalu peduli format apa yang mereka gunakan.

Dari perspektif perangkat lunak pengemasan, tidak terlalu sulit juga. Baik itu Gentoo, distro berbasis RPM, atau distro berbasis-deb, itu hanya bermuara pada memiliki resep untuk membangun perangkat lunak dan menambahkan beberapa metadata. Asalkan sistem build dari apa yang Anda coba paket tidak sepenuhnya gila, biasanya dibutuhkan sedikit lebih dari menulis skrip shell yang dimuliakan untuk membuat paket.


1

Yah selalu ada binari yang dikompilasi secara statis dalam bola tar .... ;-)


1
AKA "Slackware".
Paul Tomblin

Sayangnya ada masalah dengan binari terkompilasi secara statis yang perlu memuat pustaka sistem saat runtime (terutama nsswitch).
pjc50

1

Tidak ada definisi antarmuka biner standar untuk "Linux" karena itu hanya sebuah kernel. Kemungkinannya, tumpukan perangkat lunak Anda perlu berinteraksi dengan lebih dari sekadar kernel Anda, menghadirkan tantangan khusus dalam mempertahankan ABI standar di antara ratusan pohon sumber yang berbeda.

Pada topik alat pengemasan yang baik , saya lebih suka Debian GNU / Linux untuk format pengemasan biner yang luar biasa. Ini telah melayani 90% dari kebutuhan saya untuk alat dan aplikasi standar. Sisanya 10% dibangun dari sumber karena dimasukkannya komponen yang tidak bebas atau dependensi pustaka bersama kereta. Ketika aplikasi-aplikasi itu perlu digunakan, saya membuat biner khusus untuk kluster produksi.


1

Untuk mendapatkan build-sekali, jalankan format paket mana saja tanpa memaksa semua orang untuk menggunakan distribusi yang sama Anda memerlukan beberapa fitur penting:

  • Penamaan paket yang unik secara global, sehingga dua orang / distribusi tidak dapat secara independen membuat paket yang berbeda dengan nama yang sama.

  • Kemampuan untuk paralel menginstal berbagai versi perpustakaan ketika paket memiliki persyaratan yang saling bertentangan. Distribusi dapat memutuskan versi mana dari masing-masing perpustakaan untuk digunakan, dan memaksa semua paket untuk menggunakan versi itu. Sistem yang berfungsi lintas distribusi harus lebih fleksibel.

Zero Install menyediakan kedua fitur ini:

  • Nama adalah URI (mis. Http://rox.sourceforge.net/2005/interfaces/ROX-Filer ). Hanya pemilik domain yang dapat membuat paket di dalam namespace itu secara default.

  • Setiap versi dari setiap paket masuk ke direktori masing-masing. Setiap aplikasi hanya melihat perpustakaan yang dibutuhkannya, dengan versi yang kompatibel dengannya.

Misalnya, aplikasi Edit bergantung pada Python <3 seperti ini:

<command name="run" path="Edit/AppRun">
  <runner interface="http://repo.roscidus.com/python/python">
    <version before="3"/>
  </runner>
</command>

Lihat juga: http://www.osnews.com/story/16956/Decentralised-Installation-Systems

[Catatan: Saya adalah pengembang 0instal]

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.