OSX ve Linux arasında birçok fark olduğunu biliyorum, ama onları tamamen farklı kılan, temelde uyumsuz kılan şey nedir?
OSX ve Linux arasında birçok fark olduğunu biliyorum, ama onları tamamen farklı kılan, temelde uyumsuz kılan şey nedir?
Yanıtlar:
Bütün ABI söz sepp2k olarak değil, sadece ikili biçimde (ELF karşı Mach-O), farklıdır.
Örneğin, Linux ve Darwin / XNU (OS X'in çekirdeği) kullanımı hem süre sc
PowerPC'e ve int 0x80
/ sysenter
/ syscall
syscall giriş için x86, çok daha ortak noktası orada değil oradan.
Darwin, Mach mikro çekirdeğinde negatif sistem numaralarını ve BSD monolitik çekirdeğinde pozitif sistem numaralarını yönlendirir - bkz. Xnu / osfmk / mach / syscall_sw.h ve xnu / bsd / kern / syscalls.master . Linux'un sistem numaraları mimariye göre değişir - bkz. Linux / arch / powerpc / include / asm / unistd.h , linux / arch / x86 / include / asm / unistd_32.h ve linux / arch / x86 / include / asm / unistd_64.h - ama hepsi olumsuz değil. Bu yüzden açıkça sistem çağrı numaraları, sistem çağrı argümanları ve hatta hangi sistem çağrılarının var olduğu bile farklıdır.
Standart C çalışma zamanı kitaplıkları da farklıdır; Darwin çoğunlukla FreeBSD'nin libc'ünü devralırken, Linux tipik olarak glibc'yi kullanır (ancak eglibc ve dietlibc ve uclibc ve Bionic gibi alternatifler vardır).
Bütün grafik yığınının farklı olduğunu söylemeye gerek yok; Tüm Cocoa Objective-C kütüphanelerini yok sayarak, OS X'deki GUI programları Mach portları üzerinden WindowServer ile konuşuyor, Linux'ta GUI programları genellikle X11 protokolünü kullanarak UNIX alan soketleri üzerinden X sunucusuyla konuşuyor. Tabii ki istisnalar var; Darwin’de X’i çalıştırabilir ve Linux’ta X’i atlayabilirsiniz, ancak OS X uygulamaları kesinlikle X’le konuşmaz.
Birisi işi koyarsa Şarap gibi
daha sonra Linux'ta "doğal" bir OS X programı çalıştırmak mümkün olabilir. Yıllar önce, Kyle Moffet, Linux için bir prototip binfmt_mach-o oluşturarak ilk madde üzerinde bazı çalışmalar yaptı , ancak hiçbir zaman tamamlanmadı ve başka benzer proje bilmiyorum.
(Teoride bu oldukça mümkün ve birçok kez benzer çabalar yapıldı; Wine'a ek olarak, Linux’un kendisi de HP-UX ve Tru64 gibi diğer UNIX’lerden ikili dosyaları çalıştırmayı destekliyor ve Glendix projesi Plan 9’a uyumluluk getirmeyi hedefliyor Linux.)
Biri etti Linux için Mach-O ikili yükleyici ve API çevirmen uygulamak için çaba koymak!
shinh / maloader - GitHub , ikili alana yükleme ve kullanıcı alanındaki tüm kütüphane çağrılarını yakalama / çevirme gibi Şarap benzeri bir yaklaşım benimsemiştir. Sistem, sistemleri ve tüm grafiklerle ilgili kütüphaneleri tamamen görmezden geliyor, ancak birçok konsol programının çalışması için yeterli.
Sevgilim maloader üzerine kuruludur, kütüphaneler ve diğer destekleyici çalışma süreleri eklemektedir.
OSX uygulamaları neden linux'da yerel olarak çalışmayacak:
Öncelikle OSX, Linux'tan farklı bir ikili format kullanır, bu nedenle Linux, OSX için derlenmiş ikilileri çalıştıramaz (aynı şekilde Windows veya BSD için derlenmiş ikilileri çalıştıramaz).
İkincisi, GUI uygulamaları hakkında konuşuyorsanız, Apple'ın GUI araç seti Cocoa a) yalnızca OSX için kullanılabilir ve b) X11'in üzerinde çalışmaz.
OSX uygulamaları için neden eşdeğer şarap yok:
Şarap yarı yarıya kullanılabilir duruma gelmeden önce çok fazla iş yapılması gerekiyordu. Bir OSX eşdeğeri için çok fazla talep olmadığından, hiç kimse böyle bir projeye henüz aynı gayreti göstermedi.
OS X uygulamalarının Linux'ta çalışmamasının en önemli nedeni, bu OS'lerin farklı sistemler kullanmasıdır.
Kütüphanelerden bahseden bazı önceki cevaplar ancak genellikle durum böyle değildir - Core Foundation, Apple tarafından CFLite adı altında büyük ölçüde açık kaynaklıdır ve herhangi bir platforma kolayca taşınabilir (iTunes'un Windows sürümü aslında Core Vakfı'nın bir Windows portunun tepesinde ve Bazı derleyiciler tweaks, doğrudan bir Linux dağıtımında klan kullanarak CFLite yapabilirsiniz) ve ayrıca, özellikle temel olarak GNUstep olan GNU OpenPEP uygulaması olan Linux için Temel ve AppKit olan Objective-C ortamını taşımak için açık kaynaklı çabalar var. Apple'ın Kakao'sundan daha erken (NeXT Computer şirketinin hala olduğu zaman başladı.)
Birisi belirlenirse, her Mach-O sistem çağrısını yakalayacak ve karşılık gelen Linux sisteme çevirecek bir yükleyici tasarlayabilir ve bu açık kaynaklı kütüphane "meslektaşlarını" uygun ABI çevirisine sahip ikili sisteme dinamik olarak bağlayabilir.
Ve sadece bilginiz için, Mach-O uygulamasının kaynak kodunu bulabilirseniz, portu göz önünde bulundurabilirsiniz ve bunun çok basit olduğu ortaya çıkabilir. Örnek olarak, OS X 10.6 ile birlikte gelen TextEdit uygulaması, birkaç satır (kritik olmayan) CF kodunu çıkardıktan sonra doğrudan GNUstep'e bağlanma ve derhal Linux altında kullanılabilir (GNUstep ile birlikte gönderilen TextEdit'ten bahsetmeden söz etmeden) derlenebilir. TextEdit uygulamasının NeXTSTEP'ten, yani öncüllerinden OS X'e kadar yeniden derlenmesi, hatta "© 1995 NeXT" etiketini koruyarak). TextEdit BSD lisansı altındadır.
8 Aralık 2012'de yeni proje başlatıldı - Darling.