我知道OSX和Linux之间存在许多差异,但是是什么使它们如此完全不同,从而使它们从根本上不兼容呢?
我知道OSX和Linux之间存在许多差异,但是是什么使它们如此完全不同,从而使它们从根本上不兼容呢?
Answers:
整个ABI是不同的,而不仅仅是sepp2k提到的二进制格式(Mach-O与ELF)。
例如,虽然Linux和达尔文/ XNU(OS X的内核)同时使用sc
的PowerPC和int 0x80
/ sysenter
/ syscall
x86上的系统调用入口,有没有共同点更多的从那里。
达尔文将负的系统调用号定向到Mach微内核,并将正的系统调用号定向到BSD整体内核—请参阅xnu / osfmk / mach / syscall_sw.h和xnu / bsd / kern / syscalls.master。Linux的系统调用号因体系结构而异-请参阅linux / arch / powerpc / include / asm / unistd.h,linux / arch / x86 / include / asm / unistd_32.h和linux / arch / x86 / include / asm / unistd_64.h -但都是非负的。所以很明显的系统调用号,系统调用的参数,甚至它的系统调用存在不同。
标准的C运行时库也不同。达尔文主要继承了FreeBSD的libc,而Linux通常使用glibc(但还有其他选择,例如eglibc和Dietlibc以及uclibc和Bionic)。
更不用说整个图形堆栈是不同的。忽略整个Cocoa Objective-C库,OS X上的GUI程序通过Mach端口与WindowServer对话,而在Linux上,GUI程序通常使用X11协议通过UNIX域套接字与X Server对话。当然,也有例外; 您可以在Darwin上运行X,也可以在Linux上绕过X,但是OS X应用程序绝对不会使用X。
像葡萄酒一样,如果有人将作品投入
然后可以在Linux上“本地”运行OS X程序。几年前,Kyle Moffet在第一个项目上做了一些工作,为Linux 创建了原型binfmt_mach-o,但是它从未完成,而且我还没有其他类似的项目。
(从理论上讲,这是完全有可能的,并且已经做了很多类似的工作;除了Wine之外,Linux本身还支持运行其他UNIX(例如HP-UX和Tru64)的二进制文件,Glendix项目旨在使Plan 9兼容。 Linux。)
有人已经在努力为Linux实现Mach-O二进制加载器和API转换器!
shinh / maloader-GitHub采用类似Wine的方法来加载二进制文件并捕获/转换用户空间中的所有库调用。它完全忽略了系统调用和所有与图形相关的库,但是足以使许多控制台程序正常工作。
Darling建立在maloader的基础上,添加了库和其他支持的运行时位。
为什么OSX应用程序不能在Linux上本地运行:
首先,OSX使用与Linux不同的二进制格式,因此Linux无法执行针对OSX编译的二进制文件(无法执行针对Windows或BSD编译的二进制文件的方式)。
其次,如果您正在谈论GUI应用程序,则苹果公司的GUI工具包Cocoa a)仅可用于OSX,b)不能在X11之上运行。
为什么没有适合OSX应用程序的葡萄酒:
在葡萄酒甚至不能使用一半之前,必须完成许多工作。由于对OSX的需求不多,因此尚无人在此项目上投入相同的精力。
OS X应用程序不能在Linux上运行的最重要原因是因为这些OS使用了不同的系统调用。
先前的一些答案提到了库,但通常不是这样-Core Foundation主要由Apple以CFLite的名称开源,并且可以方便地移植到任何平台(iTunes的Windows版本实际上位于Core Foundation的Windows端口之上,并且一些编译器调整,您可以在Linux发行版上使用clang直接制作CFLite),并且还进行了开放源代码的工作,以将Objective-C环境(主要是Foundation和AppKit)移植到Linux,最著名的是GNUstep,这是OpenStep的GNU实现。早于苹果公司的Cocoa(该公司成立时仍是NeXT Computer。)
如果确定某人,他们可以设计一个加载器,该加载器将捕获每个Mach-O系统调用并将其转换为相应的Linux系统调用,并通过适当的ABI转换将这些开放源代码库“对等”动态链接到二进制文件。
仅作为参考,如果您可以获得Mach-O应用程序的源代码,则可以考虑移植它,并且结果可能非常简单。例如,剥离了几行(非关键)CF代码之后,可以直接重新编译与OS X 10.6捆绑在一起的TextEdit应用程序,以针对GNUstep进行链接,从而可以在Linux下立即使用(更不用说GNUstep附带的TextEdit实际上是一个直接从NeXTSTEP(也是OS X的前身)重新编译TextEdit应用程序,甚至保留其“©1995 NeXT”标签)。TextEdit受BSD许可。
2012年12月8日,新项目-达令(Darling)已启动。