Linux'ta “kendin derle” anlayışının kaynağı nedir [kapalı]


11

Linux'u üniversitede biraz kullandım ve terimlere aşinayım. .NET dillerinde düzenli olarak gelişiyorum, bu yüzden bilgisayar okuryazar değilim.

Bununla birlikte, * nix çevrelerinde bulunan "kendin derle" [CIY] zihniyetini gerçekten anladığımı söyleyemem. Uzaklaştığını biliyorum, ama yine de zaman zaman duyuyorum. Bir geliştirici olarak, derleyicileri ve gerekli bağımlılıkları kurmanın popoda bir acı olduğunu biliyorum, bu yüzden CIY iş akışlarının * nix'i çok daha az erişilebilir hale getirmesine yardımcı olduğunu hissediyorum.

Hangi sosyal veya teknik faktörler CIY zihniyetinin yükselmesine neden oldu?


12
Linux çevrelerinde veya UNIX çevrelerinde duydunuz mu? Çok büyük bir fark var.
terdon

2
Linux'un birçok farklı dağıtımı var, bu gerçekten sürpriz değil. Bazı dağıtımlar önden koşucular olarak öne çıktığı için derlenmiş sürümler var, ancak pratik olmayacak bir web gibiydi.
Centimane

8
Ve kayıt için, bir Linux sisteminde "derleyicileri ve gerekli bağımlılıkları kurmak" aslında o kadar da zor değil. Hatta bazıları kolay diyebilir.
Deathgrip

6
@Darren - Tam tersi, günümüzde çoğu OpenSource tarballs yıllar önce var olmayan bir standardı takip ediyor. Tarball'ı indirin, tarball'ı, cd'yi dizine çıkarın, çalıştırın ./configure <options>, sonra kurun ve yükleyin. Dişlerimi 30 yıl önce AT&T SysV Unix ile çalışan AT&T 3B2 sunucularında kestim ve UTX çalıştıran Gould iron. O zamanlar işler çok daha zordu. Bazıları configuresürecin başlangıcına sahipti , çoğu sizin makefile(s)sisteminiz için manuel olarak düzenlemek zorunda kaldınız .
Deathgrip

1
@Deathgrip Gerçekten, hiç Visual Studio olmadan sistem programlama için bir Windows developmemt ortamı kurmaya çalıştınız mı? Neredeyse imkansız sana söylüyorum.
kedi

Yanıtlar:


27

Çok basit bir şekilde, * nix'in tarihinin çoğu için başka seçenek yoktu. Programlar kaynak tarballs olarak dağıtıldı ve bunları kullanmanın tek yolu kaynaktan derlemekti. Yani gerekli bir kötülük kadar bir zihniyet değildir.

Bununla birlikte, şeyleri kendiniz derlemek için çok iyi nedenler vardır, çünkü bunlar daha sonra donanımınız için özel olarak derlenecektir, hangi seçeneklerin etkinleştirileceğini veya etkinleştirilmeyeceğini seçebilir ve bu nedenle, istediğiniz gibi ince ayarlanmış bir yürütülebilir dosyayla sonuçlanabilir . Ancak bu, yalnızca çalışan kullanıcıların e-postalarını okumasını isteyen insanlar için değil, yalnızca uzman kullanıcılar için anlamlı bir şeydir.

Şimdi, Linux dünyasında, ana dağıtımların hepsi yıllar önce bundan uzaklaştı. Gentoo gibi bunu yapmak isteyen insanlar için özel olarak tasarlanmış bir dağıtım kullanmıyorsanız, bu günlerde kendiniz çok, çok nadiren bir şey derlemeniz gerekir. Bununla birlikte, dağıtımların büyük çoğunluğu için, ortalama kullanıcınızın hiçbir şey derlemesi gerekmeyecektir, çünkü ihtiyaç duyacakları hemen hemen her şey dağıtımlarının depolarında mevcut ve derlenmiştir.

Dediğiniz bu CIY zihniyeti aslında ortadan kayboldu. UNIX dünyasında hala hayatta ve tekmeleme olabilir, orada deneyimim yok, ancak Linux'ta, iyi bir havuzla popüler bir dağıtım kullanıyorsanız, neredeyse hiçbir şeyi kendiniz derlemeniz gerekmeyecek.


5
Unix dünyasında, işletim sistemine bağlı olarak yine değişecektir. Son konumumda çok sayıda Solaris (Sun Sparc platformu) sunucusu vardı ve Solaris 10 x86'yı birkaç yıl boyunca evde masaüstü olarak çalıştırdım. HPUX veya AIX için konuşamam, ancak Solaris'te biraz CIY yapmanız gerekiyordu. Sun, Solaris için önceden paketlenmiş bir dizi Açık Kaynak yardımcı programı dağıttı. Opencsw.org ve unixpackages.com gibi siteler de vardı. Ama hala kaynak tarballlardan derleme yaptım.
Deathgrip

"* nix tarihinin çoğu için başka seçenek yoktu. Programlar kaynak tarballs olarak dağıtıldı." - ama bu CIY zihniyeti yüzünden değil mi?
Woodrow Barlow

2
@ odun gerçekten değil. Başka seçenek yoktu. * Nix'in eski olduğunu unutmayın . Ayrıca, çoğu program zaten uzman olan meslektaşları arasında geçti ve neden kodunuzu kullanacak diğer 8 kişi için bir yükleyici veya paket yöneticisi olarak karmaşık bir şey icat ettiniz? Bu tür araçlar icat edildiğinde, * nix millet onları herkes gibi kullanmaya başladı.
terdon

@WoodrowBarlow Hayır, neden ve sonuç alıyorsunuz. Programlar kaynak olarak dağıtıldı çünkü etrafında birçok farklı platform vardı (farklı donanım mimarileri, farklı işletim sistemleri, farklı kütüphane setleri), bu yüzden bir program yazarının hepsini kapsayacak yüzlerce veya binlerce ikili dağıtması gerekiyordu. CIY hala “egzotik” platformları çalıştıran insanlar için, ancak büyük çoğunluğu ikili dosyaların dağıtımlardan kolayca elde edilebildiği “ana akım” platformları işletiyor.
Gilles 'SO- kötü olmayı bırak

@terdon tamam, anlıyorum. Ancak, bu paragrafın biraz totolojik olduğunu belirtmek isterim. OP belirli bir düzeyde "* nix geliştiricileri neden derlenmiş ikili dosyalar yerine kaynak kod dağıtıyor?" diye sordu. ve ilk paragrafınız "çünkü * nix geliştiricileri derlenmiş ikili dosyalar yerine kaynak kodu dağıtır" der. evet, basitleştirdiğimi anlıyorum, ama yorumunuzdan cevap metnine argümanları eklerseniz cevabınızın daha net olacağını düşünüyorum.
Woodrow Barlow

13

Bu zihniyetin son kullanıcılar, dağıtım yöneticileri ve kod tedarikçileri / geliştiricileri / proje gruplarından birkaç nedeni vardır ve bunların her biri mükemmel şekilde geçerlidir.

Açık Kaynak yönü

Özgür yazılım kullandıklarını bilmekten hoşlananlar vardır ve bunu kaynaktan derlemeyi seçerek doğrularlar. Linux From Scratch projesi / howto / guide / book gibi şeyler burada devreye giriyor.

Optimizasyon ve seçenekler yönü

CPU mimariniz için belirli optimizasyonlarla bir şeyler derlemek mi istiyorsunuz? Belki de ihtiyacınız olan belirli bir özelliği etkinleştirmek veya devre dışı bırakmak için bir derleme zamanı seçeneği (veya bir tane oluşturmak için yama) vardır. Buna örnek olarak, kotaları yönetme yeteneğine sahip olmak için düzeltme eki ya da Gentoo gibi bir systemd kullanmamayı tercih edebileceğiniz bir dağıtım kullanmak ya da özellikle lisans sorunları nedeniyle ogg / theora / vorbis / whatever ve NOT mp3'ü desteklemeyi tercih edebilirsiniz. ya da her neyse.

CPU Mimarisi yönü

İşyerinizde yüksek kaliteli x86 / amd64 olmayan makineler kullanılıyor mu? İhtiyacınız olan / istediğiniz paket, CPU mimariniz için önceden derlenmemiş olabilir; çalıştırdığınız dağıtım ne olursa olsun. Bu tür bir donanımın çalıştığı çoğu yer IBM'den vb. Peki ya fazla bir satıştan bir tane alırsanız, eski bir iMac w / PPC işlemci, vb.

Dağıtım yönü

Dağıtım "aileleri" - yani Debian w / Ubuntu, Mint, et al ve RedHat ile CentOS, Whitebox, Fedora ve diğerleri - hepsi farklı paket formatları kullanır. Ve her sürüm farklı kütüphane sürümleri, vb ile birlikte gelir. Basit bir tek dosya kabuğu komut dosyası için bile uygun bir Debian .deb dosyası ayarlamak zaman ve çaba gerektirir. Bazı kaşıntıyı çizmek için bazı yazılımlar yazdıysanız ve Ücretsiz yapmak ve gitlab'a göndermek istiyorsanız, kendi web sunucunuz, her neyse, bina talimatları ile birlikte genel bir .tar.gz kaynak göndermek ister misiniz, yoksa Debian'ın 2 sürümü (kararlı ve test, belki de eski sürüm), RPM'ler olarak Redhat ve Fedora'nın birden çok sürümü, Slackware için bir TGZ, Gentoo için bir ebuild profili vb.


1
Başka bir neden, bazen yukarı akış kaynağı, önceki bir sürümde çalışan ancak o zamandan beri kırılmış bir özellik için kritik olmayan bir hata yamasıdır. Ancak, daha kararlı bir dağıtım için paket haftalarca hatta aylarca güncellenmeyebilir. Bu, normal bir kullanıcının bazı şeyleri kaynaktan nasıl derleyeceğini öğrenmek istemesinin bir nedenidir. Ayrıca, Arch gibi depolarında kanayan yazılım için bir üne sahip dağıtımlar bile bir noktada geride kalacaktır. Kaynaktan derlemek, bahsettiğiniz her şeye ve tanıtılmış olabilecek yeni özelliklere sahip olabileceğim anlamına gelir.

@ChronoKitsune Çok doğru; Gentoo'daki (bir CIY dağıtım) paket sürümlerini diğer dağıtımlarla karşılaştırın. Çok daha yeni. Derleme talimatları yapmak, her mimaride çalışacak ikili bir paket yapmaktan bin kat daha kolaydır. Bu, başkalarının bir süre görmeyeceği harika yeni yazılım özelliklerini kullanabileceğiniz anlamına gelir.
dogoncouch

9

@Terdon'un dediği gibi, günümüzde özellikle ev kullanıcıları için bir şeyler derleme ihtiyacı oldukça zayıftır.

Geçmişte, Unix dünyasında, örneğin satıcı tarafından artık bakımının yapılmadığı veya hangi uygulamaların uygulanmadığı Solaris, AIX, Ultrix, Dijital Ultrix ve HP / UX sistemlerini yönettiğim için, derleme kaynaklarına çok bağımlıydım. Linux da dahil olmak üzere diğer Unix'ler tarafından yaygın olarak kullanılan hizmetlerin çok gerisindeydi.

Günümüzde, depolarda olmayan biraz daha belirsiz veya eski bir yazılım parçası elde etmek veya uyumlu ikili olmayan bir paketin daha yeni bir sürümünü kullanmak için, mevcut şeyleri derlemek için hala gerçek ihtiyaçlar vardır. ekstra işlevsellik eklemek veya nadiren, bir yama veya modül yazabiliyorsanız.

Ayrıca Debian ve / veya artık işletim sistemi tarafından desteklenmeyen bir çerçeveye sahip yeni Debian sürümlerini taşımak için sistemlerin yeniden yapılandırılması sırasında elle yazılım derlemek zorunda kaldım.

Örneğin, geçmişte protokolde Windows değişikliklerine (o zamana kadar) destek vermek veya Telekom dünyasında provizyon için belirli yamaları desteklemek için DHCP cinlerini el ile derlemeliydim.

Debian'da (ciddi) hatalar içeren sabit sürümler dizisi olduğu ve Debian / Ubuntu için karşılık gelen .debs henüz bulunmadığı için, dev git repo'dan kendim tarafından derlenen FreeRadius sürümleri için yerel depo işlerimi hala saklıyorum. bizim ihtiyaçlarımız için yeterli.

Ve bir süre sonra, kendimiz tarafından yazılan şeyleri de çalıştırmamız / veya derlememiz gerektiğini söylemeye gerek yok.

Günümüzde bağımlılıkları yüklemek geçmişte olduğu kadar zor değildir ve bazı yazılımlar, derlenmiş bağımlılıkları adlandıran ve yerleşik bağımlılıklar listesiyle paket dosyası oluşturma işini yoğunlaştıran bazı yaygın Linux dağıtımları için özelleştirilmiş kural dosyalarına bile sahiptir. Böyle bir paketi yerel bir depodan kurmak, aynı paketi resmi depolardan kurmaktan çok farklı değildir.


4

Hangi sosyal veya teknik faktörler CIY zihniyetinin yükselmesine neden oldu?

Temel neden açık bir şekilde teknik nedendir: İkili taşınabilirlik, kaynak taşınabilirliğinden daha zordur . Dağıtım paketlerinin dışında, çoğu Özgür yazılım hala sadece kaynak formda mevcuttur, çünkü bu yazar (lar) / sürdürücüler için çok daha uygundur.

Linux dağıtımları, ortalama insanların kullanmak isteyeceği çoğu şeyi paketlemeye başlayana kadar, tek seçeneğiniz kaynağı almak ve kendi sisteminiz için derlemekti. Ticari Unix satıcıları genellikle neredeyse herkesin istediği şeyleri içermiyordu (örneğin GNU bashveya benzeri gibi güzel bir kabuk ), sadece kendi uygulamaları shve / veya uygulamaları csh, bu yüzden (sys-admin olarak) istediyseniz kendiniz bir şeyler oluşturmanız gerekiyordu etkileşimli kullanım için kullanıcılarınıza hoş bir Unix ortamı sağlamak için.

Şimdi, çoğu insan masaüstünde oturan tek yönetici ve tek kullanıcı olan durum, geleneksel Unix modelinden büyük ölçüde farklı. Bir sistem yöneticisi yazılımı merkezi sistemde ve herkesin masaüstünde tuttu. (Çoğunlukla insanların iş istasyonlarının sadece NFS montajı /optve /usr/local/merkezi sunucudan bulunması ve oraya bir şeyler kurulması.)


.NET ve Java gibi şeylerden önce, farklı CPU mimarileri arasında gerçek ikili taşınabilirlik mümkün değildi. Unix kültürü, LSB gibi son Linux çabalarına kadar ikili taşınabilirliği etkinleştirmeye çalışmak için çok az çaba harcayarak, kaynak taşınabilirliği ile bu nedenle varsayılan olarak gelişti. Örneğin, POSIX ( majör Unix standardı) sadece bile son sürümlerinde, kaynak-taşınabilirlik standardize dener.

İlgili kültürel faktör: Erken ticari AT&T Unix, kaynak kodu (bantlarda) ile geldi. Sen etmedi var bu size bir şey görmek istedim durumunda sadece orada, kaynağından sistem inşa etmek gerçekten dokümanlar yeterli değildi zaman çalıştı.

Wikipedia diyor ki :

"Kapsamlı çevrimiçi dokümantasyon ve (yıllarca) tüm sistem kaynak kodlarına hazır erişim Unix politikası, programcı beklentilerini artırdı ve 1983'ün özgür yazılım hareketinin başlatılmasına katkıda bulundu."

Bu kararı neyin motive ettiğinden emin değilim, çünkü müşterilere ticari yazılımın kaynak koduna erişim vermek bugünlerde duyulmamış. Bu yönde açıkça bazı erken kültürel önyargılar vardır, ancak belki de Unix'in köklerinden, çoğunlukla C (montaj dili değil) ile yazılmış ve farklı donanımlar için derlenebilen taşınabilir bir işletim sistemi olarak ortaya çıkmıştır. Önceki birçok işletim sisteminin kodlarının belirli bir CPU için daha fazla yazıldığını düşünüyorum, bu yüzden kaynak düzeyinde taşınabilirlik erken Unix'in güçlü yönlerinden biriydi. (Bu konuda yanlış olabilirim; erken Unix konusunda uzman değilim, ancak Unix ve C ilgili.)


Yazılımın kaynak formda dağıtımı, insanların yazılımın üzerinde çalışmasını istedikleri herhangi bir sisteme uyarlamasını sağlamanın en kolay yoludur. (Ya son kullanıcılar ya da bir Linux dağıtımı için paketleyen kişiler). Yazılım zaten bir dağıtım için / tarafından paketlenmişse, son kullanıcılar bunu kullanabilir.

Ancak, çoğu paketin yazarının olası her sistem için ikili dosyalar oluşturmasını beklemek çok fazladır. Bazı büyük projeler birkaç yaygın durum için ikili dosyalar sağlar (özellikle işletim sisteminin bir oluşturma ortamıyla gelmediği x86 / pencereler ve işletim sistemi satıcısı yalnızca ikili yükleyicilerin dağıtımına büyük önem verir).

Bir yazılımın yazarın kullandığı sistemden farklı bir sistemde çalışmasını sağlamak, kaynak ile kolay olan bazı küçük değişiklikler gerektirebilir . Birinin kendi kaşıntısını çizmek için yazdığı küçük bir kerelik program muhtemelen çoğu karanlık sistemde hiç test edilmemiştir. Kaynağa sahip olmak, bu tür değişiklikleri yapmayı mümkün kılar. Orijinal yazar bir şeyi gözden kaçırmış olabilir ya da çok az zaman kazandığından kasıtlı olarak daha az taşınabilir kod yazmış olabilir. Info-ZIP gibi büyük paketlerin bile hemen her platformda testçileri yoktu ve problemler keşfedildikçe insanların taşınabilirlik yamalarını göndermeleri gerekiyordu.

(Sırf inşa env'deki farklılıkların olur ve burada konuyla. With Java tarzı ikili taşınabilirlik, otomatik araçlar (gerçekten alakalı olmadığını kaynak düzey taşınabilirlik sorunları diğer türü vardır autoconf/ auto-make) ve benzeri benzer şeyler cmakeolmazdı 't gerekli. ve böyle bir şeyleri olmazdı bazı sistemler dahil edilmesini gerektirir <netinet/in.h>yerine<arpa/inet.h> içinntohl(3) . (ve belki olmazdı ntohl()ya da ilk etapta başka bayt sırası şeyler!)


.NET dillerinde düzenli olarak gelişiyorum, bu yüzden bilgisayar okuryazar değilim.

Bir kez derleme, her yerde çalıştırma .NET ve ayrıca Java'nın temel hedeflerinden biridir, bu nedenle bu sorunu çözmek için tüm dillerin icat edildiğini ve geliştirme deneyiminiz bunlardan biriyle olduğunu söylemek doğrudur. .NET ile ikili dosyanız taşınabilir bir çalışma zamanı ortamında (CLR) çalışır . Java, çalışma zamanı ortamını Java Sanal Makinesi olarak adlandırır . Herhangi bir sistemde (en azından birinin zaten bir JVM veya CLR uyguladığı herhangi bir sistem) çalışacak tek bir ikili dağıtmanız gerekir. Elbette yol ayırıcılara /karşı \veya nasıl yazdırılacağı veya GUI mizanpaj ayrıntıları gibi taşınabilirlik sorunlarınız olabilir .

Pek çok yazılım tamamen yerel koda dönüştürülmüş dillerde yazılmıştır . .netTaşınabilir bayt kodu yok veya java bayt kodu var, sadece çalıştırılacak CPU için yerel makine kodu, taşınabilir olmayan bir yürütülebilir dosya biçiminde saklanıyor. C ve C ++ bunun en önemli örnekleridir, özellikle Unix dünyasında. Açıkçası bu, belirli bir CPU mimarisi için bir ikili dosya derlenmesi gerektiği anlamına gelir .

Kütüphane sürümleri başka bir sorundur . Kütüphaneler ikili düzey ABI'yi değiştirirken kaynak düzeyindeki API'yi sabit tutabilir ve çoğu zaman sabit tutarlar. (Bkz . API ve ABI arasındaki fark .) Örneğin, bir opak için başka bir üye eklemek structyine de boyutunu değiştirir ve dinamik olsun (malloc), bu tür bir yapı için alan ayıran herhangi bir kod için yeni kütüphane sürümü için üstbilgilerle yeniden derleme gerektirir. ), statik (global) veya otomatik (yığın üzerinde yerel).

İşletim sistemleri de önemlidir . Aynı işlemci mimarisi için Unix farklı bir lezzet farklı ikili dosya biçimlerine sahip olabilir, gibi sabitleri için sistem çağrıları ve farklı sayısal değerler yapmak için farklı bir ABI fopen(3)s' O_RDONLY, O_APPEND,O_TRUNC .

Dinamik olarak bağlı bir ikili dosyada bile daha önce çalışan işletim sistemine özgü bazı başlangıç ​​kodlarının bulunduğunu unutmayın main(). Windows'da bu crt0. Unix ve Linux aynı şeylere sahiptir, burada bazı C-Çalışma Zamanı Başlangıç ​​kodu statik olarak her ikili dosyaya bağlıdır. Teoride, bu kodun dinamik olarak bağlandığı ve libc veya dinamik bağlayıcının kendisinin bir parçası olduğu bir sistem tasarlayabileceğinizi tahmin ediyorum, ancak işin farkında olduğum herhangi bir işletim sisteminde işler bu şekilde çalışmaz. Bu, yalnızca sistem çağrısı ABI sorununu çözer, standart kütüphane işlevleri için sabitler için sayısal değerler sorununu çözmez. (Normalde sistem çağrıları libc sarmalayıcı işlevleriyle yapılır: Kullanılan kaynak için normal bir x86-64 Linux ikili mmap()dosyası, syscalltalimatı içermez;call aynı adın libc sarma işlevine yönelik talimat.

Bu neden i386-Linux üzerinde i386-FreeBSD ikili dosyalarını çalıştıramayacağınızın bir parçasıdır. (Bir süre için, Linux çekirdeğinde sistem çağrısı uyumluluk katmanı vardı. Bence BSD'lerden en az biri benzer bir uyumluluk katmanıyla Linux ikili dosyalarını çalıştırabilir, ancak elbette Linux kütüphanelerine ihtiyacınız var.)


İkili dosyaları dağıtmak istiyorsanız, CPU / OS-flavor + sürüm / kurulu kütüphane sürümlerinin her birleşimi için ayrı bir tane oluşturmanız gerekir .

80'lerde / 90'larda, Unix sistemleri (MIPS, SPARC, POWER, PA-RISC, m68k, vb.) Ve Unix (IRIX, SunOS, Solaris, AIX, HP-UX, BSD vb.).
Ve bu sadece Unix sistemleri. Birçok kaynak paketi de VAX / VMS, MacOS (m68k ve PPC), Amiga, PC / MS-DOS, Atari ST, vb. Gibi diğer sistemler üzerinde derlenir ve çalışır.

Hala birçok CPU mimarisi ve işletim sistemi var, ancak şimdi masaüstü bilgisayarların büyük çoğunluğu x86 üç büyük işletim sisteminden birini çalıştırıyor.

Bu nedenle, farklı sistemlerde farklı sürümlerde olabilecek üçüncü taraf kitaplıklarındaki bağımlılıkları düşünmeye başlamadan önce bile, bir çubuk sallayabileceğinizden daha fazla CPU / OS kombinasyonu var. (İşletim sistemi satıcısı tarafından paketlenmemiş herhangi bir şeyin el ile kurulması gerekir.)

İkili dosyada derlenen yollar da sisteme özgüdür. (Bu, başlangıçta bir yapılandırma dosyasından okumakla karşılaştırıldığında RAM ve zamandan tasarruf sağlar). Eski okul Unix sistemlerinde genellikle çok sayıda elle özelleştirilmiş malzeme vardı, bu yüzden nerede olduğu hakkında geçerli bir varsayım yapmanın bir yolu yok.

İkili dağıtım, eski ana Unix için tüm büyük kombinasyonları inşa etmeyi ve test etmeyi göze alabilecek büyük ticari projeler dışında tamamen olanaksızdı .

Hatta ikili i386-linux-gnuve ikili yapmak bile amd64-linux-gnuzordur. Taşınabilir ikili dosyaları mümkün kılmak için Linux Standard Base gibi şeylere çok zaman ve çaba harcanmıştır . Statik olarak ikili dosyaları bağlamak bile her şeyi çözmez. (örneğin, bir kelime işlem programı bir Debian sistemine karşı bir RedHat sistemine nasıl yazdırılmalı? Yükleme, bir arka plan programı için bir kullanıcı veya grup eklemeli ve her yeniden başlatmanın ardından başlangıç ​​komut dosyasının çalışmasını nasıl ayarlamalıdır?) Bunlar harika değil örnekler, çünkü kaynaktan derleme onları çözmez.


Tüm bunların yanı sıra, o günlerde bellek şimdi olduğundan daha değerliydi. Derleme zamanında isteğe bağlı özellikler bırakmak , veri yapıları için daha az bellek kullanan daha küçük ikili dosyalar (daha az kod boyutu) oluşturabilir. Bir özellik, belirli bir öğenin her örneğinde classveya bir structşeyi izlemek için fazladan bir üye gerektiriyorsa , bu özelliğin devre dışı bırakılması nesneyi 4 bayt (örneğin) küçültür, bu da programın 100k ayırdığı bir nesne olması güzeldir.

Bu günlerde isteğe bağlı derleme zamanı özellikleri çoğunlukla ek kitaplıkları isteğe bağlı yapmak için kullanılır. mesela sen derlemek olabilir ffmpegolan veya olmayan libx264, libx265, libvorbisDaha yaygın, bir çok şey olan veya olmayan derlenmiş edilebilir vs vs Belirli bir video / ses kodlayıcı, altyazı tutulması için bu ve diğer birçok kütüphaneler libreadline: Sunulursa, çalıştırdığınızda ./configure, sonuçta ortaya çıkan ikili kitaplığa bağlı olacak ve bir terminalden okurken süslü hat düzenleme sağlayacaktır. Değilse, program stdin'den satırları fgets()veya bir şeyleri okumak için bazı geri dönüş desteğini kullanacaktır .)

Bazı projeler performans nedeniyle gereksiz kodları dışarıda bırakmak için isteğe bağlı özellikler kullanmaya devam etmektedir. örneğin Linux çekirdeğinin kendisi SMP desteği olmadan oluşturulabilir (örneğin gömülü bir sistem veya eski bir masaüstü için), bu durumda kilitlemenin çok daha basittir. Veya yalnızca sürücüleri veya diğer donanım özelliklerini dışarıda bırakmakla kalmayıp, bazı temel kodları etkileyen birçok isteğe bağlı özellik ile. (Her ne kadar kemere özgü ve donanıma özgü yapılandırma seçenekleri toplam kaynak kodunun çoğunu oluştursa da . Bkz. Linux çekirdeği neden 15+ milyon satırlık kod? )

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.