Linux 和 BSD 都有像ls
andcat
和echo
and 之类的通用程序kill
。
它们来自相同的源代码,还是 Linux 和 BSD 都拥有这些程序的独特源代码?
Jde*_*eBP 41
Linux 是一个内核。 它首先没有应用程序的代码。
基于Linux的操作系统甚至不必彼此使用相同的源代码,更不用说与 BSD 上的相同代码了。有几个相当基本的程序的多种实现是众所周知的。
这些包括但不限于:
ifconfig
有 2 个实现,一个在GNU inetutils 中,另一个在NET-3 net-tools 中。它现在有 3 个,第三个是我的。(参见https://unix.stackexchange.com/a/504084/5132。)su
有 2 个实现,一个在util-linux 中,另一个在shadow 中。Debian 在 2018 年从一个切换到另一个,在这个 WWW 站点上提出了几个旧的问题和答案。(请参阅https://unix.stackexchange.com/a/460769/5132,例如,“ su vs su -(在 Debian 上):为什么 PATH 相同? ”。)mailx
命令:GNU Mailutils、BSD mailx、NMH 和 s-nail。(参见https://unix.stackexchange.com/a/489510/5132。)BSD 是操作系统。 它们确实包含这些程序的代码。然而,没有单一的 BSD 操作系统,这些程序的代码有时在 NetBSD、FreeBSD、OpenBSD 和 DragonFly BSD 之间有所不同。此外,它与用于几个基于 Linux 的操作系统的代码完全不同。
众所周知,Apple/NeXT 在 MacOS/NeXTSTEP 中使用 BSD 应用程序软件,但增强了几个程序以支持 ACL,其方式与(其他)BSD 的方式不同。例如,一种是使用chmod
命令设置访问控制。所以这些命令的达尔文版本再次不同。
增加了三个曲折。
程序喜欢kill
并且echo
通常是 shell 内置程序。 因此,这些命令的代码根据您使用的外壳程序而不是操作系统而有所不同。
然后是 BusyBox 和 ToyBox,它们可用于基于 Linux 的操作系统和 BSD,甚至用作一些前者的此类命令的主要实现,它们有许多命令的自己的实现。
然后是 OpenSolaris,来自 Illumos 和 Schillix 之类的工具,以及所有这些工具的 Solaris 实现,这又是不同的。
这里有完整的历史,包括 BSD 和 AT&T Unix 之间的原始分裂,通过在 80 年代末和 1990 年代“PD”克隆许多 Unix 程序的努力,之后大约三年的洗牌,整个开源版本Solaris 的代码,以及 OpenBSD 对一些东西的重新实现。即使人们可能被误导的工具历史也有一种实现,例如cron
(很多人错误地认为这是原始的 Unix 工具,或者错误地认为至少是一种单一的风格,cron
由 Paul Vixie 在 1987 年写成“PD ” ,或者没有意识到从那以后的几年里其他人写的类似的替代品)是不平凡的。
Pes*_*hke 12
Linux 和 BSD 中的这些程序是否相同?
简短的回答是:不一定。
常见的方案,如源代码ls
,cat
,echo
,kill
,等依靠什么用户态他们来自何处。换句话说,您的系统使用的用户空间。与 Linux 内核一起使用的最常见的用户空间是 GNU - 因此名称为 GNU/Linux。然而,其他用户空间已与 Linux 内核集成。
BSD 通常有自己的用户空间,与 GNU 等其他用户区分开开发。甚至 BSD 本身也有不同的代码库。例如,FreeBSD 和 OpenBSD 都有一个“BSD 用户空间”,但是它们的代码库是不同的。如果您查看他们的手册页(ps
例如),他们可以使用不同的参数。
开发POSIX 的原因之一是为了解决多个代码库的问题。如果随用户空间提供的通用实用程序符合 POSIX,则您可以确保它们(几乎)相同地工作,无论它们来自 GNU、FreeBSD、OpenBSD、AIX 还是其他基于 UNIX 的系统。
您可能知道,上面列出的用户域(AIX 除外)是开源的。随意浏览他们的代码存储库,您很快就会发现它们并不完全相同。
注意:尽管 GNU/Linux 是最流行的,但过去也有人尝试将 GNU 用户空间与 FreeBSD/NetBSD 内核一起使用。您可以在 wikipedia 上阅读更多关于它们的信息。
归档时间: |
|
查看次数: |
4260 次 |
最近记录: |