摘要

http://linuxtoy.org/archives/archlinux-guide.html

 

(今年寒假看的,做个摘要)

 

1、GUN

   GUN's Not Unix

2、reverse:反转

   recursive:递归

   verbose : 冗长

3、Linux 并不是一个完整的系统,他只是内核。一个完整的系统。是包含内核在内的一系列软件工具包。

   UNIX是从晶体管发明以来最伟大的发明,他从诞生之日起就比Windows的设计出色。

   自图灵奖诞生以来,其获得者一直都是计算机领域的科学家与学者,而在所有这些届的图灵奖中只有唯一的一届有个例外,那就是Ken Thompson与Dennis M. Ritchie,他们都是计算机软件工程师。由于Unix与C语言的深远影响,1983年美国计算机协会将当年的图灵奖破例颁给了作为软件工程师的Ken与Dennis,并在当年还决定新设立一个奖项――软件系统奖,以奖励那些优秀的软件开发者,当然首个软件系统奖也是非他们两人莫属了。

   你要体会什么叫做“设计”,一个糟糕的设计并不是到后来缝缝补补就可以变好的,而一个出色的设计,不但可以以不变应万变,而且可以影响到后来者。一个出色的设计配上一个出色的实现,那就是非常出色的发明。Linux 就是这样的一个出色的发明。 Linux 并不需要追赶 Windows,也不需要打垮微软。它的最终目标是改变整个计算机世界,还人们自由,给人们乐趣和方便。

   微软的名声在欧洲和美国的大学里,特别是在计算机系里之坏,大家可能有所耳闻。我认识的 MIT,Stanford 的教授,贝尔实验室的专家,甚至一个欧洲小国的高中计算机老师都绝口不提微软的名字。在他们眼里,微软只是一个没有真技术,专靠在落后国家商业宣传和垄断经营的小公司。这个“小”并不是说它少,钱少,而是说它先进技术少。

 

   微软仗势已经占有大部分PC市场,制定不符合国际标准的“微软的标准”,以不合理的方式压制其它公司的软件,这个问题已经在美国司法部闹了很久了。他甚至在 Windows 系列操作系统中放置能够通过网络泄漏用户信息的代码,以至于 Windows 刚进入澳大利亚时被澳大利亚政府禁止使用。

   “Windows 能干而 Linux 干不了的事情,那就是不需要干的事情。”

 

   高明的 UNIX 程序员不用 IDE,IDE 从来就是给初级 Windows 程序员用的。

   你看看大型的 UNIX 程序,包括 Linux 内核,各种网络服务程序,Xwindow 程序在内,哪一个是 IDE 搞出来的?我们实验室的 EDA 程序也没有一个是 IDE 弄的,我还知道 Candence, Synopsys,Mentor 的高性能的图形界面 EDA 程序也都不是 IDE 写的。你信不信,微软的人在写 Windows 本身的时候也根本不用 IDE。微软内部程序员最喜欢的编辑器其实是 VIM,用 VIM 的微软程序员上次向乌干达的可怜儿童捐助了1000多美元,这是值得称赞的。

 

   为什么 UNIX 程序员不用 IDE?明白了这个道理你就能体会到 UNIX 的设计思想了。首先,一个 IDE 集成了编辑器,编译器,汇编器,调试器,跟踪器…… 这个编辑器功能肯定比不上 VIM 或 Emacs,编译器比不上 GCC,汇编器比不上 as,调试器比不上 gdb, ddd, 跟踪器比不上 strace, ltrace, truss。你得到的是一套整合的低能的程序。如果你对调试器的功能不满意,你只好换用另外一套 IDE,但是这套 IDE 的热键,菜单,编辑器功能,按钮…… 跟原来那个有很大不同。你不得不花很多时间来熟悉新的环境,而不能保持原来的某些东西。

 

   让聪明人干任何他们想干的事情。

   UNIX 程序设计的思想是提供给用户“机制”,而不限制用户制定“政策”。这是一个重要的尊重用户的作法。

   你想想,是不是有些 Windows 程序常常弹出一个窗口要你选择 "Yes or No"?你不点击它它就不下去。你觉不觉得你的程序在侵犯你的尊严?你是一个人,一个智慧的生物,怎能受到一个程序如此的待遇?

   看看优秀的 UNIX 程序,XFree86, FVWM, VIM, Emacs, proftpd, Mutt, wget, tin, ... 没有一个不是用配置文件来设置选项的。为什么这些程序没有方便的菜单可以用来配置?难道它们的设计者就那么低能,连个图形配置界面也写不出来?

   当然不是。因为图形界面配置方式的能力是极其有限的,而配置文件和程序语言的表达能力却是无限的。用图形界面配置这些程序的话,如果你想达到配置文件的效果,你需要成百上千的菜单,checkbox, radio button, ... 到时候你根本没办法找到你需要修改的地方了!而各个程序的配置文件的语法都有很多相似之处,一般就是一些命令,设置一些变量,参数,…… 一旦用会了一个,其它的也就容易理解了。如果你用惯了 awk, sed, Perl,你会觉得那才是真正的自动化啊。

 

   这就是UNIX最重要的特点了,它就是UNIX设计的思想。让每个程序只具有一项专门的能力,然后让它们合作。Xwindow也继承了这种好传统。UNIX 程序设计之统一,配合之完美,真使我难以置信!shell, grep, find, awk, sed, make, Perl, Emacs, vi, tin, Mutt, ... 它们是那么的具有一致性!你一旦学会了 sed 的正则表达式,其它程序基本上都能用了。你一旦学会了 vi 和 VIM, 你会发现它的操作是那么的有规律性,似乎vi的设计者在几十年前就已经设计好了 VIM 在今天的完美而统一的操作方式!而且vi的操作还体现在 Mutt, tin 等很多程序中。你甚至可以把 bash 设置为 vi 的输入方式来输入命令行,我就是这么做的。一个程序可以调用另外一个程序来得到数据,可以把数据交给它处理后返回来,可以在自己的窗口里“嵌入”另外一个程序。

 

4、/

根目录,唯一必须挂载的目录。不要有任何的犹豫,选一个分区,挂载它!(在绝大多数情况下,有2G的容量应该是够用了。当然了,很多东西都是多多益善的)

swap

交换分区,可能不是必须的,不过按照传统,并且照顾到您的安全感,还是挂载它吧。它的容量只要大于您的物理内存就可以了,如果超过了您物理内存两倍的容量,那绝对是一种浪费。

/home

前面已经介绍过了,这是您的家目录,通常您自己创建的文件,都保存在这里,您最好给它分配一个分区

/usr

应用程序目录。大部分的软件都安装在这里。如果您计划安装许多软件,建议您也给它分配一个分区

/var

如果您要作一些服务器方面的应用,可以考虑给它分配一个较大的分区

/boot

如果您的硬盘不支持LBA模式(我想那不太可能:),您最好挂载它,如果挂载硬盘的第一个分区,应该比较稳妥。一般来说,挂载的分区只要100M大小就足够了

 

5、UNIX心传

 “Unix传统上认为,一行shell脚本胜过万行C程序。”

 现在得到的90%,比等不来的100%更有价值。

 简单的实现往往对边缘情况有欠考虑,比如资源耗竭、无法关闭竞争窗口以及在未完成事务中超时等等。

 发生边缘情况时,软件行为往往不规律、难以猜测。这当然不是Unix传统。

 另一方面,大家都知道精巧的程序很脆弱。更进一步说,每个对边缘情况的修正往往牵扯到程序的核心算法,还牵扯处理其它边缘情况的代码。

 于是,对边缘情况防患于未然、确保描述的简单性,反而会使得代码过分复杂、bug成堆、根本无法发售。这当然不是Unix传统。

 当鹰飞翔时,它忘记爪子与地面相触?当虎捕食时,它忘记腾空的一刻?VAX只重三斤!????? 

 “这些尊者之智,”无名师说,“就是了解自身之愚。”

 

 SCO确实把握着Unix源码,但是Unix的源码不是Unix。OpenGroup确实把握着Unix的名称,但Unix的名称不是Unix。”

“那么,什么是Unix传统?”学生问。

无名师答道:

“非源码。非名称。非思想。非实物。恒变。不变。”

“Unix传统是简单和空。正是简单,正是空,才使得它更强胜飓风。”

“以自然法则前行,在程序员手中,吸纳各种优良设计。与之竞争的软件最终必与之想像;空,空,真空,虚无,万岁!”

 

 “我用的软件并不能令我满意”,最终用户答,“既不稳定,也不美观。听说Unix之道尽管艰难,但超越一切,我愿抛去一切诱饵和虚像。”

 

6、绝对路径的起始点为根目录 / ,例如 /usr/local/bin 就是绝对路径,它指向系统中一个绝对的位置,不受其它因素影响。

相对路径的起始点为当前目录,如果您现在位于 /usr 目录,那么相对路径 local/bin 所指示的位置为 /usr/local/bin

 

cd -                #回到上一次的目录,我们在“/etc”目录跳转到“/home”目录,所以这次是回到“/etc”目录

cd ~                #“~”代表当前用户的“$HOME”目录,也就是“/home/{用户名}”目录。

 

远程路径:

远程路径的表示方法为 协议://用户名:密码@位置/路径:端口

 

大多数的远程路径可以使用默认端口匿名访问,由此用户名、密码、端口通常不需要填写。例如:

http://linuxtoy.org  

要求身份验证的远程路径,您可以使用下面的方式访问:

ftp://user:passwd@ftp.linuxtoy.org:21  

 

7、Linux 中没有 注册表 这个概念。安装软件,理论上讲,只要拷贝所有相关文件,并运行它的主程序就可以了。

按照传统,一个软件通常分别拷贝到同级目录下的 bin、etc、lib、share等文件夹。

bin

可执行文件,程序的可执行文件通常在这个目录下。在环境变量中设定搜索路径,就可以直接执行,而不需要定位其路径。

etc

配置文件,大部分系统程序的配置文件保存于 /etc 目录,便于集中修改。

lib

库文件,集中在一起,方便共享给不同程序。相较不同的软件单独保存库文件,能够节约一些磁盘空间。

share(kubuntu10.04就没有该目录)

程序运行所需要的其它资源,例如图标、文本。这部分文件是专有的,不需要共享;而且目录结构相对复杂,混放在一起比较混乱,所以单独存放

有一些大型软件,或者您布署的重要应用,您可以将它们单独安装在一个文件夹下。(通常源码安装支持这种方式)

 

8、Linux 系统主要根据文件头信息来判断文件类型,扩展名并非决定因素。

 

使用 chmod 命令更改文件的权限,使用 chown 来更改文件的归属。例如:

chmod 755 xxx

chmod a+x xxx

chown user:group xxx  #用来更改文件的归属用户,也可以同时更改其归属群组

chgrp   group  xxx    #用来更改文件的归属群组    

上面命令中的 755 和 a+x 是两种类型的表达式

 

Linux 继承了 Unix 的设计哲学:系统毫无保留的执行你下达的命令,哪怕这个命令是“向我开炮!”

普通用户只可以作系统允许的事情。尽管可以执行大多数命令,但是 root 专有的命令却不能成功的执行,因为这些命令往往关联着只有 root 才可以处理的文件。也就是说,普通用户通常只可以处理自己 $HOME 目录下的文件。

 

9、但即便是用 sudo 来执行,也不能保证系统不会在您的误操作下一命呜乎,更安全的办法是直接赋与用户某种操作的权限。

gpasswd -a user audio

这个命令将 user 加入到 audio 群组,您拥有了使用音频设备的权限。

事实上,Linux 中一切皆文件,包括设备文件。

 

群组

群组分为两种,主组和辅组。在 /etc/passwd 文件中,与用户相关联的是主组,每个用户只可以加入一个主组;/etc/group 文件中则记录了每一个辅组所包含的用户,同一个用户可以被多个辅组所包含。

 

这样看起来有点乱,但却可以提供更大的灵活性。例如:

crw-rw---- 1 root audio    /dev/sound/audio

brw-rw---- 1 root optical  /dev/cdrom  

先假设一名用户只可以属于一个群组:你是系统管理员,你管理的用户要求听点音乐,你把他加入了 audio组;于是该用户把 CD 放进了光驱,结果一点反映也没有,于是为了让他使用 cdrom,不得不让他拥有 root权限,你将不能防范他可能作出的破坏。

 

而一名用户可以属于多个群组,能够很好的解决这个问题:你可以让可以用户既属于 audio群组,又属于 optical群组,这样他就可以用 cdrom 来听音乐,却没有 root权限。

 

在 Linux 系统中,由于图形界面和控制台的分辨率通常不一致,所以切换时要有一个延时。对于我们中文用户来讲,控制台下中文的显示也比较麻烦。而且控制台显示内容通常不如终端显示的全面。

 

10、用户配置文件

/etc/ 目录下的文件,只有 root用户 才有权修改。应用软件的全局配置文件,普通用户也不应该修改,因为所有用户都要用到。

如果要通过配置软件,来适应特殊需求,您可以修改用户配置文件。

用户配置文件通常为全局配置文件的同名隐藏文件,放在$HOME目录下,例如:

全局配置文件 用户配置文件

/etc/inputrc /home/user/.inputrc

/etc/vim/vimrc /home/user/.vim/vimrc

/etc/bash.bashrc /home/user/.bashrc 

也有少数例外,通常是系统程序

 

11、软件管理方式

Linux安装软件,大致有两种方式:二进制和源代码;二进制(预编译软件包)就是使用方便,源代码主要特点就是可实现自定义特性。

debian系 发行版通过 apt 系统实现网络支持,配合本地的 dpkg 实现这一过程;redhat系 发行版则通过 yum 和 rpm 实现。而一些新派发行版,包管理系统兼具这两种能力,例如 archlinux 的 pacman;而 gentoo 的 emerge 虽然基于源代码编译安装,但也具备这种能力。

 

手动控制服务

您也可以手动运行带有以下选项的启动脚本,来控制系统服务。 start 启动 stop 停止 restart 重启

/etc/rc2.d/K20powernowd start 

有时您并不清楚某一运行级别有什么启动脚本;而且此类脚本的前三位字符并不固定,不便于记忆。这时,可以直接使用 /etc/init.d/ 文件夹中的启动脚本( /etc/rcX.d/ 中的启动脚本链接到 /etc/init.d/ 文件夹下相应脚本),这也是推荐的方式。

/etc/init.d/powernowd start    

注意

以上命令的位置并没有包含在环境变量的搜索路径中,所以要输入完整路径。

 

12、命令行

有一些特殊符号也属于分隔符,例如管道 | 、重定向 > 、 >> 、 < 、后台运行 & 、序列执行 && 、 ; 。使用这些符号时,您不需要再使用空格作为分隔符

ls -al|less     #两个命令效果相同

ls -al | less #更容易阅读

 

13、Startx

 

startx 可以在命令行下启动图形界面。执行startx 命令时,实际执行这一命令:

 

      xinit /etc/X11/xinit/xinitrc -- /etc/X11/xinit/xserverrc    

 

根据脚本 /etc/X11/xinit/xserverrc 启动 Xserver,同时根据脚本 /etc/X11/xinit/xinitrc 启动指定 Xclient 进程,例如窗口管理器

 

/etc/X11/xinit/xserverrc 以预设的参数运行程序 /usr/bin/X11/X

 

/etc/X11/xinit/xinitrc 脚本则指向 /etc/X11/Xsession ,依次启动 /etc/X11/Xsession.d 目录中的脚本

 

    * 您可以在用户配置文件 ~/.Xsession 中定义使用的 WM,它的优先级高于全局配置文件(对于 GDM会话 不起作用)

    * startx 启动时,并不会再进行身份认证。因为它启动的是 /etc/X11/Xsession.d/gnome-session ,而不是 GDM会话

 

14、内核

内核是系统的引擎,它是一个系统运行起来的先决条件。

    * 内核管理硬件,是程序和硬件之间的接口

    * 内核对进程进行调度,将硬件资源分配给不同任务,使系统可以同时运行多个任务

    * 内核对内存进行管理,将内存空间分配给任务,将使用不频繁的页面转移到交换分区

    * 内核还管理文件系统,进程间通信和网络

内核包含几个重要的子系统:

 

进程调度(SCHED)

    控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。

内存管理(MM)

    允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。

虚拟文件系统(VirtualFileSystem,VFS)

    隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块

网络接口(NET)

    提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。

进程间通讯(IPC)

    支持进程间各种通信机制。

处于中心位置的进程调度,所有其它的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。一般情况下,当一个进程等待硬件操作完成时,它被挂起;当操作真正完成时,进程被恢复执行。例如,当一个进程通过网络发送一条消息时,网络接口需要挂起发送进程,直到硬件成功地完成消息的发送,当消息被成功的发送出去以后,网络接口给进程返回一个代码,表示操作的成功或失败。其他子系统以相似的理由依赖于进程调度。

 

15、启动流程

系统启动时,引导管理器首先加载内核,内核被载入后执行以下操作:

# 内核自解压

# 初始化阶段

      检测,初始化硬件 

      设置各种入口地址 

      初始化 IRQ 中断处理机制

      启动 init 进程 

      初始化控制台、显示器 

      初始化 kernel_module 

 

# init 阶段。init 进程启动后,执行当前运行级别的脚本:

      PCI总线初始化 

      网络初始化 

      文件系统初始化 

      加载文件系统 

      …… 

 

 系统引导流程:

   1. 系统启动时,首先引导至 MBR,将控制权移交安装在 MBR 中的引导管理器4

   2. 引导管理器装载自身[39]

   3. 引导管理器读取分区中的配置文件,并按配置文件中预设的参数运行5

   4. 引导管理器根据您的选择,可能会有如下活动

          * 加载内核,启动 Linux 系统检查活动分区,并引导它

          * Windows 系统:读取相应分区的引导扇区,将控制权移交该扇区中的引导管理器

 

Windows 使用 NTLDR,Linux 通常用 Grub

例如,Grub 读取“/boot/grub/menu.lst”文件中内容,将可引导系统通过菜单显示

Linux 系统在安装 Grub 时,会提问您安装在 MBR 或者分区引导扇区中。如果将 Grub 安装在分区引导纪录中,

您必须确保 MBR 中的引导管理器能够正确的引导至分区引导扇区。

 

16、Grub 使用

在 Grub 启动菜单中,您可以选择您要的选项,按下 d 删除该项;或者按下 e 键,进入到编辑模式

修改您的启动参数,完成后回车

按 b 键,Grub 将以您修改后的参数引导系统。

在 Grub 启动菜单中,按下 c 进入命令模式,操作与交互模式基本相同;只不过最后一个命令是boot,

而不是quit。

 

17、

毫不夸张的说,LAMP 是开源世界的“皇家海军”,正是凭借 LAMP 的力量,开源应用得以在服务器市场称雄;

Emacs 工具链可以算是“太平洋舰队”。

Emacs 是一个架构在编辑器上的集成环境,除了最基本的编辑功能,还可以完成文件管理、终端模拟、浏览网页、收发邮件、编译程序等工作。

 

18、XML 简介

在学习 DocBook 之前,我们需要先了解一下 XML,因为 DocBook 是 XML 的一个 DTD(文档类型定义);

XML 是一种被设计用来存储、交换数据的通用标记语言。

为了使它更加的通用,XML 的元标记不具有意义,XML 使用 DTD 赋予某一组标记特定的意义

为了便于自动处理,它只包含内容而不包含样式定义,XSL 便是这样一种自动处理的机制,它将根据特定规则将 XML 转换为可以定义样式的格式

 

现代文档工具,倾向于分离内容与样式。而内容部分,则用结构化的方式进行梳理,对于规模比较大的文档,这是最佳的方案。

总体说来,LaTex 是科技论文事实上的标准,如果要排论文,就用 LaTeX;而作个人的文档、非正式散布的文档、演示文档,推荐用 ConTeXt

 

18/现在几种主要的UNIX版本

 

    * AIX:IBM的UNIX,是根据SVR2(最近已经出到SVR3.2)以及一部分BSD延伸而来,加上各种硬件的支持。具备特有的系统管理(SMIT)。

    * 386BSD:Jolitz从Net/2 software移植过来的。支持Posix,32位。

    * FreeBSD:1.x从386BSD 0.1而来,FreeBSD 2.x版是用4.4BSD lite改写。

    * HP-UX(HP):旧系统是从S III(SVRx)发展面来,现在是由SVR2(4.2BSD)发展而来,目前是10.x版。

    * Linux(x86):遵从POSIX,SYSV及BSD的扩展

    * OSF/1(DEC):DEC对OSF/1的移植。

    * SCO UNIX(x86):SVR3.2,目前影响较大的PC UNIX。

    * SunOS(680x0,Sparc,i386):根据4.3BSD,包含许多来自System V的东西。Sun的主要成果在于:NFS,OpenLook GUI标准,现演变为Solaris 。

    * Ultrix(DEC):根据4.2BSD再加上许多4.3BSD的东西。

    * Xenix(x86):Intel硬件平台上的UNIX,以SVR2为基础,由微软推出。在中国使用较广泛。

 

GNU 计划和自由软件基金会(the Free Software Foundation - FSF)是由Richard M. Stallman 于1984 年一手创办的。旨在开发一个类似 Unix、并且是自由软件的完整操作系统:GNU 系统。(GNU 是"GNU's Not Unix"的递归缩写,它的发音为"guh-NEW"。)各种使用linux 作为核心的GNU 操作系统正在被广泛的使用。虽然这些系统通常被称作"Linux",但是严格地说,它们应该被称为GNU/Linux 系统。

 

Richard Stallman 认为,在 Copyleft 时代,软件公司可以靠服务和训练赚钱。如果你公司没有人会用源代码,你就得请位程序员,帮你修改由 FSF 得来的 Copyleft 程序;你不必怕你出钱所改的程序会流传到另一家公司,因为那家公司也许会为这软件改头换面,帮它抓虫,或修改,或添加些新功能。而在任意拷贝的情况下,你也因而受惠。

所以程序员绝对饿不死,仍会像现在高价软件的时代一样,有许多“服务”的大钱可赚,只不过不可能象盖茨这样积聚起世界第一的巨额财富。而 GNU 的软件也能使写程序的人更具生产力,因为他不必凡事都从零做起,可根据已有的软件来改进。所以 Richard Stallman 希望,有一天软件业者不是靠目前的“Copyright”版权法,迫使客户花费巨额资金购买软件,而是依仗提供服务(如技术支援、训练)来获取应得的报酬,这种报酬可能会比一般人高,但是绝对不可能为一个小公司培养出几百个百万富翁。简而言之,未来软件业的基本准则就是“资源免费,服务收费”。

GNU 在工作站和微机市场很风光,许多 工作站UNIX 和微机厂家,都把 GNU 纳入他们操作系统,包括 ConvexComputer 、DEC、DataGeneral 及以前的 NeXT 等。

GNU 工程激励了许许多多年轻的黑客,他们编写了大量自由软件。最后,是里奴斯·托瓦斯编写了系统内核,称为 Linux,把所有软件和硬件连接起来。Linux 内核为 GNU 工程画上了完满的句号。

Richard Stallman 说,Linux 并不能代表整个操作系统。Linux 只是内核,整个系统还包含数以百计的软件工具和实用程序,大多是由 GNU 黑客们完成的。他认为,整个操作系统称为 GNU/Linux 比较合适。

 

19/POSIX 标准

POSIX(Portable Operating System Interface for Computing Systems)是由IEEE 和ISO/IEC 开发的一簇标准。该标准是基于现有的UNIX 实践和经验,描述了操作系统的调用服务接口,用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植运行。

 

20/

当然,对用户来说,KDE1.0远远比不上同时期的Windows 98来得平易近人,KDE 1.0中大量的Bug更是让人头疼。

但对开发人员来说,KDE1.0的推出鼓舞人心,它证明了KDE项目开源协作的开发方式完全可行,开发者对未来充满

信心。有必要提到的是,在KDE1.0版的开发过程中,SuSE、Caldera等Linux商业公司对该项目提供资金上的支持,

在1999年,IBM、 Corel、RedHat、富士通-西门子等公司也纷纷对KDE项目提供资金和技术支持,自此KDE项目走上

了快速发展阶段并长期保持着领先地位。但在 2004年之后,GNOME不仅开始在技术上超越前者,也获得更多商业公

司的广泛支持,KDE丧失主导地位,其原因就在于KDE选择在Qt平台的基础上开发,而Qt在版权方面的限制让许多商

业公司望而却步。

 

Qt是一个跨平台的C++图形用户界面库,它是挪威TrollTech公司的产品。基本上,Qt同XWindow上的 

Motif、Open Look、GTK等图形界面库和Windows平台上的MFC、OWL、VCL、ATL是同类型的东西,但Qt具有优良的跨

平台特性(支持 Windows、Linux、各种UNIX、OS390和QNX等)、面向对象机制以及丰富的API,同时也可支持2D/3D

渲染和OpenGLAPI。在当时的同类图形用户界面库产品中,Qt的功能最为强大,MatthiasEttrich在发起KDE项目时

很自然选择了Qt作为开发基础,也正是得益于 Qt的完善性,

 

我们前面提到,KDE采用GPL规范进行发行,但底层的基础Qt却是一个不遵循GPL的商业软件,这就给KDE 上了一道

无形的枷锁并带来可能的法律风险。一大批自由程序员对KDE项目的决定深为不满,它们认为利用非自由软件开发

违背了GPL的精神,于是这些GNU 的狂热信徒兵分两路:其中一部分人去制作Harmonny,试图重写出一套兼容Qt的

替代品,这个项目虽然技术上相对简单,但却没有获得KDE项目的支持;另一路人马则决定重新开发一套

名为“GNOME(GNU Network ObjectEnvironment)”的图形环境来替代KDE,一场因为思想分歧引发的GUI之战开始了。

 

GNOME选择完全遵循GPL的GTK图形界面库为基础,因此我们也一般将GNOME和KDE两大阵营称为 GNOME/GTK和KDE/Qt。

与Qt基于C++语言不同,GTK采用较传统的C语言,虽然C语言不支持面向对象设计,看起来比较落后,但当时熟悉C 

语言的开发者远远多于熟悉C++的开发者。加之GNOME/GTK完全遵循GPL版权公约,吸引了更多的自由程序员参与,

但由于KDE先行一步,且基础占优势,一直都保持领先地位。

GNOME的转机来自于商业公司的支持。当时Linux业界的老大RedHat很不喜欢KDE/Qt的版权,在GNOME项目发起

后RedHat立刻对其提供支持。为了促进GNOME的成熟,RedHat甚至专门派出几位全职程序员参与GNOME的开发工作.

 

我们发现一个颇富戏剧性的结局:致力于商业化的KDE反而失去了重量级商业企业的支持,尽管一些中小规模的

Linux企业因技术能力问题将继续支持 KDE,但它的商业前途有限。而遵循GPL、完全不以商业化为目的的GNOME反

而在该领域大获成功。许多Linux发烧友都不明白为什么优秀的KDE 会受到如此待遇,其实道理非常简单—没有哪一

家重量级企业喜欢受制于人,也许KDE的Qt不需要很多授权费,但谁知道TrollTech公司以后会不会漫天要价?既然

有免费的GNOME可以选择,那为什么不呢?基于此种理由,RedHat、Novell两家最大的Linux企业和SUN都采用GNOME,

而它们对GNOME的鼎力支持也让该项目可拥有足够多的技术保证,为今后的高速发展奠定坚实的基础。需要纠正一个

可能的误解,虽然Novell收购了 Ximian,但RedHat并没有受到太大影响,双方对GNOME的贡献都是相互共享的,因

为GNOME以GPL自由版权公约发行,合作即共赢。至于 KDE项目,虽然它失去这些商业巨头的支持,但没有能力转换

桌面的中小Linux厂商将继续追随KDE,而且在非商业的社区Linux发行版中,KDE依然有强大的生命力。

 

事实上,无论是GNOME的开发者还是KDE的开发者,他们都有着共同的目标,就是为Linux开发最好的图形环境,

只是因为理念之差而分属不同的阵营。 KDE与GNOME的商业竞争对开发者们其实没有任何利益影响

(只有 TrollTech会受影响),基于共同的目的,KDE与GNOME阵营大约从2003年开始逐渐相互支持对方的程序—只

要你在KDE环境中安装GTK 库,便可以运行GNOME的程序,反之亦然。

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值