Yazılımlar neden tek bir dosyada paketlenmiyor?


15

Windows programlarının çoğunun tek bir yürütülebilir dosyada paketlendiğini görüyoruz. Kurulum dosyasını çift tıklattığımda tüm dosyaları, ikili dosyaları ve kitaplıkları kurar.

Ubuntu'nun veya daha genel olarak linux paketlerinin bağımlılığını anlıyorum. Ama merak ediyorum, neden bunlar var. Tüm bağımlılıkları olan tek bir dosya oluşturmak mümkün değil mi? Bu yöntemle ilgili sorunlar nedir?

Lütfen nedeni ayrıntılı olarak vermeye çalışın.

Yanıtlar:


17

Bağımlılıkların programın kendisine dahil edilmemesinin ana nedeni, sistem bileşenlerinin kolayca güncellenebilmesidir.

Bir bağımlılığın beş farklı program tarafından kullanıldığını düşünün. Bu bağımlılıkta bir güvenlik açığı bulunursa, beş kopya yerine yalnızca bir kopyanın güncellenmesi gerekir.

Kullanıcı için, birden fazla paketin yüklenmesi önemli değildir - istediğiniz tek bir yazılım parçasının yüklenmesi bağımlılıklarını otomatik olarak kurar.


.Deb ve .exe paketleme arasındaki temel fark, Ubuntu yazılımının tek bir dosyada yayınlanmamasıdır. Temel fark, paketler içeren ve güncellemelerin kolayca sağlanabildiği bir yazılım havuzunun tüm konseptidir.

Bu, doğrudan internet bağlantısı olmayan bilgisayarlar için bazen sorunlu olabilir. APTonCD gibi bu zorlukların en aza indirilmesine yardımcı olan araçlar vardır .


2
bazen bizim gibi kullanıcılarla İnternet'e düzgün erişim olmadan önemlidir
Anwar

2
İnternetim yavaş olduğu için bu özellikten nefret ediyorum. Ve indirilen ubuntu yazılımlarını paylaşmak çok zordur, (Günlük yaptığım için apt-cache'yi önermeyin)
Tachyons

1
Ama sonra, özelliği gerçekten sevmelisiniz! Çünkü, bir kütüphaneyi beş kez indirmek yerine, sadece bir kez indirirsiniz. Ubuntu kurulumunuzdaki her programın kendi GTK + veya Qt kurulumu ile geldiğini düşünün! Bunlar çok büyük .
Michael Wild

4

Bu tamamen doğru değil. Ubuntu yazılımı genellikle tek bir .deb dosyasında gelir. Tamamen basit (ve yanlış) olan .deb dosyaları, pencereler için karşılık gelen .exe dosyasıdır. Windows'takiler de dahil olmak üzere tüm programlar, işletim sistemindeki (kitaplıklar) diğer dosyalara bağımlılıkları kullanır. Yükleme işlemi farklı işletim sistemlerinde az çok belirgindir. Bir programı indirmek için Ubuntu'daki yazılım merkezini kullandığınızda, yalnızca sisteminizde yüklü olmayan bağımlılıkları ve gerçek program dosyalarını indirirsiniz. Bu, sistemin, yinelenen dosyalar ve çakışmalara neden olabilecek yinelenen işlevlerle aşırı yüklenmesini önler.

İster inanın ister inanmayın, bir programın pencerelere veya Ubuntu'ya yüklenmesi arasındaki tek fark, kullanıcılara sağladıkları bilgi miktarıdır. Windows, kullanıcılarının aptal olduğunu ve bir exe dosyasını çalıştırırken ne yüklendiğini bilmelerini istemediğini düşünüyor. Linux'ta bu bilgiyi alırsınız ... bazı kullanıcılar için çok fazla ayrıntı vardır, ancak diğerleri (çoğu) bunu gerçekten takdir eder.

umarım mantıklıdır.


2
Kesinlikle doğru. Diğer dağıtımlar bile (Ubuntu kadar iyi değil) .rpms kullanır. Bir .exe, .deb veya her neyse, temelde kendisini farklı yerlere çıkaran büyük bir .tar olmasıdır! Windows'da, Program Dosyaları'na gider ve size bir ilerleme çubuğu gösterir, ancak linux'da size çok daha fazlasını gösterir.
WindowsEscapist

1
Ben bir exe dosyası büyük bir katran dosyası gibi öneri basitleştirme yönünde çok ileri gidiyor düşünüyorum. Bir tar dosyası çalıştırılamaz. Bir exe dosyası (doğal olarak). Yani (aslında hangi bir deb dosyası ile, bir olan bir katran dosyası) bu paket yöneticisi olduğu sistem oldukça zarif şeyin üstünde tutmak, böylece etrafında dosya taşıma fiili süreç kolları. Bir yükleyici programıyla (Windows'ta olduğu gibi), yükleyicinin kendisi bunu yapar. Bazı sistem bileşenleriyle, işleri düzenli tutmak için konuşabilir, ancak sadece böyle hissediyorsa.
Dylan McCall

1
Bunu özetlemenin en iyi yolu, Windows'un InstallShield ve NSIS gibi yükleyici program üreticilerine sahip olmasıdır. Linux için de böyle araçlar var. MojoSetup popüler bir tanesidir. Burası bazen bir programı indirdiğinizde ve yürütülebilir bir dosyaya sahiptir (genellikle .sh veya .run ile biter) ve size küçük bir sihirbaz verir. Bunlar genellikle paket yöneticisiyle konuşmaz ve Windows'ta yükleyici programları gibi çalışırlar. Bu notta, Windows Installer (.msi dosyalarıyla) uçlarındaki bu karışıklığı temizleme girişimidir;)
Dylan McCall

Linux yollarının Windows yollarından çok daha iyi olduğunu düşünüyorum. Ama evet Windows yolları basit ve kolaydır
Anwar

2
Karşılık Windows dosya formatı .debolduğunu .msi.
Eliah Kagan

3

Ubuntu'da, çoğu yazılım tek bir dosyada gelir. *.debPaket yöneticinizden indirilen, paketten çıkarılan ve kurulan bir debian paket dosyasıdır.

Ubuntu neden çoğu Windows yazılımı gibi kendi kendine ayıklanan yürütülebilir dosyalardan yazılım yüklemiyor?

Çünkü kendiliğinden açılan *.exedosyalar kabul etmek için çok tehlikeli bir öneridir.

Debian / Ubuntu gibi kendiliğinden açılan yürütülebilir dosyalar ile paketleme sistemi arasındaki en kritik farklar şunlardır:

  • Güvenlik
  • şeffaflık
  • Daha ayrıntılı denetim

Daha ayrıntılı olarak:

Güvenlik

Windows dünyasında bu tek *.exedosyaya güvenmelisiniz . Kişi gerçekten güvenilir olduğundan nasıl emin olabilir? Bir şey yüklediğini nasıl bilebilirsiniz? Arkanızda başka şeyler yapmadığından nasıl emin olabilirsiniz?

Ubuntu'da, tüm paketler dijital olarak imzalanır, bu yüzden ayrı bir paket dosyası (paket yöneticisi (müon, sinaptik, yetenek veya hatta düz uygun) olsun), paketlenmeden önce , tek başına kurulsun, doğrulanmış olsun . Bu, elbette, depolara güvendiğinizi varsayar. Ubuntu depolarına (tek bir otorite) güvenebileceğiniz yüzlerce tanıdık olmayan farklı kaynaklardan daha çok güvenmeyi tercih ederim.

Taneli Kontrol

Bir *.exedosya ile temelde bir şey yapabilirsiniz: yürütün. Ubuntu'da, yüklenip yüklenmeyeceğine karar vermeden önce paketin içeriğini, açıklamalarını, yapılandırmalarını, tek tek dosyaları, en son değişiklikleri, hata düzeltmelerini vb. Paket yöneticinizin rahatlığından inceleyebilirsiniz .

Bir *.exedosyadan yüklediğinizde, onun 'kaldırma' kancasına da güvenmeniz gerekir (ve tüm *.exedosyaların bir tane olması garanti edilmez ). Ubuntu'da, paket yöneticisi tarafından kurulan standart paketlere ait tüm dosyalar her zaman kaldırılabilir, çünkü bu paketin kendisinin değil, paket yöneticisinin bir işlevidir. Paket yöneticisi, hem yükleyiciyi hem de kaldırıcıyı sağlayan ayrı ve güvenilir bir uygulamadır, paket kaldırma kancasını sizden alamaz. Tabii ki, kötü niyetli bir paket yükleme sonrası eylemlerle gizlice gizlenebilir, ancak bu yüzden resmi depo sistemine ve bunları korumak için güvendiğimiz kişilere sahibiz.

şeffaflık

Daha da ileri gidiyor. Ubuntu'da sistemime gerçekten güvenebilirim, çünkü yazılımı birçok seviyede doğrulayabilirim. Nihai seviye kaynak koduna bakabiliyor. ikili paketler karşılık gelen kaynak paketlerine sahiptir. Aslında kaynağa bakabilirim (Örnek: ' apt-get source bash ' size tam kaynağı bash kabuğuna verecektir). * .Exe dosyaları dünyasında, genellikle sadece ikili dosyalar vardır ve bunların perde arkasında neler yaptığını kim bilebilir?

Bununla birlikte, kurallarda her zaman istisnalar vardır, ancak benim için güvenlik ve güven, bileşenleri sistemime yüklemek için standart bir yol olarak doğrulanması zor olan yüzlerce farklı kaynaktan ikili çalıştırmayı kabul edemediğim anlamına gelir.


2

Başkaları tarafından söylenenlere ek olarak, bazen tek bir yazılım parçası birkaç pakete ayrılır, çünkü tüm özellikler tüm kullanıcılarla ilgili değildir. Örneğin, bir programın belgeleri hacimli ise, genellikle ayrı bir paket tarafından sağlanacaktır. Bu, bu isteğe bağlı özelliklerle ilgilenmeyen kullanıcıların, disk alanından ve bant genişliğinden / indirme süresinden tasarruf etmesini sağlar.


0

Bağımlılıklar hakkındaki anlayışımı paylaşmaya çalışalım (Evet, Ubuntu'nun veya daha genel olarak Linux yazılım yönetiminin değerinin farkındaydım. Sadece tüm iyi fikirleri ve akılları merkezi bir şekilde bir araya getirmeye çalışıyordum, böylece bazılarını gösterebilirim. arkadaşlarım) .

Windows Yazılımları çoğunlukla tek bir dosyada paketlenir. Bu onların bağımlılıkları olmadığı anlamına mı geliyor?

Hayır, neredeyse tüm yazılımların diğer bazı yazılımlara bağımlılığı vardır. (Yazılım çok düşük düzeyde değilse ve İşletim Sisteminin kendisi gibi doğrudan donanımla konuşamazsa) . Microsofts'un yazılımları bağımlılıktan uzak değildir. Öyleyse, önemli soru şu: bunu nasıl ele alıyorlar?

Cevap: Bunu kendi geleneksel yollarıyla ele alıyorlar. Çoğu kullanıcılarını aptal olarak kabul ettiklerinde, tüm bağımlılığı tek bir dosyaya koyarlar ve daha büyük boyutlu (1 dosyalanmış) Yazılımla sonuçlanırlar.
Örnek olarak, bkz. Microsoft için piyasaya sürülen Oyunlar. Hemen hemen her oyun DirectX kurulumları içerir, ancak kullanıcılar zaten bunların güncellenmiş sürümlerine sahip olabilir.

İşte Google'da neden DirectX'in her oyuna dahil olduğu hakkında bulduğum bir şey.

Binary'nin daha sonraki bir sürümü zaten yüklenmiş olsa bile, bu sürüm kullanılamaz ve DirectX yüklemeniz güncel olsa bile, yükleyicinin tümünü yüklemesi garanti edilmeyen daha yeni bir sürümünü çalıştırdığınız için önceki sürümler. Daha da kötüsü, x86 için bir sürüm yüklüyse, aynı sürümün x64 için yüklendiğini garanti etmez, bu nedenle 64 bit ve 32 bit oyunların aynı tam yükleyici sürümünü çalıştırması gerekebilir, ancak çalıştırıldığında farklı platformları hedefleyebilir.

makalenin tamamı için buraya tıklayın . Kullanım bağımlılığı konusunda çok başarılı olmadıkları açıktır.

Çoğu zaman, zaten bağımlılıklara bakılmaksızın, basitlik (kullanıcıları için) kazanmasını sağlarlar . Ayrıca kaç çalışma yazılımının .NET çalışma zamanı bileşenlerini içerdiğini görün.
Deneyimlerimden başka bir örnek: Bir kez bir MS yazılımı indirip yükledim. Süreçten memnun kalarak, yazılımı açmak için simgeye tıkladım, ancak o zaman bana "Çalışması için Java'ya ihtiyacım var" diyor. Böyle bir durum hiçbir zaman Linux dünyasında paket yönetimi yoluyla gerçekleşmez. (.deb dosyalarını depo sitesinden indirmeyi ve MS biçiminde çift tıklatarak yüklemeyi denemediğiniz sürece) .

Linux bu bağımlılık sorununu nasıl ele alıyor?

Linux veya Ubuntu, yazılımı kullanmak için bağımlılıkların olması gerektiği gerçeğini gizlemez (Microsoft yolunun aksine). Ancak bileşenleri yüklediğinizde, aynı bileşene bağlı olan başka bir yazılım, önceden yüklenmiş yüklü bağımlılıkları kullanır (her şeyi içeren MS yazılımlarının aksine).

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.