Programlar neden derlenmiş biçimde dağıtılmıyor?


32

Ama onlar gibi talimatlar veriyorlar

cd downloaded_program
./configure
make install

Bu, gerekli olan ELF'yi ve muhtemelen bazı .so dosyalarını oluşturur.

Neden Windows uygulamaları gibi, indirmek için bir zip dosyasının içine koymak? Kullanıcı tarafından derlenmeleri için herhangi bir neden var mı?


18
nasıl olur kaynak kod dağıtılır. Bunu ubuntu ile etiketlediniz. Bunları denediniz aptmi?
mikeserv

11
Ubuntu: 40.000 En yaygın programlar: $ sudo apt-get install [name]. Daha nadir yazılım: Bazıları {cmake .. && make, ./configure && make, waf, scons, vb.
Knud Larsen

6
Üç Windows © sürümünüz ve ~ 100 "Linux OS" sürümünüz var. (40.000) en yaygın programı daha sürdürmek ve saklamak imkansız.
Knud Larsen

35
bu soru sadece yanlıştır. çoğu yazılım tipik ikili formatta dağıtılacak IS .rpmveya .debveya .tgzpaketler. Kaynak ayrıca, kendisini derlemek, incelemek veya değiştirmek ya da bir ya da daha fazla dağıtım için paketlemek isteyenler için dağıtılmıştır. .zip.Zip dosyaları kullanıcı, grup ve içerdikleri dosyalar için izinler gibi temel bilgileri desteklemediğinden, kimse ikili dosyaları dağıtmak için kullanmaz .
cas

2
Çalıştırmak istediğim herhangi bir Linux programını derlemeye ihtiyacım var. Yürütülebilirler her zaman mevcuttu ... şimdiye kadar.
user2338816

Yanıtlar:


34

Faktörleri analiz edelim ...

Analiz :

PLATFORMUNA GÖRE BAĞIMSIZLIKLAR : Geliştiricilerin, bir uygulamanın mimariye özgü çeşitli türevlerini oluşturduğu ve sürdürdüğü bir ortamda ortaya çıkan bazı sorunlar vardır:

  • Farklı değişkenler için farklı kaynak kodları gerekir - Farklı UNIX tabanlı işletim sistemleri aynı görevi gerçekleştirmek için farklı işlevler kullanabilir (örneğin, strchr (3) vs. index (3)). Benzer şekilde, farklı değişkenler için farklı başlık dosyaları eklemek gerekebilir (örneğin, string.h vs. strings.h).

  • Farklı varyantlar için farklı yapım prosedürleri gereklidir - Farklı platformlar için yapım prosedürleri değişiklik gösterir. Farklılıklar, derleyici yerleri, derleyici seçenekleri ve kitaplıklar gibi ayrıntıları içerebilir.

  • Farklı değişkenler için inşalar ayrı tutulmalıdır - Tek bir kaynak ağacı olduğundan, bir mimarinin nesne modüllerinin ve çalıştırılabilirlerinin diğer mimarilerinkilerle karıştırılmamasına özen gösterilmelidir. Örneğin, link editörü SunOS – 4 için inşa edilmiş bir nesne modülü kullanılarak çalıştırılabilir bir IRIX – 5 oluşturmaya çalışmamalıdır.

  • Her işletim sisteminin kendi bağlantı yönetimi şeması vardır ve ELF (Yürütülebilir ve Bağlama Biçimi) dosyasını gerektiği gibi hazırlaması gerekir.

  • Derleyici, bir talimatlar dizisi olan bir yapı oluşturacak ve farklı mimariler, farklı komut kümeleri anlamına gelecektir ( Öğretim Seti Mimarilerinin Karşılaştırılması ). Bu nedenle, derleyicinin çıktısı her mimari için ayrıdır (Örn: x86, x86-64, ARM, ARM64, IBM Power ISA, PowerPC, Motorola'nın 6800, MOS T 6502 ve diğerleri )

GÜVENLİK :

  • Bir ikili dosya indirirseniz, onun ne dediğini yapıp yapmadığından emin olamazsınız, ancak kaynak kodunu denetlemeyi ve sisteminizde kendinden derlenmiş bir ikili dosya kullanmayı deneyebilirsiniz. Buna rağmen, Techmag kullanıcısı yorumunda iyi bir noktaya değindi ; kodu denetlemek, kodu değerlendirmek için bilgili ve yetkin kodlayıcılar gerektiriyor ve bir güvenlik garantisi değil.

PAZAR : Bu bölümde birçok faktör var, ancak devam ettirmeye çalışacağım:

  • Her firma tüm platformlara ulaşmayı hedeflemiyor, pazara, platformların popülerliğine ve ne satmak istediğine bağlı.

  • Özgür yazılım, yazılımı mümkün olduğunca yaygın bir şekilde kullanıma sunma ruhuna sahiptir, ancak yazılımın her platform için tasarlandığı anlamına gelmez, onu destekleyen topluluğa bağlıdır.

Sonuç :

Her yazılım her platform için tasarlanmamıştır. Tüm mimariler ve platformlar için ikili dosyalar sağlamak, onu derlemek, test etmek ve tüm platformlarda bakımını yapmak anlamına gelir. Bu bazen çok pahalı olan daha fazla iş ve kullanıcı kendi platformunda derlenirse önlenebilir. Ayrıca, kullanıcı neyi yürüttüğünü anlayacaktır.


1
Bu cevabın işlemci modeli farklılıkları konusunda biraz daha açık bir şekilde ortaya çıkacağını düşünüyorum - ve yaklaşık 10 yıl önce, her Unix varyantının temelde kendilerine ait olduğunu. Linux bugün olduğu kadar yaygın bir etki değildi.
Sobrique

@Sobrique: Hatta kendi başına işlemci modeli farklılıklarından bahsetmek bile - 10 yıl önce bugün sahip olduğumuz 2 tipten daha fazlası vardı ve Linux neredeyse hepsine koştu (kendimi Linux üzerinde PowerPC'de çalıştırdım). Bugün hala x86, AMD64 (aksi takdirde x86-64 olarak da bilinir) ve ARM ile ilgilidir. MIPS bugün kendi cipslerini üretebilen insanlar arasında hala oldukça popüler çünkü şimdiye dek tamamen patentsiz.
Slebetman

Gecikme için üzgünüm! İkinize de teşekkürler! CPU mimarilerine bazı referanslar ekledim, ayrıca karşılaştırma listesine bir link ekledim. Cevabın o kadar büyük olmasını istemiyorum. Ama evet, çok alakalı!
Facundo Victor

1
Güvenlik yorumu, okuyucu / yükleyicinin kodu okumayı ve anlamayı bildiğini belirtir. Mermi kovanının kırılganlığının fark edilmeden on yıllarca yaşadığı göz önüne alındığında, bunun biraz yanlış bir inanç olduğunu saygılı bir şekilde öneririm. Bilgili ve yetkin kodlayıcıların evet kodunu kullanmalarına izin verir, ancak reklamı olduğu kadar gerçek bir güvenlik engelleyici değildir. Aslında tam tersi bir etkiye sahip olabilir. Devlet ve organize suç destekli bilgisayar korsanlarının, açık kaynak kütüphanelerinin / projelerinin tüm malikâne kodlarına muhtemelen bir sonraki
mermi

Haklısın! Bunun cevabını değiştirdim. Cevabın asıl amacına odaklanmamayı denedim. Teşekkürler Techmag!
Facundo Victor,

10

Hem * nix hem de diğer pek çok platform ve yazılım ortamı var, yazılımın çalıştırılabileceği, bir uygulama (veya uygulamalarla kullanmak üzere kütüphane) oluşturmanıza olanak tanıyan, destekleyici tek gerçekçi yöntemdir. Bu bileşenlerin birçok kombinasyonunu "iyi" bir yazılım öğesi olarak yapar. Tabii ki, GPL gibi lisanslar kaynak kodunun kullanılabilir olmasını gerektirir - bu nedenle yazılım düzgün çalışmasa bile, genellikle mümkündür (neyin yanlış olduğunu ve nasıl düzeltileceğini anlamak zor olabilir). ya da yaratıcının yapması / yapamaması / kalmaması durumunda bile, dalmaya ve düzeltmeye bazı üçüncü taraflar .

Yazılımın kaynak kod olarak dağıtılması aynı zamanda , yazılımın iddia ettiği şeyi yaptığı veya yerine kötü bir şey yapmadığı bağımsız bir doğrulama yapılmasını da sağlar ;


8

İlk olarak, sorunuzun kusurlu bir öncül dayanmaktadır. Programlar edilir derlenmiş formatta dağıtılacak!

Çoğu diğer Linux dağıtımlarında ve daha genel olarak çoğu Unix versiyonlarında olduğu gibi Ubuntu'ya yazılım kurmanın normal yolu da bir paket kurmaktır. Ubuntu'da, yazılım merkezini veya başka bir paket yöneticisini açar ve mevcut yazılıma göz atarsınız. Yükleme için bir paket seçtiğinizde, dosyalar (paket bir program içeriyorsa) makinenize indirilir ve yüklenir.

Varsayılan olarak, paket yöneticisi size dağıtım uzmanları tarafından yapılan paketleri sunar. Ayrıca üçüncü taraf paket kaynaklarını da bulabilirsiniz; Ubuntu, PPA'nın üçüncü taraflara paket sunması için standart bir yol sunar.

Yazılımı yazardan derlenmiş biçimde indirmek son çaredir. Bunu yalnızca, yazılım paketlenecek kadar popüler değilse veya paketlenmemiş en son sürüme ihtiyacınız varsa yapmanız gerekir. Çoğu insan bunu asla yapmaz.

Yazılım bir dağıtım için paketlenmediğinde, genellikle ikili biçimde değil, kaynak biçimde dağıtılır. Bunun Linux dünyasında, bunun nadiren Windows dünyasında sıklıkla yaşanmasının iki ana nedeni vardır. Bunun bir nedeni, Linux'ta açık kaynaklı programların oranının çok daha yüksek olmasıdır. Açıkçası, eğer bir programın kaynak kodu mevcut değilse, tek dağıtım şekli ikiliktir. Diğer sebep, Linux dünyasının çok daha çeşitli olması. Her uyumsuz kitaplık sürümü kümesi için farklı ikili dosyalar gerekir; bu, her dağıtımın her sürümü için genellikle farklı ikili dosyalar anlamına gelir. Windows bunu, her paket yazarının programla birlikte kullandıkları kütüphaneleri dağıtmasını sağlayarak “çözer” (sonuç: bilgisayarınız her kitaplığın çok sayıda kopyasını depolar, onu kullanan program başına bir tane; bir hata bir kitaplıkta giderilirse, onu kullanan her programın bir güncelleme göndermesi gerekir) ve işletim sisteminin yeni bir versiyonunu sadece üç yılda bir piyasaya sürerek. Unix çok daha fazla çeşitliliğe ve çok daha zamanında hata düzeltme alışkanlığına sahiptir ve farklı dağıtımlar için farklı ikili dosyalar oluşturarak kütüphane dağıtım sorunlarını çözer.


5

Linux, sadece belirli bir CPU platformunda çalışmaktadır. ELF dosyalarını (veya başka bir tür ham yürütülebilir dosya) dağıtırsanız, Linux'un bazı sürümlerinin yazılımı çalıştırmaması ihtimali vardır. Yazılımın mümkün olduğunca yaygın bir şekilde kullanılması ruhunda, kaynak kodunun kullanılması tercih edilir. Örneğin, Linux Sparc, Intel, AMD, ARM ve diğer işlemci türlerinde çalışır.

ELF dosyası özellikle Intel işlemcileri hedef alıyorsa, örneğin, diğer donanım türleri yazılımı çalıştıramadı. ELF platformdan bağımsızdır, ancak barındırdığı kodun bir platformun makine koduna uyması gerekir. Kaç tane dağıtımın benzer paketlere sahip olduğunu göreceksiniz (örneğin, farklı işlemcileri desteklediğinde _386 ve _586 paketleri) - doğru işlemi elde etmek için doğru ELF dosyasını yüklemelisiniz.

Benzer şekilde, farklı kesmeler, bağlayıcılar vb. Kullanan özel bir Linux sürümü oluşturmaya karar verirsem, kodu derlemek için hala kaynak koduna ihtiyacım var. Kaynak kodun platforma özgü derleme talimatları olmasa bile, her platform farklıdır ve bir ELF'i farklı bir sistemden çalıştırmayabilir.


İşte bu yüzden, "64 bit" Windows işletim sistemindeki diğer birçok program gibi, 32 bit firefox kullanıyor olmalısınız, 64 bit linux ise genellikle 64 bit bir uygulama çalıştırmaktadır.
Mchid

5

Kaynak olarak dağıtımın asıl nedeni kesinlikle platform çeşitliliği idi; Linux topluluğu, hem bunun için hem de yeni, kısmen politik nedenlerle bu metodolojiyi sürdürmüştür.

Örneğin, Windows’tan farklı olarak Linux, herhangi bir ABI’yi (uygulama ikili arayüzü) uzun süre boyunca sabit tutmak için hiçbir zaman zahmete girmedi - uygulanabilir biçimler, kütüphane API'leri ve yeni donanım platformları için destek gibi konularda yenilik yapma olasılığını korudu / daha fazlası kabul edildi. önemli.

Ticari işletim sistemleri inovasyon konusunda çok disiplinli ve uzun süreli uygulama uyumluluğu sağlar; yeni bir özellik / yazılım arayüzü her zaman eski bir eke eklenmelidir - iki şey yapılmasını gerektirir ve serbest bırakıldıktan sonra bir şeyleri değiştirmenin fiyatının çok yüksek olduğu düşünülmelidir. Alternatif olarak, işletim sisteminiz için yazılım yazan herhangi biriyle birlikte planlı uygulama eskimişliği gerçeğini benimseyebilirsiniz (bu MS'te değil, başka bir işletim sistemi sağlayıcısında ipucu değildir).

Yalnızca ikili biçimde dağıtılan yazılımlar için (belirli bir Linux dağıtımı dışında) uzun vadeli kararlı bir platform elde etmek, Linux topluluğunun bazı unsurları tarafından istenmez bile kabul edilir. Her iki platformun unapologetic kullanıcısı olarak, bunun iyi ya da kötü olduğunu söylemiyorum; olduğu gibi.


4

Çoğu durumda (en azından * nix dünyasında), kaynak kod yazılımın en taşınabilir versiyonudur. Kaynağa sahip olmak, paylaşılan yazılımın muhtemelen destekleyebilecek her platformda çalışacağını garanti eder (çoğu durumda yalnızca POSIX uyumludur). İkili dosyaların serbest bırakılması, yalnızca bu ikili dosyaların piyasaya sürüldüğü platformlarla (hem yazılım hem de donanım) uyumluluğu garanti eder.

Pencerelerde, ikili dosyaların paylaşım yazılımı için en kullanışlı ve taşınabilir form olduğunu düşünün. Derleme kaynağı, normal Windows yazılım dağıtım modelinin bir parçası olmadığından, Microsoft ikili sistemlerin işletim sistemlerinin birden fazla sürümünde çalışmasını sağlamak için uzun yıllar geçmiştir: http://www.joelonsoftware.com/articles/APIWar.html


5
Windows, altta yatan mimariye de bağlı. ARM etkin Windows uygulamaları normal dizüstü bilgisayarlarda / masaüstlerinde çalışmaz. Linux'un daha iyi donanım desteğine sahip olmasının temel nedeni budur - çünkü kod, Linux uygulamasının iyi olduğu herhangi bir platformda derlenmek için yazılırken, Windows bilinen donanım türlerine bağlı olarak değişir.
phyrfox

Windows / x86 oluşturursanız, ikili uyumluluğun% 95'ini karşılarsınız. Bu oldukça iyi. Linux / x86 daha yaygınlaşırken, kendi özel işlemci mimarisi ve Unix varyantı olan çeşitli büyük isimlerin olduğu bir dünyadan geldik - bu ikili uyumlu değildi.
Sobrique

@Sobrique% 95 rakamını nereden aldın? En son baktığımda her 1 x86 için 4 ARM işlemci vardı. Bu, birkaç yıl önceydi, herkes ARM işlemcili akıllı telefonları kullanmaya başladı. Yani,% 20 olan başka bir işlemcinin olmadığını varsayarsak.
ctrl-alt-delor,

3

Çoğu Linux yazılımı ücretsiz bir yazılımdır. Kaynak kodu, ikili dosyalar yerine bazı derleme talimatlarıyla dağıtarak, derlemeden önce kaynak kodu gözden geçirme ve hatta düzenleme şansına sahipsiniz. Bu şekilde, programın gerçekte ne yaptığından ve zararlı olmadığından emin olabilirsiniz.


0

Kişisel olarak sadece bir programın çalıştırılabilirliğini almaktan hoşlanmamamın asıl nedeni, önce kaynak kodunun gerçekte ne yaptığını kontrol etmeyi sevmemdir (çoğunlukla sadece başkalarının koduna bakmaktan zevk alıyorum çünkü), ancak diğerlerini de biliyorum ayrıca kaynak kodunu kötü amaçlı kod için de kontrol eder.


0

Cevaplar bir çok vakaların çoğunda, yazılım söylediler edilir derlenmiş formatta dağıttı. Bu varsayıma katılıyorum. Bununla birlikte, bir yazılımı kaynağına göre dağıtmanın, onu derlenmiş biçimde dağıtmaktan daha iyi olduğu bir durum görüyorum.

Bunun doğru olduğundan emin değilim, ancak İnternet'in başlangıcında hayal ediyorum, çünkü ağ bant genişliği kötüydü, bazen bir yazılımı dağıtmak, derlenmiş formatta olduğundan daha hızlı bir şekilde dağıtmak daha hızlı olabilirdi. Kod kaynakları yalnızca düz metin olduğundan, genellikle derlenmiş formattaki yazılımdan daha küçüktür. Dolayısıyla, bir yazılımı kod kaynağıyla dağıtmak, kullanıcıların derleyebilmesi kaydıyla, paylaşmanın daha iyi bir yolu gibi görünmektedir.


0

Pek çok farklı platformda çalışan birçok unix sistemi olmasının yanı sıra, Windows yazılımının bu dağıtım modelinde karşılaştığı sorunları düşünün, ancak yalnızca bir Windows sürümü ve bir platform hakkında endişelenmek zorunda olsalar bile (PC) ).

Endişelenecek PC ile bile, iki mimarimiz var: 32 bit ve 64 bit. Dikkat ederseniz, Windows yazılımının büyük çoğunluğu yalnızca 64 bit'i yok sayar ve yalnızca 32 bit yazılımı gönderir ve 64 bit sisteminiz varsa en iyi alt yazılıma sahip olmanızı sağlar. O zaman kütüphaneler var. Bir yazılım satıcısı, zaten yüklü olan uygun kitaplığa sahip değilseniz programlarını çalıştırmaya çalışırken garip hatalar almanızı istemez, bu nedenle yalnızca programına sahip olsanız bile, kitaplığı programlarıyla birlikte içerir (indirmeyi daha büyük hale getirir) ). İkinci bir program aynı şeyi yapar, ancak kütüphanenin farklı bir versiyonuyla. En iyi durumda, program B program B yüklemek eğer öyleyse, geriye uyumlu kütüphanenin yeni sürümünü içeren sonraprogram A, işler işe yarar, ancak bunları ters sırada yüklemek, kitaplığın daha eski bir sürümüne sahip olmanızı sağlar ve program B kesilir. Çoğu zaman da, kitaplık firması olan değişiklikler yapar değil sen, ilki kıracak iki programları yüklemek sipariş nedenle olursa olsun geriye dönük olarak uyumlu ve kütüphane adını değiştirerek rahatsız etmez. Buna "dll cehennemi" denir.

Ne yazık ki, bundan kaçınmak için, çoğu windows yazılımı tüm kitaplıklarını paylaşılan bir dizin yerine kendi program dizinlerine göndermeye çalıştı, bu nedenle her program kendi özel kitaplıklarına sahip ve bir daha asla tümüyle rekabet edemeyecek İlk etapta dond nokta ve sonunda tüm kütüphaneleri indirirken çok daha fazla ram ve disk alanı ve zaman kullanarak.

Bu nedenle açık kaynaklı yazılımın kaynak biçiminde yayınlanması ve işletim sistemi satıcılarının bağımlılık sorunlarını çözen ve yalnızca gerçekte ihtiyaç duyduğunuz önceden derlenmiş ikili dosyaları yükleyen ve tüm yerdeki kitaplıkları çoğaltmadan paket yöneticileri bulmuş olmaları. Bu aynı zamanda birçok farklı platformda çalışan birçok farklı unix sisteminin olduğu gerçeğiyle de ilgilidir.

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.