Linux、GNU 和自由

自从乔·巴尔的文章批评了我与 SIGLINUX 的交往后,我想澄清一下实际发生的事情,并说明我的理由。

当 SIGLINUX 邀请我演讲时,它是一个“Linux 用户组”;也就是说,一个为 GNU/Linux 系统的用户而设的团体,它将整个系统称为“Linux”。所以我礼貌地回复说,如果他们想让 GNU 项目的人为他们做演讲,他们应该正确对待 GNU 项目,并将该系统称为“GNU/Linux”。该系统是 GNU 的一个变体,GNU 项目是其主要开发者,因此社会惯例是按照我们选择的名称来称呼它。除非有充分的理由例外,否则我通常会拒绝为那些不以这种方式给予 GNU 应有荣誉的组织做演讲。我尊重他们的言论自由,但我也有不发表演讲的自由。

随后,SIGLINUX 的杰夫·斯特伦克试图改变该团体的政策,并要求 FSF 将他的团体列入我们的 GNU/Linux 用户组页面。我们的网站管理员告诉他,我们不会以“SIGLINUX”的名义列出它,因为这个名称暗示该团体是关于 Linux 的。斯特伦克提议将名称更改为“SIGFREE”,我们的网站管理员同意这样很好。(巴尔的文章说我们拒绝了这个提议。)但是,该团体最终决定保留“SIGLINUX”。

在那时,这件事再次引起了我的注意,我建议他们考虑其他可能的名称。他们可以选择许多不会将该系统称为“Linux”的名称,我希望他们能想出一个他们喜欢的名称。就我所知,事情到此为止。

正如巴尔所写,有些人是否真的认为这些行为是与微软的垄断权力相当的“施加压力”?可能确实如此。拒绝邀请不是胁迫,但那些决心相信整个系统都是“Linux”的人有时会产生惊人扭曲的观点。为了使这个名称看起来合理,他们必须把小山丘看成大山,把大山看成小山丘。如果你能无视事实,相信 Linus Torvalds 从 1991 年开始开发了整个系统,或者如果你能无视你通常的公平原则,相信 Torvalds 应该得到唯一的荣誉,即使他没有那样做,那么相信我欠你一个演讲也是一小步。

想想看:GNU 项目开始开发一个操作系统,几年后,Linus Torvalds 添加了一个重要的部分。GNU 项目说,“请给我们的项目同等的提及”,但 Linus 说,“不要给他们分享荣誉;只用我的名字来称呼整个东西!”现在设想一下,一个人在看到这些事件后,会指责 GNU 项目自负。要做出如此严重的误判,需要强烈的偏见。

一个有如此偏见的人可以对 GNU 项目说各种不公正的事情,并认为他们是合理的;他的同伴会支持他,因为他们希望彼此支持以维持他们的偏见。持不同意见者可能会受到辱骂;因此,如果我拒绝以“Linux”的名义参与某项活动,他们可能会觉得这是不可原谅的,并为此后他们感到的恶意而责怪我。当这么多人想让我把这个系统称为“Linux”时,我,一个仅仅启动其开发的人,怎么能不遵守呢?强制剥夺他们的演讲就是强制让他们不高兴。那是胁迫,和微软一样糟糕!

现在,你可能会想知道我为什么不回避这个问题,避免所有这些痛苦。当 SIGLINUX 邀请我演讲时,我本可以简单地说“不,抱歉”,事情就到此结束了。我为什么不这样做呢?我愿意冒着被个人谩骂的风险,以便有机会纠正削弱 GNU 项目努力的错误。

将 GNU 系统的这个变体称为“Linux”正中那些仅根据技术优势选择软件,而不关心它是否尊重他们自由的人的下怀。有些人像巴尔一样,想要他们的软件“没有意识形态”,并批评任何说自由重要的人。有些人像 Torvalds 一样,会迫使我们的社区使用非自由程序,并挑战任何抱怨的人立即提供一个(技术上)更好的程序,或者闭嘴。有些人说,技术决策不应因考虑其社会后果而“政治化”。

在 70 年代,计算机用户失去了重新分发和更改软件的自由,因为他们不重视自己的自由。计算机用户在 80 年代和 90 年代重新获得了这些自由,因为一群理想主义者,即 GNU 项目,认为自由使程序更好,并愿意为我们所信仰的而努力。

我们今天拥有部分自由,但我们的自由并不安全。它受到CBDTPA(以前的SSSCA)、广播“保护”讨论小组(见www.eff.org)的威胁,该小组建议禁止自由软件访问数字电视广播,以及软件专利(欧洲现在正在考虑是否拥有软件专利),微软对重要协议的保密协议,以及每个用一个(技术上)比现有的自由程序“更好”的非自由程序来引诱我们的人。如果我们不关心保护它,我们可能会像第一次失去自由一样再次失去它。

我们中有足够多的人会关心吗?这取决于许多因素;其中包括 GNU 项目的影响力有多大,以及 Linus Torvalds 的影响力有多大。GNU 项目说,“珍惜你的自由!”乔·巴尔说,“仅根据技术原因在非自由和自由程序之间进行选择!”如果人们认为 Torvalds 是 GNU/Linux 系统的主要开发者,那不仅不准确,而且也使他的信息更具影响力,而该信息说,“非自由软件是可以的;我自己使用它并开发它。”如果他们认识到我们的作用,他们会更多地倾听我们,而我们将传递给他们的信息是,“这个系统的存在是因为关心自由的人们。加入我们,珍惜你的自由,我们将一起保护它。”有关历史,请参见GNU 项目

当我要求人们将该系统称为 GNU/Linux 时,他们中的一些人会以愚蠢的借口和稻草人论证来回应。但是我们可能并没有失去任何东西,因为他们从一开始就可能不友好。与此同时,其他人认识到我给出的理由,并使用这个名称。通过这样做,他们帮助其他人意识到 GNU/Linux 系统真正存在的原因,并且这提高了我们传播自由是一个重要价值观的理念的能力。

这就是为什么我不断碰壁,对抗偏见、诽谤和痛苦。它们伤害了我的感情,但当成功时,这种努力有助于 GNU 项目为自由而奋斗。

由于这个问题是在 Linux(内核)和 Bitkeeper 的背景下提出的,Bitkeeper 是 Linus Torvalds 现在使用的非自由版本控制系统,我想一并解决这个问题。

Bitkeeper 问题

(请参阅下面的更新。)

使用 Bitkeeper 处理 Linux 源代码对自由软件社区产生了严重影响,因为任何想密切跟踪 Linux 补丁的人只能通过安装该非自由程序来实现。肯定有几十甚至数百名内核黑客已经这样做了。他们中的大多数人都在逐渐说服自己,使用非自由软件是可以的,以避免他们的机器上存在 Bitkeeper 的认知失调感。对此可以做些什么呢?

一种解决方案是使用 CVS 或另一个自由版本控制系统为 Linux 源代码设置另一个存储库,并安排自动将新版本加载到其中。这可以使用 Bitkeeper 来访问最新的修订版,然后将新修订版安装到 CVS 中。该更新过程可以自动且频繁地运行。

FSF 不能这样做,因为我们不能在我们的机器上安装 Bitkeeper。我们现在没有任何非自由系统或应用程序,我们的原则是必须保持这种状态。除非有人能找到或创造一种使用自由软件进行此操作的方法,否则操作此存储库必须由其他愿意在他的机器上安装 Bitkeeper 的人来完成。

Linux 源代码本身在非自由软件方面存在更严重的问题:它们实际上包含了一些非自由软件。相当多的设备驱动程序包含一系列数字,这些数字代表要安装到设备中的固件程序。这些程序不是自由软件。将一些数字存入设备寄存器是一回事;一个实质性的二进制程序是另一回事。

在 Linux “源代码”文件中存在这些仅二进制程序会产生一个次要问题:它让人质疑 Linux 二进制文件是否可以合法地重新分发。GPL 要求“完整的相应源代码”,而一系列整数不是源代码。同样,将这样的二进制文件添加到 Linux 源代码中违反了 GPL。

Linux 开发人员计划将这些固件程序移动到单独的文件中;这需要几年时间才能成熟,但完成后它将解决次要问题;我们可以创建一个不包含非自由固件文件的“自由 Linux”版本。如果大多数人使用非自由的“官方”Linux 版本,那么这本身不会有太大好处。这种情况很可能会发生,因为在许多平台上,如果没有非自由固件,自由版本将无法运行。“自由 Linux”项目将不得不弄清楚固件的作用,并为其编写源代码,也许是用汇编语言为它运行的任何嵌入式处理器编写。这是一项艰巨的任务。如果我们多年来一点一点地完成这项工作,而不是让它堆积起来,那么这项任务会轻松得多。在招募人员来完成这项工作时,我们将不得不克服一些 Linux 开发人员散布的“这项工作没有必要”的想法。

Linux,内核,通常被认为是自由软件的旗舰,但其当前版本部分是非自由的。这是怎么发生的?这个问题,就像决定使用 Bitkeeper 一样,反映了 Linux 最初开发人员的态度,他认为“技术上更好”比自由更重要。

历史教导我们,珍惜你的自由,否则你将会失去它。“别用政治来烦我们,”那些不想学习的人回应道。

更新:自 2005 年以来,BitKeeper 不再用于管理 Linux 内核源代码树。请参阅文章谢谢你,Larry McVoy。Linux 源代码仍然包含非自由固件 blob,但截至 2008 年 1 月, 自由版本的 Linux 现在被维护,以便在自由的 GNU/Linux 发行版中使用。