Fal*_*rri 42 linux osx compatibility executable
我知道 OSX 和 Linux 之间有很多区别,但是是什么让它们如此完全不同,以至于它们根本不兼容?
eph*_*ent 58
整个ABI是不同的,不仅仅是 sepp2k 提到的二进制格式(Mach-O 与 ELF)。
例如,虽然 Linux 和 Darwin/XNU(OS X 的内核)sc在 PowerPC 和int 0x80/ sysenter/syscall在 x86 上用于系统调用入口,但从那以后就没有太多共同之处了。
Darwin 在 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 运行时库也不同;Darwin 主要继承了 FreeBSD 的 libc,而 Linux 通常使用 glibc(但也有替代品,如 eglibc 和dietlibc 以及 uclibc 和 Bionic)。
更不用说整个图形堆栈是不同的;忽略整个 Cocoa Objective-C 库,OS X 上的 GUI 程序通过 Mach 端口与 WindowServer 通信,而在 Linux 上,GUI 程序通常使用 X11 协议通过 UNIX 域套接字与 X 服务器通信。当然,也有例外; 你可以在 Darwin 上运行 X,你可以在 Linux 上绕过 X,但是 OS X 应用程序绝对不会说 X。
像 Wine 一样,如果有人把工作投入到
那么就可以在 Linux 上“本地”运行 OS X 程序。多年前,Kyle Moffet 在第一项上做了一些工作,为 Linux创建了一个原型binfmt_mach-o,但它从未完成,而且我知道没有其他类似的项目。
(理论上这是很有可能的,类似的努力已经做过很多次了;除了 Wine 之外,Linux 本身也支持运行来自其他 UNIX 的二进制文件,例如 HP-UX 和 Tru64,而Glendix项目旨在将 Plan 9 兼容性引入到Linux。)
有人已经投入实施的Mach-O二进制装载机和API翻译器适用于Linux的努力!
shinh/maloader - GitHub采用类似 Wine 的方法加载二进制文件并捕获/翻译用户空间中的所有库调用。它完全忽略系统调用和所有与图形相关的库,但足以让许多控制台程序工作。
Darling建立在 maloader 之上,添加了库和其他支持运行时位。
sep*_*p2k 22
为什么 OSX 应用程序不能在 linux 上本地运行:
首先,OSX 使用与 Linux 不同的二进制格式,因此 Linux 无法执行为 OSX 编译的二进制文件(就像它无法执行为 Windows 或 BSD 编译的二进制文件一样)。
其次,如果您谈论的是 GUI 应用程序,Apple 的 GUI 工具包 Cocoa a) 仅适用于 OSX,而 b) 不能在 X11 上运行。
为什么 OSX 应用程序没有对应的 wine:
在葡萄酒甚至可以使用一半之前,还需要做很多工作。由于对 OSX 等价物的需求没有那么多,因此还没有人为这样的项目投入同样多的精力。
小智 7
OS X 应用程序无法在 Linux 上运行的最重要原因是这些操作系统使用了不同的系统调用。
之前的一些答案提到了库,但通常情况并非如此 - Core Foundation 主要由 Apple 以 CFLite 的名义开源,并且可以轻松移植到任何平台(iTunes 的 Windows 版本实际上位于 Core Foundation 的 Windows 端口之上,并且与一些编译器调整,你可以直接在 Linux 发行版上使用 clang 制作 CFLite)并且还有一些开源的努力将 Objective-C 环境移植到 Linux,主要是 Foundation 和 AppKit,最著名的是 GNUstep,一个 OpenStep 的 GNU 实现,日期为早于 Apple 的 Cocoa(开始时还有 NeXT Computer 公司。)
如果有人确定,他们可以设计一个加载器来捕获每个 Mach-O 系统调用并将其转换为相应的 Linux 系统调用,并通过适当的 ABI 转换将这些开源库“对应物”动态链接到二进制文件。
仅供参考,如果您可以获得 Mach-O 应用程序的源代码,您可以考虑移植它,结果可能会非常简单。例如,在剥离几行(非关键)CF 代码后,与 OS X 10.6 捆绑的 TextEdit 应用程序可以直接重新编译链接到 GNUstep,因此在 Linux 下立即可用(更不用说与 GNUstep 一起提供的 TextEdit 实际上是一个直接从 NeXTSTEP 重新编译 TextEdit 应用程序,它也是 OS X 的前身,甚至保留了它的“© 1995 NeXT”标签)。TextEdit 在 BSD 许可下。
| 归档时间: |
|
| 查看次数: |
23044 次 |
| 最近记录: |