Linux geliştiricileri neden evrensel bir paketleme biçimi oluşturamıyor?


14

İkili pakette Tedarikçi firma biçimi seçimleri Murphy Kanunu biçimi tarafından belirlenecek görünür: Tüm dağıtımlar yok kullanım paketleri var. (Corralary: Yazılım yığınınızın dağıtım bağımlılıklarını karşılayan bir dağıtım yoktur).

Bu, "bir kez inşa et, herhangi bir yerde çalıştır" paket biçiminin ortaya çıkışını görmediğimiz bir siyaset midir, yoksa daha derin bir şey midir?


3
dağılımları birbirinden neyin farklı kıldığına dair sadece yüzeysel bir anlayışa sahip gibi görünüyorsunuz. paket sisteminin birleştirilmesi yine de paketlerin dağıtımlar arasında değiştirilebilir olduğu anlamına gelmez. bu nedenle sorunuz anlamsız.

3
hop, dağılımlar arasındaki farkların daha az yüzeysel bir tanımını veren bir cevap yazmıyorsunuz? Soru safça belirtiliyor, ancak verilmeyi bekleyen derin bir teknik cevap var.
jldugger


Windows geliştiricileri neden evrensel bir paketleme biçimi oluşturamıyor? Burada Windows'u torbalama, ancak yazılımı yüklemenin gibi pek çok yöntem vardır ve Linux gibi tek depo (bu btw retorik bir soru) ... ya sahip değil
Mark Henderson

Yanıtlar:


24

Joel Spolsky'yi bu konuda alıntılamak uygun görünüyor :

(Bu arada, gizli ama politik olarak yüklü blog sendikasyon feed formatları dünyasını takip edenler için, aynı şeyi orada da görebilirsiniz. RSS birkaç farklı versiyonla, yanlış spesifikasyonlarla ve çok sayıda politik dövüşle parçalandı, Atom adında başka bir biçim oluşturarak her şeyi temizleme girişimi, RSS'nin birkaç farklı sürümünün yanı sıra Atom'un bir sürümü, yanlış özellikler ve çok sayıda politik dövüşle sonuçlandı. Üçüncü bir alternatif oluşturarak iki karşıt gücü birleştirmeye çalıştığınızda, sadece üç karşıt güçle sonuçlanırsın. Hiçbir şeyi birleştirmedin ve gerçekten hiçbir şeyi düzeltmedin.)

(vurgu eklendi)

Linux için (en az) iki paketleme sisteminiz var. Bu aslında iyi bir şey. Tek bir sistem basitçe üçüncü bir sistem oluşturacaktır.


Re: Üçüncü bir alternatif oluşturarak iki karşıt gücü birleştirmeye çalıştığınızda, sadece üç karşıt güçle sonuçlanırsınız. ayrıca bkz : xkcd.com/927
JamesBarnett

20

Bunun birçok nedeni var ve biraz tarih olayları perspektife sokmak için.

"Linux" hakkında konuştuğumuzda, genel olarak bahsettiğimiz şeyin birçok farklı Linux dağıtımından biri olduğunu unutmayın . "Linux" aslında sadece bir işletim sistemi çekirdeğidir.

Linux'un asıl amacı PC'lerde (başlangıçta 386) çalışacak Unix tabanlı bir sistem oluşturmaktı. İlk adım çekirdeğin kendisini yaratmaktı. İken Linus Torvalds çekirdek üzerinde çalıştığını Richard Stallman kendi üzerinde çalışıyordu Ücretsiz altında Unix sisteminde, GNU (GNU Unix Değildir) projesi . Uzun bir hikaye kısaltmak için, ikisi bir şekilde yakınsadı, çünkü GNU ilişkili yardımcı programlara (C derleyici / kitaplık / oluşturma araçları, kabuk, metin editörleri vb.) Sahipti, ancak üzerinde çekirdek yok ve Linux'un çekirdeği vardı ama kitleler için yararlı hale getirmek için üstüne çalıştırın.

Bu yakınsama resmi olarak GNU / Linux olarak biliniyordu. Birçok dağıtımın hâlâ kendilerini GNU / Linux dağıtımları olarak adlandırdığını göreceksiniz.

GNU / Linux'un Özgür ve açık doğası nedeniyle, herkes onu alabilir ve kendi zevklerine göre paketlenmiş bir sistem oluşturabilir. Sonuç olarak, bu sistemlerin oluşturulması için, her birine uymak için neredeyse aynı sayıda farklı paket yönetim sistemi yaratmanın yan etkisi olan birçok farklı yapılandırma yöntemi akışı kullanılmıştır.

Her farklı komple sistemin yıllar boyunca kendilerine yapışan kendi güçlü takipçileri vardı ve bugün sahip olduklarımızla sonuçlandı: RPM , APT / dpkg ve Gentoo'nun Portage gibi bir avuç yaygın olarak kullanılan, derin köklü ve istikrarlı paket yönetim sistemleri .

Autopackage gibi sorunu çözmeye çalışan projeler var , ancak çeşitli desteklenen paket yönetim sisteminin sürekli gelişimi, takip edilecek birçok hareketli hedef olduğu anlamına geliyor.

Bazı yazılım satıcılarının yaptıkları şey, ihtiyaç duydukları belirli ikili dosyaları ve bağımlılık kopyalarını belirli sistemlerde çalışacak tek bir büyük pakette birleştirmektir.


8
Bundan daha fazlası var. Tüm dünya rpm'de birleşse bile, hala bir kez paketiniz olmazdı, OP'nin öngördüğü herhangi bir yerde koşun. Paketler çoğunlukla diğer tüm paketlere bağlı oldukları için dağıtımlarına özgüdür. "Bir kez paket, her yerde koş" dünyasına sahip olmanın tek yolu, sadece tek bir paketleme sistemine değil, aynı zamanda sadece tek bir dağıtıma sahip olmaktır.
Cian

9

Aynı paket formatına sahip olmak yine de yardımcı olmaz. Aynı paketi diğer dağıtımlarda kullanamazsınız. Sıklıkla aynı dağıtımın farklı sürümünde bile kullanamazsınız. Ve paketi inşa etmek bile aynı problemlere sahip olabilir.

Bir paket kurmak için, paketin oluşturulması sırasında oluşan bağımlılıkları karşılamanız gerekir. Bir paket oluşturmak için derleme bağımlılıklarını karşılamanız gerekir. Ve bunlar değişiyor. Değişiklikleri uygulayabilmek için, yalnızca değişikliklerden sonra çalışmak üzere değiştirebileceğiniz paketleri desteklemek daha kolaydır.

Tüm bağımlılıklar aynı olsa, farklı bir dağıtım veya aynı dağıtımın farklı bir sürümü olmaz.


4
Bahsettiğiniz sorunu çözmek için kütüphaneleri sürümlendirmek ve sürüm bağımlılıklarını kullanmak mümkün olmaz mı?
jldugger

Bir versiyondaki borçları başka bir versiyonda kullanamayacağınızı söylüyorsunuz. Bu tamamen doğru değil, bu kuralın istisnaları var. Paket çoğunlukla python ise veya statik olarak derlenen tüm bitler varsa yapabilirsiniz. Paketin bir parçası olarak tüm bağımlılıkları içeren birkaç satıcı bile vardır, bu disk alanını boşa harcar, ancak platformlar arası bir paket oluşturur.
Zoredache

Bir paketler arch: all veya betik dilleri olsa bile, python2.4 ve python2.6 arasında, kurulduğu platformda çalışan ve diğerlerinde başarısız olan bir pakete neden olacak önemli farklılıklar vardır.
jldugger

Evet, sadece kütüphane bağımlılıklarıyla ilgili değil.
iny

Debian güncellemelerinin bazıları, dosyaların yerleştirilmesi gereken yerlerde değişti veya daha önce manuel olarak yönetilen yapılandırma dosyalarını güncellemek için standartlaştırılmış sistemler sağladı.
pjc50

7

Biraz "Burada Bulunamadı Sendromu" var sanırım. Debian'ın paketleme sistemi RedHat'tan önce gelir, ancak birçok yönden daha üstündür, ancak RedHat geçişini asla göremezsiniz. Bunun yerine, "apt-rpm" kullanan bir çok insan size rpm dosyaları ile apt avantajlarını sunmaya çalışır.


4
apt-rpm bir süredir öldü (1 ago yıl önce son sürüm) ve çoğu insan yum kullanmaya başladı. Yum kendisi apt teklifleri gölgede oldukça güzel özellikler sunar ..
rasjani

1
Debian'ın ambalajının bugünkü Redhat'lardan daha iyi olduğuna inanmıyorum. Debian'ın daha iyi bir güncelleme sistemine sahip olmasıydı , ancak bu artık çok doğru görünmüyor. Yum çok iyi oldu. Akıllı ile karşılaştırıldığında hala yavaş , ama çok yönetilebilir.
niXar

1
Tek bildiğim, CentOS üzerinde en son çalıştığımda, bağımlılık cehennemine girme olasılığımız daha yüksekti ve apt-rpm'ye geçmek bu sorunların çoğunu düzeltti.
Paul Tomblin

1
Redhat'ın RPM ambalajı EDS'den (aşırı bağımlılık sendromu) muzdarip. Bu RPM hakkında bir yorum değil, Redhat. Yum, apt-get plus apt-search'nin güzel bir kopyasıdır ve RPM komut satırı çağırma işleminin daha önceki gizli dünyasına kullanılabilirlik getirir.
kmarsh

3
aslında, .deb ve .rpm paket biçimleri teknik olarak bile geçerlidir (ancak, IMO .deb daha iyi bağımlılık işleme, özellikle sürümlü bağımlılıklar, sağlama, çakışmalar ve sanal paketler içerir). apt-get, teknoloji düzeyinde parlayan şeydir, ancak debian'ın paketlerini gerçekten öne çıkaran şey, paketlerin uyması gereken standartları belirleyen iyi tanımlanmış geliştirici politikaları setidir. ubuntu paketleri bunu büyük ölçüde miras alır ve ubuntu da onunla birlikte gelen geliştirici kültürünü miras alır.
cas



2

Sanırım cletus, Wayne ve iny buna oldukça iyi cevap verdi. Bunu gerçekten eklemek istiyorum, bu çok büyük bir anlaşma değil. Gentoo (portage), SUSE (rpm / zypper) ve OpenBSD (paketler ve portlar) bulunan karma bir ortamda çalışıyorum. Bunlardan herhangi birine paket yüklemek zor değildir ve hangi formatı kullandıklarını umursamıyorum.

Paketleme yazılımı açısından bakıldığında, bu çok da zor değildir. Gentoo, RPM tabanlı bir dağıtım veya deb tabanlı bir dağıtım olsun, gerçekten sadece yazılımı oluşturmak ve bazı meta veriler eklemek için tariflere sahip olmakla ilgilidir. Paketlemeye çalıştığınız şeyin derleme sistemi tamamen delice değilse, genellikle bir paket oluşturmak için yüceltilmiş bir kabuk betiği yazmaktan biraz daha fazlası gerekir.


1

Peki katran topları her zaman statik olarak derlenmiş ikili var .... ;-)


1
AKA "Slackware".
Paul Tomblin

Maalesef, çalışma zamanında sistem kitaplıklarını (özellikle nsswitch) yüklemesi gereken statik olarak derlenmiş ikili dosyalar ile ilgili sorunlar var.
pjc50

1

"Linux" için standart bir ikili arayüz tanımı yoktur, çünkü bu sadece bir çekirdektir. Oranlar, yazılım yığınınızın sadece çekirdeğinizden daha fazlasıyla arayüz kurması gerekecek ve yüzlerce farklı kaynak ağaç arasında standart bir ABI sürdürmek için özel bir zorluk sunacak.

Başlığı altında iyi paketleme araçları, onun 'için mükemmel ikili ambalaj biçimi için Debian GNU / Linux tercih ederim. Standart araç ve uygulamalara olan ihtiyacımın% 90'ını karşıladı. Geri kalan% 10, özgür olmayan bileşenlerin veya buggy paylaşılan kitaplık bağımlılıklarının dahil edilmesinden kaynaklanmaktadır. Bu uygulamaların dağıtılması gerektiğinde, üretim kümeleri için özel ikili dosyalar oluştururum.


1

Bir kez bir derleme elde etmek için, herkesin aynı dağıtımı kullanmaya zorlamadan herhangi bir yerde paket biçimini çalıştırın: birkaç önemli özelliğe ihtiyacınız vardır:

  • Genel olarak benzersiz paket adlandırma, böylece iki kişi / dağıtım bağımsız olarak aynı ada sahip farklı paketler oluşturamaz.

  • Paketlerin çakışan gereksinimleri olduğunda kitaplıkların farklı sürümlerini paralel olarak yükleme yeteneği. Dağıtım, her kitaplığın hangi sürümünün kullanılacağına karar verebilir ve tüm paketleri bu sürümü kullanmaya zorlayabilir. Dağıtımlarda çalışan bir sistem daha esnek olmalıdır.

Sıfır Kurulum aşağıdaki özelliklerin her ikisini de sağlar:

  • İsimler URI'lardır (örn. Http://rox.sourceforge.net/2005/interfaces/ROX-Filer ). Varsayılan olarak yalnızca bir etki alanının sahibi bu ad alanında paketler oluşturabilir.

  • Her paketin her sürümü kendi dizinine gider. Her uygulama, uyumlu olduğu sürümlerle yalnızca ihtiyacı olan kütüphaneleri görür.

Örneğin, Düzenle uygulaması şu şekilde Python <3'e bağlıdır:

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

Ayrıca bkz: http://www.osnews.com/story/16956/Decentralised-Installation-Systems

[Not: Ben bir 0install geliştiricisiyim]

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.