【问题标题】:How closely are Mac OS X and BSD related?Mac OS X 和 BSD 的关系有多密切?
【发布时间】:2011-03-27 15:36:26
【问题描述】:

我读到 Mac OS X 和 bsd 是相关的。它们的关系有多密切。可以在 BSD 上调整和安装 Mac OS X 软件吗?

【问题讨论】:

    标签: macos unix operating-system linux-kernel kernel


    【解决方案1】:

    在 OS X 10.4 时代,我花了一些时间未能为 OS X 编写 VFS。当时,在内核的主要子系统中,只有网络堆栈和 VFS 仍然是真正的 BSD。那时,甚至 VFS 也被部分重写以使其更加模块化(所有 BSD VFS 数据结构都变成了不透明的指针,API 是通过所谓的 KPI 函数实现的)。我相信网络堆栈也是如此。在与用户空间的接口处还有一个薄层,使操作系统在用户空间程序中看起来像 BSD。

    其他一切都被重写或替换了:内存管理、进程管理等来自 Mach 微内核;设备驱动子系统是由 Apple 从头开始​​编写的。

    在用户态编程方面,OS X 与 BSD 非常相似,为 BSD 编写的程序应该很容易移植。然而,OS X 有很多在 BSD 中不可用的 API。这些几乎包括与用户界面有关的所有内容 - 图形、声音等。还有其他 BSD 中不存在的界面,例如启动 API,它是 OS X 启动后台进程的首选方式。

    【讨论】:

      【解决方案2】:

      Wikipedia BSD article 很好(并且符合我自己的理解,就其价值而言)。它说Darwin 是构建 Apple 的 Mac OS X 的系统,是 4.4BSD-Lite2 和 FreeBSD 的衍生版本,并指出 4.4BSD 是伯克利参与的最后一个版本。

      所以,Darwin 是尽你所能获得的 BSD(就像所有其他 BSD 一样!)。 OS X 指的是发行版中非开源的部分,主要是 GUI,但包括各种框架,任何依赖这些框架的东西都不能移植。

      OS X 作为一个整体是一个UNIX 03 系统。这相当于是一个真正符合 POSIX 的系统(而不是类似于 POSIX)。

      正如其他答案所指出的,操作系统的用户区部分对于任何具有丰富 unix 经验的人来说都不足为奇,而且我在 OS X 上构建便携式 unix 软件几乎没有任何困难。

      相比之下,操作系统的非用户态部分则完全不同。苹果似乎很乐意在这些领域进行创新。我认为(但我并不肯定)这些变化正式属于达尔文的一部分。最明显的区别之一是 launchd 已经取代了 cron、at、inetd 和大部分启动基础设施。

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        • @AmokHuginnsson 实际上,Windows XP、7、Server 2003 和 2003 R2(据我所知)有一个 POSIX“组件”,可以通过“添加或删除 Windows 组件”控制面板进行安装入口。安装后,它们实际上确实符合 POSIX。
        【解决方案4】:

        Mac OS X BSD Unix 的一种。正如 Borelaid 已经指出的那样,这并不一定意味着将 Mac 应用程序移植到其他版本的 BSD 会很容易甚至易于管理,远不如在其他常见的 BSD 版本之间移植。他们每个人都有自己的特点,而 OS X 比大多数人都多。

        将程序从其他 BSD 风格移植到 OS X 也涉及工作,但并不总是工作(顺利或根本不工作),但通常更简单。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            已安装 - 没有。

            可能是从源代码移植的——请参阅 Gnustep、Cocotron、EtoileOS——所有这些都提供了与 Cocoa 开发堆栈不同程度的兼容性(但与旧版 Carbon 不兼容)。 以这种方式开发的 x 平台 Objective-C 软件数量有限。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2010-12-11
              • 1970-01-01
              • 2015-04-08
              • 1970-01-01
              • 2014-12-02
              • 2015-02-14
              相关资源
              最近更新 更多