Mac OS X和BSD有多密切相关?

我读到Mac OS X和bsd有关系。 他们有多紧密相关。 Mac OS X软件可以在BSD上进行调整和安装吗?

早在OS X 10.4的时代,我花了一些时间来写OS X的VFS。那时候,在内核的主要子系统中,只有网络堆栈和VFS仍然是真正的BSD。 那时候,甚至连VFS也被部分改写,使它更加模块化(所有的BSD VFS数据结构都变成了不透明的指针,而API则是通过所谓的KPI函数)。 我相信网络堆栈也是一样的。 在用户界面上也有一个很薄的层,使得操作系统看起来像BSD到用户态程序。

其他一切已经被重写或替换:内存管理,进程管理等来自Mach微内核; 设备驱动程序子系统是从头开始写的。

就用户级编程而言,OS X与BSD非常相似,为BSD编写的程序应该易于携带。 但是,OS X有很多API在BSD中不可用。 这些包括几乎所有与用户界面有关的事情 – 图形,声音等等。BSD中还不存在其他的接口,例如启动API,这是OS X启动后台进程的首选方式。

维基百科BSD文章是好的(并符合我自己的理解,这是值得的)。 它说, 达尔文是苹果公司的Mac OS X系统,它是4.4BSD-Lite2和FreeBSD的衍生产品 ,并且指出,4.4BSD是伯克利最后一个版本。

所以,达尔文就像BSD一样(就像所有其他的BSD一样)。 OS X是指那些不是开源的,主要是GUI,但包括各种框架的部分,任何依赖这些框架的东西都是不可移植的。

OS X作为一个整体是一个UNIX 03系统。 这相当于是一个真正的POSIX兼容系统(而不是像POSIX一样)。

正如其他答案所指出的,操作系统的用户级部分对于unix经验丰富的任何人都不足为奇,而且在OS X上构建portable-unix软件也很少遇到困难。

相比之下,操作系统的非用户区部分却非常不同。 苹果似乎乐于在这些领域进行相当高兴的创新。 我认为(但我不积极),这些变化是达尔文的正式组成部分。 其中最明显的差异之一是launchd已经取代了cron,inetd和大部分的启动基础设施。

如果Mac软件使用Cocoa,Apple专有的显示库(如果Mac上运行的是GUI,并且不需要启动X服务器),那么在普通的BSD系统上运行代码可能会遇到一些问题。

如果你的代码只使用POSIX指定的函数,它将干净地移植到Linux,BSD,甚至Windows。

确实,Mac OS X和BSD是相关的。 尽管它们有不同的内核,但它们共享一个共同的祖先和重要的用户级代码。 显然,我无法量化“多么接近” – 这是主观的。

Mac OS X BSD Unix的一种风格。 正如Borelaid已经指出的那样,这并不一定意味着将Mac应用程序移植到其他类型的BSD将是容易的,甚至是可管理的,远远低于其他常见的BSD类型。 他们每个人都带来自己的具体情况,OS X比大多数。

其他 BSD风格的程序移植到OS X也涉及到工作,并不总是工作(顺利或完全),但通常更直接。

这取决于您尝试移植哪种应用程序。 如果你编写POSIX兼容的C / C ++控制台程序,它们将在任何兼容POSIX的系统(主要是Linux和BSD风格)下编译和工作,但请注意OS X通常不会实现最新的POSIX函数(例如utimensat )在Linux中可用。 另一方面,图形应用程序使用Cocoa或较旧的Carbon,这将需要GNUstep。 移植图形应用程序是非常罕见的,因为每个图形环境都有不同的设计标准和约定,所以图形应用程序通常必须从头开始为每个图形环境编写。

安装 – 没有。

从源代码移植,也许 – 参见Gnustep,Cocotron,EtoileOS – 所有这些都提供了与Cocoa开发栈不同程度的兼容性(但与旧的Carbon不兼容)。 这种方式开发的X平台Objective-C软件是有限的。