因此,有许多不同版本的 Unix:HP-UX、AIX、BSD 等。 Linux 被认为是 Unix 克隆,而不是 Unix 的实现。所有“真正的”Unices 都是原版的真正后代吗?如果不是,Linux 与 Unix 的区别是什么?
我最近有一个论点,说 Mac OS X 不是 UNIX,而是类 Unix。
我知道有一个单一的 Unix 规范,那些符合规范的可以使用 UNIX 商标。
Mac OS X 是 UNIX 操作系统还是类 Unix 操作系统?
……它们之间有什么区别?我这样表述我的问题是为了明确表示我对意见之战不感兴趣,而是对不同风格的 BSD Unix 之间的客观比较感兴趣。理想情况下,我可以从在所有这些方面都有经验的用户那里得到反馈。
背景
我最近发现 Unix 不仅仅是 Linux。我在工作中使用 Solaris,它让我大开眼界。现在我对新的 unices 感兴趣,我想尝试一个新的 unices,我自然对 BSD 很好奇。
问题
我不是在寻求关于安装什么 BSD 的建议或意见;我想知道它们之间的差异(和共同点),以便我可以下定决心。问题是很难在它们之间进行适当的比较。
如果幸运的话,你会得到一些像这样草率的定义:
FreeBSD = Popular all-rounder.
NetBSD = Portable (runs on a lot of platforms, including a toaster)
OpenBSD = Security above anything else.
Run Code Online (Sandbox Code Playgroud)
(这可能是真的,但它并不是真的有用。我确信 FreeBSD 也是可移植和安全的......)
如果你不走运,你会陷入那些不可避免的 Unix 传说中的一个,关于项目拆分、分叉、基于知识/道德理由重新命名,Theo de Raadt 如何是一个极端主义者,以及 MacOS X 和 FreeBSD 如何在 20 多年前有一个共同的祖先。
引人入胜,但不是真正的信息,是吗?
BSD
我感兴趣的 BSD 是:
和可选
我的问题
为了更好地理解差异,这里有一个关于不同分布的一些相关问题的列表(我们可以使用这个术语吗?)。如果您在某种形式的表格数据下提出您的答案,那么您就是我的英雄!
与 Mac 用户讨论后,我得到了几个版本的 Mac OS X 来源。众所周知,在 BSD 中有一些根,但是有多少,在哪里?
有人说 Mac OS X 有一个 FreeBSD 内核,上面的所有实用程序使它成为特定于 Mac 的操作系统。(这里不讨论用户应用程序,只讨论所有的init
、ls
、cd
、 和其他人。binutils?)
其他人说 Mac OS X 是 Darwin 内核,即纯 Mac,并且 OS 实用程序来自 BSD。
真相在哪里?
(我已经注意到之前有人问过这个问题,但我认为它没有以我想要理解的方式回答。)
之间的概念和结构差异是什么?
虽然归根结底它们都是内核 - 我认为在结构、功能和专业化方面可能存在差异。在哪些情况下,一种内核比另一种内核具有优势?(Web 服务器、数据库、计算等)
是否有任何共同努力将力量集中在一个通用内核或某些模块上,或者这是否毫无意义?
PS:在这种情况下,不同的许可证类型或运输/包装/维护方法并不重要。我真的很想了解它们在结构、功能/特性级别和专业化方面的不同之处。
编辑:这是/sf/ask/69903851/的副本。我没有将这个问题作为重复来关闭的声誉。
我不是指~
主目录中的 as,而是指:
$ ls ~foo/bar
/some/mount/point/foo/bar
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用不同的挂载点,例如:
$ mount | ag "/dev "
devfs on /dev (devfs, local, nobrowse)
$ ls /dev/stdin
/dev/stdin
$ ls ~stdin
zsh: no such user or named directory: stdin .
# bash has a similar error message:
ls: ~stdin: No such file or directory
Run Code Online (Sandbox Code Playgroud)
~
在这种情况下称为什么?它是如何工作的?
编辑:基于以下一些评论的更多信息:
foo
不是我系统上的用户名。ls -lah ~
并非显示所有选项。即我能够cd ~qux
,当qux
没有出现在自动完成时。再次qux
不是我系统中的用户。/some/mount/point
是网络共享。为什么没有 Unix API?我的意思是,因为有 Windows API。
我知道 Unix 世界中的很多东西都是模块化的,这些东西放在一起就形成了一个完整的系统。这听起来不错,但是当您尝试制作本机 Unix 应用程序时确实会产生一些问题。
例如,你想用一个很酷的名字 WP 编写一个漂亮的文字处理器。Windows 版本的 WP 将通过调用 Windows API 来构建。您可以直接用 C 编写代码,也可以使用各种包装库中的任何一种。但是,该程序仍然必须通过调用 winapi 来构建,它提供了程序员构建 Windows 应用程序可能需要的每一个功能,从基本系统调用到 GUI、3D、多媒体或其他任何具有十多年向后兼容性的东西。如果不是这样,Wine 永远不会存在。
现在你想创建一个 Unix 版本的 WP。标准 C 和 C++ 库以及 POSIX API 非常稳定,并且在任何 Unix 变体中都得到很好的支持。当您尝试执行更多操作时会出现问题。所以你需要为 WP 创建一个窗口,但是如何呢?有 X11,但这不是唯一的。人们认为应该更换 X11,现在正在制作两个不兼容的替代品,Wayland 和 Mir。即使对于 X11,也有 Xlib 和 xcb。xcb 声称它们“更好”,在某些方面确实如此,但是文档在哪里?您最终选择 Xlib 来完成任务,但 X11 标准本身仅定义了非常基本的功能。您对 GUI 应用程序期望的任何其他内容(例如窗口事件或剪贴板支持)都需要通过调用来处理扩展XInternAtom
. 这句话只是我个人的看法,但在X中使用Atoms是非常不直观的。另一个问题是并不是每个 X 的窗口管理器都很好地支持这些扩展。因此,让我们将这种肮脏的事情留给 GTK+ 和 Qt 的开发人员,他们会破坏每个新版本的向后兼容性。是否有可能在 Linux 中支持便携式拖放?
在我看来,Unix 社区真的在桌面世界中杀死了自己。我知道我提到的事情甚至对设置 BSD 服务器都没有关系,但是如果您尝试构建便携式本机 Linux 应用程序,则很重要。
是什么造成了这一切?真的有努力清理和标准化现代 Unix 桌面环境的东西吗?为什么没有 Unix API?会有一个吗?