【科普】什么是Linux?Linux发行版必须开源免费吗? 来自 HeroCreeper
‼️长文警告‼️ 本文约2100字,建议在空闲时间看。
你很可能听说过“Linux”:知名的Android操作系统基于“Linux”,多数网络服务器上运行的是“Linux”,不少极客们喜欢在自己的电脑上安装“Linux”,而世界前500强的超级计算机则无一例外的全部运行“Linux”。
虽然“Linux”在计算机领域拥有无与伦比的知名度和占有率,但很多人对“Linux”的基本概念还存在许多的误解。许多人无法分辨“Linux”、“GNU/Linux”和“UNIX”之间的具体关联和区别,更有不少人对“Linux”抱有免费、开源的故有印象。这篇图文的目的则是一一打破这些关于“Linux”的知识盲区。
0x00 | 什么是“Linux”?
现代操作系统普遍拥有内核(kernel)。内核是操作系统最底层的核心部分,是软件和硬件之间的沟通桥梁,而“Linux”就是其中的一种。
Linux内核最初由Linus Torvalds和他的团队研发,采用GPLv2许可证开源。经过发展,Linux开源社区得到了大量开发者和商业公司的支持,Linux则成为了占有率最高的操作系统内核。
Linux内核大概结构
emmm… 我正经不下去了,接下来的部分开始带入娱乐氛围
0x01 | “Linux”与“GNU/Linux”
既然说Linux只是一个内核,那么我们现在说的Linux操作系统又是怎么回事呢?没错,Linux的初始版本确实就只是一个内核。但要知道Linus大佬当初研发Linux内核的初衷就是要写一个MINIX操作系统的开源代替品。于是,Linux在后续发展中加入了很多上层组件,转而成为了一个名副其实操作系统。
由于Linux操作系统的重要上层组件(glibc、gcc等)以隔壁GNU计划的子项目为主,而正好隔壁自己的Hurd内核发展进度有点拉胯,于是GNU就提出了把这个Linux内核+上层组件形成的操作系统称为“GNU/Linux”。由于Linux并不属于GNU计划,这个提议也一直没有得到Linux社区的完全认可,但确实沿用至今成为了“Linux系统”的主流称呼。(BTW. Linux分支Linux-libre在2012年正式加入GNU,所以“GNU/Linux-libre”的称呼是没有争论的)
0x02 | Linux和UNIX的关系
注意啦!画重点:“类UNIX操作系统”,包括Linux、macOS、各种“现代”BSD等,并不基于UNIX!这与“类原生Android”的概念完全不同,不能混为一谈。
UNIX是由贝尔实验室于1973年10月发布的一个闭源商业操作系统。1988年时,由IEEE(电机电子工程师学会)研发的POSIX标准(Portable Operating System Interface,可移植操作系统接口)诞生了。通过实现这个标准,包括Linux在内的各种“类UNIX操作系统”即可在无需使用UNIX源代码的前提下实现对UNIX软件的兼容。
说完基础概念了,那我们就来聊聊Linux发行版的那些事吧。
0x04 | 什么是Linux发行版?
虽说GNU/Linux本身已经是一个操作系统了,但它对于现代计算机操作系统需求来讲还是过于简约了。于是各种Linux发行版(或者说GNU/Linux发行版)出现了:他们帮你打包好了各种常用的包,允许普通用户(指的是相对于能自己定制Linux的大佬)能够开箱即用。
一个Linux发行版中常见的组件有各种常用的库和工具、数据库、包管理器和各自其他服务。如果是面向桌面的发行版,那还通常带有图形界面、桌面环境和各种图形界面办公工具。
一个有点儿老的主流Linux发行版时间图
0x05 | Linux发行版一定要开源免费吗?
绝大多数的Linux发行版都是开源和免费的,这也是很多人对Linux发行版的刻板印象。但你可能听说过RHEL这种开源但收费的商业发行版,甚至UOS这种不但收费还不开源的。这时你可能会好奇,这样做真的没有问题吗?
首先可以肯定的是收费是没有问题的。包括Linux内核使用的GPLv2在内的绝大多数开源和自由软件许可证并没有规定不可以收费。就以GPL为例,它要求传达(convey)程序的同时提供程序的源代码,但并未要求不收取费用。你可以像RHEL一样以服务与质量保证收取费用,甚至可以直接售卖副本——只不过受到副本的人也会获取到源代码,并且他有权将程序免费发布给大众。
如果你对GPL协议(许可证)有一定的了解,你应该知道GPL协议,包括Linux内核使用的GPLv2版本,拥有传承性(copyleft)。如果一个程序是GPL协议程序的衍生——也就是说基于这个GPL程序的代码,或动态/静态链接与这个GPL程序,那么它就会“传承”GPL协议,也必须采用GPL协议发布。(抱歉我解释得可能不太清楚qwq)这样来看,一个Linux发行版显然使用了Linux内核,它应该同样使用GPLv2协议开源。所以UOS这种闭源的发行版是否违反了GPL协议呢?
回答这个问题之前,我们要先来看看自由软件基金会的GPL FAQ( 查看链接 )中提到的两个概念:
1.对于运行在使用GPL协议的操作系统上的应用程序,只要它并非GPL程序的衍生,且未链接到采用GPL协议的库(LGPL不算),那么它可以被视为独立的程序,可以采用非GPL许可证,包括私有。(出自PortProgramToGPL段落)
2.对于采用GPL协议的程序与其他协议的独立程序(有具体定义,此处暂不赘述)打包成一的更大程序包被称为“合辑(aggregate)”。如果合辑中独立程序的许可证并不兼容GPL,那么GPL协议并不会影响到其他独立程序或合辑整体。(出自MereAggregation段落)
我们带入上述两个概念:一个Linux发行版由Linux内核、各种库和组件以及其他独立程序组成,是一个合辑。而发行版制作方所开发的独立程序可能是私有的——这种情况下,合辑中其他采用GPL许可证的程序并不会导致这些独立私有程序或整个合辑被GPL传承,故该合辑可以是私有的。
要注意的是,尽管上述概念已经说明了Linux发行版可以私有和闭源,但合辑中的GPL部分也不会被其他许可证所覆盖,即这些闭源的Linux发行版仍然有义务把它们的内核等GPL组件(不管是否经过修改)以GPL协议单独发布。
开源免费的Ubuntu上运行开源免费的LibreOffice
0x06 | 写在最后…
如果你对GPL这类的开源和自由软件许可证没有一定的了解,那你看刚刚对于Linux发行版闭源问题的分析可能会感到有些云里雾里。不过没关系,因为这就是我最近在研究的内容。我打算在之后继续编写一系列图文讲讲关于开源和自由软件的那些事,敬请期待吧!
#酷安夜话# 每次有不知道该发到哪的图文就都丢到这里了…