三十年前,当你在 MTV 上看到 R.E.M. 乐队演唱《失去了我的信仰》的画面,决定购买一张专辑时,你需要用家里的电话打给朋友,让他带你去最近的唱片店,并希望那家唱片店里还有足够的库存。而如今,你只需用手机给朋友打视频电话或发短信。这些改变很大程度上是由于 1991 年发生的两件大事:Linux 内核的发布和 GNU 通用公共许可证(GPLv2)第二版的推出。
真实情况或许比以上描述更复杂一些,但事实上,我们依赖的大量技术都与这两件大事直接相关。接下来,我们不妨来回顾一下这两件大事及其产生的影响。
GPL 是什么?
从最根本上讲,GPL(和其他许可证一样)是指你能够使用产品的一个许可证。通常,这个产品是一个软件,如 Linux 内核,但也可能是其他东西,比如文档。
GPL(以及其他自由及开源 [FOSS]许可证)的特别之处在于,它通过版权最大程度地向用户授予权利,而不是像一般做法那样,利用版权限制人们使用软件或其他产品。
如果你读过《最终用户许可协议》(EULA),就会知道它通常规定了你不能使用,或者非常有限地使用的情况。例如,它可能规定你不得分发某款软件,或者只能在一台机器上(甚至一种类型的机器上)运行该软件。
而 GPL 则旨在向产品接受者赋予特定的权利,以保护他们的“四大自由”——这是由 GNU 创始人 Richard Stallman 提出的。
GPL的四大自由
自由软件向用户传达了四种“自由”:自由运行、复制、研究/改进和分发产品。
简言之,这意味着如果你获得了由 GPL 许可的程序,你就可以不受限制地运行该程序。你可以将它复制给朋友,可以修改、改进程序,甚至可以进一步分发这些更改。
如果你获得 Fedora Workstation 的副本,并且想要使用它?没问题。GPL(以及 Fedora 副本中包含的其他自由及开源许可证)明确允许你这样做。
能否再拷贝一份给朋友?可以。能不能深入研究一下它的运行原理?这也是被允许的。
能不能修复程序中的错误,并且分享这个修复包?当然可以。然而,有一个小细节需要注意,即分发 GPL 软件会带来一些额外的责任。
利用 GPL 保护用户权利
GPL 并不是唯一向用户传达这类自由的许可证。它是众多自由及开源(FOSS)许可证之一。需要注意的是,“自由”和“开源”的区别。(参见这个 FAQ)GPL 的有趣之处在于,它有时被称为互惠许可证。
基本上,GPL 规定,你在 GPL 下获得的权利要同样传给你后续分发的人。也就是你不能在修改了 GPLv2 下的软件(如 Linux 内核)后为其附上不同的许可证,以限制别人的权利。GPL 提供了一种创新的方式,通过版权鼓励使用、研究、修改和分发软件,而不是试图限制这样做——而这一般正是版权的目的。
GPLv2 并不是市场上唯一的 FOSS 许可证。它甚至不是唯一的 GPL 版本,这一点会另外说明。开放源代码促进会列出了一系列符合开源定义的许可证。
宽松许可证与版佐许可证
FOSS 许可证通常分为宽松许可证或版佐许可证。前面已经写过,版佐许可证要求你在根据 GPL 分发软件时,必须提供你的修改结果或者其他互惠许可证作为回报。因为代码也是根据 GPL 与你共享的,所以如果你想分发这些代码,就必须分享你对这些代码的修改。
需要注意的是,这一要求在 GPL 软件分发时就已触发,而不仅仅是在进行修改时。因此,如果你下载了软件,并出于自己使用或学习的目的而进行更改,接下来会有两种情况:如果你并不会将这一版本进一步分发,则你无需发布更改;但如果你选择将这一版本分发给他人,你就需要将你的修改与所有人共享。
另一方面,宽松许可证允许在不分享更改结果的情况下分发软件。例如,MIT 许可证甚至允许在专有许可证下进行分发,但它要求包含原始版权声明。
Linux 内核是核心
关于许可证的内容都很有趣,但它与 Linux 内核的成功关系几何?
我们先稍微了解一下内核是什么,以及它不是什么。Linux 内核是该操作系统的核心。总体来讲,内核管理硬件、进程、内存、文件等。虽然大多数人对此并不关心,或者并未与之打过交道,但它对整个操作系统至关重要。
Linux 发行版中包含了我们前面所说的许多方面,例如 GNU 项目中提供的 GNU 实用程序和编译器,它们在一开始就帮助构建了 Linux。当然,你还有用来部署完整环境并使计算机可用的应用。包括从 Web 服务器和数据库到用户桌面等方方面面。
但内核是所有这一切的核心,而且 Linux 之所以成为有史以来最成功的操作系统,原因在于它的许可证允许复制、改进、分发并要求分享修改结果。(注意:许可证并不要求协作,但 Linux 的互惠性质非常支持这一点)。
Linux 内核的第一个版本是根据一个限制商业活动的定制许可证而发布的,但这种情况并未持续太久。Linus Torvalds 在 1992 年使用 GPLv2 发布了 Linux 0.99。为什么?用 Torvalds 自己的话说,“我很快发现,最初的版权限制太多,无法在某些方面完全有效地使用......虽然一开始我对 GPL 感觉不适应,但我也想对 Linux 所依赖的 GCC C 编译器表示感谢,因为显而易见,它符合 GPL。”
通过消除商业使用限制,Torvalds 允许企业改进和分发 Linux。允许获取商业盈利意味着分销商可以试图通过封装 Linux 并将其与书籍、盒装、杂志以及通过其他任何方法一起出售而赚钱。
在这一方面,需要注意的是,20 世纪 90 年代初的软件分发与目前差别很大。在那时,大多数人都是通过软盘(或磁盘)或 CD-ROM 接收软件。有些人可以通过 FTP 下载软件,但这对许多用户来说可能难以做到。
初次接触 Linux
Richard Jones(现在是红帽研发平台团队的高级首席软件工程师)表示,在通过 Slackware Linux 发现 Linux 之前,他一直使用 Minix。Jones 说,通过网络获取 Slackware 非常费劲。
“如果......想要获得一个功能完整的发行版,就需要 30 张 3.5 英寸(软盘)磁盘。下载并拷贝到软盘上需要一天时间,但那时(1992/1993 年),我在一家政府研究机构工作,有权访问这种叫做互联网的新生事物。”
GNU 通用公共许可证的作用
GPLv2 的互惠性是指发行 Linux 的厂商不能(合法地)保留他们对内核的修改。这会鼓励(有些人可能会误认为是强迫)在上游分享修改和产品的行为,而不是为特定的发行版提供不同的内核。
大约在 Linux 首次发布的同一时间,有人正在尝试将另一种 *nix 移植到 x86 电脑上,并取名为 386BSD。1993 年 FreeBSD 和 NetBSD、1995 年 OpenBSD 相继面世。
尽管 Linux 项目和供应商专注于单个 Linux 内核,但 BSD 的开发有多个方向。当然,这是对使 Linux 取得成功的因素和导致许多基于 BSD 的操作系统不太成功的因素的极端简化。GPL 是 Linux 成功的一个因素,但并非唯一因素。
例如,Jones 指出了 Linux 和 BSD 之间在最初就存在一种非常重要的技术差异。“简单地说,Linux 有共享库,但 BSD 没有,而且当你只有一个 40MB 的硬盘时,每个库只有一个副本真的非常重要。”
免费的类 UNIX 操作系统
价格同样也很重要。虽然 BSD 是免费的,但专有 UNIX 操作系统显然不是。Jones 称,他曾花 150 美元购买了盒装 Minix,并且等待了几周才真正拿到软件。
Stephen Smoogen 是 Linux 的资深用户,也是红帽的员工,他说从首次接触 Linux 到现在,一直在使用 UNIX,但它的价格相当高。“我使用 UNIX 大约四年了,一台工作站的价格约为 16000 美元。”
这并不是家庭使用可负担的价格,但 Smoogen 不想走 MS-DOS 和 Windows 的路线。“我曾试过 DOS 和 Windows,但发现(UNIX 的)shell 脚本、管道和 GCC 工具功能太强大了,根本不可能再回头去用其他的。”
可喜的是,他不必“回头”,而且运行 Linux 的硬件足够便宜。“我在 i386 电脑上运行 Linux,大约只需 1600 美元就可以拥有我在 UNIX 机器上使用的全部工具和命令。”
“红帽来了”
1991 年,第一个 Linux 内核代码发布,几年后红帽才成立——这要取决于你如何定义“成立”。
Marc Ewing 创建了自己的 Linux 发行版,并于 1994 年 10 月发布了著名的万圣节版红帽 Linux。同时,Bob Young 大约在同一时间通过一家名为 ACC Corporation 的公司销售 Linux 和 UNIX 软件。
1995 年,两人成立了 Red Hat Software,Young 担任 CEO。Red Hat Linux(还不是 Red Hat Enterprise Linux)以盒装形式通过线上零售商和实体店销售。用户还可以通过便宜的 CD(Linux Mall 等零售商以 0.99 美元加运费出售 Linux CD,包括 Red Hat Linux)或仅通过朋友分享的副本而获得 Red Hat Linux(和其他发行版)。
如果不能自由复制和分发 Linux,这一操作系统就不大可能像这样流行起来。如果没有 GPL 的互惠性质,内核就不大可能成为众多商业和社区愿意共享的资源。
现在,距离那名大学生在业余时间设计了一个内核,并发布了具有革命性意义的软件许可证已经整整 30 周年。而许可证和内核可能只是 Minix 或期待已久的 GNU Hurd 操作系统内核的脚注。
但他们一起点燃了火种,形成了如今的燎原之势。
从业余爱好到星际探险
Linux 内核现在已经无处不在。在使用了安卓系统的手机上,它运行着许多程序,如打电话、发短信、播放音乐、观看视频、玩游戏等。
Linux 还被运行在 TOP500 超级计算机上,并为公有云提供功能支持。Linux 可为电影制片厂运行渲染软件,并为孩子们网上学习所用的 Chromebook 提供支持。Linux 还可为业余爱好者的 Raspberry Pi 单板计算机提供支持,同时为用于流媒体服务的内容交付网络(CDN)以及机顶盒和智能电视等设备提供支持。
作为一款最初由一位大学生作为业余爱好开发的操作系统,这样的发展现状可以说是“还不错”。
我们也不妨再作畅想:未来的 30 年又将发生怎样的故事?