GNU/Linux >> Belajar Linux >  >> Linux

Linux – Apa yang Membuat Program Osx Tidak Dapat Dijalankan Di Linux?

Saya tahu ada banyak perbedaan antara OSX dan Linux, tetapi apa yang membuat keduanya sangat berbeda, sehingga pada dasarnya tidak kompatibel?

Jawaban yang Diterima:

Seluruh ABI berbeda, bukan hanya format biner (Mach-O versus ELF) seperti yang disebutkan sepp2k.

Misalnya, saat Linux dan Darwin/XNU (kernel OS X) menggunakan sc di PowerPC dan int 0x80 /sysenter /syscall pada x86 untuk entri syscall, tidak ada lagi kesamaan dari sana.

Darwin mengarahkan nomor syscall negatif di mikrokernel Mach dan nomor syscall positif di kernel monolitik BSD — lihat xnu/osfmk/mach/syscall_sw.h dan xnu/bsd/kern/syscalls.master. Nomor syscall Linux bervariasi menurut arsitektur — lihat linux/arch/powerpc/include/asm/unistd.h, linux/arch/x86/include/asm/unistd_32.h, dan linux/arch/x86/include/asm/unistd_64.h — tetapi semuanya non-negatif. Jadi jelas nomor syscall, argumen syscall, dan bahkan yang syscalls yang ada berbeda.

Pustaka runtime C standar juga berbeda; Darwin sebagian besar mewarisi libc FreeBSD, sedangkan Linux biasanya menggunakan glibc (tetapi ada alternatif, seperti eglibc dan dietlibc dan uclibc dan Bionic).

Belum lagi bahwa keseluruhan tumpukan grafik berbeda; mengabaikan seluruh perpustakaan Cocoa Objective-C, program GUI pada OS X berbicara dengan WindowServer melalui port Mach, sementara di Linux, program GUI biasanya berbicara dengan server X melalui soket domain UNIX menggunakan protokol X11. Tentu saja, ada pengecualian; Anda dapat menjalankan X di Darwin, dan Anda dapat melewati X di Linux, tetapi aplikasi OS X pasti tidak berbicara tentang X.

Seperti Wine, jika seseorang memasukkan karyanya ke

  • menerapkan pemuat biner untuk Mach-O
  • menjebak setiap panggilan sistem XNU dan mengubahnya menjadi panggilan sistem Linux yang sesuai
  • menulis pengganti pustaka OS X seperti CoreFoundation sesuai kebutuhan
  • menulis penggantian untuk layanan OS X seperti WindowServer sesuai kebutuhan

kemudian menjalankan program OS X "asli" di Linux bisa dimungkinkan. Bertahun-tahun yang lalu, Kyle Moffet melakukan beberapa pekerjaan pada item pertama, membuat prototipe binfmt_mach-o untuk Linux, tetapi tidak pernah selesai, dan saya tahu tidak ada proyek serupa lainnya.

(Secara teori ini sangat mungkin, dan upaya serupa telah dilakukan berkali-kali; selain Wine, Linux sendiri memiliki dukungan untuk menjalankan binari dari UNIX lain seperti HP-UX dan Tru64, dan proyek Glendix bertujuan untuk membawa kompatibilitas Plan 9 ke Linux.)

Seseorang memiliki berusahalah untuk mengimplementasikan pemuat biner Mach-O dan penerjemah API untuk Linux!

shinh/maloader – GitHub mengambil pendekatan seperti Wine untuk memuat biner dan menjebak/menerjemahkan semua panggilan perpustakaan di ruang pengguna. Ini sepenuhnya mengabaikan syscalls dan semua pustaka terkait grafis, tetapi cukup untuk membuat banyak program konsol bekerja.

Terkait:Linux – Bagaimana cara menampilkan pesan selamat datang di unix??

Sayang dibangun di atas maloader, menambahkan perpustakaan dan bit runtime pendukung lainnya.


Linux
  1. Seperti apa pbcopy OSX untuk Linux

  2. Apa yang membuat distribusi GNU dan apakah ada distribusi Linux yang bukan GNU?

  3. Mengapa anggur dapat menjalankan program 64bit di Linux tetapi tidak di Mac?

  1. Apa yang membuat Linux menjadi OS yang berkelanjutan

  2. Apa yang membuat komunitas Linux istimewa?

  3. Karakter apa yang harus saya gunakan atau tidak gunakan pada nama pengguna di Linux?

  1. Apa itu pengguna Linux?

  2. Apa itu Umask di Linux?

  3. Apa yang Tidak Harus Dipasang Di SSD?