此时,他性格中的怪僻萌动了,他决定反抗这种趋势。他既不想继续留在人去楼空的人工智能实验室,也不想在一家新公司里写代码,因为他写出的代码会被锁在保密箱里,最终他从实验室辞职,随后创建了GNU项目和自由软件基金会(FSF)。GNU“GNU's Not Unix”的缩写,扩展后短语中的GNU其实是同一意思。的目标是开发一个完全自由和开放的操作系统和配套的应用软件,它们的用户永远不会阻止去破解或是分享它们的修改。本质上他是要重建人工实验室内被摧毁的那些东西,但是这一次是在全世界的规模上,并且还要避免导致人工实验室的文化被动摇破裂的那些弱点。除了新操作系统的工作,斯塔尓曼还设计了一套确保他的代码无限自由的版权许可证。GNU通用公共许可证(GPL)是法律博弈中的奇招:它声明允许无限制地复制和修改代码,同时拷贝和派生产物(即修改版本)必须在原始版本的相同许可证下发布,不得附加限制。实际上,它用版权法去达到一个同传统版权法相反的目的:取消对软件分发的限制,它阻止任何人,甚至是作者本人对此的限制。对斯塔尓曼来说,这要比简单地把他的代码分发到公共领域好得多。因为在公共领域,一份实际的拷贝有可能被包含在一个私有程序中(这样的事情我们在使用宽松的版权许可证的代码中听到很多了)。虽然这种包含不会在任何方面减弱原始代码的持续可用性,但它意味着斯塔尓曼的努力可能会帮助敌人—私有软件。GPL为自由软件提供了一套保护机制,因为它阻止了非自由软件利用GPL许可证下代码的优势。GPL同其他自由软件许可证关系的详细讨论在。在很多程序员的帮助下──其中有些是认同斯塔尓曼的思想体系,有些只是为了能看到自由软件的代码──GNU项目开始发布操作系统中最重要组成部分的自由替代品。因为计算机硬件和软件已经高度的标准化了,使用GNU替代其他的非自由操作系统成为可能,许多人也这么做了。GNU文字编辑器(Emacs)和C编译器(GCC)特别的成功,它们获得大量忠实的拥护者,这不是因为其理想主义的基础,而是因为其技术价值。约在1990年GNU已经生产了一个自由操作系统的大部分,除了内核—实际负责引导计算机、管理内存、磁盘和系统其他资源的部分。不幸的是,GNU项目选择的内核设计要比预想的更难实现。随后的延期使得自由软件基金会没能及时地发布一个彻底的自由操作系统。这缺失的部分最终由一个芬兰的计算机科学系的大学生Linus Torvalds补完,在遍布全世界的志愿者的帮助下他用更加保守的设计完成了一个自由内核。他将其命名为Linux,当把内核同GNU项目的现存软件组合在一起,结果就是一个完全自由的操作系统诞生了。第一次,你不再需要任何的私有软件来启动和使用你的计算机。从技术上来说Linux不是第一个。在Linux之前不久已经有了一个能在IBM兼容机上运行的自由操作系统,386BSD。然而386BSD的启动和运行还不太稳定。Linux的飞速发展不仅因为它是自由软件,而是因为安装之后你有更大的几率能启动计算机 。这个操作系统上的很多软件都不是GNU项目的产物。实际上,GNU不是唯一的开发自由操作系统的团体(例如,当时最终发展为NetBSD和FreeBSD的代码已经开始编写)。重要的不仅仅是自由软件基金会产出的代码,而且是它们的政治修辞。把自由软件当成一个目标而并非一种手段讨论,让那些对此并没有政治意识的程序员们很为难。即使那些并不认同自由软件基金会的程序员也不得不面对这些问题,只要他们处于不同的位置。自由软件基金会通过在他们的代码上附带有关GPL和其他文字的信息,成功地扮演了鼓动家的角色。随着他们的代码广泛地被分发,思想也随之流传。意外的反抗在自由软件运动的早期还发生了很多其他事情,其中很少有如斯塔尓曼的GNU项目般清晰的思想体系。其中一个最重要的是伯克利软件发行版(Berkeley Software Distribution,BSD)一个Unix操作系统的重新实现—这个项目可以一直追溯到1970年代晚期AT&T公司内由加州大学伯克利分校负责的一个松散的私有研究项目。BSD并没有什么要程序员们联合起来并且共同认可的政治信条,他们通过高度分散地开发方式从零开始重写了Unix命令行工具和代码库,最终是操作系统内核本身,这一切的大部分都是由志愿者完成的,用天才和热情实践了这个信念。BSD项目成了非意识形态的自由软件开发的主要例子,并且他们为那些在开源世界继续保持活动的开发者提供了训练场地。另一个合作开发的重镇是X Window
System,一个由MIT联合其他有兴趣为客户提供窗口系统的硬件厂商在80年代中期开发的自由的网络透明的图形计算环境。和私有软件恰恰相反,X许可证故意允许在自由核心之上建立私有扩展—每一个成员都需要机会加强默认的X发布,这样就会获得了超越其他成员的竞争优势。X Windows正式的称呼是“X Windows System”,但实际中人们通常称之为“X Windows”,因为三个单词太繁琐了。自身是自由软件,但其主要目的是为了平衡商业利益竞争中的差距,对终结私有软件的统治没有丝毫的诉求。还有一个早于GNU项目很多年的例子是TeX,Donald Knuth的自由排版系统。他使用的许可证允许任何人修改和分发代码,但如果未能通过一个非常严格的兼容性测试,则不允许冠以"TeX"的名称(这是自由许可证的“商标保护”的一个例子,更多的讨论在)。Knuth并非对软件应该是自由还是私有的问题有什么意见或是其他诸如此类的目的,他需要一个更好的排版系统是为了完成他真正的目标—一本计算机编程的书—当书完成了,没有理由不把他的系统公之于众。虽然没有列出每一个项目和每种许可证,但还是可以确信,在1980年代末,出现了许多基于各类许可证的项目。许可证的多样性反映了动机的多样性。即使是一些选择GNU GPL的程序员也没有和GNU项目同样强烈的意识形态动机。尽管他们很享受为自由软件工作,但是许多开发者并不把私有软件视作社会恶魔。确实有些人是受到道德冲动的驱使要去消灭“囤积软件”(斯塔尓曼对非自由软件的称呼)的世界,但其他人更多的是出于对技术的狂热,或对能和志同道合者合作感到愉悦,甚至简单地出于人类对荣耀的渴望。大体上说,这些不同的动机并没有造成冲突。部分原因是和其他的创造性活动如散文和视觉艺术不同,软件必须通过半客观测试才能成功:它必须能运行,去除绝大部分的bug。这自动地给了一个项目的全部参与者一个共同的背景,一个理由,一个无需为除了技术以外的问题担心的协同工作的框架。开发者们还有另一个团结互助的原因:自由软件世界生产了很多质量非常高的代码。要么是令最接近的非自由对手都望尘莫及,要么是可以匹敌,或至少价廉物美。虽然也许会有一些人是出于严格的意识形态的背景才使用自由软件,但绝大部分人是因为它更出色才使用自由软件的。在这些人中,总有一定比例的人乐意将自己的时间和技术贡献出来帮助维护和改进软件。这种产出优秀代码的趋势并非是普遍的,但在全球的自由软件项目出现的频率越来越高。这引起高度依赖软件质量的商业公司的关注。其中的许多发觉他们其实早已经在日常的操作中使用自由软件,只是并没有意识到(管理层并不总是能意识到IT部门做的每件事)。公司开始在自由软件项目中扮演越来活跃和公开的角色,他们向自由软件的发展捐助时间和设备,有时甚至是直接的资助。在最好的情形下,这些投资能获得数倍的回报。这些赞助商只需要为少数全职投入的专家级程序员支付工资,获得的回报却包括了无偿的志愿者和领取其他公司薪水的程序员的全部工作成果。“自由”还是“开源”随着商业世界越来越多的关注自由软件,程序员们面临新出现的问题。首先是单词“自由”本身。第一次听说“自由软件”(free software,在英语中free既有自由的意思,也有免费的意思)这个词的时候,许多人都错把它理解成“免费软件”。确实大部分的自由软件都是免费的,发放自由软件的人可以收取一定的拷贝费用,但是由于他无法阻止受领者去免费地再发放,价格还是会很快接近于零。
但不是所有的免费软件都是自由的。例如在1990年代的浏览器大战中,为了抢占市场份额,网景和微软都无偿地发布他们的网络浏览器。这些浏览器都不是“自由软件”。你无法得到源代码,即使得到了也没有权利修改和再发布。网景Navigator浏览器的源代码最终在1998年在一个开源许可证下发布,成为后来的Mozilla网络浏览器的基础。参见。你唯一能做的是下载一个运行文件,然后运行。这些浏览器的自由不会比从商店里购买的盒装软件更多;它们只是有较低的价格。围绕自由一词发生的混乱,很不幸地完全是由于英语本身的多义性造成的。大部分的其他语种对“免费”和“自由”明确地区别对待(例如在罗曼斯语中gratis和libre的差别对听众而言是一清二楚的)。但英语是互联网事实上的桥梁语言,所以一个英语的问题在某种程度上来说即是每个人的问题。围绕自由一词的误解是如此之广,以至于最终自由软件程序员们发明了一个公式来应对:“It's free as in
freedom—think free
speech, not free beer。”但一遍又一遍的解释还是让人厌倦。许多程序员认为,即使加以解释,对自由的岐义正在阻碍公众对这种软件的理解。但实际的问题更复杂。free一词承载了一个无可避免的道德内涵:如果自由是它自身的最终目标,它同自由软件是否被更多人接受,是否能从商业中赚取更多的利益无关。这个动机唯一的光明面从根本上说既不是技术也不是商业,而是道义。此外,“free as in freedom”的定位也迫使那些既想在生意的某一方面支持实用的自由程序,而另一方面又继续推销私有软件的公司陷入前后矛盾的境地。本已陷入身份危机的社区又迎来了这些困境。如果说自由软件运动有一个总体目标的话,那些实际上写自由软件的程序员们并不都为了同一个目标而工作。甚至于从一个极端走向另外一个极端的观点会引起误解,因为我们会错误地以为只有两种极端的观点,而实际上存在着多层次的看法。然而,如果我们忽略其间的细微差别,他们都可以被归入两类信念。一个团体追随斯塔尓曼的观点,认为共享和修改的自由是最要的事,因此如果你不再谈论自由,你就忽略了核心问题。另一些人认为软件本身才是最重要的因素,并且对公开地宣布私有软件本质上是坏的而感到不舒服。部分的,但非全部自由软件程序员相信作者(或是雇主,如果是有偿工作)应该有权利控制分发的条款,选择何种条款不应该受到道德的审问。在很长时间里这些分歧并不需要认真对待,但自由软件在商业世界里的快速成功使得这些问题无法再回避。1998年一群程序员结成一个团体,也就是后来的开源促进会(Open Source Initiative,OSI)OSI的主页。创造了开源一词来替代“自由”。OSI认为“自由软件”不仅有潜在的岐义,而且“自由”一词本身就是一系列问题的根源。运动本身需要一个在商业世界里的营销程序,而谈论道德和社会公益在公司董事会里是不受欢迎的。用他们自己的话说: