2024年3月27日发(作者:)
第1章 Linux操作系统概述
Linux操作系统是目前发展最快的操作系统,从1991年诞生到现在的二十多年间,
Linux逐步完善和发展。Linux操作系统在服务器、嵌入式等方面获得了长足的发展,并在
个人操作系统方面有着大范围的应用,这主要得益于其开放性。本章对Linux的发展进行
介绍,主要包括如下内容:
Linux发展的历史,以时间为主线对Linux的诞生进行介绍;
分析Linux和UNIX操作系统的异同;
介绍常用的几种Linux发行版本的特点;
对Linux操作系统的系统架构进行简单的介绍;
介绍GNU通用公共许可证及其特点。
通过本章的阅读,读者可以对Linux的发展历史和Linux操作系统的基本特点有一个
简单的认识。
1.1 Linux发展历史
Linux操作系统于1991年诞生,目前已经成为主流的操作系统之一。其版本从开始的
0.01版本到目前的2.6.28.4版本经历了二十多年的发展,从最初的蹒跚学步的“婴儿”成
长为目前在服务器、嵌入式系统和个人计算机等多个方面得到广泛应用的操作系统。
1.1.1 Linux的诞生和发展
Linux的诞生和发展与个人计算机的发展历程是紧密相关的,特别是随着Intel的i386
个人计算机的发展而逐步成熟。在1981年之前没有个人计算机,计算机是大型企业和政府
部门才能使用的昂贵设备。IBM公司在1981年推出了个人计算机IBM PC,从而造成个人
计算机的发展和普及。刚开始的时候,微软帮助IBM公司开发的MS-DOS操作系统在个
人计算机中占有统治地位。随着IT行业的发展,个人计算机的硬件价格虽然逐年在下降,
但是软件特别是操作系统的价格一直居高不下。
与个人计算机对应,在大型机上的主流操作系统是UNIX,而UNIX操作系统对操作
系统的发展有诸多障碍:
UNIX的经销商为了寻求高利率,将价格抬得很高,个人计算机的用户就根本不能
靠近它,不利于操作系统的普及。
UNIX操作系统的源代码具有版权,虽然贝尔实验室许可可以在大学的教学中使用
UNIX源代码,但是因为版权问题源代码一直不能公开。对于广大的PC用户,软
第1章 Linux操作系统概述
件行业的供应商一直没有一个很好的办法来解决UNIX操作系统普及性问题的
方法。
在操作系统的发展受到版权限制的时候,出现了Minix操作系统,这个操作系统由一
本书来详细的描述它的实现原理。由于书中对Minux操作系统的描述非常详细、并且很有
条理性,当时几乎全世界的计算机爱好者都在看这本书来理解操作系统的原理,其中包括
Linux系统的创始者Linus Torvalds。
注意:当时苹果公司的Mac系列操作系统不论从性能方面还是用户的易用性方面来说都
是最好的,但是其价格也是最高的(现在的情况基本也是如此)。
1.1.2 Linux名称的由来
Linux操作系统的名称最初并没有被称做Linux。Linus给他的操作系统取的名字是
Freax,这个单词的含义是怪诞的、怪物、异想天开的意思。当Torvalds将他的操作系统上
传到服务器上的时候,这个服务器的管理员Ari Lemke对Freax这个名称很不赞
成,所以将操作系统的名称改为了Linus的谐音Linux,于是这个操作系统的名称就以Linux
流传下来。
在Linus的自传《Just for Fun》一书中,Linus解释说:“Ari Lemke,他十分不喜欢
Freax这个名字。倒喜欢我当时正在使用的另一个名字Linux,并把我的邮件路径命名为pub
OS/Linux。我承认我并没有太坚持。但这一切都是他搞的。所以我既可以不惭愧地说自己
不是那么以个人为中心,但是也有一点个人的荣誉感。而且个人认为,Linux是个不错的
名字。”实际上,在早期的源文件中仍然使用Freax作为操作系统的名字,可以从Makefile
文件中看出此名称的一些蛛丝马迹。
关于Linux的发音有各种说法,例如['linΛks],但是按照Torvalds的说法,Linux中Li
中i的发音类似于Minix中i的发音,而nux中u的发音类似于英文单词pronounce中第一
个o的发音。根据Torvalds对此的解释,依照国际音标其发音为['linэks],与“喱呐科斯”
类似。在网络上有一份Torvalds本人说话的音频,音频中的内容为“Hello, this is Linus
Torvalds, and I pronounce Linux as Linux”,其下载网络地址为/
pronunciation/。
对于Linux发音的解释,还有一份Torvalds本人的解说片段,这一片段发音的视频可
以从如下的URL下载:/Linux-pronunciation。
1.2 Linux的发展要素
Linux操作系统是UNIX的一种典型的克隆系统。在Linux诞生之后,借助于Internet
网络,在全世界计算机爱好者的共同努力下,成为目前世界上使用者最多的一种类似UNIX
的操作系统。在Linux操作系统的诞生、成长和发展过程中,以下5个方面起到了重要的
作用:UNIX操作系统、Minix操作系统、GNU计划、POSIX标准和Internet网络。
·3·
第1篇 Linux网络开发基础
1.2.1 UNIX操作系统
UNIX操作系统于1969年在Bell实验室诞生,它是美国贝尔实验室的on
和Dennis Ritchie在DEC PDP-7小型计算机系统上开发的一种分时操作系统。
Ken Thompson开发UNIX操作系统的初衷是为了能在一台闲置的PDP-7计算机上运
行星际旅行游戏,他在1969年夏天花费一个月的时间开发出了UNIX操作系统的原型。最
开始,开发UNIX操作系统使用的是BCPL语言(即通常所说的B语言),后来Dennis Ritchie
于1972年使用C语言对UNIX操作系统进行了改写。同时UNIX操作系统在大学中得到
广泛的推广,并将UNIX的授权分发给多个商业公司。
自从UNIX操作系统从实验室走出来之后,得到了长足的发展。目前已经成为大型系
统的主流操作系统,现在几乎每个主要的计算机厂商都有其自有版本的UNIX。UNIX是一
个功能强大、性能全面的、多用户、多任务的分时操作系统,在从巨型计算机到普通PC
等多种不同的平台上,都有着十分广泛的应用。
通常情况下,比较大型的系统应用,例如银行、电信部门,一般都采用固定机型的UNIX
解决方案:在电信系统中以SUN的UNIX系统方案居多,在民航里以HP的系统方案居多,
在银行里以IBM的系统方案居多。
Linux是一种UNIX的克隆系统,采用了几乎一致的系统API接口。特别是网络方面,
二者接口的应用程序几乎完全一致。
1.2.2 Minix操作系统
Minix操作系统也是UNIX操作系统的一种克隆系统,它由荷兰Amsterdam的Vrije
大学著名教授Andrew aum于1987年开发完成。Minux操作系统目的主要用于学
生学习操作系统原理时教学使用。在当时Minix操作系统在大学中是免费使用的,但是其
他用途则需要收费。目前Minix操作系统已经全部是免费的,可以从许多FTP上下载,目
前主要有1.5版本和2.0版本在使用。
由于Minix操作系统提供源代码,并且与操作系统相结合,有一本高质量的书籍介绍
其实现原理,在当时全世界的大学中形成了学习Minix操作系统的风气,Linus刚开始就是
参照此系统在1991年开始开发Linux的。
实际上,Minix操作系统并不是很优秀,但是这个操作系统提供了C语言和汇编语言
的源代码。而当时的UNIX操作系统源代码除了极少的范围外一直是保密的,Minix操作
系统对程序员来说是一个福音。为了可以让学生在一个学期内能够学完操作系统的课程,
AST保持了Minix操作系统的小型化,没有接受世界各界对Minix扩展的要求,而正是这
个原因激发了Linus编写Linux操作系统。
1.2.3 POSIX 标准
POSIX(Portable Operating System Interface for Computing Systems)是由IEEE和
ISO/IEC开发的一套标准。POSIX标准是对UNIX操作系统的经验和实践的总结,对操作
·4·
第1章 Linux操作系统概述
系统调用的服务接口进行了标准化,保证所编制的应用程序在源代码一级可以在多种操作
系统上进行移植。
在90年代初,POSIX标准的制定处于最后确定的投票阶段,而Linux正处于开始的
诞生时期。作为一个指导性的纲领性标准,Linux的接口与POSIX相兼容。
1.3 Linux与UNIX的异同
Linux是UNIX操作系统的一个克隆系统,没有UNIX就没有Linux。但是,Linux和
传统的UNIX有很大的不同,两者之间的最大区别是关于版权方面的:Linux是开放源代
码的自由软件,而UNIX是对源代码实行知识产权保护的传统商业软件。两者之间还存在
如下的区别:
UNIX操作系统大多数是与硬件配套的,操作系统与硬件进行了绑定;而Linux则
可运行在多种硬件平台上。
UNIX操作系统是一种商业软件(授权费大约为5万美元);而Linux操作提供则
是一种自由软件,是免费的,并且公开源代码。
UNIX的历史要比Linux悠久,但是Linux操作系统由于吸取了其他操作系统的经
验,其设计思想虽然源于UNIX但是要优于UNIX。
虽然UNIX和Linux都是操作系统的名称,但UNIX除了是一种操作系统的名称
外,作为商标,它归SCO所有。
Linux的商业化版本有Red Hat Linux、SuSe Linux、slakeware Linux、国内的红旗
Linux等,还有Turbo Linux;UNIX主要有Sun的Solaris、IBM的AIX,HP的
HP-UX,以及基于x86平台的SCO UNIX/UNIXware。
Linux操作系统的内核是免费的;而UNIX的内核并不公开。
在对硬件的要求上,Linux操作系统要比UNIX要求低,并且没有UNIX对硬件要
求的那么苛刻;在对系统的安装难易度上,Linux比UNIX容易得多;在使用上,
Linux相对没有UNIX那么复杂。
总体来说,Linux操作系统无论在外观上还是在性能上都与UNIX相同或者比UNIX
更好,但是Linux操作系统不同于UNIX的源代码。在功能上,Linux仿制了UNIX的一
部分,与UNIX的System V和BSD UNIX相兼容。在UNIX上可以运行的源代码,一般
情况下在Linux上重新进行编译后就可以运行,甚至BSD UNIX的执行文件可以在Linux
操作系统上直接运行。
1.4 操作系统类型选择和内核版本的选择
要在Linux环境下进行程序设计,首先要选择合适的Linux发行版本和Linux的内核,
选择一款适合自己的Linux操作系统。本节对常用的发行版本和Linux内核的选择进行了
介绍,并简要讲解了如何定制自己的Linux操作系统。
·5·
第1篇 Linux网络开发基础
1.4.1 常见的不同公司发行的Linux异同
Linux的发行版本众多,曾有人收集过超过300种的发行版本。当然,不能在本书中
介绍众多的发行版特点,这超出了本书的范围。本小节对最常用的发行版本进行简单的介
绍,表1.1为经常采用的版本。读者可以去相关网址查找,选择适合的版本使用。本书所
使用的Linux为Debian。
表1.1 常用Linux发行版本特点
版本名称
Debian
Linux
Fedora
Core
网 址
特 点
开放的开发模式,并且易于进行软件包升级
软件包管理器
apt
拥有数量庞大的用户,优秀的社区技术支持,up2date(rpm), yum
并且有许多创新
CentOS是一种对RHEL(Red Hat Enterprise
Linux)源代码再编译的产物,由于Linux是
开发源代码的操作系统,并不排斥基于源代
码的再分发,CentOS就是将商业的Linux操
作系统RHEL进行源代码在编译后分发,并
在RHEL的基础上修正了不少已知的bug
(rpm)
CentOS rpm
SUSE
Linux
专业的操作系统,易用的YaST软件包管理
系统开放
YaST(rpm),第三
方apt(rpm)软件库
(repository)
rpm Mandriva
操作界面友好,使用图形配置工具,有庞大
的社区进行技术支持,支持NTFS分区的大
小变更
可以直接在CD上运行,具有优秀的硬件检
测和适配能力,可作为系统的急救盘使用
高度的可定制性,使用手册完整
优秀易用的桌面环境,基于Debian的不稳定
版本构建
KNOPPIX
Gentoo
Linux
Ubuntu
apt
portage
apt
1.4.2 内核版本的选择
内核是Linux操作系统的最重要的部分,从最初的0.95版本到目前的2.6.28.4版本,
Linux内核开发经过了近20年的时间,其架构已经十分稳定。Linux内核的编号采用如下
编号形式:
主版本号.次版本号.主补丁号.次补丁号
例如2.6.26.3各数字的含义如下:
第1个数字(2)是主版本号,表示第2大版本;
·6·
第1章 Linux操作系统概述
第2个数字(6)是次版本号,有两个含义:既表示是Linux内核大版本的第6个
小版本,同时因为6是偶数表示为发布版本(奇数表示测试版);
第3个数字(26)是主版本补丁号,表示指定小版本的第26个补丁包;
第4个数字(3)是次版本补丁号,表示次补丁号的第3个小补丁。
在安装Linux操作系统的时候,最好不要采用发行版本号中的小版本号是奇数的内核,
因为开发中的版本没有经过比较完善的测试,有一些bug是未知的,有可能造成使用中不
必要的麻烦。
注意:Debian Linux内核的版本稍有不同,如2.6.18-3,可以发现多了一组数字(3),
该数字是构建号。每个构建号可以增加少量新的驱动程序或缺陷修复。
Linux内核版本的开发源代码树目前比较通用的是的版本,当然,有部分2.4
的版本仍在使用。与2.4版本的内核相比较,2.6版本内核具有如下的优势:
支持绝大多数的嵌入式系统,加入了之前嵌入式系统经常使用的μClinux的大部
分代码,并且子系统的支持更加细化可以支持硬件体系结构的多样性,可抢占内
核的调度方式支持实时系统,可定制内核。
支持目前最新的CPU,例如Intel的超线程、可扩展的地址空间访问。
驱动程序框架变更,例如用.ko替代了原来的.o方式,消除内核竞争,更加透明的
子模块方式。
增加了更多的内核级的硬件支持。
本书中的环境对Linux的内核没有特殊要求,因此读者在选择内核版本的时候不需要
重新编译内核,使用操作系统自带的内核就可以满足需要。本书作者的操作系统内核为
Linux-2.6.18.3-686。
1.5 Linux的系统架构
Linux系统从应用角度来看,分为内核空间和用户空间两个部分。内核空间是Linux
操作系统的主要部分,但是仅有内核的操作系统是不能完成用户任务的。丰富并且功能强
大的应用程序包是一个操作系统成功的必要条件。
1.5.1 Linux内核的主要模块
Linux的内核主要由5个子系统组成:进程调度、内存管理、虚拟文件系统、网络接
口、进程间通信。下面依次讲解这5个子系统。
1.进程调度SCHED
进程调度指的是系统对进程的多种状态之间转换的策略。Linux下的进程调度有3种
策略:SCHED_OTHER、SCHED_FIFO和SCHED_RR。
SCHED_OTHER是用于针对普通进程的时间片轮转调度策略。这种策略中,系统
·7·
第1篇 Linux网络开发基础
给所有的运行状态的进程分配时间片。在当前进程的时间片用完之后,系统从进
程中优先级最高的进程中选择进程运行。
SCHED_FIFO是针对运行的实时性要求比较高、运行时间短的进程调度策略。这
种策略中,系统按照进入队列的先后进行进程的调度,在没有更高优先级进程到
来或者当前进程没有因为等待资源而阻塞的情况下,会一直运行。
SCHED_RR是针对实时性要求比较高、运行时间比较长的进程调度策略。这种策
略与SCHED_OTHER的策略类似,只不过SCHED_RR进程的优先级要高得多。
系统分配给SCHED_RR进程时间片,然后轮循运行这些进程,将时间片用完的进
程放入队列的末尾。
由于存在多种调度方式,Linux进程调度采用的是“有条件可剥夺”的调度方式。普
通进程中采用的是SCHED_OTHER的时间片轮循方式,实时进程可以剥夺普通进程。如
果普通进程在用户空间运行,则普通进程立即停止运行,将资源让给实时进程;如果普通
进程运行在内核空间,需要等系统调用返回用户空间后方可剥夺资源。
2.内存管理MMU
内存管理是多个进程间的内存共享策略。在Linux系统中,内存管理的主要概念是虚
拟内存。
虚拟内存可以让进程拥有比实际物理内存更大的内存,可以是实际内存的很多倍。每
个进程的虚拟内存有不同的地址空间,多个进程的虚拟内存不会冲突。
虚拟内存的分配策略是每个进程都可以公平地使用虚拟内存。虚拟内存的大小通常设
置为物理内存的两倍。
3.虚拟文件系统VFS
在Linux下支持多种文件系统,如ext、ext2、minix、umsdos、msdos、vfat、ntfs、proc、
smb、ncp、iso9660、sysv、hpfs、affs等。目前Linux下最常用的文件格式是ext2和ext3。
ext2文件系统用于固定文件系统和可活动文件系统,是ext文件系统的扩展。ext3文件系
统是在ext2上增加日志功能后的扩展,它兼容ext2。两种文件系统之间可以互相转换,ext2
不用格式化就可以转换为ext3文件系统,而ext3文件系统转换为ext2文件系统也不会丢
失数据。
4.网络接口
Linux是在Internet飞速发展的时期成长起来的,所以Linux支持多种网络接口和协议。
网络接口分为网络协议和驱动程序,网络协议是一种网络传输的通信标准,而网络驱动则
是对硬件设备的驱动程序。Linux支持的网络设备多种多样,几乎目前所有网络设备都有
驱动程序。
5.进程间通信
Linux操作系统支持多进程,进程之间需要进行数据的交流才能完成控制、协同工作
等功能,Linux的进程间通信是从UNIX系统继承过来的。Linux下的进程间通信方式主要
有管道方式、信号方式、消息队列方式、共享内存和套接字等方法。
·8·
第1章 Linux操作系统概述
1.5.2 Linux的文件结构
与Windows下的文件组织结构不同,Linux不使用磁盘分区符号来访问文件系统,而
是将整个文件系统表示成树状的结构,Linux系统每增加一个文件系统都会将其加入到这
个树中。
操作系统文件结构的开始,只有一个单独的顶级目录结构,叫做根目录。所有一切都
从“根”开始,用“/”代表,并且延伸到子目录。DOS/Windows下文件系统按照磁盘分
区的概念分类,目录都存于分区上。Linux则通过“挂接”的方式把所有分区都放置在“根”
下各个目录里。一个Linux系统的文件结构如图1.1所示。
不同的Linux发行版本的目录结构和具体的实现功
能存在一些细微的差别。但是主要的功能都是一致的。
一些常用目录的作用如下:
/etc:包括绝大多数Linux系统引导所需要的配
置文件,系统引导时读取配置文件,按照配置文
件的选项进行不同情况的启动,例如fstab、
等。
/lib:包含C编译程序需要的函数库,是一组二
进制文件,例如glibc等。
/usr:包括所有其他内容,如src、local。Linux
的内核就在/usr/src中。其下有子目录/bin,存放
所有安装语言的命令,如gcc、perl等。
/var:包含系统定义表,以便在系统运行改变时
可以只备份该目录,如cache。
/tmp:用于临时性的存储。
/bin:大多数命令存放在这里。
/home:主要存放用户账号,并且可以支持ftp的
用户管理。系统管理员增加用户时,系统在home
目录下创建与用户同名的目录,此目录下一般默
认有Desktop目录。
/dev:这个目录下存放一种设备文件的特殊文件,
图1.1 Linux文件系统结构示意图
如fd0、had等。
/mnt:在Linux系统中,它是专门给外挂的文件系统使用的,里面有两个文件cdrom、
floopy,登录光驱、软驱时要用到。
刚开始使用Linux的人比较容易混淆的是Linux下使用斜杠“/”,而在DOS/Windows
下使用的是反斜杠“”。例如在Linux中,由于从UNIX集成的关系,路径用“/usr/src/Linux”
表示,而在Windows下则用“usrsrcLinux”表示。在Linux下更加普遍的问题是大小写
敏感,这样字母的大小写十分重要,例如文件Hello.c和文件hello.c在Linux下不是一个
文件,而在Windows下则表示同一个文件。
·9·
第1篇 Linux网络开发基础
1.6 GNU通用公共许可证
GNU通用公共许可证(简称为GPL)是由自由软件基金会发行的用于计算机软件的
一种许可证制度。GPL最初是由Richard Stallman为GNU计划而撰写。目前,GNU通行
证被绝大多数的GNU程序和超过半数的自由软件采用。此许可证最新版本为“版本3”,
于2007年发布。GNU宽通用公共许可证(简称LGPL)是由GPL衍生出的许可证,被用
于一些GNU程序库。
1.6.1 GPL许可证的历史
GNU通用公共许可证是由Richard Stallman为了GNU计划而撰写的,它以GNU的
Emacs、GDB、GCC的早期许可证为蓝本。上述的这些许可证都包含了一些GPL中的版权
思想,但是仅仅针对特定的某个程序。Richard Stallman的目标是创造出一种通用的软件许
可证制度,来为所有的开源软件代码计划使用。
GPL的“版本1”,在1989年1月诞生。在1990年时,因为一些共享库的使用而出
现了对GPL许可证制度更为宽松的需求,在GPL“版本2”于1991年6月发布时,另一
许可证——库通用许可证(Library General Public License,简称LGPL)也随之发布,并记
做“版本2”以示对GPL的补充。在LGPL版本2.1发布时与GPL版本不再对应,而LGPL
也被重命名为GNU宽通用公共许可证(Lesser General Public License)。
GPLv3在2007年6月份开始使用,由于对专利权和数字版权限制的问题造成了自由
软件阵营的一次很大的争论。Stallman于2006年2月25日在自由开源软件开发者欧洲会
议上发表的演讲中,对GPLv3的特点作了解释,相对于GPLv2,主要有4个不同的方面:
数字版权问题。在GPLv3中禁止使用GPLv3本身作为数字版权的一部分,同时消
费类电子设备上使用GPLv3代码必须开放源代码,而且允许用户自己重新构建。
专利扩散许可。在GPLv3中如果具有专利的代码加入之后,此专利会自动向整个
应用程序授权此专利。
衍生产品的定义。在GPLv3中定义了衍生产品,即如果某个模块采用了GPLv3
协议,某个产品使用此模块动态链接后,如果此模块可以被其他模块代替,则这
个产品不是GPLv3协议,否则需要采用GPLv3协议。
GPLv3协议与其他协议的兼容问题。
1.6.2 GPL的自由理念
软件的版权保护机制在保护发明人权益的同时,对软件的技术进步造成了影响。版权
所有软件的最终用户几乎不能从所购买的软件中得到任何软件设计相关的权利(除了使用
的权利),甚至可能限制像逆向工程等法律允许范围内的行为。与此对应,GPL授予程序
的接受方下述的权利,即GPL所倡导的“自由”:
可以以任何目的运行所购买的程序;
·10
·
第1章 Linux操作系统概述
在得到程序代码的前提下,可以以学习为目的,对源程序进行修改;
可以对复制件进行再发行;
对所购买的程序进行改进,并进行公开发布。
自由软件许可证除了GPL许可证之外,还有一些其他的许可证,如BSD、APACHE
等许可证。一些许可证比GPL的许可证的限制要少得多,例如BSD许可证并不禁止其演
绎作品变成版权所有软件。它们之间的最主要区别是GPL提供一种软件复制和演绎产品的
许可证继承保证。Stallman发明了一种叫做Copyleft的法律机制,要求所有GPL程序的演
绎作品也要在GPL许可证之下,。
目前,GPL许可证是自由软件和开源软件的最流行许可证。到2004年4月为止,GPL
许可证已占freshmeat(最大的UNIX平台和跨平台软件网络发布平台)上所列的自由软件
的75%,SourceForge上所列软件的68%。GNU软件中最著名的GPL自由软件包括Linux
内核和GCC编译器包。
1.6.3 GPL的基本条款
GPL许可证作为Linux平台软件的主要许可证,有很多独特的地方。GPL授权的软件
并不是说使用者在得到此软件后可以无限制地使用,而是同样要遵循一定的规则,其中主
要的一点就是开放源代码。使用GPL授权发布的商业软件,也并不是不要钱,其盈利模式
是采用收取服务费用的方式来获取利益。GPL中的主要条款包括权利授予、copyleft。
1.授予的权利
采用GPL条款的软件分发给使用人,不管是收费还是免费,其作品符合GPL授权,
获得GPL作品的人成为许可证接受人。许可证接受人有修改、复制、再发行此作品或者此
作品的演绎版本的权利,许可证接受人可以由上述的行为收取费用而获利。与一般禁止商
业用途的软件不同,GPL授权的软件不禁止商业用途,例如Stallman最初的Ecmacs就是
收取费用的,每份150美元。
GPL的授权通常被人理解为免费,其实这是两种完全不同的概念:GPL在出售产品的
同时需要提供源代码,同时允许获得软件的产品进行再次发布。一般的GPL分发软件的盈
利模式是采用服务的方式,即如果想更好地使用此软件,需要向分发者提供报酬,分发者
对使用者的软件进行优化或者进行人员培训等工作。例如IBM提供的软件中就有GPL协
议的,但是IBM是典型的服务获利的公司。
GPL授权的另一层含义是要求分发者提供源代码,防止软件开发商对软件进行锁定,
限制用户的某些行为。如果用户获得源代码,在分析源代码的基础上,可以修改某些设置,
对源软件进行功能开放。
2.copyleft
GPL许可证不是授予许可证接受人无限制的权利,接受人在因为GPL而获益的时候
(获得软件产品的源代码)必须遵守一定的要求,GPL协议要求许可证的接受人在进行软
件再次发布的时候必须要公开源代码,同时允许对再发行软件进行的复制、发行、修改等
的权利,即再发行的软件必须为GPL许可证。
·11·
第1篇 Linux网络开发基础
上述的这种要求称为copyleft,GPL由此而被称为“被黑的版权法”:因为GPL的法
理基础是承认软件是拥有版权的,即作品在法律上归版权所有。由于软件的版权由发行者
所有,所以发行者可以对软件的发行规定进行设置,GPL就是发行者对版权进行上述规定,
放弃一定的版权。如果某个再发行版本不遵循GPL许可证,因为原作者对作品拥有版权,
这样就有可能被原作者起诉。
GPL的copyleft仅仅在程序的再发行时发生作用,如果受权人对软件进行修改后没有
进行发行,是可以不开放源代码的。Copyleft只对发行的软件本身起作用,对于软件的输
出或者工作成果不起作用。
GPL软件的发行方法都是把源代码和可执行程序一同发行,一般提供例如CD等。目
前通行的发行GPL软件的方法是将软件放置到互联网上,由用户来下载,例如HTTP、FTP
等方式。
1.6.4 关于GPL许可证的争议
使用GPL的许可证造成了目前的很多争议,主要是对软件版权方面的界定、GPL的
软件传染性、商业开发方面的困扰等。比较有代表性的是对GPL软件产品的链接库使用的
产品版权界定,即非GPL软件是否可以链接到GPL的库程序。
对于GPL开放源代码进行修改的产品演绎GPL的授权规定的很明确,但是对于使用
GPL链接库的产品是否是GPL演绎产品就存在很多定义。FSF认为这种作品就是演绎作品,
但是其他专家并不认同这种观点,分成了自由和开放源代码社区两派。这个问题其实不是
技术问题,这是一个法律界定的问题,需要法律的案例来例证。
由于GPL许可证需要授权人对再发行产品按照GPL许可证发行,所以在使用许可证
软件的时候需要注意。有很多协议是GPL兼容的,即这种协议和GPL协议的软件共同使
用,并且将开发完毕的软件产品作为GPL来发行是没有问题的,例如MIT/X许可证、BSD
许可证、LGPL,它们和GPL许可证兼容;有一些许可证是GPL不兼容的,例如某些自由
软件的许可证。开发者在开发的时候,要使用GPL兼容的许可证,以免引起法律问题。
GPL再发行软件必须采取GPL许可证的问题,被微软的首席执行官Steve Ballmer称
为“癌症”,认为GPL是有“传染性”的“病毒”,由于包含GPL代码或动态链接到GPL
库被理解为“演绎作品”,必须按照GPL许可证的强制继承来使用GPL分发。微软已经
以GPL为许可证发行了SFU(Microsoft Windows Services for UNIX)中所包含的部分组件,
例如GCC编译器。
1.7 Linux软件开发的可借鉴之处
在Linix的发展过程中,形成了一种独特的成功模式,包含软件的开发模式。Linux操
作系统的成功从一个系统工程的角度看有很多值得项目管理人员学习的东西,例如《大教
堂与集市》一书中对Linux的开发模式进行了比较详细的分析,它主要包含如下几个方面:
使用集市模式进行软件开发应该有一个基本成型的软件原型,这样后来的参与者
能够对此进行改进,更重要的是能够看到成功的曙光、可以看到不远的将来能够
·12
·
第1章 Linux操作系统概述
成功,获得参与的动力。
集市模式的开发把软件的使用者作为开发的协作者而不仅仅是一个简单的用户,
这样开发者和使用者能够共同对作品进行快速的代码改进和高效率的调试。
集市模式开发使用早发布、常发布的方法,来方便听取客户的建议,对软件进行
改进。项目的开发者想出好主意是件好事,而从使用者那里提出的建议是比前者
更好的事情。因为从使用者那里提出的建议是有的放矢,更加切合实际的。
集市的开发模式验证了如下一个成功的假设:如果参与软件Beta版测试的人员足
够多,几乎软件中所有存在的问题都能够被迅速地找出并进行纠正。
对于集市开发模式的项目来说,比技能和设计能力更为重要的是项目协调人员必
须具有良好的人际和交流能力。因为为了建造一个成功的开发小组,需要项目的
领导人员所作所为必须让参与者感兴趣并能够有参与的动力,使得参与者感到他
们正在做的工作十分有趣(这是因为一般的项目是没有报酬的,大家按照兴趣参
加),这不仅仅是项目的本身,与领导者的个人素质有很大的关系。
从Linux社区中还可以获得更多睿智的经验或者知识,例如Linus所持的一种观点:
使用聪明的数据结构和笨拙的代码的搭配方式要比相反的搭配方式更好,可以作为软件开
发的一种基本的常识。
1.8 小 结
本章对Linux的形成历史进行了简单的介绍,并对其发展历程中起重要作用的5个要
素进行了解释。与UNIX系统相比较,Linux操作系统有很多不同之处,特别是在版权
方面。
Linux的发行版本数以百计,其中的Debian、Fedora Core及openSUSE是比较有代表
性的集中。本书中的例子均以Debian为例进行介绍。本章还介绍了Linux的系统架构和
Linux内核模块之间的关系,对GNU的通用公共许可证进行了介绍,特别是GNU的copyleft
概念。最后介绍了Linux开发模式的成功之处,对集市开发模式进行了简单的介绍。
·13·


发布评论