İlan

En sevdiğiniz açık kaynak uygulamanıza özelliklerle dolu bir güncelleme indirdiniz. Her şey iyi çalışıyor ve onu diğer cihazlarınızda kullanıyorsunuz - bu yüzden bunları da onlara sunmanın zamanı geldi.

Parlak yeni Linux dizüstü bilgisayarınız hariç, Windows kurulum paketinizle uyumlu değildir. Android tabletiniz nasıl? IPhone? PS4? Neden bu yazılımı alıp istediğiniz yerde kullanmıyorsunuz? "Bir kez satın al, her yerde koş" hayalinin önündeki bazı engelleri inceleyelim.

Yazılım Geliştirme ve İşletim Sistemi Mimarisi

Yazılımın neden işletim sistemlerinde çalışmadığını anlamak için yazılımın nasıl yapıldığına dair biraz (biraz, söz veriyorum) bilgi gerekiyor.

Yazılım Geliştirme Süreci

Masaüstü, sunucu ve mobil cihazlar için çok temel bir yazılım geliştirme akışında (ör. web değil Programlama vs. Web Geliştirme: Fark Nedir?Uygulama programcılarının ve web geliştiricilerinin aynı işi yaptığını düşünebilirsiniz, ancak bu gerçeklerden çok uzak. İşte programcılar ve web geliştiricileri arasındaki temel farklar. Daha fazla oku ), bir programcı şunları yapacaktır:

instagram viewer
  1. Biraz yazın kod bir veya daha fazla dosyaya.
  2. derleme kodu bilgisayarın yürütebileceği bir şey haline getirir.
  3. Ölçek programın beklendiği gibi çalıştığından emin olmak için.
  4. Paketleme ve dağıtma / dağıtma yazılım.
yazılım işletim sistemi uyumluluğu geliştirme süreci

Burada bizi ilgilendiren birinci ve ikinci adımların birleşimidir. Süreci derleme veya koddan bir bilgisayarın karmaşık olduğunu anladığı (makine dili) kodları ve sıfırlara dönüştürmek. Buna ayrıntılı olarak girmeyeceğiz, ancak ne olduğunu yüksek seviyede anlamak yararlıdır.

İşletim Sistemi Mimarisi

Anlaşılması gereken önemli bir nokta, bir işletim sisteminin tek bir varlık olmadığıdır. Aksine, yazılım katmanlarından oluşur.

İşletim Sistemi Çekirdekleri

Bir işletim sisteminin çekirdek bilgisayarın donanımı ile iletişim kurmaktan sorumludur. Yazılım komutlarını çekirdeğe iletir, bu da donanıma sabit diskten bir dosya okumak (veya ekranda bir pencere çizmek) için komut verir. Temel olarak, donanım ve çeşitli yazılım parçaları arasındaki tüm bilgileri (depolanmış veriler, hesaplamalar veya kullanıcı girişi olsun) koordine eder. Çekirdek, tüm bu işlevleri yazılım yoluyla sistem çağrıları.

yazılım işletim sistemi uyumluluğu çekirdek temelleri
Resim Kredisi: Wikimedia Commons

Her işletim sisteminin çekirdeği, sistem çağrılarını, hangilerinin kullanılabilir olduğu, ne adlandırıldığı veya hangi seçenekleri aldıkları açısından farklı şekilde uygular. Sonuç olarak, yazılımın hedeflediği her işletim sisteminin çekirdeği tarafından desteklenen sistem çağrılarını dikkate alması gerekir. Linux'ta GPU'ya veri göndermek için kullandığınız sistem çağrısının farklı bir adı, sağlamanız gereken bilgiler listesi veya her ikisi de Windows'ta olabilir. Bu kesin çağrı hiç orada olmayabilir.

Sistem Kütüphaneleri

Çoğu durumda yazılım doğrudan çekirdeği çağırmaz. Bunun yerine, sistem kütüphaneleriveya temel işlev koleksiyonları. Kütüphaneler var (örneğin) dosyaları sabit sürücüye kaydeden her programın bunu yapmak için bir işlev yazmasına gerek yoktur. Bunun yerine, basitçe bağlantıları bir sistem kütüphanesi kullanır ve mevcut bir işlevi kullanır. Linux için GLibC kütüphanesi, Win32 API'sindeki .DLL dosyaları veya Mac’in / Sistem / Kütüphane dizininin içeriği OS X Kütüphane Klasörüne Erişim ve Neden KullanışlıÇoğu OS X Kitaplığı klasörü en iyi şekilde yalnız bırakılır, ancak Kullanıcı Kitaplığı'nda ve çevresinde yolunuzu bilmek yararlıdır. Daha fazla oku .

yazılım işletim sistemi uyumluluk sistemi kütüphaneleri
İmaj Kredisi: ScottXW Wikimedia Commons aracılığıyla

Sistem kütüphaneleri, rutin işler için uygulamalar ve çekirdek arasında bir tür çevirmen görevi görür. Uygulamalar yapmak fonksiyon çağrıları düşük seviyeli ayrıntıları bir çok işleyen bu kütüphanelere Ayrıca, rahatlık için çekirdeğe sistem çağrıları yapabilirler. Tahmin edebileceğiniz gibi, bu kütüphaneler belirli bir çekirdek için yazılmıştır ve bu nedenle farklı çekirdeklere sahip işletim sistemlerinde kullanılamaz.

İşletim Sistemi Yürütme Başlıkları

Evrensel yazılıma son engel, işletim sistemleri için yürütülebilir dosyaların biçimidir. İşletim sistemi, çalıştığı dosyaların belirli bir dosyayı izlemesini bekler ikili dosya formatı Dosya Biçimleri ve Özellikleri Hakkında Bilmeniz Gereken Her ŞeyKelime dosyasını birbirinin yerine kullanıyoruz: müzik, resim, e-tablo, slayt gösterisi vb. Ama bir dosyayı "dosya" yapan nedir? Bilgisayarın bu temel bölümünü anlamaya çalışalım. Daha fazla oku . Örneğin, aşağıdaki işletim sistemlerinde çalışan Yürütülebilir ve Bağlanabilir Biçim (ELF) dosyaları Linux ve FreeBSD, aşağıda gösterildiği gibi, dosyanın belirli özelliklerini belirli baytlarla belirtmelidir görüntüsü.

yazılım os uyumluluğu elf başlığı

uygulama ikili arayüzü (ABI) gösterilen yetenek özellikle önemlidir. İşlemci, çekirdek ve sistem kütüphanelerinden gelen çağrıların bir kombinasyonu olan ABI, bir uygulama programlama arabirimi (API) iki programın birbirleriyle nasıl iletişim kurduğunu tanımlar. Ancak API, iki yazılım parçasını belirtmek için kaynak kodunda programcılar (insanlar) tarafından kullanılan bir şeydir meli birbiriyle konuşmak. ABI, yazılım derlendikten ve çalıştırıldıktan sonra aslında bunu yapmalarına izin veren şeydir. Her işletim sistemi, aynı işletim sisteminin sürümleri arasında değişebilen veya değişmeyen belirli bir ABI uygular.

Genel olarak, işletim sistemleri, işlemci tipi, çekirdek ve standart sistem kitaplıklarının bir kombinasyonuyla belirlenen kendi ABI'lerini uygular. Ancak bazen bir işletim sistemi birden fazla uygular. FreeBSD, Linux ikili dosyaları için desteğe sahiptir, çünkü FreeBSD çekirdeğine (Linux çekirdeği yerine) bir eklenti olarak bir Linux ABI sağlar. Bu farklı sanallaştırma programları Sanal Makine Nedir? Bilmen gereken her şeySanal makineler, geçerli bilgisayarınızda diğer işletim sistemlerini çalıştırmanıza izin verir. İşte onlar hakkında bilmeniz gerekenler. Daha fazla oku VMWare veya VirtualBox gibi bir makinenin tamamını (donanım ve her şeyi) simüle etmek için yazılımı kullanır. Sonuç olarak, bu tip ABI uyumluluğu daha hızlıdır, ancak sürdürülmesi çok daha fazla çaba gerektirir. Bu yüzden nadir olmasına rağmen Microsoft son zamanlarda değeri gördü Ubuntu Artık Windows MağazasındaWindows Insiders, şimdi Ubuntu'yu Windows 10'a indirip yükleyebilir. Bu, Linux ve Windows'u, tanık olacak kadar uzun yaşayacaklarını düşünen kutsal olmayan bir birlik içinde bir araya getiriyor. Daha fazla oku bunu yaparken.

İstisna: Yorumlanmış Yazılım

Yukarıdakilere dayanarak, geliştiricilerin bir ve yalnızca bir tür hedef sistem için yazılım yazdıklarını öğrendik. Yapmadıkları zamanlar hariç. Bir Mac'te indirip çalıştırabileceğiniz, daha sonra Windows'ta kopyalayıp çalıştırabileceğiniz ve hatta tekrar kopyalayıp Linux'ta sorunsuz çalıştırabileceğiniz birçok uygulama vardır. Bu nasıl mümkün olabilir?

Şimdiye kadar mı uzanıyordum?

Anlaşıldığı üzere, yüzeye "her yerde çalışıyor" gibi görünen bir yazılım kategorisi var. Herhangi bir dosyada indirip çalıştırabilirsiniz. desteklenen platform - anahtar kelime "destekleniyor". Aslında, uygulamanın kaynak kodunu indirirken başka bir uygulama ( yorumlayıcı) kaynak kodunu doğrudan gerçek zamanlı olarak çalıştırmaktır. Bu çok basit bir şey, bu yüzden bunun birkaç dilde nasıl çalıştığına bakalım.

Java

Java ilk yayınlandığında sözünü verdi (kelimenin tam anlamıyla) “bir kez yaz, her yerde koş”. Fikir yaratmaktı dosyaları kaydetmek, hesaplamalar yapmak veya bir uygulama oluşturmak için Java işlevlerini kullanarak uygulamalar penceresi. Sonra bir Java Runtime Enviornment (JRE) desteklenen her bilgisayar platformu için kodu çalıştırır ve bunları yerel işletim sistemi işlevlerine çevirir. Java'nın püf noktası, işletim sisteminde "doğrudan" çalışmadığıdır. JRE'nin bir bölümünde çalışır Java Sanal Makinesi ve işletim sisteminde çalışan da budur.

Java, bu ek yazılım katmanını uygulama ve işletim sistemi arasına yerleştirerek, işletim sistemlerinde aynı olan bir dizi işleve odaklanmanıza olanak tanır. Java'ya ne yapmak istediğinizi söylersiniz ve sisteminiz için JVM'nin gerçekte nasıl yapılacağı konusunda endişelenmesine izin verirsiniz. Aşağıdaki resim bunu çalışırken gösterir, burada JIDE Yazılımının Java Masaüstü Uygulama Çerçevesi Mac (üst), Windows (orta sol), “saf Java” (orta sağ) ve Linux (alt) için aynı uygulamayı görüntüler.

yazılım işletim sistemi uyumluluğu jide jdaf
İmaj Kredisi: JIDE Yazılımı

Java programları gerçek zamanlı olarak kendilerini tam olarak “derlemez”. Bunun yerine, Java derleyicisi bunları “bayt koduna” dönüştürür. Bayt kodunu yarı pişmiş bir program olarak düşünebilirsiniz. Geliştirici uygulamayı bıraktığında, hangi işletim sistemini çalıştıracağını bilmeden olabildiğince derlenir. Gerçekten başlattığınızda, JVM, ana işletim sisteminin belirli işlevlerine uyması için “onu geri kalanı pişirir”.

piton

Popüler bir yorumlanmış dil piton Python Programlamanın Yararsız Olmamasının 5 NedeniPython - Ya seviyorsunuz ya da nefret ediyorsunuz. Hatta bir sarkaç gibi bir uçtan diğer uca sallanabilirsiniz. Ne olursa olsun, Python kararsız olması zor bir dildir. Daha fazla oku . Bir Python betiği çalıştırdığınızda, Python yorumlayıcısı kodu işletim sistemi yönergelerine çevirecektir. Ayrıca Java'ya benzer şekilde işlev görebilir: kodu uygulamanızın dışından “içe aktardığınızda” ilk çalıştırıldığında bayt kodlaması için derlenir. Daha sonra tercüman, sonraki çalışmalarda orijinal kodun değişip değişmediğini bilecek ve bu noktada onu yeni bayt koduna yeniden derleyecektir.

Bu "isteğe bağlı" çalışmanın harika bir yan ürünü, komut dosyalarınızı etkileşimli olarak geliştirmek için yorumlayıcıyı kullanabilmenizdir. Komut satırına "python" yazarak yorumlayıcıyı başlatırsınız ve kodu çalıştırabilir ve sonuçları hemen görebilirsiniz.

yazılım işletim sistemi uyumluluğu python yorumlayıcı

Bu, geliştiricilerin oynayabileceği ve şeyleri “yaşa” yapabileceği anlamına gelir. Ardından, bir kod satırı istediklerini yaptıktan sonra, kopyalayıp içine yapıştırın bir komut dosyası (yorumlanmamış dil programcılarının yapması gereken “kod-derleme testi” döngüsüne göre çok daha verimlidir).

Yazılım Aynı Olsa Bile Muhtemelen Hayır

Ne yazık ki, kullanıcılar için teknoloji endüstrisi gerçekten “evrensel” bir format geliştirmemiştir. Ve bunu asla yapamayabilir. Bu tür standartların getirilmesi çoğu zaman “en az ortak payda” çözümü ile sonuçlanır ve herkesin onayını almaktan ödün vermek.

Ne düşünüyorsun? Bu kadar iyi olmadığı anlamına gelse de, evrensel olarak uyumlu bir yazılım kullanmayı tercih eder misiniz? Veya kullandığınız işletim sistemiyle ilgili sorun yok mu ve diğer platformlardaki uygulamalarla ilgilenmiyor musunuz? Aşağıdaki yorumlarda bize bildirin!

Resim Kredileri: Masterchief_Productions / Shutterstock

Aaron on beş yıl boyunca bir iş analisti ve proje yöneticisi olarak teknolojide dirsek ve neredeyse bir süredir sadık bir Ubuntu kullanıcısı (Breezy Badger'den beri). İlgi alanları arasında açık kaynak, küçük işletme uygulamaları, Linux ve Android entegrasyonu ve düz metin modunda bilgi işlem sayılabilir.