Linux为什么还没准备好成为桌面操作系统?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
作者 | Artem S. Tashkinov 责编 | 苏宓 出品 | CSDN(ID:CSDNnews) 以下为译文: 多年前,我写过一篇关于这个主题的文章(https://itvision.altervista.org/why.linux.is.not.ready.for.the.desktop.current.html),相较而言,那篇文章过于技术化、篇幅过长,还包含许多有争议的观点,因此我思考了很久,决定将其完全重写,使其更易于非技术人士理解,并揭示出那些使 Linux 仍然难以匹配现代桌面 PC 的深层核心问题。 十多年前写的初版文章曾颇受欢迎,但如今这个网站的访问量非常少,因为 PC 已经或多或少地被淘汰了:世界上的大多数人都依赖智能手机完成一切。而 PC 主要被企业、专业人士、硬核 PC 游戏玩家以及 PC 发烧友所使用。 再次声明,与旧文章一样,我想明确一点:Linux 完全可以满足你的某些需求,尤其是当这些需求主要集中在将电脑用作 Web 客户端时。只需启动 Firefox 或 Chrome 就可以搞定(当然,前提是你足够幸运,系统上的硬件视频加速功能能够正常运行。然而即使到了 2024 年,硬件加速仍然是个问题,而 Windows 早在近二十年前就几乎完美解决了视频编码和解码加速问题)。 需要强调的是,这篇文章讨论的是 Linux 发行版,而非特指 Linux 内核。单独的 Linux 内核本身在没有应用程序运行时是毫无用处的。 Linux 适合 IT 专业人士。这篇文章关注的是普通用户的使用体验,即那些不愿接触终端或学习 Shell 命令的用户。 接下来,让我们逐一讨论以下核心问题。这些问题如果没有人投入十亿美元以上的资金,几乎不可能得到解决: Linux 并不是一个操作系统 当人们谈论操作系统时,通常想到的是一个核心操作系统,配备大量的软件,这些软件可以在不同版本的操作系统上运行。例如,Windows 上的许多软件即便是 20 年前开发的(没错,20 年!),在 Windows 11 或其当前版本中依然能正常运行。Android 15(截至 2024 年的最新版本)支持自 Android 7.0 起发布的所有 Android 软件,确保了超过 8 年的兼容性。
这正是 Linux 发行版的问题所在。对 Linux 发行版来说,软件的首选分发方式是为每个操作系统版本单独编译。而这种方式并不保证兼容性,大多数时候,过去版本的软件根本无法在你当前的 Linux 发行版上运行。 更糟糕的是,为当前版本的 Linux X 编译的软件,不一定能在当前版本的 Linux Y 上运行。Linux 发行版普遍要求所有软件必须为其当前版本编译,或者以源代码形式提供。 然而,源代码的难题在于:普通用户不会愿意自己编译软件,其次,即使有兴趣,也不一定能成功编译,因为软件可能依赖于特定的编译器或依赖库,而你的发行版可能不提供这些资源。此外,各个发行版还需要维护者来支持这些软件,如果没有人愿意承担维护工作,你在该发行版中根本找不到所需的软件。 当然,熟悉 Linux 的读者可能会提到 Linux 提供了 Flatpak、Snap 和 AppImage。这些技术试图解决软件兼容性问题,但我不会深入探讨它们的不足(https://ludocode.com/blog/flatpak-is-not-the-future)。简单来说,它们实际上是轻量级的虚拟机。这些工具的核心原理并非真正解决兼容性问题,而是通过让用户分配并运行大量的二进制代码来规避问题,结果却不必要地消耗存储空间、CPU 和内存资源。更令人无语的是,你可以轻松地在 Windows 的 WSL(Windows Subsystem for Linux)中运行它们。那么,最初为何要在电脑上安装 Linux 呢? 此外,这些工具还有另一个主要问题:软件必须被某人以轻量级虚拟机的形式打包。只有最流行的软件才会得到这样的处理,因此那些曾经用过的冷门应用可能永远无法使用。在 64 位 Windows 11 上,与此形成鲜明对比的是,过去 30 年中发布的大多数软件几乎都能完美运行。我这里并不是在讨论游戏(许多游戏确实不兼容),但这并非因为 Win32 的兼容性差,而是因为当时的游戏开发者没有为未来做好准备。 换句话说,每个 Linux 发行版都是一个独立的操作系统。至于普通用户该选择哪一个?没有人能给出明确的答案,而且关于哪个发行版“更好”或“更合适”的争论永无止境。 有人可能会反驳说:“这些问题根本不存在!”那么,Linus Torvalds 这个名字你应该听说过吧?他在 2014 年时几乎和我说了同样的话(https://youtu.be/5PmHRSeA2c8)!然而,从那时起情况有任何改变吗?绝对没有。 Linux 发行版之间唯一真正的兼容性体现在它们使用相同的 Linux 系统调用(这部分内容具有一定技术性)。理论上,这意味着静态链接的应用程序应该可以在所有发行版中通用。然而,现实中往往并非如此。例如,最近许多 Linux 用户已经迁移到 Wayland,有些人甚至完全移除了 XWayland。结果是,静态链接的 X11 应用程序无法再为这些用户提供服务。类似地,随着 Linux 的发展,许多技术已经被淘汰。 例如,基于 ESound 或 OSS 的应用程序如今无法使用,因为现代 Linux 发行版完全不再包含 ESound 或 OSS,无论是以模拟还是兼容层的形式。再如,旧版系统中的 devfs、libc5 和 a.out 二进制文件也早已被淘汰,且没有任何现代替代方案或向后兼容支持。
QA/QC、Bug 和回归问题 你无需理解上述所有术语,但核心问题是:Linux 始终处于持续变化的状态。 回归(问题重现)经常发生,因为 Linux 开发者很少甚至完全不花时间检查他们的代码更改是否会引入回归或破坏原本正常的功能。他们通常只关注修复他们试图解决的问题或实现的新功能。 不仅如此,Linux 内核开发者通常无法接触到他们正在支持的所有硬件设备。因此,对一个设备的更改可能会影响到另一个开发者未能测试的设备。例如,在 AMD GPU 的 Bug 追踪器中,你会看到 AMD 开发者的声明:“抱歉,我们没有那种硬件,能否帮忙测试这个补丁?” 这种问题影响了多个 Linux 组件,从 Linux 内核到 MESA(图形卡与操作系统之间的接口),甚至包括桌面环境。
软件和游戏的缺乏 绝大多数应用程序仅为 Windows 开发。至于游戏,Linux 多年来几乎没有原生的 AAA 大作,用户基数太小是主要原因。即便是 CS2(反恐精英2),虽然有 Vulkan 的 Linux 版本,但其性能远不如原生 Windows 版本。此外,尽管 CS2 拥有数百万玩家,但它很难被视为 AAA 大作,因为它基于已超过十年的 Direct3D 11,缺乏光线追踪等现代光影技术。 的确,许多 Windows 游戏可以通过 Wine + DXVK(Linux 上的 Win32 API 仿真)运行,但既然如此,直接用 Windows 不是更好吗? 此外,很多游戏永远无法运行,尤其是那些拥有数百万玩家的在线多人游戏,因为它们需要内核级别的反作弊系统。典型的 Linux 用户可能会说:“我不玩这些游戏,你也不需要!去买个索尼 PlayStation 吧!” 但对于 Windows 用户来说,几乎所有的 Linux 应用程序都可以轻松运行。 更糟糕的是,Linux 缺乏某些非常基础的应用程序,甚至连检查系统性能是否正常的工具都没有。
本地网络上的文件和文件夹共享问题 Linux 没有类似于 Windows 文件共享的原生技术,既易于配置,又支持自动发现、加密和密码保护。目前 Linux 使用的 Samba 技术在设置共享文件夹时非常麻烦,尤其是在使用 SE Linux(高级安全机制)的发行版中。用户需要创建账户、分配和更改密码,同时还要处理文件夹权限问题。 一些极客声称 SSHFS 和 NFS 是很好的替代方案,但这些工具非常不友好,功能受限,设置过程需要大量精力并阅读冗长的手册。某些功能,比如用户/组的细粒度控制,几乎无法实现。 即使是 Samba,如果需要多个用户和组的细粒度权限控制,配置过程也非常复杂。更别提使用图形界面了,这一切几乎都要通过命令行完成。 资金不足 Linux 上的许多软件都有大量 Bug 和功能缺失。这是因为 Linux 在桌面领域资 金严重不足。虽然 Linux 在服务器领域无可匹敌,连续二十多年成为全球最流行的操作系统,但桌面领域的情况却相当惨淡。 Linux 在服务器上运行良好,主要是因为绝大多数资金都流向了服务器领域。但桌面用户需要面对显示器工作,还要处理音频输入和输出问题。 影响服务器提供商(如 Google、Facebook 和 Netflix 等)的 Bug 通常会被立即修复,优先级非常高。但影响 Linux 音视频子系统的 Bug 可能会持续数年。例如,Linux 音频子系统的活跃维护者可能不超过两人。
硬件支持与兼容性 对于全新硬件,你可能会发现笔记本的 Wi-Fi 网卡、摄像头、音频甚至键盘无法正常工作。这是因为在 Windows 中有稳定的驱动 API(应用程序接口)和 ABI(应用程序二进制接口),OEM 厂商可以从一开始就发布驱动并确保正常运行。而在 Linux 中,硬件支持取决于你运行的内核版本。有时需要几个月甚至几年时间,Linux 才能支持你的硬件。 其次,OEM 厂商为 Linux 驱动工作的开发者数量通常比 Windows 少 10 到 100 倍。这意味着某些 Bug 可能会持续数月、数年,甚至永远不会被修复,因为开发人员有更高优先级的任务。 第三个问题是,Linux 程序员的数量不足以确保代码库的更改完全无 Bug。 最后,由于 Linux 的驱动通常是内核的一部分(NVIDIA 等少数例外),你无法随意升级到最新版本或降级到之前能用的版本。必须切换到另一个内核版本,这既麻烦又不总是可行。 偶然遇到的 Linux 安全性 Linux 在桌面上的安全性几乎是“偶然的”或者“纯靠运气”。服务器的情况稍微好些,但也需要由高水平专业人士来管理。以下是一些典型问题: 1. 大多数 Linux 用户随意使用 sudo 命令(授予系统完全访问权限),并不理解其必要性和用途。 2. Linux 缺乏完善的原生杀毒软件,无法通过沙盒或仿真等方式扫描恶意软件。 3. 许多用户从网上下载并运行软件,但未验证其是否安全。 4. 大多数 Linux 用户会直接运行来自网上的命令,而不会确保这些命令的功能和安全性。 5.从内部来看,Linux 的安全机制非常复杂,或者用 AI 的话来说就是:“Linux 并不总是提供一个用户友好的界面来实时处理权限问题。” 6. 当你需要在用户组之间正确共享资源时,祝你好运,试着设置好目录和文件的权限吧。 7. 许多 Linux 用户禁用了 Secure Boot,原因如下: - 第三方软件需要 Linux 内核驱动,而使用这些软件的复杂性极高。 - 无法写入 MSR CPU 寄存器。 我把上面列出的内容交给了一款 AI 工具来作答,AI 的回答是:“这些问题部分属实,责任主要在缺乏经验的用户,用户需要使用他们的软件存储库。” 好吧,那我们来看看:
“归根结底,这些问题是真实存在的,但并非不可解决。它们反映了 Linux 在易用性和兼容性上的改进空间,同时也突出了用户教育的重要性。” 然而,我奇怪的是,Windows、iOS、macOS 或 Android 似乎并不需要太多“教育”。也许,这只是因为某些东西的设计本身存在缺陷?
Linux 社区 可以肯定的是,你在使用 Linux 时一定会遇到问题。而当你试图寻求帮助时,就会见识到 Linux 社区的“真面目”。根据我在过去 25 年互联网经历中的观察,Linux 社区有时会显得格外具有挑战性,甚至是令人不悦的。 以下是你在提问时最有可能收到的“回答”:
总结 或许你会说:“Linux 绝对适合我,对我来说完全没问题。”当然,这种情况对于很多个人而言也普遍存在。但是,每个人的需求可能不同。例如,有人可能希望在 Linux 上运行旧软件。 而且,你是否认为自己是极客?很有可能是的。那么,对于那些普通用户来说呢?他们可能既不想接触终端,也不想研究 Linux 的复杂性。他们只想安装、运行,而不需要多想。 好吧,那么该如何解决这些问题?早期的文章对此问题有过专门的讨论:https://itvision.altervista.org/why.linux.is.not.ready.for.the.desktop.current.html#Solving_Linux。 如果需要更技术性的解读,可以参考以下文章:《2023 年 Linux 桌面端的主要问题》(https://itvision.altervista.org/why.linux.is.not.ready.for.the.desktop.current.html)。 该文章在 2025/1/8 11:04:39 编辑过 |
关键字查询
相关文章
正在查询... |