Answers:
OS X实际上(主要是BSD之上的专有图形外壳)。要创建OS X GUI应用程序,必须遵循Apple公开的api,因此它不是跨平台的,也不容易移植。
这就是为什么大多数库很容易移植(实际上大多数库是在Linux上开发的)而不是图形外壳的原因。
附带说明:现有框架可用于创建跨平台GUI应用程序。Qt浮现在脑海。但是,这些框架是跨平台的事实也使使用它们创建的应用程序在特定平台上的用户友好性不如“本地” GUI应用程序。这些框架倾向于使所有内容在各个平台上看起来都是通用的,这在Apple的情况下是不利的,因为Apple创造了非常特定的用户体验,无法轻松地“适应”其他平台。
编辑(将评论包含在答案中-谢谢@ Nick,@ kbisset和@John):
一种解决方案是移植整个OS X图形外壳(封闭源Cocoa / Core库-这是使OS X真正独特的原因) )到Linux。从技术上讲,苹果公司可以做到这一点很容易,但是他们没有理由这样做,因为他们的整个商业模式是整个平台(硬件和软件)的独特性。
可以想象有人可以尝试克隆这些库,但这需要花数十年的时间,而且由于必须复制所有未记录的调用,因此可能永远都不对。
图形层完全不同。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月)
因为大多数应用程序所依赖的不仅仅是运行它们的处理器和计算机的基础体系结构。它们还依赖于用户界面工具包和其他特定于平台的库。