一、先搞懂两个核心概念:自由软件和硬件驱动的“天生矛盾”

很多刚接触开源的朋友,总觉得“自由软件”就是“免费软件”,其实完全不是一回事。自由软件的核心是“自由”——你可以自由使用、修改、分享这个软件,前提是修改后的版本也要保持同样的自由规则,说白了就是“我给你自由,你得把这份自由传递下去”。

但硬件驱动的情况就不一样了。硬件厂商为了保护自己的技术秘密(比如芯片的核心算法、专利设计),不会把驱动的源代码公开,只会给一个能直接运行的“二进制文件”(比如Windows的.exe、Linux的.ko文件)。这种驱动不符合自由软件的规则,因为你没法修改它,也没法把修改后的版本自由分享。

这就导致了一个天生的矛盾:自由软件系统(比如Linux发行版)如果用了这种非自由的驱动,就违背了自己的原则;但如果不用,很多硬件(比如显卡、WiFi网卡、声卡)就没法正常工作——毕竟绝大多数硬件厂商都不会为自由软件写符合规则的驱动。

二、Debian的“特殊选择”:non-free固件仓库

Debian是最经典的自由软件发行版之一,它的官方仓库(main)里只放完全符合自由规则的软件,包括驱动。但这样一来,很多硬件用户用Debian的时候,会遇到“WiFi连不上、显卡花屏、声卡没声音”的问题,体验特别差。

为了解决这个矛盾,Debian专门搞了一个“non-free”仓库,里面放的就是不符合自由规则的固件(注意:固件和驱动有点区别,固件是硬件内部运行的程序,比驱动更底层)。这个仓库的规则很明确:你可以用这些固件,但不能修改、分享,而且这些固件不会进入Debian的官方安装镜像——你得自己手动添加仓库,再安装需要的固件。

这种设计的好处是,Debian既保持了自己的自由原则(官方镜像里没有非自由的东西),又给有需求的用户提供了硬件兼容的解决方案;但坏处也很明显:对新手太不友好了,很多人连“添加non-free仓库”的命令都不知道,只能放弃Debian。

三、什么时候该加non-free固件?这3种情况最常见

加non-free固件不是随便加的,得看你的硬件情况,乱加可能会带来不必要的麻烦。下面这3种情况,是最适合加non-free固件的:

3.1 新硬件刚发布,官方驱动还没适配

现在的硬件更新速度特别快,比如英伟达的新显卡、英特尔的新WiFi网卡,刚发布的时候,自由软件驱动(比如Linux内核自带的驱动)根本没法适配,这时候只能用厂商提供的non-free固件。

举个例子,你买了一块英伟达RTX 4090显卡,装了Debian之后,发现显卡只能用最基础的模式,没法玩游戏、做图形渲染,这时候就得装non-free的英伟达固件。

3.2 硬件有特殊功能,自由驱动不支持

有些硬件的特殊功能,比如显卡的硬件加速、WiFi的5G频段、声卡的环绕立体声,自由驱动可能不支持,这时候也得用non-free固件。

比如你买了一块支持5G的WiFi网卡,装了Debian之后,只能搜到2.4G的WiFi,搜不到5G的,这时候就得装non-free的WiFi固件。

3.3 硬件有bug,自由驱动解决不了

有些硬件的bug,比如显卡偶尔花屏、声卡偶尔没声音,自由驱动可能解决不了,这时候厂商提供的non-free固件可能已经修复了这些bug,你可以试试装non-free固件。

比如你用的笔记本电脑,装了Debian之后,偶尔会出现显卡花屏的问题,试了各种方法都解决不了,这时候可以试试装non-free的英伟达固件。

四、加non-free固件的正确姿势:别踩坑

加non-free固件其实很简单,但很多人会踩坑,比如把仓库加错了、安装了不需要的固件、没有验证固件的安全性。下面给大家说一下正确的步骤,还有注意事项:

4.1 先确认你的Debian版本

Debian的仓库是分版本的,比如稳定版(stable)、测试版(testing)、不稳定版(unstable),你得先确认自己的版本,不然加错仓库会出问题。

确认版本的命令很简单,用下面这个命令:

# 查看Debian版本,比如输出bullseye就是稳定版11,bookworm就是稳定版12
lsb_release -cs

4.2 正确添加non-free仓库

Debian的仓库配置文件在/etc/apt/sources.list,你得编辑这个文件,把non-free仓库加进去。编辑之前,最好先备份一下这个文件,避免改坏了。

备份的命令:

# 备份sources.list文件,备份到/root目录,文件名加.bak后缀
cp /etc/apt/sources.list /root/sources.list.bak

然后编辑sources.list文件,用vim或者nano都可以,比如用nano:

# 编辑sources.list文件
nano /etc/apt/sources.list

打开之后,你会看到类似下面的内容(以Debian 12 bookworm为例):

deb http://deb.debian.org/debian bookworm main
deb-src http://deb.debian.org/debian bookworm main

deb http://deb.debian.org/debian-security bookworm-security main
deb-src http://deb.debian.org/debian-security bookworm-security main

deb http://deb.debian.org/debian bookworm-updates main
deb-src http://deb.debian.org/debian bookworm-updates main

你需要把每个deb和deb-src行的最后,加上“non-free”,修改之后的内容应该是这样的:

deb http://deb.debian.org/debian bookworm main non-free
deb-src http://deb.debian.org/debian bookworm main non-free

deb http://deb.debian.org/debian-security bookworm-security main non-free
deb-src http://deb.debian.org/debian-security bookworm-security main non-free

deb http://deb.debian.org/debian bookworm-updates main non-free
deb-src http://deb.debian.org/debian bookworm-updates main non-free

修改完之后,按Ctrl+O保存,按Ctrl+X退出nano。

4.3 更新仓库,安装需要的固件

加完仓库之后,你得先更新一下仓库的索引,然后才能安装固件。更新的命令:

# 更新仓库索引
apt update

然后,你得先确认你的硬件型号,再安装对应的固件。比如你装的是英伟达显卡,先确认显卡型号:

# 查看显卡型号
lspci | grep -E 'VGA|3D controller'

输出类似下面的内容,说明是英伟达显卡:

01:00.0 VGA compatible controller: NVIDIA Corporation GA104 [GeForce RTX 3070] (rev a1)

然后安装英伟达的non-free固件,Debian 12的命令是:

# 安装英伟达非自由固件,firmware-nvidia是包名
apt install firmware-nvidia

安装完之后,重启电脑,显卡就可以正常工作了。

4.4 注意事项:别乱装,别忘验证

加non-free固件的时候,有几个注意事项,一定要记住:

  1. 只装你需要的固件:不要随便装所有的non-free固件,装了不需要的固件,会增加系统的负担,还可能带来安全风险。
  2. 验证固件的安全性:non-free固件是厂商提供的,你没法验证它的源代码,所以要从官方的non-free仓库安装,不要从第三方网站下载,避免下载到恶意软件。
  3. 不要修改non-free固件:non-free固件的规则是不能修改的,如果你修改了,可能会违反软件协议,还可能导致硬件无法正常工作。

五、non-free固件的优缺点分析:适合谁,不适合谁

加non-free固件有好处,也有坏处,不是所有人都适合加,下面给大家分析一下:

5.1 优点

  1. 解决硬件兼容问题:这是最大的优点,很多硬件在Debian上没法正常工作,加了non-free固件之后就可以正常工作了。
  2. 支持硬件的特殊功能:比如显卡的硬件加速、WiFi的5G频段、声卡的环绕立体声,这些功能只有non-free固件才支持。
  3. 修复硬件的bug:有些硬件的bug,自由驱动解决不了,non-free固件可能已经修复了。

5.2 缺点

  1. 违背自由软件的原则:non-free固件不符合自由软件的规则,如果你是自由软件的支持者,加non-free固件可能会让你觉得不舒服。
  2. 安全风险:non-free固件是闭源的,你没法验证它的安全性,可能会有后门、恶意代码等安全风险。
  3. 维护问题:non-free固件是厂商提供的,厂商可能不会及时更新固件,比如新的内核出来之后,固件可能不兼容,需要等厂商更新。

5.3 适合加的人群

  1. 普通用户:比如你用Debian只是为了日常办公、上网、玩游戏,不在乎自由软件的原则,只要硬件能正常工作就行。
  2. 硬件有特殊需求的用户:比如你需要显卡的硬件加速、WiFi的5G频段、声卡的环绕立体声,这些功能只有non-free固件才支持。
  3. 硬件有bug的用户:比如你的硬件有bug,自由驱动解决不了,non-free固件可能已经修复了。

5.4 不适合加的人群

  1. 自由软件的坚定支持者:如果你是自由软件的坚定支持者,不想违背自由软件的原则,就不要加non-free固件。
  2. 对安全要求特别高的用户:比如你用Debian做服务器、做敏感数据的处理,对安全要求特别高,就不要加non-free固件,因为它是闭源的,有安全风险。
  3. 能接受硬件功能受限的用户:比如你用的硬件,自由驱动已经能满足你的需求,不需要特殊功能,也没有bug,就不要加non-free固件。

六、什么时候是加non-free固件的最佳时机?

加non-free固件的最佳时机,不是随便定的,得结合你的硬件、需求、Debian的版本来定,下面给大家说一下最佳时机:

6.1 新硬件刚发布,自由驱动适配之后

新硬件刚发布的时候,自由驱动一般没法适配,这时候你只能用non-free固件,但等过一段时间,自由驱动适配之后,你就可以换成自由驱动了,这时候加non-free固件的最佳时机就是“新硬件刚发布,自由驱动还没适配的时候”,等适配之后就可以换成自由驱动。

比如你买了一块英伟达RTX 4090显卡,刚发布的时候,自由驱动没法适配,你只能用non-free固件,等过了半年,自由驱动适配之后,你就可以换成自由驱动,这时候加non-free固件的时机就是“刚买显卡的时候”。

6.2 硬件有特殊需求,自由驱动不支持的时候

如果你需要硬件的特殊功能,比如显卡的硬件加速、WiFi的5G频段、声卡的环绕立体声,自由驱动不支持,这时候加non-free固件的最佳时机就是“你需要这些特殊功能的时候”。

比如你买了一块支持5G的WiFi网卡,装了Debian之后,发现只能搜到2.4G的WiFi,你需要5G的WiFi来提高网速,这时候加non-free固件的时机就是“你需要5G WiFi的时候”。

6.3 硬件有bug,自由驱动解决不了的时候

如果你的硬件有bug,比如显卡偶尔花屏、声卡偶尔没声音,自由驱动解决不了,non-free固件可能已经修复了,这时候加non-free固件的最佳时机就是“你遇到这些bug,试了各种方法都解决不了的时候”。

比如你用的笔记本电脑,装了Debian之后,偶尔会出现显卡花屏的问题,试了各种方法都解决不了,这时候加non-free固件的时机就是“你试了各种方法都解决不了bug的时候”。

6.4 不要在Debian版本升级之前加

Debian的版本升级的时候,仓库的配置会变,如果你在版本升级之前加了non-free固件,可能会导致版本升级失败,或者系统出问题。所以加non-free固件的最佳时机是“版本升级完成之后”。

比如你要把Debian 11升级到Debian 12,不要在升级之前加non-free固件,等升级完成之后,再重新添加non-free仓库,安装需要的固件。

七、总结:平衡自由和实用的选择

自由软件和硬件驱动的矛盾,是一个长期的问题,Debian的non-free固件策略,就是在自由和实用之间找平衡。加non-free固件不是对自由原则的背叛,而是一种务实的选择——毕竟,系统能正常工作,才是最基本的需求。

加non-free固件的最佳时机,取决于你的硬件、需求和Debian的版本,只要你选对了时机,用对了方法,就能既解决硬件兼容问题,又尽量保持系统的自由和安全。

最后要提醒大家,自由软件的原则是很重要的,如果你有能力支持自由软件,尽量用自由驱动;如果实在需要non-free固件,也不要有心理负担,这只是一种实用的选择。