为什么不是所有Mac应用程序都可以轻松移植到Linux?


15

由于Apple OS-X操作系统是UNIX派生(BSD),而底层的(Intel)Mac体系结构是相同的,为什么要在Linux上运行Apple特定的应用程序不是很简单?

Answers:


23

OS X实际上(主要是BSD之上的专有图形外壳)。要创建OS X GUI应用程序,必须遵循Apple公开的api,因此它不是跨平台的,也不容易移植。
这就是为什么大多数库容易移植(实际上大多数库在Linux上开发的)而不是图形外壳的原因。

附带说明:现有框架可用于创建跨平台GUI应用程序。Qt浮现在脑海。但是,这些框架是跨平台的事实也使使用它们创建的应用程序在特定平台上的用户友好性不如“本地” GUI应用程序。这些框架倾向于使所有内容在各个平台上看起来都是通用的,这在Apple的情况下是不利的,因为Apple创造了非常特定的用户体验,无法轻松地“适应”其他平台。

编辑(将评论包含在答案中-谢谢@ Nick,@ kbisset和@John):
一种解决方案是移植整个OS X图形外壳(封闭源Cocoa / Core库-这是使OS X真正独特的原因) )到Linux。从技术上讲,苹果公司可以做到这一点很容易,但是他们没有理由这样做,因为他们的整个商业模式是整个平台(硬件和软件)的独特性。
可以想象有人可以尝试克隆这些库,但这需要花数十年的时间,而且由于必须复制所有未记录的调用,因此可能永远都不对。


如果专有的图形外壳程序在BSD上运行,为什么不能相对容易地将其移植到Linux?当基础架构有所不同时,我理解了这个问题,但是现在基础架构只是英特尔,那么为什么图形外壳程序不只是一个库?
尼克·皮尔波因特

8
有两个原因。首先,它不仅仅是图形外壳。Apple多年来一直致力于Unix之上的整个工作。其次,该代码不可用。因此,需要从头开始重写它。苹果可能会在很短的时间内做到这一点,但是没有理由让他们这么做。
KeithB

1
因此...至少对于Apple而言,实际上并没有技术上的问题-他们可以将OS-X迁移到Linux上相对容易,因为它们已经可以在UNIX上运行。显然,对于其他所有人而言,这是一件大事,因为代码是封闭源代码,并且没有完全发布的API。这是一个合理的总结吗?
尼克·皮尔波因特

3
尼克:本质上是。苹果没有兴趣将OSX迁移到Linux平台。为什么要在开源Darwin平台(BSD层)和开源Cocoa / Core *库(这使OSX真正与众不同)上投入大量资金,他们为什么要这样做?他们的整个业务模型是整个平台(硬件和软件)的独特性。可以想象有人可以尝试克隆这些库,但这需要花数十年的时间,而且由于必须复制所有未记录的调用,因此可能永远都不对。到底是什么?
约翰·鲁迪

4
GNUStep是OS X中许多核心库的开源实现,但是苹果从那时起添加了许多库,因此移植仍然不是那么容易:wiki.gnustep.org/index.php/Cocoa
TRS-80

2

Apple特定的应用程序是指GUI应用程序吗?一旦移至命令行上方,便会为Linux不支持的所有内容(图形,声音等)提供Apple特定的API,因此无法轻松移植应用程序。


1

图形层完全不同。OS X使用专有的图形框架,Linux使用X(X11 / X.org)

几乎所有本机OS X应用程序都使用诸如Cocoa,CoreAnimation等框架,这些框架仅在OS X上可用。

例如,假设您有一个存储用户密码的应用程序-在OS X上,它将使用其钥匙串系统和相关的API。如果要将其移植到Linux,则没有直接等效的功能,因此您必须重新实现整个功能。这是一个很小的功能,并且需要大量重写。

如果您使用跨平台的GUI库(例如GTK,Qt或wxWidgets)编写应用程序,则移植会容易得多(或“可能”)-但是操作系统在UI(例如OS)方面仍然有很大不同X使用单独的菜单栏,而Linux倾向于每个窗口都有其菜单栏)

我见过的最好的跨平台端口之一是 传输,它以库的形式实现其主要功能(该库包含尽可能少的特定于平台的代码),然后分别为每个平台创建本机GUI。这意味着每个端口共享许多代码,但是所有端口都具有良好的本机接口(而不是一个单一的接口,该接口在Linux上非常合适,但在OS X上不合适,反之亦然)

有一个名为Cocotron的项目,“旨在实现类似于Apple Inc. Cocoa文档所描述的跨平台的Objective-C API”,这可能会使移植变得容易得多,但是最近的活动似乎很少。 (最后一篇博客文章是在2008年12月)


1

因为大多数应用程序所依赖的不仅仅是运行它们的处理器和计算机的基础体系结构。它们还依赖于用户界面工具包和其他特定于平台的库。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.