Windows/Linux, 你该怎么选择?

引言: 为什么使用 Linux?

在讨论任何具体的 Linux 发行版之前, 我们必须先回答一个根本性的问题: 你为什么要使用 Linux?

如果你是一个 Windows 的重度用户, 习惯了现有的生态和操作方式, 仅仅因为别人的推荐或”听说 Linux 更好”就试图迁移, 那么答案很明确: 别勉强自己. 使用习惯一旦形成, 很难因三言两语而改变. Windows 凭借其广泛的软硬件兼容性, 对盗版的历史宽容度以及深厚的用户基础, 稳固地占据着桌面端的主导地位.

真正适合使用 Linux 的理由只有一个: 你想用,并且对开源生态感兴趣.

只有当你享受探索系统底层, 愿意折腾配置, 或者单纯喜爱开源软件带来的自由时, Linux 才能发挥它的价值. 否则, 无论是游戏兼容性 (尽管 Steam Proton 进步巨大, 但仍需处理脚本和兼容层问题) 还是日常办公, 强行迁移只会带来痛苦.

基于这个前提, 我们来深入探讨一下近年来备受关注的 NixOS, 并将其与主流的 Arch Linux, Ubuntu / Mint 以及其他新兴发行版进行对比, 希望各位能够根据这篇文章, 来找到自己 真正想要的是什么.


一, NixOS: 把”屎点”放在最前面, 换来长久的安宁

1. 核心理念: 声明式配置与可复现性

NixOS 最显著的特点, 也是它最大的门槛, 在于其的特色— - 声明式配置(Declarative Configuration).

与传统发行版 (如 Ubuntu, Arch) 在安装后通过命令行逐个安装软件, 手动修改分散在 /etc~ 目录下的配置文件不同, NixOS 要求你将整个系统的状态定义在一个 (或多个, 我推荐是拆成多份, 不然盯着一个几千行的代码库就太痛苦了) 配置文件 (通常是 configuration.nixflake.nix) 中.

  • “把屎点放在最前面”: 在初期, 你需要花费大量时间编写配置文件, 定义内核参数, 文件系统, 用户, 软件包, 服务甚至桌面环境的细节. 这个过程可能比传统安装繁琐得多, 其中可能会遇到缺少文档, 找不到自己需要的包等等情况, 而这些很容易让一个人当场放弃.
  • 长久的收益: 一旦配置完成, 你就拥有了一个 完全可复现 的系统.
    • 一键重装/迁移: 换电脑或重装系统时, 只需将配置文件克隆下来, 运行一条命令 (如 nixos-rebuild switch), 系统就会精确地恢复到之前的状态, 包括所有软件及其版本. 这就是所谓”提桶跑路”的能力.
    • 版本锁定与回滚: 通过 flake.lock 文件, 你可以将系统锁定在特定的软件版本组合上. 即使上游更新导致问题, 你也可以轻松回滚到之前的稳定状态. 系统不会因为一次失败的更新而毁掉你的工作环境.
    • 原子更新: 更新过程是原子化的, 如果新配置启动失败, 重启即可自动回到旧版本, 同时在启动时, 你也可以自由地选择是否要重启到之前的某一个配置中.

2. Flakes 与 Home Manager: 现代化的配置管理

  • Flakes: 这是 Nix 生态系统的一次重大进化. 它引入了依赖锁定机制, 使得项目 (即你的系统配置) 的依赖关系更加明确和稳定, 不使用 Flakes 的 NixOS 仿佛失去了一半的威力. 通过 Flakes, 你可以轻松地将 Nixpkgs 以及你自己加入的一众第三方 Flake 锁定到具体的 Git commit, 确保环境的一致性.
  • Home Manager: 它能管理用户主目录 (/home) 下的配置文件 (如 Shell 配置, 编辑器设置, 主题等). 这意味着你的 整个用户环境 都可以被版本控制 (如上传到 GitHub / GitLab), 实现真正的”代码即配置”.

3. 依赖管理与隔离

NixOS 的包管理机制巧妙地解决了传统 Linux 发行版中常见的”依赖地狱”问题:

  • 隔离存储: 每个软件包及其依赖都存储在 /nix/store 下的独立路径中, 路径哈希包含了所有依赖的指纹.
  • 按需共用: 如果多个软件依赖完全相同的库版本, 它们会共用同一份; 如果版本不同, 则各自独立存储, 互不干扰.

这种机制使得系统极其纯净, 卸载软件不会在系统中留下残留文件 (如果你使用 home-manager 管理一切的话, 甚至可以做到不在. / config 等目录中留下残留文件), 也不会破坏其他软件的依赖.

4. 挑战与解决方案: 二进制与非自由软件

NixOS 并非完美无缺, 其主要挑战在于运行闭源二进制文件或特定依赖的应用 (如某些游戏, 专有软件):

动态链接问题: 由于 NixOS 的文件系统结构特殊 (FHS 标准不完全兼容), 直接运行外部二进制文件往往会缺少动态库.

解决方案:

  • steam-run: NixOS 社区提供了 steam-run 工具, 它原本是作为启动 steam 的跳板 (steam 强制要求一个 FHS 环境, 因为其代码内包含了硬编码的路径), 但是由于其包含了不少用于启动 steam 的依赖, 所以也很适合运行其他二进制文件.
  • 容器化: 对于更复杂的应用 (如某些模拟器, 特定 JDK 版本需求的应用), 可以使用 Distrobox 或其他容器工具, 在容器内运行一个传统的 Linux 发行版 (如 ArchLinux, 个人比较推荐, 因为它会更加的轻量化, 而且也可以直接利用其来安装 AUR 上的软件), 然后将应用导出集成到 NixOS 菜单中. 虽然稍微麻烦, 但能保证宿主系统的纯净.

缺少关键的软件: 虽然 Nixpkgs 可以算得上是一整个 linux 生态里面最大的软件仓库, 但还是难免会遇到一些缺少软件包, 或者软件包没有及时更新的情况, 如果你不太愿意去 发 issue 给Nixpkgs (但其实这个的效果也比较的随缘,毕竟 Nixpkgs 的 Github 仓库那边还积压了一大堆 issue )自行学习打包 的话, 那么以下也提供一些解决方案.

解决方案:

  • 第三方包管理器: 目前的第三方包管理器其实是很多的, 它们能够在各大发行版里面使用, 利用它们来补充需要的软件包会是一个不错的选择. 在这里我推荐 flatpak玲珑, flatpak 自然不用我多说, 玲珑(linyaps) 作为新秀也是一个很好的选择, 尤其是你当极度依赖国产软件时.
  • 容器: 使用 Distrobox 或其他容器工具, 在容器内运行一个其他的 Linux 发行版, 个人比较推荐 ArchLinux, AUR 还是太方便了, 安装之后利用 distrobox 自带的 distrobox export 指令来导出到菜单就好, 用起来其实会很自然, 就是还是得考虑可复现性.

二, 其他发行版横向对比

1. Arch Linux: 学习 Linux 的最佳课堂

  • 定位: 适合想要深入学习 Linux 内部原理的用户.
  • 优势:
    • 从零构建: 安装过程迫使你手动分区, 挂载文件系统, 配置引导, 安装基础包. 这能让你深刻理解 Linux 系统的启动流程和组成部分 (EFI, Swap, fstab, chroot 等).
    • AUR (Arch User Repository): 拥有极其丰富的软件资源, 几乎能找到任何软件.
    • 滚动更新: 始终拥有最新的软件版本.
  • 劣势与风险:
    • 系统脆弱性: 由于是滚动更新且高度自定义, 不当的操作 (尤其是滥用 AUR 中质量参差不齐的包) 容易导致系统崩溃.
    • 迁移成本高: 配置分散, 重装系统或迁移到新机器时, 需要重新手动配置或依赖备份脚本, 不如 NixOS 那样天然具备”一键复刻”能力.
    • 维护责任: 用户需要时刻关注更新日志, 手动解决潜在的冲突.
  • 建议: 它是学习 Linux 的绝佳工具, 但作为生产环境需要一定的维护精力. 假如你选择使用 Arch 的话, 就需要爱惜你的 Arch 系统, 并谨慎安装 AUR 包. 如果有条件的话, 可以选择学习一下撰写 post-install 脚本, 这也会为常规的发行版带来一定的可复现能力.

2. Ubuntu / Linux Mint: 开箱即用的新手首选

  • 定位: 适合完全的新手, 企业环境, 或只需要”能用就行”的用户.
  • 优势:
    • 开箱即用: 预装了大量常用软件, 图形化界面友好 (尤其是 Linux Mint, 其 Cinnamon 桌面非常接近 Windows 操作逻辑).
    • 社区庞大: 遇到问题容易找到教程和解决方案.
    • 稳定性: LTS 版本提供长期支持, 适合服务器和生产环境.
  • 劣势:
    • 配置分散: 系统配置和软件管理相对传统, 缺乏 NixOS 那样的集中声明式管理 (其实所有发行版都有这个问题, 也有发行版提供一些图形化的配置工具, 比如说像是 openSUSE, 可以让你在一个界面里面完成所有的系统配置).
    • 定制镜像麻烦: 一般来说, 你安装了这些 预配置 的发行版的话, 就要去接受它在 iso 中的大部分配置, 如果想自定义一个包含特定软件的 ISO 镜像以便迁移的话, 需要经历复杂的打包流程, 且每次更新 ISO 内的软件都需要重新打包. 而 NixOS 只需修改配置文件并运行 nixos-rebuild build-iso 即可生成新的镜像.
    • 更新缓慢: 假如你很追求一些新软件包的话, 那它们大概无法提供, 并且它甚至可能造成一些最新硬件的兼容性问题.
  • 建议: 如果你只是想体验 Linux, 或者在虚拟机中使用, 亦或是学校 / 公司强制要求, Ubuntu / Mint 就是最好的选择.

3. Fedora / openSUSE 等其他发行版

  • 定位: 适合已经对 Linux 有了一定了解的用户.
  • 优势:
    • 契合需求: 你可以去自由地选择一些符合你理念的发行版, 比如说像是追求高速更新的 Fedora, 追求集成化配置的 openSUSE, 追求极致性能优化的 cachyOS.
  • 劣势:
    • 配置分散: 这是几乎所有发行版的通病, 基本上是一个比较难解决的事情.
    • 社区力量可能不足: 虽说有很多发行版, 尤其是由公司维护的发行版, 一般都会提供详细地文档, 并且会有一个不错的社区, 但是你也会难以避免地遇到一些社区建设没那么好的发行版, 或者遇到一个你就是查不到的文档.
  • 建议:
    • 尽量多去了解和体验: 虽说可能会比较 Distro Hopping, 但是能够去体验它们的差异也是一件好事, 这有助于你去了解 Linux 社区.
    • 尝试拥有一套自己的post-install脚本: post-install 脚本, 即用于安装完之后进行系统配置的脚本, 你可以把你安装完系统之后会做的事情都利用脚本写好, 这样也方便你后续切换发行版或者进行一定程度的复现.
    • 善于利用Archwiki上的内容: Archwiki 可以说是一个 Linux 界的百科全书, 大部分问题在上面都会有解决方案, 但是你可能需要按照你的发行版进行一定程度的变通.

4. 不可变发行版 (Immutable Distros): Fedora Silverblue, openSUSE MicroOS 等

  • 理念: 将根文件系统设为只读, 通过原子更新和容器化应用 (Flatpak / Distrobox) 来保证系统稳定性. 类似 Android 或 iOS 的模式.
  • 评价:
    • 优点: 极高的稳定性, 几乎不可能弄坏系统.
  • 缺点:
    • 可定制性受限. 对于喜欢修改系统底层, 编译自定义内核模块或深度调整系统行为的 Linux 爱好者来说, 这种”黑盒”模式可能令人感到束缚.
      对比 NixOS: NixOS 也提供了类似的原子更新和回滚能力, 但它 不牺牲可定制性. 你依然可以通过配置文件修改系统的方方面面, 甚至覆盖 (override) 特定软件包的编译选项. 这种”既稳又灵活”的特性是 NixOS 的独特优势.

三, 总结与建议: 如何选择?

1. 什么时候选择 NixOS?

  • 你已经是 Linux 资深用户, 厌倦了每次换电脑都要重新配置环境.
  • 你需要在多台机器上部署完全一致的环境 (如开发团队, 服务器集群).
  • 你追求极致的系统可复现性和版本控制能力.
  • 你喜欢”配置即代码”的理念, 愿意投入时间学习 Nix 语言.
  • 你想要一个既能原子更新 / 回滚, 又能深度定制的系统.

2. 什么时候选择 Arch Linux?

  • 你想深入学习 Linux 的工作原理.
  • 你喜欢滚动更新, 总是想用最新软件.
  • 你享受手动构建系统的过程, 并愿意承担维护责任.
  • 你需要 AUR 中特有的软件, 且能辨别其安全性.

3. 什么时候选择 Ubuntu / Linux Mint?

  • 你是 Linux 新手, 只想快速上手.
  • 你需要一个稳定, 开箱即用的桌面环境.
  • 你在虚拟机中临时使用 Linux.
  • 你的工作或学习环境强制要求使用特定发行版.

4. 什么时候选择其他发行版?

  • 你找到了一个在理念上比较吸引你的发行版.
  • 你对 Linux 已经有了一定程度的了解.
  • 你想要去多上手几个发行版, 以权衡利弊.

5. 什么时候坚持使用 Windows?

  • 你重度依赖闭源商业软件 (如 Adobe 全家桶, 特定行业软件), 且没有合适的 Linux 替代品或 Wine / 虚拟机方案.
  • 你对折腾系统毫无兴趣, 只希望电脑作为一个工具稳定工作.
  • 你是硬核游戏玩家, 且无法接受反作弊系统不兼容或性能损耗等等的问题.

结语

Linux 世界丰富多彩, 没有绝对的”最好”, 只有”最适合”.

  • NixOS 代表了系统管理的未来方向之一, 它将混乱的配置收敛为有序的代码, 用前期的复杂度换取后期的极致稳定与便捷.
  • Arch 是学习的最佳伴侣, 让你知其然更知其所以然.
  • Mint/Ubuntu 是通往 Linux 世界的友好大门.

最重要的是, 不要因为别人的推荐而盲目切换. 只有当你内心真正对技术产生好奇, 愿意投入时间去探索时, Linux 才会成为你的得力助手. 否则, 它只是一个让你头疼的负担.

并且, 假如你是 Linux 用户的话, 也不要试图用它们去说服 Windows 重度用户, 除非他们真的有兴趣.


文章使用了 Qwen3.5-Plus 来基于我之前视频中的文案辅助撰写, 并且进行了一定的手动修改, 以尽可能地确保专业性.

原视频链接如下:

NixOS?这是什么?好用吗?对于它的一些小讨论,顺便聊聊其他发行版
一句话:别拉不感兴趣人来用linux.谈谈我对NixOS,Arch Linux以及其他发行版的看法

新年伊始,来做点特别的事吧

没想到又过了一年啊…… 我永远都在觉得”自己今年怎么什么都没干就过去了”, 但实际上要真说的话, 做的事情其实是不少的.
所以我决定给自己开一个 blog 站, 用来记录自己的一些日常, 或者说是自己的思考之类的.

为什么要记录自己?

首先要说的一点, 就是 看着自己以前的样子,很好玩.
我有事没事的时候, 就特别喜欢翻看自己以前留下的痕迹, 虽说我可能把最有价值但是最有毒的那一段给人为地抹除掉了, 但是实际上看下来还是很令人感慨的, 所以说, 我想要有选择性地记录一下我想要记录的内容, 一直留档给未来的我看, 二是能够记录自己的生活, 来让自己看着更像是”做了不少事”的样子.

为什么要建站?

简而言之, 目的其实是为了 学习.
我还是想要通过写一些前端的东西, 比如说根据我这里正在使用的主题进行修改啊之类的, 来学习一些前端的知识.
“实操”永远是一个学习各种东西的好办法, 因为实际操作一遍的话, 比单单地看着纸面上的知识会更具有”互动性”, 你可以操作你学过的东西, 借此来深入了解, 并加深印象, 我认为这是一件很好的事.
毕竟我也不知道未来到底会成为什么样, 所以也只能想方设法地打磨一下自己, 让自己多学点东西, 这样也方便未来找到适合自己的工作或路径之类的.

我会记录什么?

我大概会在最近先想办法用 ai 把自己录过的几个视频的文案给扒下来, 润色之后再发出来吧.
那些视频基本上都是我梦到什么说什么, 但是意外地赞同的人很多, 还是蛮神奇的, 所以我也想要重新润色一下, 顺便再加上一些自己的见解. 以后的评论类视频, 我也会尽量地尝试去先撰写一份稿子, 然后再录制, 这样逻辑性和组织性也会更强, 能够传递更多的有效信息.
同时, 假如我在折腾某样东西并且成功了的话, 我也会把这些步骤给记录下来, 并放到博客里面, 这样也能防止未来的自己踩雷, 或是给他人提供参考文档.
新年总结或感悟的话, 尽量每年都写一篇吧, 像是这一篇文章, 我实际上是把它当作自己上一年的总结, 以及下一年的展望来看待的, 所以会打上一个”总结”的 tag.

总之, 我想朝着未来的方向不断前进, 想成为心目中的自己, 希望这个博客能够帮助到自己, 也希望能够帮助到在翻这个博客的大家, 感谢各位的支持和陪伴, 才能让我有着前行的动力.