免费的操作系统是否应该捆绑那些只有二进制格式的驱动程序? 这个问题引起了许多争议。正反方的辩论范围从哲学方面到实际应用, 这些都值得做一番调查。
在我们讨论这个问题前,有必要先看看现有的系统。 从可靠性和安全角度考虑,OpenBSD的核心拒绝二进制模块,但也不是那么顽固不化。FreeBSD则相反,它核心带有一些二进制模块。
Linux世界的立场似乎就比较有趣,Linux核心根本就不允许有二进制驱动程序。通过定期变换APIs和ABIs, 开发者主动地劝阻人们不要在main tree之外开发驱动程序。
但是没有人自己去build一个Linux系统,而通常是使用某个发行版。多数的Linux发行版没有使用一般的核心,而是使用自己生成的版本,但是各个版本不会相差十万八千里。各个版本可能捆绑了一些额外的驱动。许多二进制的驱动是有licenses, 禁止再被distribute。但是各个版本在使用脚本来实现自动下载和启动后安装驱动方面是一致的。
对于许多自由软件用户来说,使用的不就是二进制驱动程序吗?
质量
辩论的正反方都谈到了质量。NVIDIA的一个发言人最近说没有必要给出NVIDIA卡的说明书,因为NVIDIA公司以外的人不可能写出更好的驱动程序。这个说法可能是对的。可能写显示驱动程序的全部人才都在NVIDIA公司,但这似乎不可能。
几年前我有一个台式机器, 配有ATI R200 系列CPU和SoundBlaster Live!声卡,安装window2000。 Window 定期系统崩溃, 通常是一星期一次。当window崩溃时,在蓝屏上给出debug信息,千篇一律地都是The Creative Labs或ATI 驱动程序崩溃。
后来我改装FreeBSD, 声卡驱动是FreeeBSD开发写的,显卡是DRI组开发的。然后我的机器就开始稳定了。 我的经验是生产商的驱动不见得就好,开源的驱动不见得就差。 可能我的情况比较特殊吧。
安全
OpenBSD 组反对二进制驱动程序的主要原因是他们考虑系统的安全,OpenBSD的美称就是非常安全,因为系统的每个部分都经过代码review。
如果你在OpenBSD的用户空间运行不安全的代码,OpenBSD的一些核心机制会采取一定的措施来降低危险性。在某些情况下,这些措施力度还不够,就需要有危险控制机制。需要指出的是:多数服务的权限都是有限的,这样当一个attacher在OpenBSD 外壳攻破一个服务,也不能使用该服务权限以外的资源。
但是如果是在核心空间攻破, 情形就不一样了。因为核心的权限最高, 可以做任何事情: 访问驱动程序、检查内存等等。如果核心给攻破,那唯一可做的安全措施就是格式化硬盘,重启。
这个问题最近随着发现WiFi卡的驱动程序有个安全漏洞而浮出水面,该漏洞使得该机器遭受WiFi范围内的任何一个攻击者 的攻击。