是否在Linux中重写了所有Unix命令?


Answers:


93

看来您正在混淆操作系统的两个非常不同的部分。这是可以理解的,因为它们经常互换使用,但是在技术上是不正确的,因此您的问题基于错误的前提。为了全面探索并希望回答您可能想提出的问题,需要简短的历史课程。

首先是UNIX。基本上,在那些日子里,UNIX的意思是最早出现的AT&T UNIX System。但是AT&T UNIX变成了非Free,因此Richard Stallman开始了GNU项目,以编写一个Free的Unix系统。因此,名称Gnu是Not Unix,缩写为GNU。GNU的计划于1983年公布,并于1984年开始开发

到1990年代初,GNU从头开始重新实现了大多数UNIX实用程序。 Wikipedia列出了整个系统的一些未重写组件(提到了TeX,X Window系统和Mach微内核作为未重写组件的示例),但是大多数情况下,用户界面工具都是从头开始重写的,以便满足目的是避免重用任何AT&T(或更确切地说,非免费)代码,并通过添加命令行选项来扩展其功能。结果,GNU实用程序通常比从其原始灵感中使用的工具更强大。

在这一点上,GNU仍然缺少一个重要组成部分:一个操作系统内核,这样可以让一切在真实的计算机没有运行一些其他操作系统一起工作。1991年,Linus Torvalds开始从事一个玩具项目,该项目最终被称为Linux。从根本上来说,这是一个学校项目,以了解当时新的32位Intel 80386 CPU,开始时非常简单,但最终开始演变为可实际使用的操作系统内核。但是它没有任何用户界面软件。Linux本身不提供外壳程序,没有提供超出内核初始化的系统启动功能,没有文本编辑器,没有图形界面,没有任何东西。内核就像汽车引擎。制造有用的汽车必不可少,但不能单独使用(对于有用的汽车,您需要轮子,变速箱,转向,驾驶员坐着的地方,油箱或其他能量储存之类的东西)。Linux内核最终以与GNU软件相同的GNU通用公共许可证发行。

因此人们开始将两者配对。您将获得一个类似Unix的用户群,以及一个基于Unix想法的内核(包括与POSIX的相似之处),并附带源代码,您可以随意破解任何源代码,而且无需花费任何费用。尤其是在Linux发行版变得普遍之前,要花点时间才能使工作正常进行,但是它已经完成得足以让愿意花一些时间的人使用。

如今,GNU提供了自己的内核。您可能还没有听说过,但是它叫做GNU Hurd。但是Hurd并不是在1990年代初出现的,那时Linux开始在业余爱好者和修补匠中引起人们的注意,因此Linux内核和主要是GNU用户领域的结合才在开发人员中引起了最大的关注。

而且,如今,许多Unix系统都安装或允许管理员轻松安装GNU用户区的一部分。在其他非GNU系统上,您可能会看到诸如GNU bash,GNU编译器集合,GNU C库(原始或已修补)之类的内容。

更糟的是,某些系统使用Linux内核,但根本没有GNU用户区。对于广泛使用的示例,请考虑Android OS,它基本上是Linux内核以及自定义用户区。

这很重要,因为它大大模糊了GNU,Linux和各种Unix之间的界限(只有一个UNIX,但是有很多Unix,还有更多类似Unix的OS)。当您询问Linux时,您实际上经常询问GNU / Linux系统。但是考虑Debian GNU / kFreeBSD,它在FreeBSD内核之上运行GNU用户区,根本不使用Linux。例如,在Solaris上,您可以在其上轻松安装各种GNU软件包,包括coreutils。我认为Mac OS X也随GNU用户区一起提供。或考虑上述Android。

最后,可用的GNU系统可能会运行非GNU代码,而非GNU系统可能会运行GNU代码,但GNU实用程序不包含非GNU代码。


1
我上次使用FreeBSD(几年前)时并没有使用很多GNU工具,而是使用了自己的工具集-例如BSD make而不是GNU make。
reinierpost

5
@reinierpost OSX非常相似-普通安装主要包含BSD版本的东西,但可以通过MacPorts等轻松获得GNU coreutils 等。XCode使用LLVM,但也使用gcc。这很复杂:)
MattDMo

1
@reinierpost make并不是很容易替换。在C编译器是一个涉及多一点。至少FreeBSD 8.0使用GCC作为其默认编译器;特别是版本4.2.1。涉及防止将较新版本集成到基本系统中的“许可问题”可能与从GPL2 +到GPL3 +的转换有关,但是我不确定。
2013年

3
@ hunter2根据到目前为止的投票数,似乎没有必要。;)我也没有写完整的历史记录。在Linux成为自托管主机之前,Minix作为Linux开发和引导系统起着重要作用,但对Linux,GNU和原始UNIX之间的关系影响不大,这更像是关于问题所在。
CVn

3
@ hunter2如果我们沿着这条路走,那么UNIX当然也不是最先出现的。但是出于回答问题的目的,这似乎是一个足够好的近似值。单句话答案应该像是“基本上,您在Linux系统上找到的所有UNIX,除了TeX和X都被重写为GNU的一部分”,但是我认为附加上下文会增加价值,即使它使答案比绝对要长得多。必要-答案仍然远远不能涵盖所有细节。
CVn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.