2008年10月30日

是谁编写Linux:美国公司

我不知道为什么“只有0.10068%的Linux内核开发者领薪水”这种稀里糊涂的想法流传不息,但它确实在流传。所以,我只想一劳永逸地说,就绝大部分而言,Linux是由一些主要的美国公司雇用的软件工程师和程序员编写的。

早在20084月,Linux基金就仔细划分谁在做Linux内核的开发。其结果是Linux进展什么赞助,这使大家十分清楚,作为Linux后盾的是大企业。

Linux是心甘情愿的工作一度是真实的,不过,那是很久很久以前的事了。虽然没有确切的日期,就是不知道什么时候Linux主要由热心人士编写转变为大部分由有薪金的开发人员编写,但我猜是在200110月之后的12个月内出现这种变化。

200110月?就在那个时候,IBM宣布在Linux领域投资亿美元。然后,在一年之内,IBM高级副总裁和eServer组主管Bill Zeitler2002年告诉我说,“我们在第一年销售的软件和系统已经收回大部分投资。”

大企业为Linux付出代价并不勉强。Linux也已经在大企业付出自己。

2008124日,那天发布了Linux内核2.6.24,来自186家公司超过一千名开发人员为Linux内核作出贡献。这并没有把从事任何特定Linux发行版或其他开源程序所做的工作计算在内。

2.6.24的内核中进一步细分,看来有13.9%的Linux曾由没有企业资助的人编写。有12.9%的贡献者,Linux基金会无法准确指出这些程序员受雇于谁。其余74.2%是由有薪金的开发人员编写。(译注:数字有误)

前十名看起来是:Red Hat11.2%Novell8.9%IBM8.3%Intel4.1%Linux基金会,2.6%;独立Linux顾问公司,2.5%SGI2.0%MIPS Technology1.6%Oracle1.3%MontaVista1.2%。就在这前十名底下,将发现占1.1%Google

除一家主要的嵌入式Linux供应商MontaVista、一家实力强大的半导体OEM(原始设备制造商)MIPS和独立顾问公司之外,所有这些都是主要的、十亿美元以上的美国公司。这听起来真的不像Linux是在妈妈的地下室做出来,不是吗?

翻译/后溪金


阅读全文

2008年10月24日

支付宝发布Linux下Firefox安全控件

自从上次支付宝在官方网志上宣布将支持 Firefox 浏览器后,已经有很多用户询问什么时候能够支持 Linux 平台下的 Firefox ,现在是可以做出回答的时候了:尽管该安全控件(针对 Linux 下 Firefox 的安全控件)还没有正式在官方网站上发布,本 Blog 用户可以提前体验啦。

使用方法:下载上述链接的文件,解压缩成两个文件:

$ tar -zxvf aliedit.tar.gz 

推荐校验 MD5 值:

$ md5sum aliedit.tar.gz
02240053d32688ed996e3a4788042801 aliedit.tar.gz

并将这两个文件复制到 ~/.mozilla/plugins 目录:

$ cp aliedit.so aliedit.xpt ~/.mozilla/plugins 

重新启动 Firefox 即可。

(有些用户可能没有 ~/.mozilla/plugins 目录,请手工创建一下,或者参见本文后面的留言。有用户介绍了自己的经验)

安全提示:下载前请做一下 MD5 校验。同时在官方站点发布正式的针对 Linux 下 Firefox 的安全控件之前,不要相信任何来自其他网站的安全控件。

补充说明:目前在 Linux 下的支付宝安全控件也不支持数字证书。


阅读全文

Linux进程调度程序的具体细节

性别之间的一个差别,据说,是处理多任务的能力。现在,就看你说话的人是持有这种看法的女人还是男人,但是,我还没有那么大胆参加这种争论。然而,我能够告诉你的是,Linux明确无疑地这么做。而且,事实上,许多系统也许没有充分利用多任务。理由在这里。

追溯从前,桌面计算机没有多任务。这些计算机每次运行一个专门的任务。这些日子过去了;现在,甚至连最小型的嵌入式操作系统一般也有某些方面的多任务处理能力。

对于操作系统开发者来说,实现多任务并不简单。但解释起来却足够简单——必须在所有不同任务之间分配CPU时间。然而,不仅如此,还有一大堆问题。一些进程比另一些进程更重要并且必须有定期运行。其他不太重要的可以闲着无事坐在背后。而且为了其他人,应该让程序决定何时放弃控制,返回操作系统,抑或应由OS决定给各任务在挂起前一个指定的运行时间?



Linux监督所有这一切的部分就是调度程序,事实上,调度程序提供若干处理多任务的不同算法。没有一个算法单独对于每一个场合都是完美的;例如,一个用于负荷交互式用户的通用Linux服务器可能需要与专用网络服务器不同的分时处理方法。Linux内核实际上允许用户在启动时选择将要使用的是哪一种调度方法。这得不到广泛的赏识,因此,许多Linux系统事实上可能按对它来说也许是次优的方式进行调度。

事实上,调度程序自身不是真正分离的程序,而是每一个进程执行的进程。无论何时,任何正在运行的进程入睡或者因等待输入输出不得不阻塞,就调用调度例行程 序,弄清楚是否需要将控制切换到另一个任务,而且,如果是这样的话,还要确定是哪一个任务。这不会因应用程序开发者的吩咐而发生,因为这些对调度程序的调 用都嵌入Linux内核之中的系统调用。

任何定期与设备——象磁盘和键盘——通信的进程,要花大量等待时间,因为CPU比任何I/O设备要快得多。这个空闲时间让给其他进程运行更好。相反,复杂数学计算的程序可能把大量时间花在捣弄数字而没有任何I/O活动。

操作系统有两条路可以走下去:操作系统可能让进程放弃控制(CPU),只要它们因等待某事某物而阻塞,这称为协同多任务处理。或者,OS可能获得控制并强制进程暂时放弃(CPU),因而另一个进程可以运行。后一种情形更适合强计算的实例并通称为抢先式多任务处理

Linux使用协同和抢先多任务处理两者。如果一个进程没有自动定期地把控制退还,它就是抢先的。

每一个Linux进程分配一定数量的时间——即时间片——执行任务,在内核停下它让另一个进程运行之前。如果进程自愿放弃,则是冷静的;只要进程要求读或写I/O设备,这件事一般就自动发生。在这种情况下,我们说,这个进程让出CPU。如果时间片期满,那么,内核停止这个进程。我们说,这些进程被抢占。

不只这两种情形。一个进程可能等待某事发生——例如,象Web服务器或者SMTP一样的网络服务——在它们有任何工作要做之前,无所事事等待客户的连接。这不仅仅是从慢速磁盘或者打字缓慢的用户读数据的问题,而且实际上在事件发生之前没有什么活动。

在这种情况下,我们说,进程被阻塞。直到事件发生,它才再次运行。一个阻塞进程根本就不能使用CPU,而且在唤醒它的事件发生之前,完全不必调度它再次运行。

调度程序还有更多的事情。无论何时,给予进程运行机会的时机一到,调度程序就要计算出应该选择哪一个进程。为了帮助做出选择,Linux给每个进程一个优先权。较高优先权者可能在较低优先权者之前运行。虽然优先权受用户影响,但最终由内核控制,而且随着时间的推移,优先权可能增加或者降低。特别地,奖励运行得好的进程——即那些因频繁让出而罕有被抢占者。

恰好地,这种奖励方案趋向照顾与用户交互的进程。一个定期从键盘获取输入的应用程序将定期让出,只要它等待输入。另一方面,执行大量计算因而不得不被抢占的程序实际上根本不涉及用户。这类进程将收到一个负的奖励。

你可参见下列两个脚本图示。一个将做得非常多,另一个做得不多。

#!/bin/bash

while [ true ]

do

sleep 0.1

done

and

#!/bin/bash

x = 0

while [ true ]

do

x = $(($x + 1))

done

第一个脚本花全部时间睡觉。另一个坚持不懈地给一个数增值。这毫无意义,但目的是没完没了地消耗CPU。让我们分别把它们称为yielder.shpreempter.sh

设置这样运行:

./yielder.sh &

./preempter.sh &

接下来,重复运行这个命令检查它们的优先级:

ps –C yielder –C preempter –o etime,pri,cmd

你看到什么?

使用向上箭头键并回车,每隔几秒重复调用ps。很快就会看到这两个脚本优先数的变化——PRI栏。yielder.sh的优先权增加,而preempter.sh的优先权减少。这是因为调度程序分别给一个正的和负的奖励。

如果没有运行别的程序,那么,这两个进程将稳定在给它们的奖励不再改变的一点。在一个忙碌的服务器上,奖励可能连续上下浮动,因为其他进程也在启动和终止。

如果你真诚希望系统尽其最大努力运行你的复杂计算,你马上就会明白,这恐怕是不可能的。一方面,Linux有这样一个动机:想要确保对于任何交互式使用系统的用户性能不会下降。另一方面,这是你的系统,它应当做你要做的。

而要达到预定目标,做你希望你可以做的,可通过另一个称为“nice”的值直接改变调度程序的决定。这样说是因为nice值让你细致入微地对待系统中的其他任务。给进程一个正的nice值,进程将有一个较低的总优先权。相反,给它一个负的nice值,调度程序将提升其优先权。只有超级用户可以分配一个负的nice值;非特权用户可做的唯一事情是降低自己进程的优先权,在优先队列颠簸而行。

用负的nice值再运行preempter.sh进程如下:

sudo nice –n -5 ./preempter.sh &

通过如上所述的ps命令检验有影响的优先权并与前面的结果相比。

nice值一经设置,它在进程生命期就是固定的,除非使用称为renice的命令改变它。除此之外,没有别的可以影响它。使用renice更改现有进程的nice值的命令是这样的:

sudo renice -10 –p 50432

(其中,50432是进程ID即想要renice的进程的pid。)此命令将告诉你,前一个优先权和新的优先权。

再一次,非特权用户也许只能增加nice值;即使已经是正的值,这些用户也不能降低它。

现在有些不同:一切都适用于“正常”进程。有一些事情尚未讨论,就是紧要的实时应用,它必须绝对保证,软件在事件发生后的某一时间间隔内作出反应。与生命 监测硬件相互作用的医学上的应用程序不过是一个例子;如果这种应用程序在应该运行的时候不能运行,那么,生命可能会失去。

Linux专门给实时应用程序提供平常得不到的优先级范围。命令chrt启动这样的应用软件。当它们的优先权超出正常应用的范围时,保证它们经常地运行。值得注意还有,实时进程没有nice值或奖励;这些进程永远固定在某个值。

下次回来,关于Linux进程,我会告诉你更多,包括如何把内核拧成适合你特殊的多任务需要。


阅读全文

Fedora源代码价值108亿美元

根据Linux基金会,开发Linux Fedora的最新版本要花去一家传统软件公司108亿美元。

该团体估计,受雇于单独一家公司的专业开发团队将需要价值约108亿美元的工作开发这个软件。单单编写Linux内核这一部分的开发成本就可能达到14亿美元。

Linux基金会声称,开源模式的操作系统,每次为内核更新作出贡献的估计有100多家不同公司的大约1,000个开发人员。这家基金会估计,仅过去两年,就有3,200个开发人员和200家公司为Linux内核作出贡献。

“参与Linux经济的公司与他们的合作伙伴和竞争对手均摊研究和开发费用,”这份报告写道。

“开发负担在个人和公司之中的这种散布已经产生一个大规模且经济有效的生态系统和未曾料到的软件创新。”

Fedora项目是Red Hat Linux发行版的一个分枝,这可以追溯到1994年。Linux内核第一版是由Linus Torvalds1991年发布的。

这项研究更新2002年的报告,那时根据每行代码的成本模型,认定一个Linux发行版的开发成本大约12亿美元。最新研究报告按美国程序员平均工资75,662美元计算开发204,500,046Fedora 9源代码的成本。

来自译言


阅读全文

2008年10月16日

黑客文化简史




本篇原作者为Eric S. Raymond esr@snark.thyrsus.com,他是一位大哥级的 Hacker,写了很多自由软件,知名著作有Jargon File等,近年来发表“大教堂与集市”论文为Opensource software努力,Netscape 愿意公开Navigator的原始码,与这篇文章有很大的关系。

Hacker文化简史


序曲: Real Programmer


故事一开始,我要介绍的是所谓的Real Programmer。


他们从不自称是Real Programmer、Hacker或任何特殊的称号;`Real Programmer' 这个名词是在1980年代才出现,但早自1945年起,电脑科学便不断地吸引世界上头脑最顶尖、想像力最丰富的人投入其中。从Eckert &Mauchly发明ENIAC後,便不断有狂热的programmer投入其中,他们以撰写软件与玩弄各种程式设计技巧为乐,逐渐形成具有自我意识的一套科技文化。当时这批Real Programmers主要来自工程界与物理界,他们戴著厚厚的眼镜, 穿聚酯纤维T恤与纯白袜子,用机器语言、汇编语言、FORTRAN及很多古老的 语言写程式。他们是Hacker时代的先驱者,默默贡献,却鲜为人知。

从二次大战结束後到1970早期,是打卡计算机与所谓"大铁块"的mainframes 流行的年代,由Real Programmer主宰电脑文化。Hacker传奇故事如有名的 Mel (收录在Jargon File中)、Murphy's Law的各种版本、mock- German`Blinkenlight' 文章都是流传久远的老掉牙笑话了。

※译者:
Jargon File亦是本文原作者所编写的,里面收录了很多Hacker用语、缩写意 义、传奇故事等等。Jargon File有出版成一本书:The New Hacker's Dictionary,MIT PRESS出版。也有Online版本: http://www.ccil.org/jargon

※译者:
莫非定律是:当有两条路让你抉择,若其中一条会导致失败,你一定会选到它。 它有很多衍生说法:比如一个程式在demo前测试几千几万次都正确无误,但demo 那一天偏偏就会出bug。

一些Real Programmer仍在世且十分活跃 (本文写在1996年)。超级电脑Cray 的设计者Seymour Cray,据说亲手设计Cray全部的硬体与其操作系统,作业 系统是他用机器码硬干出来的,没有出过任何bug或error。Real Programmer 真是超强!

举个比较不那么夸张的例子:Stan Kelly-Bootle,The Devil's DP Dictionary 一书的作者(McGraw-Hill,1981年初版,ISBN 0-07-034022-6)与Hacker 传奇专家,当年在一台Manchester Mark I开发程式。他现在是电脑杂志的专栏 作家,写一些科学幽默小品,文笔生动有趣投今日hackers所好,所以很受欢迎。 其他人像David E. Lundstorm,写了许多关於Real Programmer的小故事, 收录在A few Good Men From UNIVAC这本书,1987年出版,ISBN-0- 262-62075-8。

※译:看到这里,大家应该能了解,所谓Real Programmer指的就是用组合语 言或甚至机器码,把程式用打卡机punch出一片片纸卡片,由主机读卡机输入电 脑的那种石器时代Programmer。

Real Programmer的时代步入尾声,取而代之的是逐渐盛行的Interactive computing,大学成立电算相关科系及电脑网络。它们催生了另一个持续的工程传统,并最终演化为今天的开放代码黑客文化。

早期的黑客

Hacker时代的滥觞始於1961
年MIT出现第一台电脑DEC PDP-1。MIT的Tech Model Railroad Club(简称TMRC)的Power and Signals Group买了这台机器後,把它当成最时髦的科技玩具,各种程式工具与电脑术语开始出现,整个环境与文化一直发展下去至今日。 这在Steven Levy的书`Hackers' 前段有详细的记载(Anchor/Doubleday 公司,1984年出版,ISBN 0-385-19195-2)。

※译:Interactive computing并非指Windows、GUI、WYSIWYG等介面, 当时有terminal、有shell可以下指令就算是Interactive computing了。 最先使用Hacker这个字应该是MIT。1980年代早期学术界人工智慧的权威:MIT 的Artificial Intelligence Laboratory,其核心人物皆来自TMRC。从1969年 起,正好是ARPANET建置的第一年,这群人在电脑科学界便不断有重大突破与 贡献。

ARPANET是第一个横跨美国的高速网络。由美国国防部所出资兴建,一个实验性 质的数位通讯网络,逐渐成长成联系各大学、国防部承包商及研究机构的大网络。 各地研究人员能以史无前例的速度与弹性交流资讯,超高效率的合作模式导致科技 的突飞猛进。

ARPANET另一项好处是,资讯高速公路使得全世界的hackers能聚在一起,不再像以前孤立在各地形成一股股的短命文化,网络把他们汇流成一股强大力量。 开始有人感受到Hacker文化的存在,动手整理术语放上网络,在网上发表讽刺文学与讨论Hacker所应有的道德规范。(Jargon File的第一版出现在1973年,就是一个好例子),Hacker文化在有接上ARPANET的各大学间快速发展,特别是(但不全是)在信息相关科系。

一开始,整个Hacker文化的发展以MIT的AI Lab为中心,但Stanford University 的Artificial Intelligence Laboratory(简称SAIL)与稍後的Carnegie-Mellon University(简称CMU)正快速崛起中。三个都是大型的资讯科学研究中心及人工智慧的权威,聚集著世界各地的精英,不论在技术上或精神层次上, 对Hacker文
化都有极高的贡献。

为能了解後来的故事,我们得先看看电脑本身的变化;随著科技的进步,主角MIT AI Lab也从红极一时到最後淡出舞台。

从MIT那台PDP-1开始,Hacker们主要程式开发平台都是Digital Equipment Corporation 的PDP迷你电脑序列。DEC率先发展出商业用途为主的interactive computing及time-sharing操作系统,当时许多的大学都是买DEC的机器, 因为它兼具弹性与速度,还很便宜(相对於较快的大型电脑mainframe)。 便宜的分时系统是Hacker文化能快速成长因素之一,在PDP流行的时代, ARPANET上是DEC机器的天下,其中最重要的便属PDP-10,PDP-10受到 Hacker们的青睐达十五年;TOPS-10(DEC的操作系统)与MACRO-10(它的组译器),许多怀旧的术语及Hacker传奇中仍常出现这两个字。

MIT像大家一样用PDP-10,但他们不屑用DEC的操作系统。他们偏要自己写一个:传说中赫赫有名的ITS。

ITS全名是`Incompatible Timesharing System',取这个怪名果然符合MIT的搞怪作风 -- 就是要与众不同,他们很臭屁但够本事自己去写一套操作系统。ITS始终不稳,设计古怪,bug也不少,但仍有许多独到的创见,似乎还是分时系统 中开机时间最久的纪录保持者。

ITS本身是用汇编语言写的,其他部分由LISP写成。LISP在当时是一个威力强大与极具弹性的程式语言;事实上,二十五年後的今天,它的设计仍优於目前大多数的程式语言。LISP让ITS的Hacker得以尽情发挥想像力与搞怪能力。LISP是MIT AI Lab成功的最大功臣,现在它仍是Hacker们的最爱之一。

很多ITS的产物到现在仍活著;EMACS大概是最有名的一个,而ITS的稗官野史仍为今日的Hacker们所津津乐道,就如同你在Jargon File中所读到的一般。 在MIT红得发紫之际,SAIL与CMU也没闲著。SAIL的中坚份子後来成为PC 界或图形使用者介面研发的要角。CMU的Hacker则开发出第一个实用的大型专 家系统与工业用机器人。

另一个Hacker重镇是XEROX PARC公司的Palo Alto Research Center。从 1970初期到1980中期这十几年间,PARC不断出现惊人的突破与发明,不论质或量,软件或硬体方面。如现今的视窗滑鼠介面,雷射印表机与区域网络; 其D系列的机器,催生了能与迷你电脑一较长短的强力个人电脑。不幸这群先知先觉者并不受到公司高层的赏识;PARC是家专门提供好点子帮别人赚钱的公司成 为众所皆知的大笑话。即使如此,PARC这群人对Hacker文化仍有不可抹灭的贡献。 1970年代与PDP-10文化迅速成长茁壮。Mailing list的出现使世界各地的人得以组成许多SIG(Special-interest group),不只在电脑方面,也有社会与娱乐方面的。DARPA对这些非`正当性'活动睁一只眼闭一只眼,因为靠这些活动会吸引更多的聪明小夥子们投入 电脑领域呢。

有名的非电脑技术相关的ARPANET mailing list首推科幻小说迷的,时至今日ARPANET变成Internet,愈来愈多的读者参与讨论。Mailing list逐渐成为一种公众讨论的媒介,导致许多商业化上网服务如CompuServe、Genie与Prodigy 的成立。

Unix 的兴起


此时在新泽西州的郊外,另一股神秘力量积极入侵Hacker社会,终於席卷整个PDP-10的传统。它诞生在1969年,也就是ARPANET成立的那一年,有个在AT&T Bell Labs的年轻小夥子Ken Thompson发明了Unix。

Thomspon曾经参与Multics的开发,Multics是源自ITS的操作系统,用来实做当时一些较新的OS理论,如把操作系统较复杂的内部结构隐藏起来,提供一个介面,使的programmer能不用深入了解操作系统与硬体设备,也能快速开发程式。

译:那时的programmer写个程式必须彻底了解操作系统内部,或硬体设备。比方说写有IO的程式,对於硬碟的转速,磁轨与磁头数量等等都要搞的一清二楚才行。

在发现继续开发Multics是做白工时,Bell Labs很快的退出了(後来有一家公司Honeywell出售Multics,赔的很惨)。Ken Thompson很喜欢Multics上的作业环境,於是他在实验室里一台报废的DEC PDP-7上胡乱写了一个操作系统, 该系统在设计上有从Multics抄来的也有他自己的构想。他将这个操作系统命名Unix,用来反讽Multics。

译:其实是Ken Thompson写了一个游戏`Star Travel' 没地方跑,就去找一台的报废机器PDP-7来玩。他同事Brian Kernighan嘲笑Ken Thompson说:「你写的系统好逊哦,乾脆叫Unics算了。」(Unics发音与太监的英文eunuches一样),後来才改为Unix。

他的同事Dennis Ritchie,发明了一个新的程式语言C,於是他与Thompson用C把原来用汇编语言写的Unix重写一遍。C的设计原则就是好用,自由与弹性, C与Unix很快地在Bell Labs得到欢迎。1971年Thompson与Ritchie争取到一个办公室自动化系统的专案,Unix开始在Bell Labs中流行。不过Thompson与Ritchie的雄心壮志还不止於此。

那时的传统是,一个操作系统必须完全用汇编语言写成,始能让机器发挥最高的效能。Thompson与Ritchie,是头几位领悟硬体与编译器的技术,已经进步到作业系统可以完全用高阶语言如C来写,仍保有不错的效能。五年後,Unix已经成功地移植到数种机器上。

译:Ken Thompson与Dennis Ritchie是唯一两位获得Turing Award(电脑界的诺贝尔奖)的工程师(其他都是学者)。

这当时是一件不可思议的事!它意味著,如果Unix可以在各种平台上跑的话,Unix 软件就能移植到各种机器上。再也用不著为特定的机器写软件了,能在Unix上跑最重要,重新发明轮子已经成为过去式了。

除了跨平台的优点外,Unix与C还有许多显著的优势。Unix与C的设计哲学是Keep It Simple, Stupid'。programmer可以轻易掌握整个C的逻辑结构(不像其他之前或以後的程式语言)而不用一天到晚翻手册写程式。而Unix提供许多有用的小工具程式,经过适当的组合(写成Shell script或Perl script),可以发
挥强大的威力。

※注:The C Programming Language是所有程式语言书最薄的一本,只有两百多页哦。作者是Brian Kernighan与Dennis Ritchie,所以这本C语言的圣经又称`K&R'。

※注:`Keep It Simple, Stupid' 简称KISS,今日Unix已不follow这个原则,几乎所有Unix都是要灌一堆有的没的utilities,唯一例外是MINIX。

C与Unix的应用范围之广,出乎原设计者之意料,很多领域的研究要用到电脑时,他们是最佳拍档。尽管缺乏一个正式支援的机构,它们仍在AT&T 内部中疯狂的散播。到了1980年,已蔓延到大学与研究机构,还有数以千计的hacker想把Unix装在家里的机器上。

当时跑Unix的主力机器是PDP-11、VAX系列的机器。不过由於UNIX的高移植性,它几乎可安装在所有的电脑机型上。一旦新型机器上的UNIX安 装好,把软件的C原始码抓来重新编译就一切OK了,谁还要用汇编语言来开发软件? 有一套专为UNIX设计的网络 --- UUCP:一种低速、不稳但很成本低廉的网络。 两台UNIX机器用条电话线连起来,就可以使用互传电子邮件。UUCP是内建在UNIX系统中的,不用另外安装。於是UNIX站台连成了专属的一套网络, 形成其Hacker文化。在1980第一个USENET站台成立之後,组成了一个特大号的分散式布告栏系统,吸引而来的人数很快地超过了ARPANET。

少数UNIX站台有连上ARPANET。PDP-10与UNIX的Hacker文化开始交流, 不过一开始不怎么愉快就是了。PDP-10的Hacker们觉得UNIX的拥护者都是些什么也不懂的新手,比起他们那复杂华丽,令人爱不释手的LISP与ITS,C与
UNIX简直原始的令人好笑。『一群穿兽皮拿石斧的野蛮人』他们咕哝著。

在这当时,又有另一股新潮流风行起来。第一部PC出现在1975年;苹果电脑在1977年成立,以飞快的速度成长。微电脑的潜力,立刻吸引了另一批年轻的 Hackers。他们最爱的程式语言是BASIC,由於它过於简陋,PDP-10的死忠派与UNIX迷们根本不屑用它,更看不起使用它的人。

译:这群Hacker中有一位大家一定认识,他的名字叫Bill Gates,最初就是他在8080上发展BASIC compiler的。

古老时代的终结


1980年同时有三个Hacker文化在发展,尽管彼此偶有接触与交流,但还是各玩 各的。ARPANET/PDP-10文化,玩的是LISP、MACRO、TOPS-10与ITS。UNIX与C的拥护者用电话线把他们的PDP-11与VAX机器串起来玩。还有另一群散乱无秩序的微电脑迷,致力於将电脑科技平民化。

三者中ITS文化(也就是以MIT AI LAB为中心的Hacker文化)可说在此时达到全盛时期,但乌云逐渐笼罩这个实验室。ITS赖以维生的PDP-10逐渐过时,开始有人离开实验室去外面开公司,将人工智慧的科技商业化。MIT AI Lab的高手挡不住新公司的高薪挖角而纷纷出走,SAIL与CMU也遭遇到同样的问题。

译:这个情况在GNU宣言中有详细的描述,请参阅:(特别感谢由AKA的chuhaibo翻成中文)
http://www.aka.citf.net/Magazine/Gnu/manifesto.html

致命一击终於来临,1983年DEC宣布:为了要集中在PDP-11与VAX生产线, 将停止生产PDP-10;ITS没搞头了,因为它无法移植到其他机器上,或说根本没人办的到。而Berkeley Univeristy修改过的UNIX在新型的VAX跑得很顺,是 ITS理想的取代品。有远见的人都看得出,在快速成长的微电脑科技下,Unix一
统江湖是迟早的事。

差不多在此时Steven Levy完成``Hackers'' 这本书,主要的资料来源是Richard M. Stallman(RMS)的故事,他是MIT AI Lab领袖人物,坚决反对实验室的研 究成果商业化。

Stallman接著创办了Free Software Foundation,全力投入写出高品质的自由软件。Levy以哀悼的笔调描述他是`the last true hacker',还好事实证明Levy完全错了。

译:Richard M. Stallman的相关事迹请参考: http://www.aka.citf.net/Magazine/Gnu/cover.htm

Stallman的宏大计划可说是80年代早期Hacker文化的缩影 -- 在1982年他 开始建构一个与UNIX相容但全新的操作系统,以C来写并完全免费。整个ITS 的精神与传统,经由RMS的努力,被整合在一个新的,UNIX与VAX机器上的 Hacker文化。 微电脑与区域网络的科技,开始对Hacker文化产生影响。Motorola 68000 CPU 加Ethernet是个有力的组合,也有几家公司相继成立生产第一代的工作站。 1982年,一群Berkeley出来的UNIX Hacker成立了Sun Microsystems,他们的算盘打的是:把UNIX架在以68000为CPU的机器,物美价廉又符合多数
应用程式的要求。他们的高瞻远嘱为整个工业界树立了新的里程碑。虽然对个人而言,工作站仍太昂贵,不过在公司与学校眼中,工作站真是比迷你电脑便宜太多了。在这些机构里,工作站(几乎是一人一台)很快地取代了老旧庞大的VAX等timesharing机器。 译:Sun一开始生产的工作站CPU是用Motorola 68000系列,到1989才
推出自行研发的以SPARC系列为CPU的SPARCstation。

私有Unix时代

1984年AT&T解散了,UNIX正式成为一个商品。当时的Hacker文化分成两大类,一类集中在Internet与USENET上(主要是跑UNIX的迷你电脑或工作站连上网络),以及另一类PC迷,他们绝大多数没有连上Internet。
※译:台湾在1992年左右连上Internet前,玩家们主要以电话拨接BBS交换资讯,但是有区域性的限制,发展性也大不如USENET。 Sun与其他厂商制造的工作站为Hacker们开启了另一个美丽新世界。工作站诉求的是高效能的绘图与网络,1980年代Hacker们致力为工作站撰写软件,不断挑战及突破以求将这些功能发挥到百分之一百零一。Berkeley发展出一套内建支援ARPANET protocols的UNIX,让UNIX能轻松连上网络,Internet也成长
的更加迅速。


除了Berkeley让UNIX网络功能大幅提升外,尝试为工作站开发一套图形界面也不少。最有名的要算MIT开发的X window了。X window成功的关键在完全公开原始码,展现出Hacker一贯作风,并散播到Internet上。X成功的干掉其他商业化的图形界面的例子,对数年後UNIX的发展有著深远的启发与影响。 少数ITS死忠派仍在顽抗著,到1990年最後一台ITS也永远关机长眠了;那些死忠派在穷途末路下只有悻悻地投向UNIX的怀抱。

UNIX们此时也分裂为Berkeley UNIX与AT&T两大阵营,也许你看过一些当时的海报,上面画著一台钛翼战机全速飞离一个爆炸中、上面印著AT&T的商标的死星。 Berkeley UNIX的拥护者自喻为冷酷无情的公司帝国的反抗军。就销售量来说,AT&T UNIX始终赶不上BSD/Sun,但它赢了标准制订的战争。到1990年,AT&T与BSD版本已难明显区分,因为彼此都有采用对方的新发明。 随著90年代的来到,工作站的地位逐渐受到新型廉价的高档PC的威胁,他们主要是用Intel 80386系列CPU。第一次Hacker能买一台威力等同於十年前的迷你电脑的机器,上面跑著一个完整的UNIX,且能轻易的连上网络。 沈浸在MS-DOS世界的井底蛙对这些巨变仍一无所知,从早期只有少数人对微电脑有兴趣,到此时玩DOS与Mac的人数已超过所谓的"网络民族"的文化, 但他们始终没成什么气候或搞出什么飞机,虽然聊有佳作光芒乍现,却没有稳定发展出统一的文化传统,术语字典,传奇故事与神话般的历史。它们没有真正的网 络,只能聚在小型的BBS站或一些失败的网络如FIDONET。 提供上网服务的公司如CompuServe或Genie生意日益兴隆,事实显示non-UNIX的操作系统因为并没有内附如compiler等程式发展工 具,很少有source 在网络上流传,也因此无法形成合作开发软件的风气。 Hacker文化的主力,是散布在Internet各地,几乎可说是玩UNIX的文化。他们玩电脑才不在乎什么售後服务之类,他们要的是更好的工具、更多 的上网时间、
还有一台便宜32-bit PC。

机器有了,可以上网了,但软件去哪找?商业的UNIX贵的要命,一套要好几千大洋($)。90年代早期,开始有公司将AT&T 与BSD UNIX移植到PC上出售。 成功与否不论,价格并没有降下来,更要紧的是没有附原始码,你根本不能也不准 修改它,以符合自己的需要或拿去分享给别人。传统的商业软件并没有给Hacker
们真正想要的。

即使是Free Software Foundation(FSF)也没有写出Hacker想要的操作系统,
RMS承诺的GNU操作系统 -- HURD说了好久了,到1996年都没看到影子(虽
然1990年开始,FSF的软件已经可以在所有的UNIX平台执行)。

早期的免费Unix

在这空窗期中,1992年一位芬兰Helsinki University的学生 -- Linus Torvalds 开始在一台386PC上发展一个自由软件的UNIX kernel,使用FSF的程式开发工具。

他很快的写好简单的版本,丢到网络上分享给大家,吸引了非常多的Hacker来帮 忙一起发展Linux -- 一个功能完整的UNIX,完全免费且附上全部的原始码。 Linux最大的特色,不是功能上的先进而是全新的软件开发模式。直到Linux的 成功前,人人都认为像操作系统这么复杂的软件,非得要靠一个开发团队密切合作, 互相协调与分工才有可能写的出来。商业软件公司与80年代的Free Software Foundation所采用都是这种发展模式。

Linux则迥异於前者。一开始它就是一大群Hacker在网络上一起涂涂抹抹出来 的。没有严格品质控制与高层决策发展方针,靠的是每周发表新版供大家下载测试, 测试者再把bug与patch贴到网络上改进下一版。一种全新的物竞天择、去芜存菁的快速发展模式。令大夥傻眼的是,东修西改出来的Linux,跑的顺极了。

1993年底,Linux发展趋於成熟稳定,能与商业的UNIX一分高下,渐渐有商业应用软件移植到Linux上。不过小型UNIX厂商也因为Linux的出现而关门大吉 - 因为再没有人要买他们的东西。幸存者都是靠提供BSD为基础的UNIX的完整原 始码,有Hacker加入发展才能继续生存。

Hacker文化,一次次被人预测即将毁灭,却在商业软件充斥的世界中,披荆斩棘,
筚路蓝缕,开创出另一番自己的天地。

网络大爆炸时代

Linux能快速成长的来自令一个事实:Internet大受欢迎,90年代早期ISP如雨後春笋般的冒出来,World-Wide Web的出现,使得Internet成长的速度, 快到有令人窒息的感觉。

BSD专案在1994正式宣布结束,Hacker们用的主要是免费的UNIX(Linux与一些4.4BSD的衍生版本)。而Linux CD-ROM销路非常好(好到像卖煎饼般)。 近几年来Hacker们主要活跃在Linux与Internet发展上。World Wide Web
让Internet成为世界最大的传输媒体,很多80年代与90年代早期的Hacker们现在都在经营ISP。

Internet的盛行,Hacker文化受到重视并发挥其政治影响力。94、95年美国政府打算把一些较安全、难解的编码学加以监控,不容许外流与使用。这个称为Clipper proposal的专案引起了Hacker们的群起反对与强烈抗议而半途夭折。 96年Hacker又发起了另一项抗议运动对付那取名不当的"Communications
Decency Act",誓言维护Internet上的言论自由。

电脑与Internet在21世纪将是大家不可或缺的生活用品,现代孩子在使用 Internet科技迟早会接触到Hacker文化。它的故事传奇与哲学,将吸引更多人投入。未来对Hacker们是充满光明的。

阅读全文

2008年10月12日

怎样不安装rpm包提取rpm软件包中的文件

有时我们需要取出rpm包中的文件,但是不想安装。Linux提供的丰富工具让我们可以轻易解决这个问题,方法是用rpm2cpio将rpm文件转换成cpio格式,然后再从cpio中提取文件,下面是详细命令:

rpm2cpio foo.rpm | cpio -idmv

rpm2cpio可以将rpm包转换成cpio格式
cpio命令中的-i是提取文件,-d表示根据rpm包中文件原来的路径建立目, -m是保持文件的更新时间, -v是显示处理的文件列表。

这样就会把foo.rpm文件中的所有文件放在当前目录中。
阅读全文

2008年10月10日

Linux man手册的章节分类

Linux提供了丰富的帮助手册,当你需要查看某个命令的参数时不必到处上网查找,只要man一下即可。
Linux的man手册共有以下几个章节:

1、Standard commands (标准命令)
2、System calls (系统调用)
3、Library functions (库函数)
4、Special devices (设备说明)
5、File formats (文件格式)
6、Games and toys (游戏和娱乐)
7、Miscellaneous (杂项)
8、Administrative Commands (管理员命令)

例如:我们输入 man ls,它会在最左上角显示“LS(1)”,在这里,“LS”表示手册名称,而“(1)”表示该手册位于第一节章,同样,我们输入“man ifconfig”它会在最左上角显示“IFCONFIG(8)”。也可以这样输入命令:“man [章节号] 手册名称”。

man是按照手册的章节号的顺序进行搜索的,比如:

man sleep

只会显示sleep命令的手册,如果想查看库函数sleep,就要输入:

man 3 sleep



阅读全文

Linux设置shell提示符的方法

Linux系统终端提示符的特征由系统环境变量PS1定义。通过命令echo $PS1查看当前设置。

PS1的值由一系列静态文本或\和转义字符序列组成,如:
PS1="\u@\H \w$ "

比较有用的转义序列有:
\a ASCII 响铃字符(也可以键入 \007)
\d "Wed Sep 06" 格式的日期
\e ASCII转义字符
\h 主机名
\H 完整的主机名
\j 在此 shell 中通过按 ^Z 挂起的进程数
\l 此 shell 的终端设备名(如 "ttyp1")
\n 换行符
\r 回车符
\s shell 的名称(如 "bash")
\t 24小时制时间
\T 12小时制时间
\@ 带有 am/pm 的 12 小时制时间
\v bash 的版本(如 2.04)
\V Bash 版本(包括补丁级别)
\u 用户名
\w 当前工作目录(绝对路径)
\w 当前工作目录(basename)
\! 当前命令在历史缓冲区的位置
\$ 如果当前用户是super user,则插入字符#;否则插入字符$
\\ 反斜杠
\[ 出现在不移动光标的字符序列之前
\] 出现在非打印字符之后
\xxx 插入一个用三位数 xxx(用零代替未使用的数字,如 "\007")表示的 ASCII 字符

我们可以通过设置PS1变量使提示符成为彩色。在PS1中设置字符序列颜色的格式为:
\[\e[F;Bm\]
其中``F''为字体颜色,编号30~37;``B''为背景色,编号40~47。
可通过``\e[0m''关闭颜色输出;特别的,当B为1时,将显示加亮加粗的文字,详细请看下面的颜色表与代码表。

颜色表

前景 背景 颜色
---------------------------------------
30 40 黑色
31 41 紅色
32 42 綠色
33 43 黃色
34 44 藍色
35 45 紫紅色
36 46 青藍色
37 47 白色

代码 意义
-------------------------
0 OFF
1 高亮显示
4 underline
5 闪烁
7 反白显示
8 不可见


如果想要设置终端提示符的样式只要把$PS1在~/.bahrc指定即可比,比如我的设置如下:

PS1="\[\e[32m\][\u@\h \w]$\[\e[m\]"
export PS1
效果:
[LinuxSong@test ~]$

根据你的爱好,设置自己喜欢的样式吧:)
阅读全文