我读到Mac OS X和bsd是相关的。他们有多紧密相关。可以在BSD上调整和安装Mac OS X软件吗?
答案 0 :(得分:29)
回到OS X 10.4的时代,我花了一些时间未能为OS X编写VFS。在那些日子里,在内核的主要子系统中,只有网络堆栈和VFS仍然是真正的BSD。那时,甚至VFS也被部分重写以使其更加模块化(所有BSD VFS数据结构都成为不透明的指针,而API则通过所谓的KPI函数)。我相信网络堆栈的方式是一样的。在userland的界面上还有一个薄层,使操作系统看起来像BSD到用户程序。
其他所有内容都被重写或替换:内存管理,流程管理等来自Mach微内核;设备驱动程序子系统是Apple公司从头开始编写的。
就用户区编程而言,OS X与BSD非常相似,为BSD编写的程序应该易于移植。但是,OS X有很多在BSD中不可用的API。这几乎包括与用户界面有关的一切 - 图形,声音等。在BSD中还有其他接口,例如启动API,它是OS X启动后台进程的首选方式。
答案 1 :(得分:19)
维基百科BSD article很好(并且符合我自己的理解,这是值得的)。它说,构建Apple Mac OS X的系统 Darwin是4.4BSD-Lite2和FreeBSD 的衍生产品,并指出4.4BSD是Berkeley参与的最后一个版本。< / p>
所以,Darwin就像你能得到的BSD一样(就像所有其他的BSD一样!)。 OS X指的是分发中那些非开源的部分,主要是GUI,但包括各种框架,依赖于这些部分的任何东西都不可移植。
OS X整体上是UNIX 03系统。这相当于一个真正符合POSIX标准的系统(而不是像POSIX一样)。
正如其他答案所指出的那样,对于拥有很多unix经验的人来说,操作系统的用户区部分并不令人惊讶,而且我在OS X上构建便携式unix软件时也很难。
相比之下,操作系统的非用户区部分非常不同。 Apple似乎愿意相当愉快地在这些领域进行创新。我认为(但我不是肯定的)这些变化正式成为达尔文的一部分。其中一个最明显的区别是launchd已经取代了cron,at,inetd和大部分启动基础架构。
答案 2 :(得分:7)
如果Mac软件使用Cocoa,Apple的专有显示库(它 ,如果它在带有GUI的Mac上运行,并且不需要启动X服务器),那么你可能会有一些在正常的BSD系统上运行代码的问题。
如果您的代码仅使用POSIX指定的函数,它将干净地移植到Linux,BSD甚至Windows。
Mac OS X和BSD确实是相关的。虽然它们具有不同的内核,但它们共享共同的祖先和重要的用户区代码。显然,我无法量化“多近” - 这是主观的。
答案 3 :(得分:4)
Mac OS X 是 BSD Unix的一种风格。正如Borelaid已经指出的那样,这并不一定意味着将Mac应用程序移植到其他类型的BSD上会很容易甚至可以管理,远远不如其他常见的BSD风格。他们每个人都有自己的细节,OS X比大多数都要多。
将程序从其他 BSD风格移植到OS X也涉及到工作,并不总是有效(顺利或根本),但通常要简单明了。
答案 4 :(得分:1)
这取决于您尝试移植的应用类型。如果您编写POSIX兼容的C / C ++控制台程序,它们将在任何POSIX兼容系统(主要是Linux和BSD版本)下编译和工作,但请注意OS X通常不实现最新的POSIX函数(例如{ {1}})在Linux中可用。另一方面,图形应用程序使用Cocoa或旧的Carbon,这需要GNUstep。移植图形应用程序非常罕见,因为每个图形环境都有不同的设计标准和约定,因此通常必须从头开始为每个图形环境编写图形应用程序。
答案 5 :(得分:0)
已安装 - 没有。
从源头移植,也许 - 请参阅Gnustep,Cocotron,EtoileOS - 所有这些都提供与Cocoa开发堆栈的不同程度的兼容性(但不包括旧的Carbon)。 以这种方式开发的x-platform objective-C软件数量有限。