Linux ikili sistemim tüm dağıtımlarda çalışır mı?


24

Delphi için Lazarus adında iyi bir yedek IDE buldum. Ancak programcılar için bir sorum yok.

Will durağan ilintili tüm Linux dağıtımlarında Linux ikili çalışır? Yani hangi Linux dağıtımını yaptığım önemli değil, Debian / ArchLinux / Ubuntu / OpenSUSE / ... üzerinde çalışacak.

Bulgularımın bir sonucu olarak 64bit ile 64bit arasında gerçekten sadece önemli mi? Yayınlamadan önce emin olmak istiyorum.


Belirgin bir şekilde ilişkili: Linux Sistemi, OS X'te C'yi çağırıyor .
G-Man,

Programınızla ne tür kitaplıklar arasında bağlantı kurmayı planladığınızı daha açıklayabilir misiniz? Bazı kitaplıkların gizli bağımlılıkları (veri dosyaları, dinamik alt sistemler) veya üzerinde çalıştıkları sistemle ilgili örtük varsayımları vardır.
Thomas Erker,

Yanıtlar:


29

Bu cevap ilk önce daha genel bir soru için yazılmıştı. "İkili sistemim tüm dağıtımlarda çalışacak", ancak ikinci yarıda statik olarak bağlantılı ikili dosyalara değiniyor.


Statik olarak birbirine bağlı bir merhaba dünyasından daha karmaşık olan her şey için cevap muhtemelen hayır .
Dağıtım X onu test olmadan, cevap varsayalım olan X için hiçbir

Yazılımınızı ikili biçimde göndermek istiyorsanız, kendinizi kısıtlayın

  • Yazılımınızın kullanım alanı için birkaç popüler dağıtım (masaüstü, sunucu, gömülü, ...)

  • her birinin en son bir veya iki versiyonu

Aksi halde, her boyutta, versiyonda ve yaşta yüzlerce dağıtıma sahip olursunuz (on yıllık dağıtım halen kullanımda ve desteklenmektedir).

Onlar için test edin. Aksi takdirde neyin yanlış gidebileceği (ve ne olacağı) üzerine birkaç işaretçi:

  • İhtiyacınız olan bir aracın / kütüphanenin paketi, dağıtımlar arasında ve hatta aynı dağıtımın sürümlerinde farklı adlandırılır

  • İhtiyacınız olan kütüphaneler çok yeni veya çok eski (yanlış sürüm). Sadece programınızın bağlanabileceğini varsaymayın, doğru kütüphaneye bağlanır.

  • Aynı kitaplık (diskteki dosya) farklı dağıtımlarda farklı şekilde adlandırılır ve bağlantı yapılmasını imkansız hale getirir

  • 64bit'te 32bit: 32bit ortam kurulmamış olabilir veya bazı gerekli olmayan 32bit kitaplıklar 32on64 ortamından ayrı bir pakete taşınır, bu nedenle sadece bu durum için ekstra bir bağımlılığınız olur.

  • Shell: Bash'in versiyonunu alma. Bash'i bile varsayma.

  • Araçlar: POSIX olmayan bazı komut satırı araçlarının herhangi bir yerde olduğunu varsaymayın.

  • Araçlar: Aracın, yalnızca dağıtımınızın GNU versiyonunda olduğu gibi bir seçeneği tanıdığını varsaymayın.

  • Çekirdek arayüzleri: Dosyaların varlığını veya yapısını, /procmakinenizde var olduğu / yapıları olduğu için kabul etmeyin.

  • Java: Programınızın, test edilmeden SLES ile birlikte gönderilen IBM'in JRE'sinde çalıştığından emin misiniz?

Bonus:

  • Komut setleri: Makinenizde derlenen ikili eski donanımlarda çalışmaz.

Is statik bağlama (veya: Eğer yazılımı ile gereken tüm kitaplıkları donatılacak) çözeltisine? Teknik olarak çalışsa bile, ilgili maliyetler yüksek olabilir. Maalesef, cevabı muhtemelen ikisi de değil.

  • Güvenlik: kütüphaneleri yazılımın kullanıcısından kendinize güncelleme sorumluluğunu üstlenirsiniz.

  • Boyut ve karmaşıklık: sadece eğlence için statik olarak bağlı bir GUI programı oluşturmaya çalışın.

  • Birlikte çalışabilirlik: Yazılımınız her türlü "eklenti" ise, sizi arayan yazılıma güvenirsiniz.

  • Kütüphane tasarımı: programınızı statik olarak GNU libc'ye bağlarsanız ve ad servislerini ( getpwnam()vb.) Kullanırsanız, libc'nin NSS'sine (ad servis anahtarı) dinamik olarak bağlanırsınız.

  • Kütüphane tasarımı: programınızı statik olarak bağladığınız kütüphane veri dosyalarını veya diğer kaynakları (saat dilimleri veya yerel ayarlar gibi) kullanır.


Yukarıda belirtilen tüm nedenlerden dolayı, test yapmak esastır.

  • KVM veya diğer sanallaştırma tekniklerini öğrenin ve desteklemeyi planladığınız her Dağıtımın bir VM'sine sahip olun. Yazılımınızı her VM'de test edin.

  • Bu dağıtımların minimum kurulumlarını kullanın.

  • Kısıtlı bir talimat setiyle bir VM oluşturun (örn. SSE 4 yok).

  • Yalnızca statik olarak bağlanmış veya paketlenmiş: lddgerçekte statik olarak bağlanmış olup olmadıklarını görmek için ikili dosyalarınızı kontrol edin / yalnızca birlikte verilen kütüphanelerinizi kullanın.

  • Yalnızca statik olarak bağlı veya paketlenmiş: boş bir dizin oluşturun ve yazılımınızı bu dizine kopyalayın. chrootbu dizine girin ve yazılımınızı çalıştırın.


Oldukça kapsamlı bir cevap +1
Sirlark

2
Shell: Özellikle, Debian bash kullanmıyor ve bu durum Debian sistemlerindeki Shellshock kırılganlığını büyük ölçüde azalttığından, yakın gelecekte değişeceğini hayal edemiyorum.
Kevin

1
Ayrıca, ikili dosyaları göndermek istiyorsanız, bunları statik olarak bağlayın .
user253751 7:15

Neden "talimat seti" "bonus" olarak adlandırılıyor? İkili formda dağıtırsanız, hangi ISA'ları derleyeceğinizi gerçekten düşünmeniz gerekir. M68k kullanıcıları için umursamazsınız, ama en azından ARM, IA32 ve X86_64'ü göz ardı etmek zor.
Toby Speight

@TobySpeight SSE4 ve benzeri düşünün. Belki assembler kullanıyorsanız sizi ısırırsınız.
Thomas Erker

9

Cevap buna bağlı. Fakat çoğu durumda, evet, gerekli kütüphaneler işletim sistemi üzerinde kurulu olduğu sürece.

Genel olarak, bahsettiğinizler gibi en büyük dağıtımlar, uygulamanın topluluğun bakımlı sürümünü yükleyen paket yönetim araçlarına sahiptir. Bu, uygulamanın ihtiyaç duyacağı herhangi bir önkoşul paketini önemser. Bir paket yöneticisi olmadan yüklüyorsanız, gerekli tüm paketlerin ve kitaplıkların işletim sistemine yüklendiğinden emin olmak size bağlıdır. Bu önkoşullu uygulamaların bir listesini belgelere dahil etmek iyi bir fikirdir.


2

Önce berbat cevap: bağlıdır

İkilileri bırakmadan ise, "hayır" dağıtma, sürece geldiği cevabını varsayalım tüm kütüphanelerini öyle hiç sen kendi oldu Neyse üzerinde duruyor gerçekten çok büyük bir sistem sağlayarak sürece can sıkıcı yerden yukarı gelen (onunla içerir ) veya denkini statik olarak bağlar.

... ama sihirbazlar ve para ve para sihirbazları ...

IBM'in, çalıştığım her yerde çalışarak beni şok eden bazı "genel Unixish" yükleyicileri var: birkaç çekirdek neslinden birkaç Linuces, OpenSolaris (veya şimdi ne denirse), Solaris ve BSD. Ama çok büyükler. Ve sağladıkları şeyler eşit derecede büyük. Hiçbir şekilde küçük yarış arabası programları bu şekilde yayınlanmıyor, IBM'den beklediğiniz büyük girişim tipi şeyler.

Sadece Linux üzerinde kalırken, çoğu Linuxdom'da iyi çalıştığında, bazı satıcılardan göreceğiniz "Linux için (genel)" tipi ikili yükleyicilerin gösterdiği gibi bu ikili biçimde mümkün görünmektedir. Birkaç sohbet, tarayıcı, oyun, meta yükleyici vb. Bu yolla yayınlanır, ancak bu hakkı almak için zaman harcayan her zaman büyük satıcılar tarafından yayınlanır. "Linux için" diyebilecekleri şey şaşırtıcı ve genellikle işe yarayacağından emin olabilirsiniz, ancak durum böyle görünüyor.

Fakat...

Yazılımımı bir build programı ile birlikte kaynak olarak dağıtıyorum. Bunu C, Erlang, Python, Guile vb. Yerlerde yapıyorum. Bu bana çok şey veriyor daha çalıştırmak veya olmaz olmadığı hakkında daha fazla esneklik ve emin doğru şeyler daha inşa anda var kılan bir buildscript yazmak için çok daha kolaydır çalışma zamanında her şeyin yerinde olduğundan emin olun. Bir kez var ise, kaynağı dağıtırsanız, programınız için bir otomatik güncelleyici yazmak önemsizdir: kaynak genellikle tüm deps ve diğer delilikleri içeren bir ikiliden çok daha küçüktür. Bu yöntemi kullanarak Unices (ve bazen de Windows, ancak bu biraz daha fazla bir angarya) arasında güvenilir bir şekilde konuşlandırma konusunda pek sorun yaşamadım.

Yeterli çocuk oyunu, silahlan!

Ciddileşirken, srsly srs gibi, Linux dünyasında sorunsuz bir şekilde uydurma konusunda C kaynaklarını dağıtır ya da önceden oluşturulmuş hackishly keyifli bir dil için tamamen yönetilen bir ortama dönüşürsünüz. Örneğin, Python kodu yazıyorsanız, sürümleri kontrol edebilir ve hangi CPython sürümünün çalıştığını bilir ve genellikle belirli bir Linux'ta uyumlu bir sürümün olmasını bekleyebilirsiniz (ve bu, geniş bir C lib taramasından çok daha kolaydır. / sürümleri kullanıyor olabilirsiniz). Erlang, Guile, Python, Perl, CL, vb. çokBu tür bir dağıtım için kolay hedeflerdir ve birçoğunun, kullanıcıların ne zaman imzalanmış bir kaynak kullanacaklarını kendileri seçtikleri durumlarda CPAN veya pip gibi merkezi bir depoya sahip olmaları gerekir. isterler ve işlerin genellikle istediğiniz gibi çalışacağını bilirler.

[Zeyilname: 1. Haskell bile bunu genel olarak Cabal ile çekebilir - bunu üretim ortamında yapmak konusunda temkinli olurdum. 2. Kodunuzun onunla birlikte tam bir çevre taşımasını garanti eden Erlang ile tamamen farklı "sürüm" dağıtım stratejileri vardır. 3. Python sanal ortamlarda bir adım daha ileri gidiyor; tüm çalışma zamanları size bu kadar yardımcı olmuyor.]

Linux'ta yönetilen ortamlarla ilgili bu son şey harika . Ve bir bonus olarak, çok daha genel bağımlılıklar tanımlamanıza izin verir, sizin için fazladan çaba sarf etmeden otomatik olarak çözülmelerini sağlar, dağıtım başına bir paket yazmayı gerektirmez ve sistemin 32 mi veya 64 mü olduğunu umursamayı bırakabilirsiniz bit (genellikle, yine de).

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.