从许可证战争看类Unix操作系统的三分天下

在计算机科学中,Unix-like操作系统指的是那些模仿或基于Unix操作系统设计和理念的操作系统。Unix是一种多用户、多任务、具有强大网络功能的操作系统,由Ken Thompson和Dennis Ritchie在1969年至1971年间在AT&T的贝尔实验室开发。由于其开源和可移植的特性,Unix的理念被许多其他操作系统采用和改进。

以下是一些最著名的Unix-like操作系统:

  1. Linux‌:
    • 概述‌:Linux是一个开源操作系统,基于Unix。它是完全免费的,并且由于其高度的可定制性和广泛的硬件支持,成为了最流行的服务器操作系统之一。
    • 特点‌:高度可定制、强大的网络功能、大量的软件支持(通过包管理系统如APT、YUM、dnf等)。
  2. BSD(Berkeley Software Distribution)‌:
    • 概述‌:BSD是基于Unix的一系列操作系统,包括FreeBSD、NetBSD和OpenBSD。这些系统以其高度的稳定性和安全性而闻名。
    • 特点‌:优秀的网络功能、高度的安全性、对多处理器的良好支持。
  3. macOS‌:
    • 概述‌:虽然macOS是基于Darwin(一个基于Unix的操作系统内核),但它不是纯粹的Unix-like系统。Darwin是苹果公司开发的,用于Macintosh计算机的操作系统内核。
    • 特点‌:图形界面友好、专为苹果硬件优化、内置强大的多媒体处理能力。
  4. Solaris‌:
    • 概述‌:Solaris是由Sun Microsystems(现为Oracle公司的一部分)开发的一个商业Unix系统。它以其稳定性和高性能而闻名。
    • 特点‌:高性能、高可靠性、全面的系统管理工具。
  5. Minix‌:
    • 概述‌:Minix是一个小型的教学和实验性Unix版本,最初由Andrew S. Tanenbaum开发。它主要用于教学目的,展示了Unix操作系统的一些核心概念。
    • 特点‌:小巧、易于理解、教学用途强。
  6. Cygwin‌ 和 ‌Windows Subsystem for Linux (WSL)‌:
    • 概述‌:虽然这些不是纯粹的Unix-like系统,但它们允许在Windows环境中运行Linux应用程序和工具。Cygwin提供了一个在Windows上运行类Unix环境的工具集,而WSL允许直接在Windows 10和Windows 11上运行Linux二进制文件。
    • 特点‌:提供Linux兼容性、允许在Windows上运行Linux应用和工具。

这些系统各有特色,适用于不同的使用场景和需求,从个人计算机到企业级服务器都有广泛的应用。Linux由于其开源特性和广泛的社区支持,成为了最受欢迎的Unix-like操作系统

 从系统演进角度,讨论几种 Unix-like 操作系统的类型。

Unix-like(类 Unix)

Wiki 对 “Unix-like OS(类Unix 操作系统)”的定义如下:

A Unix-like (sometimes referred to as UN*X or *nix) operating system is one that behaves in a manner similar to a Unix system, while not necessarily conforming to or being certified to any version of the Single UNIX Specification.

Unix-like 操作系统,就是某种程度上类似 Unix 系统的操作系统,而且并不一定需要特定的 “单一 UNIX 规格 ”的认证。

仔细想想,这个定义其实非常含糊,它使用了逻辑上的,基于字面上的定义重述。

这里理解,这可能因为“类Unix 系统”并无权威的统一定义。

如果借用游戏比拟,作为“主线任务”的 Linux 系统(它肯定是 Unix-like OS),甚至曾被 C 语言与 Unix 操作系统之父 Ritchie 宣称:“Linux 其实就是 Unix(它们就是一回事)”。

01

Unix shell

1.1 作为 Unix-like OS 共性的 shell

那么,Unix-like 的共性有哪些呢?– 从用户交互的角度上,通常能观察到 Unix-like OS,都应具有 Unix shell,以提供 Unix 命令行 UI。

Unix shell,是 Unix-like 操作系统的,命令行解释器(command line interpreter),它提供了命令行 UI。

当 shell 称呼作为语言使用时,它既是命令语言,也是系统提供执行的脚本语言。

Unix shell 通常是 Unix-like OS 操作核心界面,它是位于“最底层的”,“最里面的”操作系统组件。

因此,Unix shell 的重要地位,似乎不难想象(仅需代入到信息革命开端时代):

约半个世纪前,Ritchie 在 B 语言基础上发明 language C,并用 C 语言重写 Unix 系统(这带来了第三次工业革命 – 电子信息产业革命启蒙)。那时的硬件资源,系统复杂度,应当“撑不起”今天的复杂桌面系统(如 windows,macOS,Linux/Debian/Ubuntu)的 GUI 界面。

注:Ken Thompson 是 B 语言的发明者,他俩是 Bell 实验室的长期合作同事,共同创造了 Unix。– 因此获得了无数专业荣誉,也包括来自克林顿颁发的政府荣誉。

因此,用户可以通过 Unix shell 登录系统,启动系统脚本。且 Unix shell 为其存留账号密码,配置当前用户参数,并(通过 Unix shell)执行其他命令交互(并使用各种命令工具)。

而随着 OS 进度,比如现代 macOS 则通常可以直接通过 gui 界面来实现上述操作(Unix shell 不再成为唯一的用户交互 UI)。

1.2 shell 的种类

Thompson shell 是最早的 Unix shell 的版本,被 Ken Thompson 开发。

Bourne shell

而基于 Bell 实验室 Bourne 创造的 Bourne shell 与其变体,是当前 shell 的主流种类。

  1. Almquist shell (ash): BSD-licensed,常用于资源限制环境。应用 POSIX 增强性能的 sh 用于 FreeBSD,NetBSD。

  2. Bourne-Again shell (bash): GNU Project 之 Bourne Shell 的超集,在大多数 Linux 系统中使用。

  3. Debian Almquist shell (dash): Debian/Ubuntu 使用的现代 ash。

此外,POSIX 标准规范定义的标准 shell,来自 Korn shell(Bourne shell 的增强版)。

C shell

C shell,csh,提供 C 编程语言的模式化,在某些 BSD Unix 中被发布。注:它是加州大学伯克利分校的研究生,Bill Joy 的作品。

02

System V 家族(Unix):“宗门任务”

从系统项目的演进角度,即通过 Unix-like OS 的发展简史,似能更清晰地归类现代的“类 Unix(Unix-like)操作系统”。

与其他讲述不同,本文强调 Unix-like OS 的简史,与BSD 许可证,GPL Copyleft 证书的发展不可分割(而后者带来了“自由软件运动”,与“开源倡议”)。

2.1 Ritchie 用 C 重写并真正创造:Unix

如图所示,1970s 诞生 Unix 操作系统。如上所述。C 语言发明者 Ritchie 用 C 重写 (并真正创造)Unix OS。

2.2 System V 家族:“正宗的(延续的,源系宗门的)”Unix

  • 1979 年开始,AT&T 收紧许可,但商业版权发布也并非那么昂贵。有数的几个大型商业公司纷纷加入其中,这里将它们称为“正宗的”(延续性的)Unix OS。

  • 如上图所示,它们主要是 System III & V 家族。

  • 由于商业闭环使用特点,还在演化的两三个公司的 Unix OS 资料能查阅到的不多。可考虑为,针对上述公司的自有处理器的优化版本。

  • 即使作为“正宗”传承,其现代影响力似可忽略。但在历史上,正是由于该“宗门”任务上的各个公司的版本演化差异,导致了统一标准的出现:POSIX 与“单一 UNIX 规格”。

  • 额外补充:服务器 EulerOS,作为 Linux 发布,也获得了“单一 UNIX 规格”认证,不晓得是不是早期,华为对冲破限制做出的各种努力之一。

03

BSD(Unix-like):“殿堂任务”(“学术气息的,宽松的”BSD许可证)

  • 加州大学伯克利分校,早期从 Bell 实验室获得 Unix OS 源码(Unix-like 的开放传承精神即初现端倪)。对于或源于校园氛围 BSD 许可证,这里理解为等同“宽松的(几无限制的)”。即源码可自由下载,修改,并商业闭环式的使用(而无需公布任何修改后的代码),需要的可能仅仅是在修改源码中进行 BSD 许可证的版权声明。

  • 1980s,经历了版权纷争后,BSD 替换了全部 AT&T 源码。

  • 如上图所示,在 BSD 许可证下,苹果的商业闭环 MacOS 正是源于早期的 BSD。

  • 而此刻正在演进中的 BSD Unix-like OS 包括:FreeBSD,NetBSD,OpenBSD。注:研学一些资料提及,BSD 默认无 GUI 界面(即只有 Unix shell 之传统风格),用户可以自行选择加载 GUI。

  • 注意:由于上述版权争论的缘故,“BSD”或通常不直接与“Unix”关联,而刻意主动冠以“Unix-like”之称谓

04

GNU/Linux(Unix-like): “主线任务”(“自由软件运动”,“GPL”与“copyleft”)

4.1 free software(自由软件)与 GPL(General Public License)

  • 来自不同的文化圈,有时很难想象“自由软件运动”的发起缘由。学研了一些资料,可能的推测是:(1)从大环境上讲,当时处于如此激动人心的工业革命(信息产业革命)的前夜,又恰逢渴望个性崇尚自由的大时代。(2)从产业发展视角,1980年左右,软件业界终于开始发展到版权之争阶段。Unix 许可之争,某些商业版权争端中故意在软件中埋藏逻辑时间炸弹等事件,还有当时广为流行的黑客文化等因素,催化神级人物 Richard Stallman 的出现(见图片中“GNU”紫色框下的文字注释)。(3)此外,某些产品尽管是宽松许可的,任意下载修改并闭环使用的,但该产品的著作权所有者,专享该产品的权利,有权不允许其他程序员参与修改推进该冠名产品(想修改尽可以自己下载源码闭环修改,发布自己的产品。至于是否发布修改源码,由修改者决定。但不管如何,要说明原始版权)。这个特点,可能也刺激了 Stallman。

  • Richard Stallman 将毕生精力,都用在引领“自由软件运动(free software movement)”中。他亲手撰写了 GPL (证书)的条款。

  • GPL 允许源码的自由下载与修改,但同时也给予修改者“发布其修改源码的自由”(这里理解,所谓“自由发布修改源码”,具有深刻的两面性。一方面, GPL 提供其他贡献者参与产品项目的自由。另一方面,GPL 本身具有强制性,修改该项目者,实际被强制共同参与贡献,即必须公布源码,以使得该工程项目不断进化/迭代)。

  • GPL 具有衍生特性,基于 GPL 的产品的任何衍生产品,也默认持有 GPL(证书)。

  • 回顾历史,这里尝试理解:Stallman 或代表某类程序员(精英),他们近似无偿地献身于软件工程项目,以反抗商业授权。他创造 GPL(通用公共证书),优化了 BSD 这种近似无约束的许可证。GPL 可防止项目所有者独享版权,从而保证其他开发者参与项目的自由。进而保证参与者维持一种,持续性的项目贡献,产生对使用者来说完全免费的,自由使用的产品。

  • Stallman 似较执着,似乎强调“自由软件”完全与商业无关(这将在未来引出“开源倡议”)。他自己就拒绝了苹果的提议,即将 GCC 的变种版本,商业授权给苹果使用(这可能反向刺激了,后续 Clang 编译链的产生)。

  • 总结:(1)GPL 完全的“自由”仅面对使用者。(2)对于学研源码,并修改使用的开发者,具有深刻的两面性,即提供开发者参与项目演化进步的自由,又强制“(修改后)源码发布”。(3)对于公司,源码公布导致无法商业闭环使用,带来的巨大研发投入损失,以及可能的安全风险,更谈不上享受“自由软件”的快感。只有不得已为之的权宜之计。(4)对于 GPL 项目(“自由软件”),由于贡献者持续参与,不少项目能够得到持续进步/迭代,以相对较小的投入,产出使用者得以自由使用的产品。

  • 注1:因为 Stallman 的努力,“自由软件(free software)”现在是专有名词,即指代上述特性的 GPL 软件,并隐含运动本身。

  • 注2:“free software”中的 “free”,作“自由”理解,而非“免费”(尽管自由软件的用户通常是免费使用)。

  • 注3:“ commercial closed(商业闭环)”,网络查询“closed”常见译作:“闭环”,“私有”,或“非开源”等。其概念通常与“自由软件”,“开源”相反。

  • 因为 GPL/自由软件 的上述特点,有些人将 GPL 证书称为“病毒证书”,因其证书向衍生物蔓延。在上述“总结”中,这里归纳的特点,某些必然引起不快。特别是对于完全没有准备,没有在课堂授业中被提醒的年轻学子,这表现的更加明显。对 GPL 源码学研愈深,了解愈透,参与贡献愈多,就愈加断绝该学子,未来的某种创造发展的人生可能(已受限 GPL 的强制贡献证书)。当然,类似这样的大型项目,比如说 99.99% 的童鞋,未来学研或工作道路上,几乎肯定不会独立自创某个新操作系统,新编译器,那么深入研学 GPL 项目,比如说 GNU 也没什么。但是校园童鞋往往因为未曾参与实践,对自己未来工作潜力一无所知。那个万中无一的天才万一就是你呢?

  • 当然,反过来说,作为支持“自由软件”的进步分子,积极参与 GPL 软件,希望像芬兰学生 Linus 那样,在历史上通过 GNU 这样的自由软件,留下自己的姓名,那就是另一回事了(本文不持任何观点,不倾向 BSD-like,与 GPL-like 任何一方,仅作简单介绍)。

4.2 “copyleft”与 GPL

(1)Copyleft 首次说明

讨论:“自由软件”,“GPL(通用公共证书)”之核心内涵,同样隐藏被 Stallman 赋予新动能的词汇“copyleft”之中。

1985 年,Stallman 在“GNU 宣言”中阐述 “copyleft”概念:

GNU is not in the public domain. Everyone will be permitted to modify and redistribute GNU, but no distributor will be allowed to restrict its further redistribution. That is to say, proprietary modifications will not be allowed. I want to make sure that all versions of GNU remain free.

GNU 不属于公域。每个人都被允许修改并重发布 GNU,但任何发布者都不允许限制它的进阶重新发布。换而言之,也就是不允许专利修改。我想确保所有 GNU 版本都保持自由。

(2)阅读理解

这里的阅读理解如下,协助参考:

  1. GNU 不属于公域:它不像 BSD 许可证那样,任何人自由修改源码并随意商业闭环。同时,如果开发者打算对该产品进行修改提升,原著者不能拒绝

  2. 不允许专利修改:任何人都可以在修改者基础上,再次修改后发布。修改者并无专利权,即无权私有化源码修改,即修改者必须公布修改源码

  3. 确保所有 GNU 版本都保持自由:“free”应译作“自由”,而非单纯指“免费”。指代“自由软件”的上述特点。

(3)Copyleft 原始含义

  1. Copyleft,原始的来历源于 Stallman 与他人的 mail 讨论,即“Copyleft – all rights reversed(全部权利颠倒)”。

  2. 语义推测:(1)Copyleft:在既有版权框架下,设计某种独特版权,与传统的版权概念相左(相背离,相颠倒)。(2)目的:有助于自由软件的自由扩散与(各种修改完善的)重新发布。

  3. 在中文语境中,百度翻译译作:“著佐权”。这里理解,翻译得非常准确,译者精确把握了技术范畴内的含义。“著佐权”,应当有别于“著作权”。不晓得是哪位前辈的中文翻译,信雅达皆备。

  4. 仅仅翻译为“反版权”似不够。Copyleft 并非真正“反版权”,它是在当前法律版权体系下,设计符合法律的“新版权(通常是 GPL)”,用来“反(传统)版权”。目的是:(1)保护使用者(而非所有者),并尽可能极大扩散产品重发布的版本。(2)但反过来,又赋予所有者新权利,即强迫衍生产品必须同样遵守“Copyleft”的权利。(3)这种构成叫做“互惠”,作为修改者受惠于前人的工作,而修改者的未来衍生物的新修改者,又受惠于修改者的当前修改工作。(4)如何才能实现这样的互惠?即要求修改者的软件与其源码一起提供(才能给后来修改者生产衍生物),这样,逻辑上反证了,强制发布修改源码的必要性。

  5. Copyleft 的 label(标志)为,反向的“C”。即传统版权标志为右向的,正常的“C”,而 Copyleft 的标志对标为:反向(镜像) “C”,开口向左(2016年,Unicode 收录该字符,码点为 U+1F12F,即“Copyleft 符”)。是否这恰好与 “copyleft”中的“left”形成语义相关?出于高效研学的缘故,这里没有花时间查证,仅留下这里的直觉联想,提供参考。

  6. “许可证(Permissive license)”:(1)对于 BSD 软件,需要的是 “BSD 证书”,或“BSD 许可证”。“许可证”是与“copyleft”在“衍生性”上完全对立的概念(并不需要衍生修改物遵守类似 Copyleft 衍生证书)。(2)对于 GPL 软件,严格地说,不能称为“许可证”,它属于“Copyleft 证书”,或“保护证”。(3)而 GPL 本身,应译为:“通用公共证书”

  7. 但百度翻译网页,对 “Permissive license”与“license”不作区分,都译为“许可证”。推测这可能导致,整个中文研学环境,将 “GPL 证书”误译“GPL 许可证”,导致与 “BSD 证书(许可证的一种)”混淆。这肯定增加了中文语境下的童鞋,理解 “BSD 证书(BSD 许可证)”与 “GPL 证书(GPL 保护证/Copyleft 证书)” 概念的困难程度(注:“许可证- permissive license”定义来自 Wiki 的“Copyleft”网页)。

  8. “保护证(Protect License)/Copyleft”:为何将 Copyleft 称为“保护证”?这里理解,它“保护了”(开发者)修改与重发布自由软件的权利

  9. Copyleft/GPL 作为法律版权体系下的创造,在不同的国家受到不同的保护,以及相应 GPL (证书)配合的条款。由于并非知识产权专业,不清楚中国的 copyleft 证书的法律保护条款,想必也是大同小异。

  10. 拓展讨论:介绍至此,带来新的思考。站在大约 40年后的今天,可用更高维度理性的眼光打量 Stallman 的自由软件运动与 GPL(Copyleft 证书)。(1)并非否认 Stallman 的历史地位。没有 GPL,哪有唾手可得的源码。更何况 GPL 逼迫商业公司发布更多 BSD-like 源码公布产品(对用户两者都是免费的)。(2)但是,正如不同意见者提及,所谓的“自由软件”的旗号下,GPL-like 软件可以自由从 BSD-like 吸取源码,整合入 GPL 软件,再以 GPL 的衍生证书模式发布(强制衍生物遵守 GPL 证书)。那到底谁才是真正的“自由”?

4.3 GNU/Linux

  • 如果说,在看不见的数字空间中,Stallman 倡议并引领着,某种社会学意义上的运动风潮。那么,他即代表着,同样品质高尚,思想进步,无偿服务他人的科技群体。

  • 站在社会学角度,引领群体的领军人物,通常需要借势而为,加入团队,谋求支持,相当不易。但在二进制的科技信息世界有时不需要。这隐含着时代提供科技开发者的巨大能力表现机会:“我说的,我宣讲的,我自己就能做,并能通过产品的急剧扩散传播我的影响”。

  • Stallman,同时就是这样一位卓越工程师,他启动了 GNU 项目(1983年9月),即 Unix-like 计算机操作系统(全部由“自由软件”构成)

  • 注:这就是本文讲述模式的重要依据,必须讲解相关“自由软件/free software”,“GPL(General Public License/通用公共证书)”,“Copyleft/著佐权”概念,以及对立的“BSD Permissive License(BSD 许可证)”概念。此刻,研学者才能真正明白 Stallman 在做什么,GNU 操作系统是什么。

以下图例来自 Wiki 的 “Richard Stallman”网页:

 

讨论:

  1. 挺有趣的事儿就是,Stallman 的教育与工作经历,源于 Harvard(哈佛)与 MIT(麻省) 等院校。

  2. 但他坚定创立自由软件与 GPL 证书,而不受 MIT(BSD-like)的典型学院证书影响。当然,反过来说,当他名气越来越大时,MIT 仍坚持 MIT 许可证,不被 Stallman 影响。

  3. 而且 MIT 许可证反而凸显更加“宽松”。如果没有理解错,MIT 许可证比 BSD 许可证更加“宽容”,它甚至允许衍生软件仍然以原软件冠名来广告促销。

4.4 GNU/Linux 项目组成

作为具有 OS 开发经验的工程师,Stallman 主导 GNU 操作系统的如下项目:

  • text editor (Emacs),

  • compiler (GCC),

  • debugger (GNU Debugger),

  • build automator (GNU make).

而著名的 kernel 的演化路线如下:

  • 1990年,GNU 成员 Mach microkernel,即 GNU Hurd(见简史图中演化分支)。

  • 1991年,芬兰学生 Linus 贡献 Linux kernel。从此进入“主线任务”。

Stallman 经常争辩,当提及该操作系统时,人们(甚至是参与贡献的工程师们)仅提及“Linux”。这好不公平,他认为这个系统明明是:GNU/Linux

当然,站在反对者的观点,也可以认为,既然首先构造了 OS 内核 Linux kernel。那么,移植来自 GNU free software 的各种成熟的工具到 Linux OS,也顺理成章。Linux OS 天然源于 Linus 的核心贡献,考虑一下他的背景,这自然给了投身信息产业的年轻童鞋巨大鼓励。这里仅简述一下,各自的观点。

拓展介绍:醉心引领社会运动科技工作者,最终会因为言论在社会舆论中放大而被追踪。Stallman 一些言论,对低龄被伤害似乎不以为然,这导致了对他真实道德的巨大的怀疑与声讨,但 Stallman 坚持不从 GNU 项目主管角色上辞职(他仅辞任一些无关的社会或校园职务)。