我在 Unix 和 Linux 上阅读了很多关于 BSD 和 GNU 等的书。但我仍然不明白 BSD 和 GNU 用户空间之间有什么实际的、实际的区别,尽管它们经常被提及。有人可以详细说明吗?
在回答时,请充分解释历史联系,记住我还没有经历过 GNU/Linux 不是主流 UNIX(OS X 除外)的时期。
Bru*_*ger 33
术语“用户空间”在不同的上下文中可以指代许多事物,但在这里我将“GNU 用户空间”与“BSD 用户空间”解释为发行版附带的默认、最小程序集。
最大的主要区别在于两个用户空间以完全不同的源代码开始。GNU cat 源代码 NetBSD cat 源代码。仅仅从这个概念简单的程序中,您就可以看到 NetBSD 的 cat 使用传统的单字母命令行标志。GNU 程序往往有单字母标志,但也有--something-long类型选项。GNU 程序也倾向于与 POSIX 兼容。
在某些情况下,源代码的差异将导致两个用户空间的行为不同。
看起来 NetBSD(至少)使用自己的 libc 版本,即标准 C 库。我在这里不知所措,但 libc 和动态链接奇怪地相互关联。同样,不同的源代码将导致不同的行为。
我认为作为 shell 用户,您会发现这ps会有所不同,并且ls可能会为您提供与您习惯的略有不同的输出。如果您使用--long-option命令行标志的类型,则必须为某些程序找到等效的命令行标志。
从历史上看,我的理解是 BSD 用户空间更直接地来自 V6 和 V7 Bell Labs Unix,通过 32V 端口到 VAX 硬件。GNU userland 是更新的,至少在某种程度上是为了响应 AT&T 在 80 年代初试图将代码保密。在 1983 年贝尔系统剥离之后,AT&T 试图“货币化”Unix。部分原因是以一种阻止大多数人看到它的方式许可源代码。理查德·斯托曼 (Richard Stallman) 和其他人对此有疑问。他们的 GNU 项目专门用于创建一个可自由共享的类 Unix 系统。
与此同时,到 1993 年,AT&T 就 BSD('B' 是伯克利,加州大学所在地)系统起诉加州大学系统。Berkeley 的人已经用新代码替换了 AT&T 的所有原始源代码,而这些新代码至少成为了 NetBSD 用户空间的祖先。AT&T 和 UCB 于 1994 年达成和解,并于 2004 年向公众披露。
自然地,至少想法是异花授粉的,所以 GNU 和 BSD 用户空间之间至少存在概念相似性,但极端情况肯定不同。