今天我和一个朋友讨论了Linux和Unix,我的朋友一直说Linux内核的第一个版本是基于Unix内核的[部分]。
这确实让我感到惊讶,因为从第一个版本开始,我一直认为 Linux 的架构与 Unix 非常相似。那么,第一个 Linux 版本真的是基于 Unix 的部分内容吗?
答案1
答案2
第一个 Linux 内核必须是使用 MINIX 引导,它的开发考虑了类似 UNIX 的设计。现在,Linus 在设计内核时使用了有关 UNIX 的书籍。他的订书日期甚至被存档。
迄今为止,Linux 尚未完全兼容 UNIX,因此,它被指定为“类UNIX”(另一方面,Mac OS X 是一个(完整的)UNIX)。
你的问题的标题简单地写着“Linux”,这不仅意味着内核,还意味着它的其他部分。我认为,当您考虑内核之外的因素并将其与 UNIX 进行比较时,它甚至更加相似。考虑到 X 等,Linux 内核本身就非常接近 UNIX,但是当您考虑到 GNU 部分时,它会变得更加接近。
0.01版本的内核,可以仍然下载。不过,我还没有测试它是否可以编译,更不用说运行了。
答案3
不。
说 Linux 的第一个版本“基于”Unix 的一部分是没有意义的。它不是 Unix 内核的移植。在第一个版本中它并不是以 Unix 代码开始的[浏览源码]并随着时间的推移更换它。 Linus 无法访问 Unix 源代码 [面试]。
它复制的就是API。最新版本的 Linux 中也有相同的 API,并且将永远保留。一般来说,Linux 不会删除任何 API,因为这会破坏某些应用程序。复制的内容是最少必要的,当Linux(以及 Linux libc 的第一个版本)是为运行现有的 Unix 应用程序而编写的。这是Linux众所周知的基本能力。 你可以用不同的方式来描述这一点,但这里没有什么可争论的。
例如,相同的 API 被复制到 GNU libc(早于 Linux)中。 IIRC Linux 有效地复制自 API 文档(man
页)。
我什至不愿意这么说,因为 Unix 内核和应用程序之间的接口设计最好的部分,比如 gcc; “一切都是文件”。基本文件操作标准化作为 C 编程语言的一部分。我的联机帮助页建议使用 C89,即一年左右之前。例如,Windows 实现相同的 C API。然而,这掩盖了太多非文件和/或 C 未包含在标准中的繁琐部分,因此我们必须承认 Linux 与 Unix 非常相似。
具体API在这个“第一个”版本Linux 的是70个系统调用, 他们的参数列表,40个错误代码...并且超过其中任何一个,200 行定义终端控制这正是我在写“fiddly bit”时所想到的。但肯定还有更多。
正如其他地方所暗示的,这是一个痛点。因为它是在微软资助的一项“研究”中提出的,然后在没有任何证据的情况下提起了多年的诉讼(SCO v IBM)。 IIRC 他们最终展示了几行代码。事实证明,所有“侵权知识产权”(他们声称 IBM 添加到 Linux 中)只是一些 API。尽管目前有多个先例允许复制 API,即洁净室逆向工程。
正如其他人提到的,与 Minix 的关系曾是更紧。我相信文件系统格式取自 Minix。数据结构比大多数抽象 API 更具实现特定性,如果您说“基于部分”迷你克斯你不一定在撒谎。
Minix 也被描述为类 Unix(或“Unix 克隆”,即类似于 Unix 但不基于其代码的操作系统)。从某种意义上说,Linux 是基于 Unix 的,Minix 也应该如此。(还有一些其他的 Unix 克隆;维基百科列出了一些专有的层和 Windows 的各种兼容层)。
我正在为 386(486) AT 克隆做一个(免费)操作系统(只是一个爱好,不会像 gnu 那样大和专业)。这个计划从四月份就开始酝酿,现在已经开始准备了。我想要关于人们喜欢/不喜欢 minix 的任何反馈,因为我的操作系统有点类似于它(文件系统的物理布局相同(由于实际原因)等)。
我目前已经移植了 bash(1.08) 和 gcc(1.40),并且一切似乎都正常。这意味着我将在几个月内得到一些实用的东西,并且我想知道大多数人想要什么功能。欢迎任何建议,但我不保证我会实施它们:-)
莱纳斯([电子邮件受保护])
附言。是的 -它没有任何 minix 代码,并且它有一个多线程 fs。它不是可移植的(使用 386 任务切换等),而且它可能永远不会支持 AT 硬盘以外的任何东西,因为这就是我所拥有的:-(。