是什么阻止我们在 Linux 上支持 Windows NT 应用程序?

是什么阻止我们在 Linux 上支持 Windows NT 应用程序?

免责声明: 首先,我不能 100% 确定我是否在正确的 StackExchange 社区中回答这个问题,但我找不到解决一般操作系统问题的社区。请告诉我是否应该将其移至其他地方。

其次,如果这是一个愚蠢的问题,请原谅我的无知 - 目前我对操作系统内部工作原理的了解仅限于我多年来随机学到的知识以及教授基本概念的本科“操作系统”课程使用XINU进行内存管理和CPU控制。

问题: 是什么问题(或某些问题)阻止我们开发同时支持 Linux 内核和 Windows NT 系统调用的单一内核?在非常基础的层面上,我希望我能够(如果很耗时的话)创建一个也支持 Windows 风格的系统调用的 Linux 内核的修改版本。

如果我要制作前面提到的弗兰肯斯坦内核(并告诉它如何解释微软的“.exe”可执行格式),那么我是否能够运行基于 Windows 和基于 UNIX 的可执行文件?

我对 WINE 不是很了解,但我想它会做类似的事情,充当一种兼容层,将 Windows 调用转换为它们的 linux 等效项。那么是什么阻止我们将此类功能添加到内核本身(从而跳过开销)呢?

是微软的版权问题吗?难道只是因为这两个操作系统在本质上有很大的不同,以至于根本无法做到这一点?

我已经搜索了有关此内容的信息(或者至少解释了为什么它不能/尚未完成),但没有找到太多。我确实遇到过一个名为朗吉内看起来中国的一个组织正试图这样做,但它似乎像开始时一样很快就消失了。

我的想法是,也许这样的事情太大了,维护工作太多,不值得。然而,我想从对操作系统有更深入了解的人那里得到一些意见,这似乎是合适的地方(考虑到不可能有 Windows 内核开发人员的社区,因为它都是专有的)。

答案1

从某种意义上说,它已经或正在尝试。这反应操作系统是克隆 Win 95 操作系统的尝试,他们遇到的问题代表了任何可能克隆 NT 的尝试。

  1. 微软故意以比程序员尊敬工程师克隆的速度更快地开发更新和更改。微软总是在当前操作系统发布之前就开始开发下一代操作系统,并保留功能和代码的专有性。在 Win 7 发布之前,他们已经开始了 Win 10,而 Win 11 在 Win 10 发布之前就开始了。(是的,他们撒谎说 Win 10 是最后一个操作系统!)就在我们说话的时候,他们正在开发下一代操作系统。

  2. 微软的产品通常没有足够的吸引力来吸引足够多的受众来花时间进行克隆。相反,大多数人想要“更好”或不同的东西。

  3. 上面提到的 REACT OS 经过 20 多年的发展,仍然相当不稳定。此外,硬件变化如此之快,即使他们在 5-10 年前就有了稳定的版本,新的硬件要求也可能会对团队的成就造成负担。

想象一下,为了保持与所有新声卡、视频卡和芯片的兼容性,需要付出多大的努力!这将是一项永无止境、吃力不讨好的工作:(

答案2

是什么问题(或某些问题)阻止我们开发同时支持 Linux 内核和 Windows NT 系统调用的单一内核?

  1. 可用的开发人员时间。
  2. Windows 和 Linux 在很多方面有所不同;如果您保证一个 API 的“对文件的并发写入访问始终按顺序出现在所有读取器上”,而对于另一个 API,您保证“写入访问可能永远不会被另一次写入阻止”,那么您就会遇到逻辑冲突(我不认为这是一个逻辑冲突)。顺便说一句,知道这个示例是否适用于这两个操作系统。)。您可以将其中之一从另一个中抽象出来,但通常,您会在此过程中失去一些功能。

从最基本的层面上讲,我希望能够(尽管耗时)创建一个修改版的 Linux 内核,同时支持 Windows 风格的系统调用。

WindowsNT 有一个 POSIX API,即 UNIX 风格的 API(从 NT4 开始!),Linux(几乎)也有。所以,在某种程度上,这个操作系统是存在的,它就是 Windows。

我对 WINE 不是很了解,但我想它会做类似的事情,充当一种兼容层,将 Windows 调用转换为它们的 linux 等效项。

是的!翻译一些系统调用,提供 Windows 附带的(部分)用户态库等等。

是微软的版权问题吗?

可能不会。 Oracle 与 Google 关于 Java API 的较量已经经法庭证明,您不能对 API 进行版权保护(在美国)。不过,我不是律师,很难看出这会在多大程度上扩展到 Windows API。但 WINE 还没有遇到麻烦,所以现在可能很难开始执行这一点。

如果我要制作前面提到的弗兰肯斯坦内核(并告诉它如何解释微软的“.exe”可执行格式),那么我是否能够运行基于 Windows 和基于 UNIX 的可执行文件?

忽略其中的“内核”一词:与 WINE 和 Linux 内核一起binfmt_misc,您今天就可以做到这一点(对于相当多的 Windows 软件)。这是很常见的做法!

相关内容