philipbohun.com

gitlab | github | youtube | twitter blog dark mode

将 Linux “转化”为 Windows

2025-03-29

核心观点:我们应该创建一个 Linux 发行版,默认通过 Wine 运行 Windows 二进制文件。

Linux 环境的不稳定性

我可以在 Windows 上运行 20 年前的 exe 文件。但尝试在 Linux 上运行一年前的二进制文件,你可能会发现由于某些更新,它无法运行。甚至今天在 Linux 上生成的二进制文件也可能无法在不同的 Linux 发行版上工作,因为安装的库版本可能存在问题。

虽然 Linux 系统调用本身非常稳定可靠,但构建在其之上的 C 语言库 并非如此。 实际上,几乎所有的用户空间都基于 libc,因此 Linux 本身也存在二进制兼容性问题。

二进制文件分发的问题

由于上述问题(以及更多),Linux 上没有好的二进制分发方式。 有四种(是的,四种!)主要的二进制分发方式,它们都有问题:

  1. 原始二进制文件。 如果这行得通,我们就不会需要其他解决方案。
  2. AppImage。 完全自包含的工件,将所有依赖项与二进制文件捆绑在一起。
  3. Flatpak。 一个为每个应用程序提供沙箱的包管理器。
  4. Snaps。 另一个在沙箱中运行应用程序的包管理器。

甚至还有更多分发二进制文件的方式,但这些是主要的。 令人难以置信的是,所有四种方法都可以同时在一个系统上使用,每种方法都有自己安装、更新和删除应用程序的方式。 我不会在这里详细介绍每种方法的优缺点,但每种方法都有争论。

所有这些方法的主要缺点是,应用程序的长期保存基本上是不存在的。 一个人能否将一个应用程序存档 20 年,然后从尘埃中取出它并执行它而无需其他努力? 也许对于 AppImage 来说可以? 谁知道呢? 对于其他三种方法,这绝对是“否”。

Win32 是答案

几年前,Arek Hiler 写了一篇博文 Win32 Is The Only Stable ABI On Linux。 他绝对正确,我相信这一见解是解决 Linux 兼容性问题的答案。 这实际上得益于 Win32 设计中的一个天才的决定。

在 Linux 中,你可以直接进行系统调用。 只需填充一些寄存器并发出系统调用中断。

在 Windows 中,你不会直接进行系统调用。 相反,你动态链接到为你进行系统调用的库。 这允许 Microsoft 在内核级别进行各种操作,同时为用户空间提供稳定的 API。 这种巧妙的设计使我们能够同时在同一台机器上拥有 Linux 和 Windows。

如果你仔细想想,Windows 应用程序和 Linux 应用程序之间只有两个主要区别。 一,它们使用不同的可执行文件格式。 二,Windows 使用动态库进行系统调用。 只需使用 PE 格式而不是 ELF,加载几个库,你基本上就拥有了一个 Windows 应用程序! 我们也已经有一种简单的方法来运行 Windows 应用程序,即 Wine。

Wine 是一个奇迹般的项目。 它提供了与 Windows 应用程序的惊人兼容性,一直追溯到 32 位的 Windows 95 时代。 它甚至实现了 DirectX! Windows 支持的功能和 Wine 支持的功能之间的差异随着时间的推移越来越小(特别是如果你坚持使用 Win32)。 Wine 是我们可以用来解决问题的魔法。

一个新的发行版

想象一下,我们创建了一个新的 Linux 发行版。 这个发行版将提供一个与 Windows 非常接近的桌面环境,Windows 用户无需培训即可使用它。 你可以像在 Windows 上一样安装和运行 Windows 应用程序; 无需额外的工作。 这将如何运作?

该发行版将预装 Wine,并且会对 Linux 内核进行一些小的修补。 对“exec”系列系统调用进行小的修改以根据可执行文件类型进行分派,将允许任何 Linux 应用程序 fork 并 exec 一个 Windows 应用程序,而无需任何努力。

可以为每个用户设置一个 wine prefix,桌面环境将基于该 prefix 工作,向用户和用户应用程序呈现类似 Windows 的文件系统。 我们所知的 Linux 仍然可用,但对于普通的 GUI 桌面用户来说是隐藏的。

真正的多平台

Wine 适用于 Linux、FreeBSD、ReactOS、macOS、Android 和 Haiku。 如果我们将所有应用程序作为 Windows/Win32 应用程序发布,我们可以实现多平台兼容性,而无需任何额外的工作。

迫在眉睫的未来

两个主要的商业操作系统,MacOS 和 Windows,正在朝着相同的方向发展。 这些操作系统正变得越来越封闭,侵犯隐私,并剥夺用户对其自身计算环境的控制权。 这两个操作系统都在他们的操作系统中内置了间谍软件。 Windows 将每隔几秒钟对你的屏幕进行 截图,并让人工智能对其进行分析。 MacOS 有一个名为 Gatekeeper 的功能,该功能将你可以在 Mac 上运行的软件限制为仅限于 Apple 批准的应用程序。 Apple 和 Microsoft 都在添加扫描你的计算机以查找“非法”文件并向当局报告你的能力。

这些功能以便利和“儿童安全”的名义完成,但最终结果是数十亿用户失去了对其自身计算机的代理权和控制权。 当你不再对自己的计算机有任何控制权时会发生什么? 当你的操作系统是订阅时会发生什么? 当你做了这些公司不喜欢的事情并且被禁止使用任何计算机时会发生什么?

Microsoft 已经在 删除 在没有在线帐户的情况下运行 Windows 的能力。 如果你丢失了你的帐户,即使是由于错误,你也会失去运行计算机的能力。

注意: 我不反对 Apple 或 Microsoft。 他们拥有优秀的工程师! 我不认为他们是恶意的。 相反,我认为这些公司的激励措施没有正确对齐。 经济和政府力量正在引导他们走上这条道路。 他们绝对可以改变策略并尝试赋予用户权力,但我认为我们不应该假设这会自然发生。

这就是为什么我认为我们需要一个 “Windows” 版本的 Linux 发行版。 它不仅解决了我们的二进制兼容性问题,而且还为 Windows 用户提供了一个过渡到 Linux 的途径,他们将被迫在今年 10 月 “升级” 到 Windows 11。 如果有一种无痛的方式来切换到 Linux,那不是很好吗?

只是一个想法。

(c) 2025 philip bohu