2008年9月22日星期一

余世存:游戏结束了——奥运观摩的心得体会

一.


我没有全看“内廷供奉班头张氏艺谋”(饕餮先生语)的作品,但晃了几眼,感觉可以打上八、九十分。可以了,还是个东西嘛。那些指责开幕式糟蹋传统文化、宣扬暴力美学、推广唯漂亮主义之类的看法,都太学者了。


但知识分子也是生产力,学者多是人民大众的朋友,他们这样说肯定有他们的理由。甚至我自己给开幕式打了九十分后,心里丝毫没有电视画面上的国人那样"与有荣焉"的自豪,更没有上海文人那"人人都是李宁"的认同。我的心理难以言喻,一如我的生存难与人分享。我的朋友毛喻原先生晃就没晃一眼,他大概是我所知道的唯一没有看热闹的朋友。


即使可得一百分又如何?是的,人人都看见了开幕式的顺利进行,不少人称颂开幕式的成功。但当夜我们获得的快讯却是:国际奥委会主席罗格先生宣布:鉴于中国的热情和周到和开幕式的巨牛B,下届奥运会仍在北京举办!消息一经传出,中国上下官员几乎全部晕厥,北京警察率先暴怒:老罗,我操你大爷!!!对这样的玩笑我只能苦笑,由衷地同情北京警察。我几年前就听说,警察阶层是我们社会有严重心理疾病的三大阶层之一。时过境迁,他们不仅没有盼头,而且常规工作和非常任务更多了。但愿他们为人夫为人父为国民时,还是一个个正常的中国人。


但谁来同情我们自己,我们十几亿同胞的身心安泰?十几亿人或提心吊胆:人分三六九等,或关闭企业:社会不再为你服务,或不能进首善之区:即使是良民也得为国家减负,或仓皇"避孕"出京城,……就为了那么一个时刻?十几亿人几乎人人出让了自己的一部分权利,从吃穿住行,到眼耳视听,到身意心力,人人都让渡了一部分,来接受奥运的盘踞、轰炸、洗礼,就为了那么一个时刻?


一个纯粹的体育活动,即使是国家的游戏,也不应该上升到末日般辉煌的最后演出,以至于忘记了刚刚献祭牺牲的千千万万的童男童女,忘记了刚刚闭眼、坟头并没有送上电视机的千千万万的中国人民。冲喜也不是这个冲法啊。因为真正的冲喜,是不应该有所掩饰,有所屏蔽的。因为真正的冲喜,参与者是庄重的,肃穆的。但这一次的体育冲喜活动,奇怪地残酷化也喜剧化了。一次体育活动,被上升到大喜的人人有份的高度。残酷得一切为奥运让路,喜剧得一切都跟奥运相关。非喜勿听,非喜勿视,非喜勿言。一次体育活动,奇怪地为一般常理难以理喻地被上升到国家政治的高度,中国、中华民族、国家荣誉、百年衰败,等等,那些自大的名词,全被借用来打压卑微渺小的国民个体的生存。这样的国家游戏实在让人捏一把汗。


关于人权化政治化的指责,新华社、国新办、外交部发言人等机构和个人已经代表人民表达了中国观点。关于人权化政治化的斗争,针锋相对得如戏如剧。从未有过的护送圣火活动已非游戏,而如黑社会老大们争抢火龙棍一样充满了阴谋、血腥、惨烈;充满了正义、权利、英勇。自然,这种火而圣的传递到了国内,各地各级政府也像是做烫手山药的甩手游戏一样,人力物力全用来接手,全用来欢送。乡村的线人都调动起来,狙击手布满道路两旁,至于新开一条山路传递圣火,则需要官员们亲自上山用竹棍一类的武器打蛇。这样的国家游戏实在让人好奇。它的想象力匪夷所思,非凡俗如我者、升斗小民如我者所能理解。


一个国家请求举办一次体育活动,得意的也许是"利维坦"一样的国家,跟大多数人没有关系,但一个前现代国家有办法让大众感觉到荣辱攸关。给国家一个机会,国家还世界一个奇迹。一时间,一切的宣传、舆论、民意民情,似乎都同意,举国奥运是值得的,是应该的。能够上媒体的国民都在谈论为奥运做贡献,为国争光。这样一种国家集体的氛围孤立、打击了不合作者、持自己意见者,连达赖都为奥运致意。而人们的口头和心里支持就是一种参与,与有荣焉、咸与奥运的国民们多年没有参与类似的大事喜事了。一个寂寂无名的人,一个少不更事的人,只要他在亲友中谈论起奥运,他就觉得一阵阵的充实,一种类似高潮的兴奋和宣泄,他就感觉到了生活意义的降临。我们中国人太孤独寂寞了,每隔一段时间都有着政治参与社会参与的冲动和要求,每隔一段时间都需要一种狂欢或发泄。我们中国人太聪明太有才了,不少人都需要国家层面的项目来供自己研究、分析,来展示自己的智慧、才华和谋略。国家立项的奥运就是这样的一次机会。这样的国家游戏实在让人叹息。
  
二.


那一刻,中国光荣伟大崛起辉煌的一刻降临了!中国人百年未遇、千载难逢的一刻降临了!那一刻,高潮来了!


那一刻的高潮就这么来了!


据饕餮先生说:“是时也,鸟巢无卵翼而容四海,京师空街衢以迎五洲。二百余国整队而来,十万官民高座以观。君臣居中,欣欣然俯瞰列国朝觐;万众环伺,轰轰然讥诮外邦仪轨。任尔总统元首,到此来侧厢摇扇;便是公子王孙,那时节汗如雨下。”


饕餮先生眼中的游戏现场是:"万千青壮男女披挂成兵。方圆布阵,五千载阴阳之秘辛番邦惊恐;太极仁化,七色幡儒道之精要世界膺服。奥运百年无此盛典,英美列强汗愧难继。大国之威仪憾天,盛世之壮丽动地。十万众呐喊于京畿,四十亿惊诧于万国。盛矣哉!极矣哉!汉唐雄风今又是,东亚崛起唯吾国!"


我晃的几眼没有这样细致的印象,却模糊地想起了大元帝国的文士描述:一面旗白胡阑套住个迎霜兔,一面旗红曲连打着个毕月乌。一面旗鸡学舞,一面旗狗生双翅,一面旗蛇缠葫芦。红漆了叉,银铮了斧,甜瓜苦瓜黄金镀,明晃晃马蹬枪尖上挑,白雪雪鹅毛扇上铺。这些个乔人物,拿着些不曾见的器仗,穿着些大作怪的衣服。


当然,坐在看台或主席台上的人们可能是爽快的、高潮起伏、幸福无比的;那感觉,大唐帝国的诗人写过:九天阊阖开宫殿,万国衣冠拜冕旒。从宋明以来,中国的上层人士多处于谨小慎微的状态里,手脚都少伸展过。毛泽东虽然说站起来了,但他其实一直窝在菊香书屋里,他"要爽只能靠自己",比如去游泳池或长江游泳,在天安门城楼检阅自己的孩儿们。但在这一次的国家游戏里,"肉食者"实实在在地爽了一把。

三.


但这一把爽快却难为外人道,就像我引的大元帝国、大唐帝国和春秋时代的话语难为外人理解一样。这一把爽快跟张班头的作品一样,是自污的,自我作践的。任何把观众分成三六九等的演出,任何把万千青壮男女召集起来演兵布阵的游戏,都是一种前现代社会的"大家长"自娱。一些朋友揭示说,专制国家老喜欢玩步调一致的团体操,团体操是专制制度的"国舞"。当然,对有些人来说,他们不是自污,而是自渎。借用李敖年轻时的话,他们手淫大陆,意淫世界、祖先和文明。


从文明的眼光看,这一把游戏是反文明的。尽管组织、参与这一游戏的大多数有着善意,他们想回归文明大家庭,或以朝圣者的心态尽其所能交上一份答卷,或以分享者的姿态尽其所有展示自家的宝贝。尽管直到今天,仍有人为希特勒的御用导演辩护,为那场运动会辩护,但那一次游戏的代价、后果已经众所周知。健全的运动,当然是个性张扬,人人得以表达的。健全的运动,当然不会自以为宝的,最不济,也应该如费孝通先生说,是美人之美,各美其美,美美与共,世界大同式的。如此才有一种健康平实的心态和眼光。健全运动中的个人绝非部件。爱因斯坦说过:在人类的集体行为里,他从来没有看过比正步走、手脚机械一致的举动更愚蠢、更不可思议的了。


从我们中国乡下人的眼光看,这一把游戏也是荒唐的。我们的乡下人如此说一个自恋自娱的人:光腚推磨――转着圈儿丢人现眼。什么是丢人现眼,张班头的作品就是。尽管学者们一再为马嘎尔尼访问而不朝拜大清帝国一事痛心疾首,为大清帝国的愚昧懑憨而做了很多文章;但公正地说,那一次中西方的交流碰撞,悲剧或闹剧是必然的,那是文明的必然代价。到了今天,训练专制子民去表达什么专制制度的优越性,炫耀专制能够集中力量办此一件两件大事,实在是自我作孽、自作多情了。如果这种自以为是的用心又在取悦什么东西,那实在是卑劣地、猥琐地估计了取悦对象的品格和神正目的。我们的乡下人如此说一个无知无畏的朝拜者:割自己的卵子敬神――既把自己疼死了,又把神得罪了。我们的乡下人也都知道,神在哪里;神不在异国,神不在天上,神在人心里:天地良心!


当然,对我们的有些同胞来说,他们的快乐可能是真实的。或意淫得快乐,或手淫得快乐,或暴发成为"世界的工厂"、乃至世界的"梦工厂"、"世界的中心"而快乐,纵然生命的自由、尊严被阉割殆尽,但对他们来说,那也是"痛,并快乐着"。

四.


甚至对一些人来说,当官并不需要阉割什么。一百多年前的李鸿章有名言,在中国当官是最容易的事了。这么容易的事阉割过官员什么呢?我们说的自由啊、尊严啊、渐进啊、人生的多元之类的有什么用呢?这些话如果说得哀求或说得愤怒都无济于事,要么天真如对牛弹琴,要么无耻得别有用心。


一世代的时间,三十年的改革,官员阶层是受益的或收益增长最快最大的。这是多么值得祝贺的一个人间奇迹!2006 年4月初,国务院研究室、中纪委办、中国社会科学院,完成了《全国地方党政部门、国家机关公职人员薪酬和家庭财产调查报告》。该报告披露:党政干部已经形成社会特权有产阶层,其中地厅级以上干部已是官僚特权阶层。官僚特权阶层年收入是当地城市人均收入的8~25倍,是当地农民年均收入的25~85倍。在金融、外贸、国土开发、大型工程、证券五大领域中担任主要职务的,有百分之八十五至九十是高干子女,实际上已形成了官僚资产阶级。至2006年3月底,私人拥有财产(不包括在境外、外国的财产)超过五千万以上的有27310人,超过一亿元以上的有3220人。超过一亿元以上者,有2932人是高干子女,他们拥有资产20450亿元。


这样的数字可以无限地例举下去,比如中央党校主办的《学习时报》载文披露,2004年中国公车消费4085亿元,公款吃喝2000亿元,公费出国3000亿元,中国每年"三公消费"近9000亿元。陈志武教授谈到政府规模时说,2007年,国家财政税收增加了31%,达到5.1万亿元,占 GDP的21%,相当于3.7亿城镇居民的可支配收入、12.3亿农民的纯收入。也就是说,政府一年花的钱等于3.7亿个城镇居民、12.3亿农民一年可以花的钱。政府要这么多的老百姓才能供养,当然很庞大。至于改革开放坚持的中特道路,2006年世界银行报告称,中国0.4% 的人口掌握了70%的财富,美国是5% 的人口掌握60%的财富,中国的财富集中度世界第一,成为世界两极分化最严重的国家。


在一代人的时间内,这样一个机构、阶层就从"国民经济到了崩溃的边缘状态"里繁殖成了中国有史以来最为庞大的寄生虫。在我们中国度过短缺经济以后,这些机构、阶层及其个人更获得了似乎无限可攫取的资源、财富和权力。虫子及其小虫们拥有的私有财产,使得他们和他们的子子孙孙永远告别了生存的挣扎努力,告别了生命从零起步积累的状态,告别了为生计忧患乃至"求做奴隶而不得"的时代。他们真正成为了马克思所说的自由王国的成员,可以断然脱离一时一地的羁绊,而跟无限的时空游戏。真正的梦工厂讲述过虫子对人的侵害,讲过虫子的局限,中国的寄生虫们却有着飞翔的自由天地。

这是多么值得祝贺的一件大事!

五.


因此,在中外学者专家总结三十年改革的成就和经验之外,在中外官员商人们称道"中国模式"、"中国奇迹"和"北京共识"之外,在中国不少人自己也骄傲于吃饱饭了的成就之外,在中国的知识精英自豪地表达他们的中国国家认同之外,中国需要一次露脸表演。尽管一次地震损失了近两千亿元,但我们可以拿出近三千亿元来办一次体育盛会。什么是"北京共识"?这种现眼的姿态就是。什么是改革经验绩效?县乡精简一人,中央政府将奖励四千元。或者如CCTV所说,1100道关口检测出三鹿奶粉。什么是"中国模式"?什么是知识精英的中国国家认同?四十个教授竞争一个处级岗位。一个公务员位置有四千大学毕业生应聘。一半以上的博士生加入了公务员的大家庭……什么是中国复兴和中国奇迹?十几亿子民和数千万海外华人都参与一次冲喜活动。


我们中国"梦工厂"的特别之处在于,它是单方面却全方位地宣扬一次活动,它催眠、引诱、控制了人的身心。它因此裹挟、煽动、鼓励了绝大多数国民投入其中,使得那些仍为生存奔波的国民也再一次地关注它,以为自己高尚了一把。即使那些为国为民忧患的青年,也认同了它的必要性,认同了"中国加油" 的呐喊,而以为自己悲壮了一把。


这大概是开幕式能够实现其高潮的原因。华丽也好,唯漂亮主义也好,我说的次法西斯美学也好,无论如何,有如此庞大规模的参与性观众,有如此金钱堆起来的戏子和文人,它是不会不成功的。一如我们领导人的讲话,没有不重要的。我给开幕式打分,也是看重它割卵子的勇气和用心。它意淫文明,无知却也可佩。据说在这一次国家游戏的大高潮里,我们中国人民不少人感到更幸福了。


但现在游戏结束了。那些狂欢过的人们将要如何呢?是不是"朝闻道夕死可也"了?我相信他们是不会退场的,生活依然在继续。做民的依然做民,做虫的依然做虫。国家统计的数据是:2004年年末全年全国农村居民人均纯收入2936元,按年人均纯收入低于668元的标准,年末农村绝对贫困人口为 2610万人,按年人均纯收入669-924元的标准,年末农村低收入人口为4977万人。而2005年中国社会科学院分析,如果按照低收入现行标准,即人均年收入低于882元(仅相当于全国农民平均收入水平的1/3),目前还有8517万人口也属贫困人口。如果按照世界上公认的人均1天1美元以下就属贫困的标准,我国目前还有2.1亿贫困人口。没有血性的小民依然可以做自杀者,开幕式之后不到一个月,北京市卫生局在9月5日发布的健康播报中说,我国每年约有25万人死于自杀,还有约200万人自杀未遂。


这样的数字同样可以无限地例举下去。当我看到千百张麻将脸在那里喊叫"和"、"和"、"和"时,我想到的就是这些数字变脸似地亢奋地在那里喊叫"和和和"。它们确实一起和谐了一把,它们"和"了,但它们将伊于胡底?


游戏结束了。对这一游戏我们能说点什么呢?很多人在分析它的意义,我说过我们中国人太聪明有才了,因此需要国家层面乃至国际级别的项目来供其研究、分析,来申请标明其为牛B、为大师、为智者高人。"中国经验"、"中国改革模式"如此,开幕式同样如此。据说林语堂先生说过这么一句话,在我们社会里"有这么一群奇怪的人,本身是最底阶层,利益每天都在被损害,却具有统治阶级的意识。在动物世界里找这么弱智的东西都几乎不可能!"


游戏结束了。上海的朱学勤教授曾说过他的一次游戏经验:"我在电影院里看到《阳光灿烂的日子》结尾,这群人坐在林肯牌豪华汽车里兜风,最后对着观众说:傻B!惊讶得从座位里站了起来。而所有的影评家都在为这部电影叫好,观众也跟着拍巴掌。面对这样的社会,我哑口无言,他们是有理由对着这个社会得意洋洋地说一句‘傻B'了!"那么,这次游戏的结果大概也会有一群虫子对更多的一群观众说:傻逼!


游戏结束了。一时和谐所掩藏的对立、分歧、仇恨、灾难该现形了。该算帐了。大元帝国的人民艺术家在游戏未结束之前就揭露说:"那大汉下得车,众人施礼数,那大汉觑得人如无物。众乡老展脚舒腰拜,那大汉挪身着手扶。猛可里抬头觑,觑多时认得,险气破我胸膛。" "你身须姓刘,你妻须姓吕,把你两家儿根脚从头数:你本身做亭长,耽几杯酒;你丈人教村学,读几卷书;曾在俺庄东住,也曾与我喂牛切草,拽耙扶锄。""春采了桑,冬借了俺粟,零支了米麦无重数。换田契强秤了麻三秆,还酒债偷量了豆几斛,有甚糊涂处,明标着册历,几放着文书。""少我的钱,差发内旋拨还;欠我的粟,税粮中私准除。只道刘三:谁肯把你揪扯住,白甚么改了姓、更了名、唤做汉高祖!"


游戏结束了。我们中国人的终极答案是,各回各的家,各找各的妈。我们每个人仍得各自解决安全、生存、承认、爱、自我的多种要求。翻译成国际歌的网络歌谣唱得好:从来没有什么救世主,也不靠神仙皇帝,要获得幸福全靠我们自己。就像吸毒入幻的人,最终还是要以人的心智来接受并应对生存的事实。如果以汉语为血脉的人们仍不能从中感觉到安全,那么英语、法语甚至俄语、日语就是人们的必由之路;如果大陆中国仍不宜居,那么北美、澳洲甚至马达加斯加小岛都是人们移居的目标之一。


游戏结束了。那些一时和谐过的数字们,将再现其魑魅魍魉,再现其或狰狞或悲戚或平常势利的面容。


游戏结束了!game over!

六.


从前,在一座山脚下住着一户人家,这家人有三个儿子。大儿子名叫学问,二儿子名叫年纪,三儿子名叫笑话。一天,三个儿子一起上山去砍柴,傍晚归来。父母亲问道:"你们三个各砍了多少柴?" 大儿子学问回答:"全无。"二儿子年纪回答:"一把。"三儿子笑话回答:"一担。"


老太太耳背,没有听清,老头又大声给她重复了一遍:"学问全无,年纪倒有了一把,笑话却多了一担了!"


开幕式的游戏、三十年改革的游戏大抵如是。我们的社会和我们自己,也是如此。我们活成了笑话。但愿另外时空的人们原谅:这是在当代中国。


“哦,我的人民,我对你做了什么?”


“但愿审判不要过重!”



2008年9月写于中秋月圆之夜,越二日修订于残奥结束之时"。

2008年9月19日星期五

(转)宝贝,对不起,把你生在这样的国家

宝贝对不起 [山东省青岛市, 网通ADSL, ] @ 2008-9-19 14:13:28

奶粉门事件后写给女儿子恩:

这个月是女儿子恩即将迎来一周岁的时间,但还没回去给她祝贺的时候却发生了一件与我和她都息息相关并震惊全国的事情—--三鹿开始的三聚氰胺奶粉门事件。

这起奶粉门由三鹿缘起波及至整个中国市场的20多个国际知名品牌,当然,后来最不幸也是最不希望的获知是这其中包括我宝贝吃了半年多的圣元。我出离的愤怒,可是除了宣泄以外,我不知道还能用什么方式表现自己的悲哀和无奈。我一直说,任何人都可以伤害我,但不能伤害我女儿,否则我一定要了他的命。可面对如此的政策国情官商相勾结的残酷现实,我又能做什么呢,为自己做国民而感到悲哀、为宝贝遭遇这样的待遇而心痛欲绝。唯一希望,祈祷宝贝和所有宝贝能幸免于难,没有大碍。

虽然我一直认为国人的质量道德观是存在问题的,可还是为你选了圣元。宝贝对不起,是我千挑万选了这个奶粉给你,是我的疏忽和盲信害了你,!

我连续的关注所有的动态,网民一时戏称“忙活了大半年、回到奥运前”,以此来彰示奶粉门事件对中国在国际上造成的“良好”影响。一时间网络上的骂声一片,骂厂商、骂质检、骂国家、骂媒体、骂政策,我也参与了,可到头来,这些又能怎么样,任凭什么也解决不了这一切对女儿造成的伤害和亏欠。

奶粉门事件后的种种:

1、我母亲准备抱女儿去检查,电话咨询时医院答复:检查费自付、有问题国家负担。多么好笑而滑天下之大稽的答案啊,是不是很多人觉得国家很负责任,可有没有人想过,负担什么呢?负担治疗?还是能负担我女儿从没吃过这些奶粉?能保证她能全都吐出来?第一,国家早做什么了,不出事没人问,爆发后发个名单,意思个解决方案。呵呵~~第二,解决?是赔钱么?陪多少钱能换回我女儿不受伤害,有人能明白孩子对家长意味着什么么,钱可以换来一切么。第三,更好笑的事,这个关键的时候国家还在计较---检查费自负!!!国家是不是应该更坦诚,人民会为免费的B超来占便宜么?国家的态度是不是仍然的冷漠呢?第四,那么请问,我更大度点,我来负责1000个孩子的检查费,国家能不能保证这1000个孩子以后的食品都是安全的呢。大头娃奶粉、牙膏超标,这一切问题的背后还不能阻止食品安全的一个又一个隐患,这不得不说,已经到了没有借口只能默认的社会事实了。

2、网络爆料潜规则,说一年前已有湖南台做了专题,但被压制了。还有记者在百度发帖,但被删除了。媒体是政府的喉舌,我们明白,认了。可唯一好似言论自由的网络也充满了权钱交易。产品好不好看排名,谁出钱高谁就排前面,不信你看底下的推广字样,美其名曰网络营销。有负面评价,出钱吧,给你删给你屏蔽,蒙牛、伊利每年500万广告得到百度绝对自主权。难道没人享受过负面评论发完后突然就没了的待遇么。我们唯一能做的就是忍耐,有本事出国,呵呵~~没本事就高傲的告诉大家,我是中国人。

3、骂完圣元骂质检,骂完质检骂媒体骂网络,到最后骂国家,呵呵,然后无奈,再回来骂奶粉。这样的体质下这样的事情或许显得那么正常,可我愤怒的是,你加了有毒物质就加了,还诸多理由,我都接受,可问题是,已经有人曝光了,你们已经知道大家快知情了,事情快暴露了,为什么还要坚持投放呢,过失杀人和故意杀人是有区别的,不是么。你们怎么这么嚣张这么残忍,你害我吧,我一点都不怪,为什么害孩子,你们残存的良心都没有么。如果有机会,我想我会杀人,科技手段我不会,我选择传统方式,更坦诚不是么。

4、圣元的解释牵强的让人想送她们去学中文,她们说,我们的优聪有问题,但是优博是高端产品没问题,请大家放心。第一,她们缩小了影响范围,可能为后期赔付减少了压力;第二,她们大肆辱骂使用优聪的人,活该,谁让你们图便宜买低端产品了啊;第三,优博和优聪同一奶源,这合乎逻辑么,如果合乎逻辑,那么优博没问题,优聪是她们故意放的?

5、 贴吧里出现了很多自称是圣元工作人员的人,她们建议大家自觉,IP记录已经开始,等等一些威胁言论,我真是连愤怒都没有了,人如果厚颜无耻,杀人了还和警察吆喝,那有什么办法呢,负隅顽抗的解决想必思想正常的人都知道吧。

日本,为了提升全民体质,免费发放深海鱼提炼的鱼油。我开始不再抵制日货,或是说我不再相信国产。

我女儿的检查结果还在等待,我向女儿道歉,不是因为我选了圣元(如果我选错了贪便宜,我认了—20多个品牌有问题,我去哪选,怎么选。)

我向女儿道歉,是道歉我把她生在了这样一个道德沦丧又充满美好光环的国度。

2008年9月10日星期三

PostgreSql源码学习(3)

PostgreSQL的Backend目录
作者:Bruce Momjian

bootstrap - 通过initdb创建最初的数据库模板
几乎PostgreSQL的每一个操作都需要存取系统表,那么如何创建这些系统表呢?不能以通常的方式创建这些系统表并向其中插入数据,因为表的创建和插入要求系统表已经存在。这一部分代码的目的就是使用一种仅仅在bootstrap过程中使用的特殊方法来直接建立系统表

main - 将控制转到postmaster或postgres
检查进程名(argv[0])和各种标志, 然后将控制转到postmaster或postgres

postmaster - 控制postgres服务器启动/终止
创建共享内存,然后进入一个循环等待连接请求。当一个连接请求到达时,启动一个postgres后台服务进程,将连接转给它

libpq - 后台服务器libpq库函数
处理与客户进程间的通讯

tcop - 将请求分派到合适的模块
这是postgres后台服务进程的主要处理部分, 它调用parser, optimizer, executor, 和commands中的函数

parser - 将SQL查询转化为查询树
将来自libpq的SQL查询转换为命令形式的结构供optimizer/executor或commands使用.首先对SQL语句进行词法分析,转换为关键字,标识符和常量,然后进行语法分析。语法分析生成命令形式的结构来表示查询的组成。然后这个命令形式的结构被分离、检查和传送给commands中的处理函数,或者转换为结点链表供optimizer和executor处理

optimizer - 创建查询路径和查询计划
使用parser的输出来为executor生成优化了的查询计划.

optimizer/path - 使用parser的输出创建查询路径
它使用parser的输出生成所有可能的执行方法,它检查表的连接顺序,where子句限制和optimizer的表统计信息来评估每一个可能的执行方法,并赋予每个方法一个代价

optimizer/geqo - 遗传算法查询优化
optimizer/path 对所有连接表的方法进行了评估。但是当表的数目变得很大时,检测测的数目也会变得很大。遗传算法查询优化对每一个表进行考虑,然后计算出最优的顺序来执行连接。如果只有几个表,这种方法花费较长的时间,但对于大量的表,这种方法就比较快了。系统有一个选项用于控制何时使用这个功能

optimizer/plan - 优化path输出
为optimizer/path的输出选择代价最小的路径并创建一个执行计划

optimizer/prep - 处理特殊的查询计划
对特殊的查询计划进行处理

optimizer/util - 优化器支持函数
供优化器其他部分使用的函数

executor - 执行来自optimizer的复杂的节点形式的查询计划
处理select, insert, update,和delete语句. 处理这些语句的操作包括堆扫描、索引扫描、排序、连接表、分组、计算集函数和唯一性处理

commands - 不需要executor执行的命令
执行不需要复杂处理的SQL命令.包括vacuum, copy, alter, create table, create type以及许多其他未能例举的命令。调用这一部分代码时使用由parser生成的结构.大多数的函数先做一些处理,然后就调用catalog目录下的一些低层函数来做实际的工作

catalog - 系统目录操作
包含用于操作系统表和系统目录的函数.表、索引、过程、运算符、类型、和集函数的创建和操纵函数在这里可以找到。它们都是低层的函数,通常由上层将用户请求格式化为预定义格式的函数调用

storage - 管理各种类型的存储系统
支持服务器以统一的方式存取资源

storage/buffer - 共享缓冲区管理
storage/file - 文件管理
storage/ipc - 信号灯和共享内存
storage/large_object - 大对象
storage/lmgr - 锁管理器
storage/page - 页管理器
storage/smgr - 存储/磁盘管理器

access - 各种存取方法
支持堆, 索引, 和事务对数据的存取

access/common - 公共存取函数
access/gist - 可自定义的存取方法
access/hash - hash
access/heap - 堆用于存取表
access/index - 所有索引类型都使用
access/nbtree - Lehman and Yao的btree管理算法
access/rtree - 用于索引2维数据
access/transam - 事务管理器(BEGIN/ABORT/COMMIT)

nodes - 创建/操纵节点和链表
PostgreSQL将SQL查询存储到称为节点的结构中。节点是通用的容器,它包含一个类型字段和一个与类型有关的数据字段.节点通常串成链表。

链表包含一个元素和一个next指针.节点和链表广泛的用于parser,optimizer,和executor中用于存储请求和数据

utils - 支持程序
utils/adt - 内建数据类型
包含所有PostgreSQL自带数据类型

utils/cache - system/relation/function高速缓存
PostgreSQL 支持自定义数据类型,因此没有数据类型是固化在核心当中的。当服务器需要查找一个数据类型时它就到系统表中去找。由于系统表频繁使用,所以设立一个高速缓存来加速查找。系统中包括一个系统关系cache, 一个函数/运算符cache和一个关系信息cache. 关系信息cache中包含所有最近访问过的表的信息而不仅仅包含系统表的信息

utils/error - 错误报告
向前台报告后台错误

utils/fmgr - 函数管理器
处理动态加载函数的调用和在系统表中定义的函数的调用

utils/hash - 内部使用的hash程序
用于cache和内存管理器以便快速查找动态存储的数据结构

utils/init - 各种初始化
utils/misc - 未归类的东东
utils/mmgr - 内存管理器(进程私有内存)
PostgreSQL在显式的内存上下文中分配内存. 上下文可以是语句级、事务级或永久/全局级的.这样,后台服务器可以很容易地在一个语句或者事务结束的时候释放内存

utils/sort - 排序
在内存中或者使用磁盘文件排序

utils/time - 事务时间限定
检查元组是否仍然有效,还是属于未提交事务或者已被新行替代

include - 包含文件
每个子系统有一个目录

lib - 支持库
几个通用的程序

regex - 正规表达式库
用于后台服务器的正规表达式处理如'~'.

rewrite - 规则系统
完成规则系统的处理

tioga - 未用

上面是翻译的PG的文档,原文在~/Postgresql/source/src/tools/backend/index.html

组成postgresql后台进程的源代码都在~/Postgresql/source/src/backend目录下,上面这份文档中的小节标题就是子目录名称。面对着这份文档,该从哪里下手呢?我觉得所有服务器源代码大致可以分为四个组成部分:工具部分,查询处理部分,事务存储管理部分,系统初始化部分。工具部分基本集中于utils目录下,对于新手,可以由此入手感觉一下,例如分析分析mmgr的对外接口和内部实现算法。查询部分主要是 tcop/rewrite/parser/optimizer/executor/commands等等。我打算从事务存储管理部分入手分析,主要的代码集中在storage/access之下。系统初始化部分最好到最后在分析。上面讲的还只是后台服务器,其他还有一些东东如odbc/jdbc、各种语言接口、管理工具如pgAdmin/pgAccess等等

刚从同学那回来,感觉很伤感...

上学时,我有一特好的哥们,我们两个很聊得来。那个时候,由于他没什么钱,再加上人比较老实,所以一直没处到女朋友。而我呢,一直是单身。相同的境遇让我们的关系越走越近,有种同命相怜的感觉。

后来毕业了,就分开了。世界变化太快,很多事情都来不及思考,就骤然发生了。找工作,找房子、搬家、失业等等的一切,让我们渐行渐远。而今天他突然打来电话,让我去他那玩。我答应了。去的时候,我还想着今天晚上要和他一醉方休呢。结果一下车就看见他和一个女孩站在那向我招手。感觉很是意外。我同学没什么变化,但看起来精神多了。他轻描淡写的指着旁边那女孩说:俺媳妇!那女孩给了我一个灿烂的笑容。我只好说,不够意思啊,什么时候有女朋友了也不告诉我一声,怎么,对哥们不放心啊。他们俩就默契的哈哈大乐。

我们三个说说笑笑的来到他们租住的地方——位于清河的一个一居室。房子挺旧的,但收拾的很干净,而且布置的很有家的感觉。同学说,知道吗,这房子每月才1000块钱呢。我也不由得的说:真划算。同学开心的说,这是我们俩共同找了一个月才找到的!哦,原来如此。想着与人合租的种种不便,我真的感觉同学这个小屋好挺温馨。参观完房子,他女朋友去买菜了,我和同学坐在沙发上聊天。他说晚上不出去吃了,让我见识下他媳妇的手艺。我就问他,从哪骗来这么好的姑娘啊。他真诚的说,呵呵,你还甭说,她真挺好的!你也知道,我一无所有的,她能跟我,还把我照顾的这么好,想想心里就挺滋润的!我嗤笑到:傻样!

晚上她女朋友做饭,他在厨房打下手。还大声的跟我说话。他说,你也赶紧搬到这边来吧,一个人在那边住着有啥意思啊!我说搬家麻烦着呢,哪能说搬就搬啊!其实我也很想搬到郊区去,市里房租太贵了。但我害怕孤独。我很难想象,下班后一个人坐那么远的车回到郊区那个冷清的房间。而同学不一样,他无论住的多偏远,都会有一个人在等他。

晚饭很丰盛,我和同学喝了不少酒,也说了不少话。我同学说,他现在攒钱呢,等过两年房价降了,就和媳妇一起买个房结婚。说这话时,她女朋友就微笑的看着他。我说,你现在挺“天天向上”的啊,以前你还整天躺在床上玩游戏呢。他说,现在不年轻了,得奋斗了!我看同学那充满激情的模样,我想这一切都是因为他身边的这女孩吧。我打量着这女孩,挺普通的啊,不施粉黛,简单单纯,但就是她让一个有点颓废的小伙子一扫往日的阴霾,变得斗志昂扬了。这也许就是爱情的力量吧。

饭后,他们送我到车站,就在我要上车的时候,我同学拽了下我的胳膊说,:XX,找个女朋友吧!我没说话,上了车,我向窗外的他们挥手告别,一切尽在不言中吧。
夜风吹在脸上,感觉一阵凉意,秋天真的来了。又一年过去了,而我还是那样孤独。说句实话,我挺羡慕我同学的,虽然他们的生活在很多人看来过于的平淡,但他很真实,那都是一些触手可及的幸福啊!有时候,我感觉我们的圈子太光怪陆离了,大家的生活都好像跟演戏似的,流于浮华。想到这,我感觉很伤感。虽然我也和我同学一样普通,比他还要努力,但我知道我却不能和他一样幸福。

几年过去了,身边的那些朋友,曾经幸福的现在继续幸福着,曾经不幸的现在也相继幸福了。他们大多都是很平凡的人,幸福对他们来说也是来之不易,我祝愿他们能一直幸福下去。只是在他们身边我渐渐的感觉很孤独,我明白,也许自己永远也不会幸福了。其实,这一点并不可怕,可怕的是,我怎样能做到内心宁静的生活呢?

看着窗外川流不息的人群,又有谁愿意为我停留片刻,听我说说话呢?还有,那些亮着灯的窗户后面,都有着一个关于幸福的故事吧?

注:从网上看到的,修改了一点。和写这篇文章的人同病相怜。我好像一直都有点忧郁,真怕自己什么时候得忧郁症。

2008年9月8日星期一

PostgreSql源码学习(2)

1 将PG源码编译成附加有调试信息的二进制文件(仅用于linux/unix)

进入解压所得的源码文件夹,运行./configure.然后修改GLOBALmakefile中的CC=gcc选项为:CC=gcc-g,这样在编译的时候gcc就会加入调试信息,然后sudo make install,再按照install文档所说的方法,一步一步安装PG。

2 调试initdb,pg_ctl等程序

由于initdb和pg_ctl等程序并不是后台或者前台一直运行的进程,因此可以使用gdb /usr/local/pgsql/bin/initdb来跟踪调试。

3 调试postgres,psql等程序
由于postgres,psql是后台或者前台的运行程序,因此不可以使用gdb /usr/local/pgsql/bin/postgres 来直接调试,而需要把gdb附加于这几个程序之上来跟踪调试。做法如下:
首先,运行ps -aef | grep postgres
这时会列出很多包含postgres的进程,选择postgres -D 数据所在的目录的那个进程,记录下pid
然后,运行gdb /usr/local/pgsql/bin/postgres pid,这样就可以跟踪调试运行中的postgres程序。跟踪psql的方法与此类似,只是需要事先启动一个psql。

具体的要跟踪哪段代码可以在eclipse里的源代码里寻找,找到相应的代码后设置断点跟踪。(我不太喜欢用vim和emacs来浏览源码,毕竟eclipse提供了很多方便的功能。)当然在ECLIPSE里也可以调试跟踪PG源码。

这次先写到这里,下次准备介绍后台进程。

2008年9月7日星期日

今天学会的几个gvim操作

Shift-Insert 从剪贴板粘贴文本
CTRL-Insert 复制选择的文本到剪贴板
CTRL-Del 剪切选择的文本到剪贴板
Shift-Del 剪切选择的文本到剪贴板

2008年9月3日星期三

转自网易 强大的中国

一个现代化水平落后美国100年的国家,一个人均收入只有美国30分之一的国家,一个13亿国民的总消费能力仅相当于美国4300万人口的国家,一个大多数人还在从事着最低端的装配业务的国家,一个没有了自己传统文化的国家,一个没有任何一所世界一流大学的国家,一个没有一家真正意义上跨国公司的国家,一个至今还没有统一的国家,一个至今仍有大片领土领海被别国侵占的国家。。我不明白这个国家的国民为何还在不停地宣称自己的强大?

2008年9月1日星期一

Bash的陷阱

用shell也有一段时间了,今天看到这篇文章觉得实在不错,因此介绍给大家。

版权声明:可以任意转载,但转载时必须标明原作者charlee、原始链接http://tech.idv2.com/2008/01/09/bash-pitfalls/以及本声明。

感谢fcicq,他的new 30 days系列为我们带来了不少好文章。

今天想分析的是这篇Bash Pitfalls, 介绍了一些bash编程中的经典错误。fcicq说可能不适合初学者,而我认为,正是bash编程的初学者才应该好好阅读一下这篇文章。

下面就逐个分析一下这篇文章中提到的错误。不是完全的翻译,有些没用的话就略过了,有些地方则加了些注释。

* 1. for i in `ls *.mp3`
* 2. cp $file $target
* 3. [ $foo = "bar" ]
* 4. cd `dirname "$f"`
* 5. [ "$foo" = bar && "$bar" = foo ]
* 6. [[ $foo > 7 ]]
* 7. grep foo bar | while read line; do ((count++) ); done
* 8. if [grep foo myfile]
* 9. if [bar="$foo"]
* 10. if [ [ a = b ] && [ c = d ] ]
* 11. cat file | sed s/foo/bar/ > file
* 12. echo $foo
* 13. $foo=bar
* 14. foo = bar
* 15. echo < * 16. su -c 'some command'
* 17. cd /foo; bar
* 18. [ bar == "$foo" ]
* 19. for i in {1..10}; do ./something &; done
* 20. cmd1 && cmd2 || cmd3
* 21. UTF-8的BOM(Byte-Order Marks)问题
* 22. echo "Hello World!"
* 23. for arg in $*
* 24. function foo()

1. for i in `ls *.mp3`

常见的错误写法:

for i in `ls *.mp3`; do # Wrong!

为什么错误呢?因为for...in语句是按照空白来分词的,包含空格的文件名会被拆成多个词。如遇到 01 - Don't Eat the Yellow Snow.mp3 时,i的值会依次取 01,-,Don't,等等。

用双引号也不行,它会将ls *.mp3的全部结果当成一个词来处理。

for i in "`ls *.mp3`"; do # Wrong!

正确的写法是

for i in *.mp3; do

2. cp $file $target

这句话基本上正确,但同样有空格分词的问题。所以应当用双引号:

cp "$file" "$target"

但是如果凑巧文件名以 - 开头,这个文件名会被 cp 当作命令行选项来处理,依旧很头疼。可以试试下面这个。

cp -- "$file" "$target"

运气差点的再碰上一个不支持 -- 选项的系统,那只能用下面的方法了:使每个变量都以目录开头。

for i in ./*.mp3; do
cp "$i" /target
...

3. [ $foo = "bar" ]

当$foo为空时,上面的命令就变成了

[ = "bar" ]

类似地,当$foo包含空格时:

[ multiple words here = "bar" ]

两者都会出错。所以应当用双引号将变量括起来:

[ "$foo" = bar ] # 几乎完美了。

但是!当$foo以 - 开头时依然会有问题。在较新的bash中你可以用下面的方法来代替,[[ 关键字能正确处理空白、空格、带横线等问题。

[[ $foo = bar ]] # 正确

旧版本bash中可以用这个技巧(虽然不好理解):

[ x"$foo" = xbar ] # 正确

或者干脆把变量放在右边,因为 [ 命令的等号右边即使是空白或是横线开头,依然能正常工作。(Java编程风格中也有类似的做法,虽然目的不一样。)

[ bar = "$foo" ] # 正确

4. cd `dirname "$f"`

同样也存在空格问题。那么加上引号吧。

cd "`dirname "$f"`"

问题来了,是不是写错了?由于双引号的嵌套,你会认为`dirname 是第一个字符串,`是第二个字符串。错了,那是C语言。在bash中,命令替换(反引号``中的内容)里面的双引号会被正确地匹配到一起,不用特意去转义。

$()语法也相同,如下面的写法是正确的。

cd "$(dirname "$f")"

5. [ "$foo" = bar && "$bar" = foo ]

[ 中不能使用 && 符号!因为 [ 的实质是 test 命令,&& 会把这一行分成两个命令的。应该用以下的写法。

[ bar = "$foo" -a foo = "$bar" ] # Right!
[ bar = "$foo" ] && [ foo = "$bar" ] # Also right!
[[ $foo = bar && $bar = foo ]] # Also right!

6. [[ $foo > 7 ]]

很可惜 [[ 只适用于字符串,不能做数字比较。数字比较应当这样写:

(( $foo > 7 ))

或者用经典的写法:

[ $foo -gt 7 ]

但上述使用 -gt 的写法有个问题,那就是当 $foo 不是数字时就会出错。你必须做好类型检验。

这样写也行。

[[ $foo -gt 7 ]]

7. grep foo bar | while read line; do ((count++) ); done

由于格式问题,标题中我多加了一个空格。实际的代码应该是这样的:

grep foo bar | while read line; do ((count++)); done # 错误!

这行代码数出bar文件中包含foo的行数,虽然很麻烦(等同于grep -c foo bar或者 grep foo bar | wc -l)。乍一看没有问题,但执行之后count变量却没有值。因为管道中的每个命令都放到一个新的子shell中执行,所以子shell中定义的count变量无法传递出来。
8. if [grep foo myfile]

初学者常犯的错误,就是将 if 语句后面的 [ 当作if语法的一部分。实际上它是一个命令,相当于 test 命令,而不是 if 语法。这一点C程序员特别应当注意。

if 会将 if 到 then 之间的所有命令的返回值当作判断条件。因此上面的语句应当写成

if grep foo myfile > /dev/null; then

9. if [bar="$foo"]

同样,[ 是个命令,不是 if 语句的一部分,所以要注意空格。

if [ bar = "$foo" ]

10. if [ [ a = b ] && [ c = d ] ]

同样的问题,[ 不是 if 语句的一部分,当然也不是改变逻辑判断的括号。它是一个命令。可能C程序员比较容易犯这个错误?

if [ a = b ] && [ c = d ] # 正确

11. cat file | sed s/foo/bar/ > file

你不能在同一条管道操作中同时读写一个文件。根据管道的实现方式,file要么被截断成0字节,要么会无限增长直到填满整个硬盘。如果想改变原文件的内容,只能先将输出写到临时文件中再用mv命令。

sed 's/foo/bar/g' file > tmpfile && mv tmpfile file

12. echo $foo

这句话还有什么错误码?一般来说是正确的,但下面的例子就有问题了。

MSG="Please enter a file name of the form. *.zip"
echo $MSG # 错误!

如果恰巧当前目录下有zip文件,就会显示成

Please enter a file name of the form. freenfss.zip lw35nfss.zip

所以即使是echo也别忘记给变量加引号。
13. $foo=bar

变量赋值时无需加 $ 符号——这不是Perl或PHP。
14. foo = bar

变量赋值时等号两侧不能加空格——这不是C语言。
15. echo <
here document是个好东西,它可以输出成段的文字而不用加引号也不用考虑换行符的处理问题。不过here document输出时应当使用cat而不是echo。

# This is wrong:
echo <Hello world
EOF

# This is right:
cat <Hello world
EOF

16. su -c 'some command'

原文的意思是,这条基本上正确,但使用者的目的是要将 -c 'some command' 传给shell。而恰好 su 有个 -c 参数,所以su 只会将 'some command' 传给shell。所以应该这么写:

su root -c 'some command'

但是在我的平台上,man su 的结果中关于 -c 的解释为

-c, --commmand=COMMAND
pass a single COMMAND to the shell with -c

也就是说,-c 'some command' 同样会将 -c 'some command' 这样一个字符串传递给shell,和这条就不符合了。不管怎样,先将这一条写在这里吧。
17. cd /foo; bar

cd有可能会出错,出错后 bar 命令就会在你预想不到的目录里执行了。所以一定要记得判断cd的返回值。

cd /foo && bar

如果你要根据cd的返回值执行多条命令,可以用 ||。

cd /foo || exit 1;
bar
baz

关于目录的一点题外话,假设你要在shell程序中频繁变换工作目录,如下面的代码:

find ... -type d | while read subdir; do
cd "$subdir" && whatever && ... && cd -
done

不如这样写:

find ... -type d | while read subdir; do
(cd "$subdir" && whatever && ...)
done

括号会强制启动一个子shell,这样在这个子shell中改变工作目录不会影响父shell(执行这个脚本的shell),就可以省掉cd - 的麻烦。

你也可以灵活运用 pushd、popd、dirs 等命令来控制工作目录。
18. [ bar == "$foo" ]

[ 命令中不能用 ==,应当写成

[ bar = "$foo" ] && echo yes
[[ bar == $foo ]] && echo yes

19. for i in {1..10}; do ./something &; done

& 后面不应该再放 ; ,因为 & 已经起到了语句分隔符的作用,无需再用;。

for i in {1..10}; do ./something & done

20. cmd1 && cmd2 || cmd3

有人喜欢用这种格式来代替 if...then...else 结构,但其实并不完全一样。如果cmd2返回一个非真值,那么cmd3则会被执行。所以还是老老实实地用 if cmd1; then cmd2; else cmd3 为好。
21. UTF-8的BOM(Byte-Order Marks)问题

UTF-8编码可以在文件开头用几个字节来表示编码的字节顺序,这几个字节称为BOM。但Unix格式的UTF-8编码不需要BOM。多余的BOM会影响shell解析,特别是开头的 #!/bin/sh 之类的指令将会无法识别。

MS-DOS格式的换行符(CRLF)也存在同样的问题。如果你将shell程序保存成DOS格式,脚本就无法执行了。

$ ./dos
-bash: ./dos: /bin/sh^M: bad interpreter: No such file or directory

22. echo "Hello World!"

交互执行这条命令会产生以下的错误:

-bash: !": event not found

因为 !" 会被当作命令行历史替换的符号来处理。不过在shell脚本中没有这样的问题。

不幸的是,你无法使用转义符来转义!:

$ echo "hi\!"
hi\!

解决方案之一,使用单引号,即

$ echo 'Hello, world!'

如果你必须使用双引号,可以试试通过 set +H 来取消命令行历史替换。

set +H
echo "Hello, world!"

23. for arg in $*

$*表示所有命令行参数,所以你可能想这样写来逐个处理参数,但参数中包含空格时就会失败。如:

#!/bin/bash
# Incorrect version
for x in $*; do
echo "parameter: '$x'"
done

$ ./myscript. 'arg 1' arg2 arg3
parameter: 'arg'
parameter: '1'
parameter: 'arg2'
parameter: 'arg3'

正确的方法是使用 "$@"。

#!/bin/bash
# Correct version
for x in "$@"; do
echo "parameter: '$x'"
done

$ ./myscript. 'arg 1' arg2 arg3
parameter: 'arg 1'
parameter: 'arg2'
parameter: 'arg3'

在 bash 的手册中对 $* 和 $@ 的说明如下:

* Expands to the positional parameters, starting from one.
When the expansion occurs within double quotes, it
expands to a single word with the value of each parameter
separated by the first character of the IFS special variable.
That is, "$*" is equivalent to "$1c$2c...",
@ Expands to the positional parameters, starting from one.
When the expansion occurs within double quotes, each
parameter expands to a separate word. That is, "$@"
is equivalent to "$1" "$2" ...

可见,不加引号时 $* 和 $@ 是相同的,但"$*" 会被扩展成一个字符串,而 "$@" 会被扩展成每一个参数。
24. function foo()

在bash中没有问题,但其他shell中有可能出错。不要把 function 和括号一起使用。最为保险的做法是使用括号,即

foo() {
...
}

(转)完全使用gnu/linux工作

我已经半年没有使用 Windows 的方式工作了。Linux 高效的完成了我所有的工作。

GNU/Linux 不是每个人都想用的。如果你只需要处理一般的事务,打游戏,那么你不需要了解下面这些了。

我不是一个狂热的自由软件份子,虽然我很喜欢自由软件。这篇文章也不是用来推行自由软件运动的,虽然我觉得自由软件运动是非常好的。

这篇文章也不是用来比较 Linux 和 Windows 内核效率,文件系统,网络服务的。我现在是作为一个用户而不是一个开发者来说话的,我们的讨论是基于操作,应用层面的。是为了告诉大学里还不了解,或者不理解 UNIX 的科学工作者和大学生,UNIX 比 Windows 更适合用于科学研究工作,请大家理解 UNIX 的工作方式,不要用 Windows 的标准来要求 Linux,而要用一个科学工作者的标准来要求自己,用UNIX 的思想来武装自己。

我显然是反对在大学,特别是理工科专业推广 Windows 的。我也反对在对"娃娃"们的计算机启蒙教育中使用 Windows。因为 Windows 不论从技术上,经济上,思想风格上都是与我们培养高科技人才的目标格格不入的。Windows 的流行属于历史遗留问题,爷爷一级的人当然已经不可救药,但是我们不应该让下一代继续走上歧途。

UNIX 不是计算机专家的专利

当我建议一些非计算机专业的人用 Linux 的时候,很多人说:"UNIX 是计算机系的人用的,我们不能理解。" "UNIX 是男孩用的,我们女孩不用。"

但是其实世界上的大多数科学家和工程师几乎用的都是 UNIX 作为他们的电脑工具。就因为它简单,可靠,稳定,强大,有趣。甚至很多时候 UNIX 就是唯一的选择。

你说:"我们都会用 UNIX 的话,你们计算机专业的人还用来干什么?" 很容幸的告诉你,计算机专业的有一部分人就是专门为你们提供这样强大而方便的计算机工具的。如果他们制造的工具只有自己会用的话,那这个工具还有什么用?

理解 GNU/Linux 不要用 Windows 的标准来要求 Linux。

由于GNU/Linux这个词太长,下面如果没有特别指明,"Linux"就是指GNU/Linux"。

在这个年代,恐怕没有人需要我来介绍 Linux 是什么了吧?如果你觉得"Linux 只不过是跟 DOS 差不多的东西",那请问问你旁边的 Linux 用户,Linux 到底是什么?

那为什么我还要写一篇这样的文章?因为,我发现还有很多人不不理解 Linux 和 UNIX,虽然他们也在用它,但是他们有时会问:"为什么 Linux 不能像 Windows 那样 ……?","怎么Redhat Linux不能 mount NTFS 分区!","Linux 下用什么整理硬盘?","什么时候OpenOffice才能完全兼容Word文件啊?","现在还有什么Windows能干的事情Linux干不了的?"……

他们有40G的硬盘,却只为 Linux 分配了2G空间,有时还抱怨"这个东西怎么占这么多硬盘!" 似乎 Windows 该占用大部分硬盘。他们把重要的数据装在Windows的分区,似乎信不过Linux。他们总是到处寻找新奇的,好看的GUI程序,对命令行的东西一概不屑一顾。他们对Drag&Drop,菜单配置,自动升级非常感兴趣。他们如果找到一个很像 Windows 程序的 Linux 程序,一定会很高兴的说:"哈哈!Linux 也能……了!"如果Linux在某种测试中胜过Windows,他们会高兴得跳起来。他们没有办法用Linux 解决问题的时候,甚至用Wine来运行Windows程序。有时实在没办法,只好重起到Windows,或者干脆省得麻烦,在 Windows 下装一个 VMWare 虚拟一个 Linux 玩。

你如果出现了上面的情况,说明你的思想受到了 Windows 的某种潜移默化的影响和误导。你没有能够从本质上理解存在于 Linux 身上的 UNIX 思想。你支持 Linux,你喜欢 Linux,你能从中感觉到快乐,这非常好。你现在只需要明白的是:Linux 从来就不是一个玩具,它是天才UNIX的后代。UNIX 是自晶体管发明以来最伟大的发明,它从诞生那一天开始就比 Windows 的设计出色。

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

Unix 是简单的,你不需要成为一个天才也能理解这种简单。

UNIX 的设计者 Dennis Ritchie 说:"Unix is simple. It just takes a genius to understand its simplicity." 但是我不这么认为,因为我不是一个天才,但是我却勇敢的把 Windows 完全删除掉,遇到不明白的事情的时候努力用 UNIX 的方式去解决,而不是寻求 Windows 的帮助。现在我体会到了 UNIX 的思想和好处,我可以用比 Windows 高效几倍的效率工作。因为我相信这样的信念:"Windows 能办到的事 Linux 一定能办到,而且办的更好。"

这小节开头的话应该改成:"Unix 是简单的,你不需要成为一个天才或是计算机专家。但是在这个冲斥着 Windows 错误观念的世界,你需要信念和勇气才能理解它的简单。" 我下面就告诉你一些我理解到的东西。首先,你要知道的是微软在国际科学领域是根本没有地位的。

微软的地位

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

我上次和王益合作写了一个算法演示程序,那个算法是贝尔实验室一位科学家Steven Fortune很天才的发明,为了程序能够被身边大多数人使用,我们选择了 VC+MFC 作为平台。我在分析算法时还得到 Fortune 很热情的鼓励,寄给我一份资料,还多次回信耐心的给我讲解了很多细节。但是程序完成之后,我把样品发给 Fortune,他回信说:"对不起。我机器上没有 MFC。" 话说的很客气,但是我已经感觉到了他对 Windows的不屑。然后我把 MFC 静态编译进程序再发给他,他就没有再回信了。他显然不是瞧不起我,而是确实有难处。

你能感觉到这位科学家对微软和 Windows 是什么态度了吧?不是反感,而是他心里根本没有 Windows 这个东西!微软在高科技领域没有发展,那么它怎么生存呢?到发展中国家去发展一下,他们的人民还对电脑一无所知,我说不定甚至可以打入大学的计算机系呢。我送他们软件,我捐钱盖大楼,我出钱找图灵奖获得者来演讲,让他们觉得我们都是科学家!

好了,现在全国的大学包括清华,几乎所有人机器必装盗版 Win2000,Office XP,学校的选课系统是非IE不能正确浏览,论文用 Word 编辑,演示用ppt做,email 的通知附件是 doc 文件,你不用 Word 打不开,连 863 项目都用 VC 写程序了。我很久以前就看到一份报纸说,"微软为什么不严厉打击盗版?" 这篇文章说,微软非但不打击中国的盗版行为,而且有放任之趋势。放长线吊大鱼,"以后我要你们加倍的来还我!" 确实如此,它的目的快实现了。

Windows 笼罩下的中国计算机教育

说句丢脸的话,比尔盖茨很久以前是我的偶像…… //blush

在中国,比尔盖茨被很多人奉为神圣,"少年电脑天才",甚至有的人提到他的名字就做出"抱拳对天"的姿势。很多人谈到微软的"新技术","高科技" 都是眉飞色舞。各种"VC编程圣经","深入了解 Visual C++"之类的书,在开头几页都会出现非常肉麻的字眼,"在那团团的混沌中,一个开天辟地的精灵,Windows 1.0,诞生了……"

微软的软件被这么多人盗用,那么人们是怎样使用这些盗版程序的呢?先看看电脑培训班,教的都是一些 DOS 命令,打字,Windows 基本操作,Word 文档处理,PowerPoint,高级班可能有 Excel,Access…… 参加各种微软认证考试,MCSE,MSDE 的人络绎不绝。考试辅导班都贴出了"280元,考过为止"之类的字样。考试参考资料更是昂贵,有些电脑书店整整两书架都是"Microsoft Press"的东西。我有个同学参加认证考试,每门考试都要200多元。而且你一次考不过可以再考,又要交钱。他后来还津津乐道跟我说,看我,花了 XXXX(一个四位数)元考过了微软认证,得到一张比尔盖茨亲笔签名的证书和价值6000元的 Windows XP 内部发行版。

"电脑要从娃娃抓起",我们再来看看娃娃们学的是什么。大部分家长给孩子买了电脑之后,他们首先就会装一个盗版的 Windows,然后买来盗版的游戏开始玩。如果哪个孩子会用 Delphi 编程序,那可不得了。报社记者,电视台争相报导,说,某某学校的初中生某某,在别人都还在玩电脑游戏这种"初级阶段"的时候就已经用 Delphi 写程序了。镜头还瞄准了他显示器上面的像框中的比尔盖茨头像!

我刚进入大学计算机系时还不懂得什么是操作系统,因为我以前只用过"中华学习机"。看到新入学的同学们各个谈论的都是 "Windows 95","VC"…… 我简直觉得我落后了好几十年一样,整个一土人,根本跟他们答不上话。好不容易找到一个比较熟的同学问了一下:"你们天天谈论的瘟95是什么啊?" 答:"win95就是一个操作系统,跟DOS是一类。""朵死是什么?" "你连DOS都不知道是什么?别在计算机系混了。" 学校上课当然不讲VC编程之类的东西,但是上 Pascal 的老师有一次就说:"嗨,我们学校真是落后。现在别人都用 C, C++,甚至 VC 了,我们还在讲 Pascal。不知道什么时候才能有VC课啊。你们出去也是要用VC的,只好自学了。" 于是,有些同学很多时候上课都捧着一本很重的"Windows 编程大全"之类的书,根本没有听课。吃饭时就念念有词的跟我说,"代码的优化是无止境的","匈牙利命名法真是伟大的发明" …… 这就是中国很多大学计算机系的情况。

感觉到无知了?这不是偶然的,而是微软长久以来埋下的伏笔。它要让无知的大家都把它奉为神圣,它要让支持UNIX,Xwindow的人一旦说 UNIX 好,Xwindow 好的时候,都被一群人围着说教:"这个 Windows 也能做到","你对 Windows 有偏见","微软才是主流啊","你敢瞧不起 win2k?",".NET 就是世界潮流","微软的毕竟是新技术","有钱就是有技术"…… 甚至在一番论战比较后败下来还是要说:"Windows 性能差点,但是易用性强","Windows 是老百姓用的,要求别那么?quot;,"微软那么有钱,以后想超过 UNIX 还不容易吗?"……

发达国家的计算机教育

我前段时间在 USENET 发文问有关 Scheme 语言的问题时,认识了一位丹麦人。他解决了我所有的问题,并且建议我阅读一些很"深奥"的有关程序语言语法,文法的书,他告诉我很多网站可以学习 LISP,Scheme,人工智能,算法。他叫我看 Jonathan Rees 的论文 "Syntactic Closures"。他还打包给我寄过来一份 MIT 的 "How to Design Programs"。他说他在自己的 PC 机上装的是 Linux,他用 Emacs 编辑,运行Scheme 程序。他对 Emacs 的了解和爱好真是使人惊讶。他大学本科毕业时做的毕业设计是一个 Scheme 解释器。这对于我来说是望尘末及了。

他是那么的不厌其烦,我的每一个问题他都详细的回答。我有时都觉得过于详细了,怎么这么耐心啊?我觉得他似乎是我的高中老师。他是什么样的人呢?我好奇的打听了他的情况。原来,他是丹麦一所普通高中的计算机老师。

他说他在高中里讲授程序设计和算法,计算机语言文法。他说用 Scheme,他的学生不用再为内存泄漏等程序语言本身的问题而烦恼,而专注于问题和算法本身。有利于培养学生解决问题的能力,特别是用计算机解决数学问题的能力。

天哪!为什么欧洲出现那么多数学家,几何学家?你看看别人重视的是什么!我们的计算机教育如果继续这样下去,只会沿着弯路越走越远!

微软和它的朋友们的如意算盘

下面来看看微软的收入是怎么来的。首先,Windows 98系列操作系统,一个就是 100多美元,每次升级又是几乎同样的价钱。Windows NT 还要贵几倍,而且有用户数目限制,5个用户的,10个用户的…… 以后如果要增加用户数目还要按比例付钱。

花了如此多钱买来的操作系统就能用了吗?它竟然连压缩程序都没有提供!你装上Windows 之后一般第一件事就是去下载一个 WinZip 吧,"只要 29 美元"。Windows会中病毒啊,马上花 70 美元买一个 Norton AntiVirus 吧。还有黑客呢?再买一个Norton Internet Security 好了,100 美元。系统需要优化,磁盘需要整理,买一个Norton System Works 是你最佳的解决方案,100美元。

可是你现在还是不能干正事啊!你想要一个 Word, PowerPoint?那就买一套 Office XP 吧,一起买便宜些,$459.90。

那些程序不会用啊!那些菜单怎么设置,到底有什么功能啊?看"帮助"也学不会。买本书看看吧,我推荐"Special Edition Using Microsoft Office XP",不贵,$27.99。这本书里面大部分是屏幕抓图,还是买一本旧的比较划算,$17.85。

你如果只是当个秘书,上面的差不多还凑合了。可是你有更高的追求,你想成为 Windows程序员。首先买一个 Visual Studio.NET 吧,要不然怎么编译程序。$494.95。

为了紧跟微软动向,世界潮流,不能不注册个 MSDN 什么的吧?这个贵一点,不过物有所值啊,$2,799。

嗯,你现在已经是上层阶级,白领人士了。你现在可以像这样"自由"的,"安全"的生活了。

为什么要反对使用 Windows

很多人都说不应该完全否定 Window,Windows 也有它的长处。不应该骂微软。

对。 Windows 容易操作,适合普通用户。如果微软把它自己定位在 P&G,Philips 那样的地位,能够给我们的百姓提供周到的,完善的,价廉物美的服务。那我肯定是很喜欢它的。但是从上面的种种情况说明,微软是一个野心极大的国际垄断组织!它的产品没有一个是不出问题的:Windows 不稳定,容易中病毒,而微软不为大家免费提供杀毒软件。我就是要让你们花钱买我的朋友 Symantec 的杀毒软件,谁叫你们已经上了我的贼船?这叫什么售后服务啊!

你买来微软的程序,安装的时候一般都有一个协议,说:" 由于微软的程序造成你的数据损坏或丢失,微软概不负责。" 我想很多人肯定觉得这个不合理,不想按那个 "I accept"。但是你的软件买都买来了,钱都花了,现在一按 "I decline",安装程序马上就会退出。你只好被迫点击了 "I accept"!这不是不平等条约吗?

我已经目睹了好几个朋友的文档被 Microsoft Word 损坏,有的是编辑了十多天的30多页的论文,有的是费了很大工夫做出来的个人简历,那个朋友为此失去了到自己向往的P&G 工作的机会。就在他要投简历的前一个晚上,就在那一瞬间…… 不知道他痛哭的时候有没有想起要投诉微软,可是谁叫我们用的都是盗版呢,况且你还点击了 "I accept"。

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

有些人说:"微软毕竟开创了一个历史,造就了今天的 IT 行业。" 但是,如果没有微软,我们今天早就用上非常稳定,非常可靠,非常方便,非常"傻瓜"的软件了!微软是阻挡信息技术发展的罪魁祸首。

微软的程序的工作方式(注意,我只是说操作方式,病毒的事情另外算)确实适合于一般家庭,上上网,发发邮件,打打游戏都不错。可是微软却要把自己包装成什么"高科技"企业,要在世界各地设置"研究院",在大学计算机系赠送不适合用于科研的 Windows产品,甚至出钱请图灵奖得主来中国畅谈"二十一世纪的计算",还在大会上宣传自己的 .NET 技术。非要把别人认为自己是科学的,自己是领导世界高科技的。但是呢?它什么高科技也没有。欧洲,美国,哪一个关键部门在用微软的东西?NASA? DOE? CERN?你仔细想一想,微软的程序对人类到底有什么重大作用?

什么是 Windows 能干而 Linux 干不了的事情?---
"Windows 能干而 Linux 干不了的事情,那就是不需要干的事情。"

有个朋友看我半年没有用 Windows,有时就会问我:"你只用 Linux,有没有发现有些Windows 能处理的事情 Linux 干不了?"---
我回答说:"Windows 能干而 Linux 干不了的事情,那就是不需要干的事情。"

Windows 能做的有益的事情 Linux 都能做---
Windows 下的某些功能确实是我们需要的,那么 Linux 的开发者们和用户也需要这种功能,他们就会去实现这种功能,而且比 Windows 的方式好得多。由于大多数科学家,工程师用的都是 Linux 或者某种商业 UNIX, 所以几乎所有商业的科学工程程序,比如Matlab, Mathematica, AutoCAD, Candence的,Synopsys的,Avant! 的……全都是先有UNIX 的版本(包括Linux),然后再考虑移植给 Windows,甚至根本不移植给Windows,因为 Windows 的机器一般没有足够的能力运行这样的程序。你不要以为只有 Windows 才有 PSpice, UNIX 的 HSpice 要好得多,而且可以运行在大型主机上。当然它们不是免费的,但是它们值那个价钱。

但是 Windows 下有些东西在 Linux 下没有很相似的,或者你找到很多类似的,但是它们每一个比起 Windows 的那个程序都要差很多,那么原因有两种可能性:

有一个完全类似的程序,但是由于它乍一看不漂亮,被你忽略了。而其它程序虽然看起来很漂亮,但是它们是一些初学编程的人写的。现在由于 Gtk, Qt 的诞生,Linux 下开发图形界面程序极其简单,很多初中生甚至小学生都可以随手编出一些漂亮不中用的程序。如果你整天寻找这样的程序挑来挑去,永远也找不到你满意的。当然也有一流的程序用 Gtk 和 Qt,比如 GVIM 就可以用 Gtk 作为图形界面,我还知道 Synopsys 一些程序用了 Qt。

我曾经也犯过这样的错误,从外表区分一切。结果优秀的 FVWM, lftp, Mutt, wget 都被我忽略过。当我找回它们的时候,我是那么的羞愧不已,它们现在都是我的朋友 我第一次看到 FVWM 觉得它只不过是一个有很厚很难看边框的东西。可是现在,我的同学看到 FVWM 都说:"哇!真漂亮。"

有另一种完全不同的方式可以达到相同的目的,甚至更好。

很多人很关心 Open Office, Star Office, AbiWord, ... 他们多么盼望有一天某一个Linux 程序能够完全兼容的打开一个复杂的 doc 文档。但是你永远也不可能有那一天。为什么呢?因为微软为了占有市场,必定不会让其它系统的程序能够完全兼容它的文档格式。它一定会不断变化 doc 文档的内部结构,隐藏一些秘密,让其它公司的程序打开 doc 文档时总是有某种问题,从而你必需购买 Microsoft Office 和 Windows。

你应该想一下,那么多的高智商的大学教授,科学家,学生,他们用的都是 Linux 或者其它类型的 UNIX,他们没有 Word 可用,怎么处理文档呢?这么多年没有一个像Open Office 的程序出现,难道大家没有办法写文档吗?

显然不是这样。你看看那些高水平的学术杂志,论文,那些大学教授的网页,那些漂亮的幻灯片,它们是什么做的?原来 UNIX 用户早就有非常方便的 troff, LaTeX, SGML等东西可以处理文档,而且它们比起 Word 都要高明的多。Word 显然被这些大拿忽略了,以至于很久以来没有人想在 Linux 下开发一个类似 Word 的程序,除非某些公司想抢微软的饭碗。

很多人留着 Windows 在硬盘上的原因无非是为了用 Word 和 PowerPoint。我见过一个教授,他的 Windows 笔记本电脑上除了 PowerPoint 什么都没有。有一天演示的时候,他指着堆乱字符说:"对不起,这是一个公式……怎么每次都是这样……" 其实有比PowerPoint 好几百倍的东西可以制造幻灯片,你可以用最简单的方法制造世界一流效果的论文和幻灯片。你待会儿可以看看我的TeX网页,你就会知道为什么我可以完全离开 Windows。

Windows 能做的那些没用的事情 Linux 永远做不好

电脑游戏
有些人说 Linux 下不能玩 Windows 下所能得到的所有游戏。的确,Linux 下虽然也有少量的游戏,比如 Quake。但是它没有 Counter Strike, 没有 Star Craft, ……

并不是说电脑游戏不该玩,但是应该适可而止。电脑是用来处理事务,帮助你学习,解决问题的工具,而不是一个玩具!整天沉迷于电脑游戏中,而不出去感觉外面的世界,你会变得越来越冷酷,越来越缺乏人情味。你与真实的世界越来越远。

你可以在 CS 里杀人,你可以在 Tomb Raider 里探险,你甚至可以在 Tony Hawk's Pro Skaters 里滑板…… 但是 It's not real!你虽然有很高的"反恐技巧",但是遇到歹徒的时候,你是那么的怯懦;你虽然控制 Laura 伸手敏捷,但是你打篮球的时候怎么总是被人断球?你虽然可以轻易的在 THPS 里作出一个 "360 kickflip to hangten grind to fakie",但是你踩在自己的滑板上的时候还不会 ollie!

说回来,如果你偶尔玩一下电脑游戏未尝不可。但是世界上有远比 Windows + PC 更好的游戏方式。Sony 的 PlayStation2, SEGA 的 DreamCast, Nintendo 的 N64,Namco的街机……每一个都比 Windows 游戏精彩,每一个都有如此高的3D性能,以至于Pentium4, Itanium + GForce4 都无法与它们比美!

Linux 的用户们都是关心解决世界的关键问题的份子,他们哪里有时间用自己的机器来玩游戏啊?他们每天用Linux高效的做完自己的工作就到阳光下享受自然去了。要玩游戏也是玩一些类似推箱子,贪吃蛇之类的智力小游戏。所以,你知道为什么 Linux 几乎没有游戏了吧?

"整理硬盘,优化系统"

这是一个非常有意思的话题,仅次于有关"病毒"的话题。相信很多 Windows 用户都有整理硬盘的经历。在很多 Windows 用户眼里,"硬盘用久了,会出现碎片,速度会减慢,需要一个程序来整理,整理硬盘的时候不要做其它工作",这好像是天经地义的事情。

我也曾经津津有味的看着 Norton Defrag 一点一点的把我的硬盘排序,调整,用图形的方式显示出来,然后报告?quot;100% 没有碎片。你的硬盘现在已经达到最佳状态。" 我现在才发觉我那时是多么的幼稚。

Linux 和 UNIX 用户似乎从来没有"整理硬盘"这种说法呢?你觉得很奇怪吗?如果你觉得很奇怪,那说明你的思想在某种程度上被微软的垃圾程序禁锢了。你需要明白,UNIX 的大型主机很多必须是一天24小时,一年365又1/4天不停运转的,要是每个星期都要整理一次硬盘,在整理的时候几乎不能干任何事情,那是绝对行不通的!

Linux 机器根本不用整理硬盘,这就是为什么没有看到过 Linux 用户整理硬盘。Linux 的文件系统是比 Windows 的 FAT, FAT32, NTFS 高明得多的文件系统,它们不但可以对文件设置权限,实施完全的保护,而且可以"越用越整齐","越用碎片越少"!你应该把文件大部分放在 Linux 的分区,而不是 Windows 分区,因为它比 Windows分区可靠得多。

还有更滑稽的事情就是有很多"Norton System Doctor","Windows 优化大师","超级兔仔注册表魔法" 之类的程序存在,而且价格昂贵。似乎一个操作系统本来应该有很多问题,需要别的厂商做程序来"优化"它,而且为了得到优化,你需要付钱!这些问题 Linux 根本就没有,所以不需要什么优化。Linux 内核本身就是高度优化的。

IDE

有些人在抱怨为什么 Linux 没有一个良好的 IDE 开发环境。Linux 现在已经有一些IDE 了,但是总是有很多问题。你是不是正在寻找,正在期望 Linux 某一天可以有一个VC那样的开发环境?你有没有发现你正在进入微软给你设下的怪圈?你为什么一定要用 IDE?你说:"IDE 开发迅速,调试方便,适合大型程序……" 那说明微软的程序在你脑子里已经比较根深蒂固,你需要好好清醒一下了,看看我来告诉你。

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

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

有一次某杂志采访一些出名的 Linux 内核程序员,包括 Linus 在内,没有一个人用IDE,有的人用 VIM,有的用 Emacs,只有 Linus 说"GNU Emacs is evil",但是其实他用的是一种跟 Emacs 有同样键绑定功能的 MicroEmacs。大家都是用编辑器编辑了程序文件,然后用 make 这样的自动工具调用 gcc 编译器完成编译工作的。甚至高级的 Windows 程序员也不用 IDE,他们可以从命令行调用 cl,nmake 来编译自己的程序。虽然这样的 Windows 程序员很少,但是他们却是最了解 Windows,最高明的Windows 程序员。

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

而在 UNIX 下就不一样了。你可以用你最喜欢的 VIM 编辑程序,你在 VIM 里可以调用GNU make,make 可以调用 gcc, ld, ... make 的出错信息可以被 VIM 捕获,VIM 能帮你在源程序里定位。你如果喜欢 icc, 你可以让 make 用 icc 而不是 gcc。你如果觉得 gdb 跟踪变量时比较麻烦,你可以用 ddd 来显示各种数据结构之间的关系。你还可以在 Emacs 里调用 gdb,那样就可以同步显示源代码了。而且 VIM 和 Emacs 还可以编辑很多其它东西,比如信件,LaTeX 文档,HTML,配置文件…… 你不用另外找一个什么编辑器来干这些杂活了。很多程序比如 Mutt, tin 都可以在内部使用 VIM,这样就更方便了。实际上 make 在其它方面还能帮你很多忙,我的每一个比较大型的 LaTeX文档都是用 make 维护的。

Linux 能干的高精尖的事情 Windows 都干不了

当然有很多事情是Linux/UNIX的专利了。因为 Windows 只能装在 PC 机上,好像以前也有 Alpha 可以使用 Windows NT,但是就是没见到有人用。PC 机的能力是很低的,像我们编程序处理 NP-Hard 问题的人,用 Windows 的机器显然速度不够,而且有时一个问题算上几天甚至几个星期,Windows 机器是以"死机"著称的,我们怎么能放心?所以几乎所有科学计算程序,EDA 程序,高性能图像处理程序都不是 Windows 的。他们有时也会移植一些给 Windows,但是常常降低那些程序的能力。你比较过 Windows 版本的 Mathematica 和 Linux 的有什么区别吗?

IBM 制造的最大的并行计算机有 8000 多个处理器,Windows 不可能有能力管理这么多处理器,它用的是什么操作系统?答案是 Linux。

《泰坦尼克号》电影里的三维动画,那么细腻逼真,Windows机器能做出来吗?不行。那也是 Linux 机器做的。

民航总局用来训练地情人员的虚拟现实训练设备,Windows 当然无能为力。那都是商业的 IRIX 机器。

UNIX 是最早支持 TCP/IP 网络协议的系统。它上面有很多可以互相协作的网络服务程序,它们经过多年的使用和修订,已经达到比较完善的程度。而就在1997年,微软的比尔盖茨还在扬言:"Internet 是没有前途的。" 微软的这个"远见卓识"大家应该都已见识,它后来加上的网络服务程序IIS漏洞之多,让公安部都频频发出警报,大家也是见识了的。

其实你知道了,Windows 没有一样有用的事情能比 UNIX 干的更好。

Linux 干不了的有用的事情 Windows 照样干不了
当然 Linux 不是万能的。它也有不能干的事情,电脑也有干不了的事情。但是 Linux干不了的事情,Windows 肯定也干不了。这些事情就是我们需要探索,需要努力的事情了。在你探索的过程中,Linux 必定是你的好伙伴。

不要把Linux和Xwindow掩盖起来!不要把我们的用户当成傻瓜。

什么?你早就知道 Windows 是垃圾?噢!你怎么不早说呢!害我废话这么多。嘿嘿。

"好了。你知道 Windows 是垃圾,你现在用什么?quot;

"Linux + Xwindow"

"那我问你,Xwindow 是什么样的?"

"不就是跟 Windows 差不多吗?只不过 'Start' 按钮比较方,而且上面不是一个Windows 标志,而是一个脚丫子。点击一下居然还有很漂亮的中文菜单。我喜欢!"

"你知道什么是'根窗口'吗?"

"不知道。从来没听说过呢?"

"根窗口就是遮盖整个屏幕的那个最大的窗口。"

"哪儿有什么窗口啊!我没有看到呢?"

你发现了问题吗?这些 Linux 用户说是在用 Linux 和 Xwindow,但是他们对 Linux和 Xwindow 几乎完全不了解。很多人用了那么久 Xwindow 都不知道根窗口是什么东西,不知道其实按钮也是窗口,不知道窗口管理器和其它程序有什么关系,大家都以为窗口上面的按钮是程序自己放上去的,不知道窗口?quot;class name","resource name"是什么东西。他们也不知道 .Xdefaults 是用来干什么的。特别是他们很多人都不知道 Xwindow 的字体是如何命名的,什么是 fontset,有了一个新的字体也不知道怎么安装。

他们被遮在 Linux 之上的一层一层的包装迷惑了,他们等待有图形界面的工具来帮助完成一切事情,他们认为 Linux 跟 Windows 一样,只是麻烦一点。他们知道 Linux内核很好,但是他们感觉不到 Linux 和 Xwindow 在操作层面的天生的先进性,随后不久就把 Linux 完全删除掉了。你发现没有,要用户理解 UNIX 和 Xwindow 的操作层面的先进性,才是留住用户的最好办法。如果用户体会不到操作时的方便和高效,内核再好他们也不会理会。

但是用摹仿 Windows 的作法来吸引用户,永远会失败的。因为 Linux 如果摹仿Windows那一套低效率的方式,那么 Linux 的这套"低效率方式"永远比不上Windows 的那一套"低效率方式"。那么用户就会说:"这个 Linux,没有一样比的上 Windows。"

Linux 天生就是继承了 UNIX 的高效的工作方式,为什么我们要把它掩盖起来?我们为什么只告诉用户 KDE 的菜单怎么用?我们为什么不能像早期的 Xwindow 书籍那样第一节就告诉用户什么是 X server, 什么是 X client,什么是 Window Manager, 什么是根窗口。第二章就告诉用户窗口有哪些属性,什么是 classname, resource name, hint,怎样使用 .Xdefaults, xrdb ……

在这里我又不得不说一下那些 Linux 的发行公司和写书的人,他们把 Linux 和Xwindow 包装起来,却没有从基本上告诉用户 Xwindow 的工作原理。很多书籍讲授的层次就是在Gnome, KDE 的菜单操作的层次,靠大量抓图来占篇幅,"繁荣"Linux 书籍市场。

现在很多人已经把能够利用别人的库写出一个好看的程序作为自己编程水平的象征。在这?quot;图形化","可视化" 的年代,你如果还在用 troff, LaTeX 写文档,你还在用VIM 自己编辑 HTML,用 Mutt 处理邮件,你还在用文本模式的 gdb 调试程序,你还在用Xlib 写程序, 你还在用 tin 上 USENET,你还在自己写 Makefile,写机器代码,你还在玩 Clossal Cave 这样的字符模式冒险游戏,那你就是老古董。

其实这种思想是错误的。虽然你是一个坚决的 Linux 支持者,但是你的思想是 Windows的思想。你认为图形界面,菜单,按钮就可以解决一切问题,就可以给你高效方便。你还是没能摆脱微软给你的潜移默化的东西。你其实离不开 Windows 那样的环境,你迟早会删掉自己的 Linux。

GUI vs. CLI
做一个坚定不移的"两面派"

大家看到这个标题是不是热血沸腾?两派大虾都可以围攻我了:

GUI派用户:"哇!我一看你这小子就是 CLI 的。要不然自己写什么 Makefile?用什么Mutt?"

CLI派用户:"切~ 你还用 X!高手都不用 X。你是 GUI 那边的。"

可怜的我:"555~~ 你们都不要我~~ GUI 和 CLI 就那么水火不容吗?"

计算机界这样的门派之分还很多。很有特点的就是 CLI 和 GUI 了。CLI (Command LIne)的狂热份子声称永远不用 X。我上次在实验室看到一个同学用一个 SecureCRT 登录到Sun 机器,然后用一个 vanilla vi 编辑程序,我建议他启动一个 GVIM 过来显示在Exceed 上可以有语法加亮。但是他坚决反对,说:"高手不用X。你想想,要是我在一个很慢的网络连接怎么用 X?而且好多服务器没有装 X 程序。"

但是我们实验室的网速可够快,Windows 机器都有 Exceed 啊,而且 Sun 机器有全套X 客户程序包括 GVIM。他说他是 CLI 的坚决拥护者,但是他却在用 Windows,他后来打开了好几个 SecureCRT,每次从文本框输入地址,用户名和密码,从下拉菜单选择"SSH2",然后点击"Connnect"。他还不断的夸SecureCRT 是"网络管理员投票选出的最受欢迎的登录方式"。老天,SecureCRT 本身就是个 GUI 啊,他其实没有明白Xwindow 的好处。

你说我是 GUI 的?我虽然很少在 console 下工作。但是我对 bash, VIM 很熟悉,我可以让 bash 按照我的键绑定方式来工作。我可以在 rxvt 里使用 Mutt 来收发 email。我的每个桌面上都常常堆放着一打不同大小的 rxvt。我用 VIM 编辑 LaTeX。我自己写Makefile 来维护 LaTeX 文档。我有时用 mpg321 来放 mp3。我上BBS用的我自己写的expect 脚本。 好了,CLI 派的朋友可以收我做盟友了

你说我是 CLI 的老古董?我的 FVWM 被我配置为可以"手写操作",我只要画一个"r"就可以启动 rxvt,我只要画一个 "U" 就可以启动 GVIM,…… 我用 GVIM 语法加亮模式编辑程序,我用 Mozilla 浏览网页,…… GUI 派的现在好像认我做朋友了

好了。CLI 派的朋友,虽然我很喜欢命令行,但是我有时在屏幕上左右画一下就可以执行:

Module FvwmConsole -terminal rxvt -geometry 45x5-0+0 -bg gold -fg midnightblue -fn "-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-*"
你是不是现在又想把我逐出师门?

GUI 派的朋友,虽然我很喜欢窗口。但是我可以在 FvwmConsole 里输入:

All (rxvt) MoveToDesk
把我所有的 rxvt 移动到我现在工作的桌面。"这家伙,怎么这么快就叛变了!"

其实何必分什么 GUI 和 CLI,UNIX 和 Xwindow 都是工业标准,它们从设计那天开始就有非常灵活的用法,各个程序,不管是 GUI 还是命令行的都可以互相协作。UNIX 和X 是一家,何必搞的那么偏激,非此即彼?你从我上面的行为可以看出 GUI 和 CLI的模糊界线吗?我就是坚定不移的"两面派"。

UNIX 是简单的--
"我相信简单就是最好,如果太复杂,我是不能理解的。" -Seymour Cray

很多第一次用 Linux 的人会惊奇的发现,Linux 的程序居然不?quot;安装"就可以运行,程序拷贝到随便那个目录都可以用,而不是一定要占用你第一个分区的空间。程序的设置只是一些简简单单的文本文件。你根本不需要什么"注册表修改器" 就可以改变系统的设置。这就叫做简单,但是简单就是美。虽然这只是 UNIX 简单性的一个肤浅的认识,你已经体会到了某些东西。

但是简单并不意味着功能弱,并不意味着落后。相反,简单意味着强大,意味着生命力。

我不会再继续阐述我理解到的"UNIX 的简单",因为这个需要自己去体会。

UNIX 是永恒的
有人说:"Plan9 会取代 UNIX,Mach 会取代 Linux 内核。"

但是你如果是一个深入体会了 UNIX 的人,你就会知道:UNIX 的思想是永恒的,不管时过境迁,Plan9 是否代替 UNIX,UNIX 的灵魂都会在 Plan9 身上现形!

我为同一个设备写过 Linux 内核和 Windows VxD 驱动程序。写 Linux 驱动程序时,我对 UNIX 设计的完美的一致性,远见性所折服。UNIX 用同样界面的 read(), write()系统调用就可以对不同的对象:普通文件,设备文件,管道,管道文件,socket,……进行统一的读写操作。我跟本不需要写一个测试用的应用程序就可以对我的设备驱动进行测试,因为 cat, cp, dd, 它们也使用了同样的 read(), write(),设备和普通文件在应用程序眼里没有区别。在那个还没有 Smalltalk, 没有 C++ 的年代,UNIX 的设计者已经使用了所谓的 "面向对象方法"。对,C 语言也可以实现面向对象。

UNIX 的系统调用几十年都没有很大变化,这非但不是顽固,不进步的象征,反而是UNIX 的远见卓识的体现!这就跟 TeX 程序几十年都不变的情况差不多。这些才是真正的永恒的 master piece! 你应该改变所有软件都必需从 0.1, 1.0, 1.1, 1.2, 2.0,..., 3.0, 3.1, 95, 98, 2000, XP, ... 不断升级的想法。

Windows 就不同了,它在最开头只是一个 DOS 之上的图形包装而已。后来为了兼容以前的糟糕设计,不得不加上很多累赘。我写 VxD 驱动程序的时候就深有体会,Windows 95 程序对设备的操作只有用 DeviceIoControl,我不得不写了两个应用程序来对设备驱动进行测试。Windows 内核的不一致性和隐密性使我非常恼火。不过 Windows WDM驱动程序现在也有了 ReadFile, WriteFile,…… 那说明什么?那说明 Windows 在向UNIX 学习,或者有可能是某个 UNIX 设计人员在微软打了几天临工,顺手加了几个UNIX 的东西进去。这样做是没有用的,Windows 从一开始就是非常糟糕的设计,它的历史的包袱太沉重了,缝缝补补有什么用?它只能永远的被 UNIX 甩在身后!

UNIX 是强大的
让聪明人干任何他们想干的事情。

UNIX 的一个特点就是非常高的灵活性,Xwindow 也具有这种灵活性。这种灵活性体现在哪里呢?

UNIX 的程序一般都有很多参数,不管你现在用的着用不着,总有人需要某些参数。它们的行为很多都可以用配置文件来改变。比如 GNU bash, 通常缺省的命令行输入方式是 Emacs 方式,但是只要我编辑一个 .inputrc 文件,就可以把它变成 vi 的输入方式,而且我还可以自己绑定键序列到某些操作。我可以用 shopt 来设置它的很多特点,比如是否进行通配符扩展,是否可以把一个变量当作一个目录来cd,是否可以自动纠正某些明显的目录名打字错误 ……

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

我们再来看看 Xwindow。Xwindow 是一个出色的设计,它把显示服务器和客户程序分开。一个显示上既可以显示本机上的程序,也可以显示别的机器上的 X 程序,而它们都遵守你的窗口管理器的统一指挥,它们之间可以方便的传送剪贴版数据,各种事件 …… 比如有时我的 XFree86 上会出现四个不同机器上的 XTerm,两个不同机器上的 GVIM,…… 它们统一受本机上的 FVWM 指挥。

Xwindow 程序都具有很多很多命令行参数和 resource 参数。你可以随意的在命令行或者 .Xdefaults 文件设置所有的颜色,字体,尺寸…… 而且如果你用 xrdb 把 .Xdefaults 导入到根窗口,那么其它机器上没有经过配置的同样的程序,显示到你的机器上的时候也会遵守同样的外观规定。

Xwindow 的窗口具有 Property, 也就是一些可以自己定义的共享数据(原子)。正是因为这些 Property 的存在,使得 Xwindow 具有无比强大的生命力。X 的窗口管理器和其它客户程序之间并没有统一的协议,但是后来出现了 ICCCM(客户程序间通信规范),这个规范就是通过 property 定义的。现在又有人定义了一套"扩展的窗口协议(EWM Hints)",使得Xwindow 可以具有某些 Windows 的特征,比如一个工具条程序可以告诉窗口管理器:"这个屏幕下面被我占据了24个像素的空间,你最大化程序的时候不要越过这个界线。"

一个强大的窗口管理程序比如 FVWM,它收到这样的提示时,可以答应工具条程序的这个要求,也可以不答应。一切选择的权力在于谁?当然是用户了!

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

还有就是很多 Windows 程序把人当成傻瓜,而它是"智能程序"。比如,有一个程序就是喜欢把你的每句话第一个字母都变成大写,我不说它是谁了,你遇到的时候就知道了。

如果连"一句话开头一个字母要大写"这么明显的问题都需要程序帮你纠正的话,人脑还用来干什么?况且如果你故意想要不大写的话,那就更麻烦了,我楞是没有从它那一大堆菜单里找到怎么关闭这个愚蠢的选项。

只有符号才能完全操纵计算机。

我们来说说很多初学 Linux 的用户。虽然他们在用 Linux,但是他们打心眼儿里是觉得Windows 的工作方式好,他们希望 Linux 有一天能"像Windows那样"。你说:"我的鼠标一点,我菜单一拉,…… 就可以完成我的操作。" 但是我要告诉你:"Linux 从来没有摹仿 Windows,将来也不会。Linux 从诞生之日起,它的工作方式就比 Windows 的先进。

Linux 属于能勇敢面对符号的人。只有符号才能完全操纵计算机。"

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

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

鼠标虽然是很好的工具,但是它的表达能力是有限的。你不可能光用鼠标就让电脑完全明白你的意思,它毕竟只有3个按钮。看看我的MetaPost页你就能体会到鼠标的这一弱点。所以我们虽然很喜欢鼠标,但是却不能完全依赖它。

各个小程序的完美配合

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

在 Windows 和其它非 UNIX 操作系统中,这种合作是非常困难的。我曾经在Windows下使用 Perl来进行一些自动工作。但是 Windows 的文件操作,管道是如此的不稳定,程序之间基本不能合作。你别想在 Visual Studio 窗口里面嵌入 UltraEdit 编辑器,你别想用一个 expect 脚本来控制 telnet 到水木清华BBS。

Windows 的程序都是大而全,大而杂,所有的电子邮件程序都需要自己提供编辑器,自己发送和收取邮件,自己显示邮件的附件。每一个BBS程序都提供自己的 Virtual Terminal, 自己的通讯代码。每一个 IDE 都自己提供编辑器,编译器,汇编器,调试器。人们为了使用一种新的程序,需要适应所有这些它提供的界面,而不能使用自己喜欢的编辑器的键绑定,菜单组织…… 不能 DIY!

你要知道,最高级的电脑是定做的,自己想要什么什么CPU,什么主板,多少内存,什么硬盘,键盘,鼠标,显示器都是自己选择的。最高级的滑板,自己想要什么牌子的版面,什么牌子的沙,什么桥,什么轮子,什么轴承,也都是自己选的。最高级的古球拍,木板,胶皮,海绵,胶水都是可以自己选择…… 而用 Windows 程序,你得到的是大杂烩,就像你去买"品牌机",只有那么几种配置,而且附带很多你不需要的软件和服务;就像你去买组装好的滑板,你想要大一点的轮子和窄一点的板子,但是你没有这种选择余地!Windows 程序就相当于最廉价,最次的滑板。但是它却会花你更多的钱,因为一旦一个部件坏了,或者你不喜欢了,你不能另外找一个好的换掉它,你必需重新买全套配件!

而 UNIX 和 Xwindow 就是高档的"组装货"。比如我用 Mutt 的时候,我可以用 VIM也可以用 pico 来编辑邮件,我可以用 ImageMagick 也可以用 xv 来显示附件里的图片,我可以用 lynx 把 HTML 附件转成文本嵌入窗口中,我也可以把 HTML 附件交给Mozilla 图形显示。我可以让 GnuPG 帮我把邮件进行数字签名和加密,我也可以用其它 PGP 程序。

我想让 Postfix 而不是 sendmail 帮我发出邮件,我想让 fetchmail 帮我收邮件,转发给 postfix,然后被我自己写的Perl过滤器处理…… 这一切我都可以办到!我可以选择我最喜欢的专门的程序来完成专门的工作,然后把它们结合在一起,我也可以分别得到它们的好处。

学 UNIX 绝对不是浪费时间
有人告诉我:"你看我用 Windows 什么都不用学。而用 Linux,光是安装就花了我一个星期!"

首先,我要告诉你的是,你装 Linux 花了一个星期,不是因为 Linux 不好装,而是因为你已经习惯了 Windows,对 Linux 最初难以理解而已。你想一想你最初安装Windows的时候呢?你花了多少时间搞明白什么是硬盘分区?什么是盘符?什么是目录?你认为Windows 就是那么容易可以学会的吗?虽然你觉得没花时间学,但是你以前在用别人的机器的时候已经耳濡目染,自然就了解了。而且由于你想要 Linux 和 Windows 并存于硬盘上,又增加了安装难度。而且你肯定没有得到有经验的 Linux 用户的帮助,否则他们会在20分种之内帮你搞定。一个星期也太夸张了.

如果一开始用的就是Linux就没有这个问题。你想想如果你没有用过 windows,你肯定会很习惯 /etc, /usr, /usr/local ,... 而不是 C:, D:, E:, ... 是不是?如果你只用过Linux,你第一次用 windows 时恐怕也会问:"/bin 目录哪里去了啊?"

最重要的是,你用惯了的UNIX工具,它们可以伴随你一生,而不会那么容易变化或消失。你可以永远不用再换另外的工具了。除非那个工具比你这个好的太多,而且可以完全模拟你现在的工具。

我们实验室一个60多岁的老师,用vi, cc, make, ...都几十年了,他以前的经验绝对没有白费,而且教会了我们一批又一批的学生。vi 伴随着 UNIX 的最初发行而诞生,直到今天还是世界上头两号编辑器之一!有些人的 FVWM 配置文件已经用了 10 多年,现在完全不经修改还可以用。

看看 Windows 的工具,你从 Borland C++ 换到 VC, 就必需适应新的环境:菜单不同了,颜色不同了,按钮不同了,帮助信息不同了,热键不同了,编译器参数,调试器功能也不同了,…… 那个时候恐怕花要花你很多时间去适应。当你刚刚适应了 VC, 你又要换成VJ, PowerBuilder, C++Builder, ...

很多windows程序员都是这样,开头在dos下用Turbo C, 然后是 Borland C, VC, C++ Builder, ......不断追赶微软的潮流。而且微软的SDK, MFC, .NET …… 什么都在不断变化,不断出问题,又不断的在修改…… Windows 程序员不得不买又厚又重的 Microsoft Press 的书籍,看了才一个月,又过时了。今天你才学会了写 VxD,明天你就必须用WDM 了。你不得不注册 MSDN 才能赶上 Microsoft 的步伐。很多人说:"计算机是贵族的专业。" 这就是微软一手造成的。

这些东西才是没完没了的浪费大家的时间和金钱的。这是是浪费生命!我们为什么不使用从诞生就那么一致和完美的 UNIX?你需要理解先进工具的设计理念。UNIX 的工具就像我们用的汽车,它的离合器,油门,刹车,方向盘,后视镜,永远都在同样的位置。用惯了的话,你对你的汽车的每一个部件都会了如指掌,甚至你自己都可以修车了。这难道不好吗?

有人说:"你说我们需要了解 UNIX,难道你要开车还必须了解汽车的结构吗?" 你去问问开车的司机,哪一个不了解汽车的结构的,那他的驾照就是混来的。你难道想要傻瓜型的"微软牌汽车"吗?我们来看看:

你买的微软牌汽车最开头只有一个座位,每加一个座位你得向汽车公司付钱。车上的防撞气囊不时会冒出来,说是为了你的安全。每开100英里要大修一次,每过一年要换一次引擎。附带的,你还必须换用由微软汽车公司指定的石油公司提供的新型号的机油。你的车出了问题,但是法律规定,你不准私自拆开你的汽车来修理,你必需到微软汽车公司指定的维修点去,需要付相当多的钱才能修好一个小毛病。

最可气的是,你每换一个型号的微软牌汽车,它的刹车和离合器都在不同的位置,你需要重新去考驾驶执照。如果这辆汽车在途中刹车失灵,你受了重伤,你也不能状告微软汽车公司,因为你买来汽车之后必须签一个合同,说"由于微软牌汽车对你和家人造成的一切死伤,微软概不负责。"

怎样完全用 GNU/Linux 工作

说了这么多 Windows 的不好。我还没有告诉你我怎么用 Linux 处理有些必要的事情。半年以前我由于中文老是配置不好,一直是双系统,不时需要重起到 Win2k 来处理汉字。后来我找到了 miniChinput, XSIM 和 SCIM 输入法。这下可以处理汉字了。而且 VIM 和Emacs 对汉字支持越来越好。我的大部分文本是用 VIM 编辑的,包括程序,信件,网页,LaTeX 论文,MetaPost 绘图语言。

我不用 Word 这样的程序写论文,而是用 LaTeX,因为这是世界上效果最好,最方便的论文工具,是大多数学术杂志要求的格式。幻灯都是用 ConTeXt 做的,用起来很简单,而且效果非常漂亮。你可以看看我的TeX介绍。

至于绘图,你可以用很多可视化的工具,比如 xfig,dia。但是对于我来说,任何可视化的工具都不能完成某些任务,我需要一种可以精确描述图形的语言。我找到了MetaPost。它简单又好用,而且效果是世界一流的。我的插图,如果不是图像,都是MetaPost 画出来的。

我曾经抱怨 mozilla-mail 经常突然消失,损坏我好几封快要完成的信件。后来我发现mozilla 的邮件处理程序确实是不稳定的,功能又弱,有经验的 UNIX 用户都不用这样的程序。Mutt 是一个非常稳定可靠的 UNIX 邮件处理程序,而且功能非常强大。我曾经为 Gnome 和 KDE 的不稳定而烦恼。现在我找到了非常强大的 FVWM。KDE,Gnome也能和 FVWM 一起工作。虽然 Gnome 和 KDE 总体不稳定,但是某些部件程序还不错,很多 gtk, Qt 的程序也很不错,它们很多都是可以独立于这些桌面环境运行的。

Linux 有很多强大方便的工作方式是 Windows 没有的,或者有类似的东西,但是很差劲或者用起来不方便。比如 ssh 服务,rsync,cvs,expect ……

结论

我写这么多的目的是什么?我希望喜欢 Linux 的朋友,完全清除微软和 Windows 灌输在你脑子里的谬论,别再相信它们所谓的"新技术",别再追赶 Windows,因为追赶Windows =倒退。马克思有一个思想很重要,"新生事物并不一定是在最近出现的。"

UNIX,Xwindow, TeX 虽然都比 Windows 先出现,但是它们才是先进生产力的代表。我们要清楚的认识到什么才是真正的现代化,什么才是真正的自动化。

消除学计算机很难的幻觉,勇敢的拿起像 bash, FVWM, TeX, VIM, Emacs, Mutt ……这样强大的程序,勇敢的面对符号。不要再埋怨"Linux 为什么不能像 Windows 那样",不要再浪费时间试用这样那样的程序,不要再忙着升级。你需要理解 UNIX 的工作方式,因为那是大多数科学家的工作方式。Linux 可以成为你的好朋友,你需要认识它,了解它,信任它,才能完全的靠它来高效的工作。当然,在游戏机,手机,掌上电脑里,或者在用电脑来娱乐的时候,用一些"傻瓜软件"还是不错的.

我希望小学,中学的计算机老师能够提高自己的素质,在孩子们的启蒙教育中充分利用Linux 神秘的特点,引起孩子们对数学,对符号的好奇心。诱导他们用计算机来解决世界上的有趣问题,而不要把教学的范围局限于计算机的操作和它自身的问题。

附录: 我用来处理日常事务的 Linux 程序
好了好了。我知道你发现自己应该转向 Linux,你很后悔当初为什么中了微软的邪。但是不要着急。因为这些东西本来只是工具,它们是用来完成你的主要任务的辅助而已。你以前选错了工具,这不要紧。你还是拥有你自己原来的专业技能,那才是最重要的。工具的东西只有慢慢适应转换,不能一蹴而就,否则你会感到非常没意思,甚至放弃。

如果你只想做一个像我这样的普通用户,主要目的是用 Linux 来完成自己的任务,那就可以不用系统管理员或者网络管理员的标准来要求自己,因为当一个系统和网络管理员确实很辛苦。这里我对实验室的网管同学鞠一躬,谢谢你的指点和帮助. 不用把你的机器当成网络服务器,不用开放没有必要的服务,设置好 ssh, ftp 已经足够了。这样会省去了解很多没必要了解的东西的时间。不用过度考虑"安全",因为 Linux 缺省已经很安全了。不过你有兴趣了解更多那也无妨。

下面给出一些推荐使用的可以处理一般事情的程序。至于你的专业上要用到的科学和工程软件比如 Matlab, Mathematica, Maple, HSpice, Design Compiler, …… 还有其它物理上的,化学上的,生物上的 …… 都必然有 Linux 和 UNIX 的版本。当然他们很多不是免费的,不要总是觉得什么都应该免费,自由不等于免费。它们是经过很多人辛勤劳动的产物,是可靠的程序,它们物有所值。

下面列出我常用的一些 Linux 程序。一个列表里可能有很多,那是为了方便你来选择,我列出了比较信得过的。但其实很多只有第一个是我真正在用的,我不喜欢试用程序。我不是一个合格的网络管理员,我的服务器都只设置了我自己需要的功能,那样可以省去我很多麻烦。

Shell: bash。它结合了 csh 和 ksh 的优点,并且有 readline 功能,你可以随意绑定自己的键盘。
编辑器: VIM, Emacs。
程序开发: GCC, make, ld, Scheme48, j2sdk, Perl, Python, Tcl/Tk ...
论文,幻灯工具:LaTeX, ConTeXt
绘图工具:MetaPost。这个语言太强了,以至于我只用它了。你不熟悉的话可以用xfig, dia 来画一些流程图之类的图片。
图像处理:ImageMagick。其中的 import 程序可以屏幕抓图,convert 程序可以转换图像格式,display 可以显示图片和简单编辑(缩放,换质量,转格式,简单绘图,简单虑镜)。通常我就这么点需要。如果你要更强大的图像工具可以用 Gimp, 它几乎和Photoshop差不多。
自动管理工具:make。我可以用make来自动编译程序,自动编译文档,自动更新插图…… 全自动,而且不会重复劳动。
数值计算程序:SciLab。这个程序基本上可以代替 Matlab。
代数计算程序:MAXIMA。这个程序基于世界上最老的计算机代数系统之一: 由美国能源部(DOE)发行的 MIT Macsyma 系统。它是用 Common Lisp 实现的。很多现在的符号计算程序比如 Maple 都从 MAXIMA 身上学到很多东西。它现在经过 DOE 批准以GPL发行,永远是一个自由软件。
加密程序:GnuPG。我的 PGP 密钥就是它搞出来的。
打包,压缩程序。什么都有: tar, gzip, bzip2, zip, rar, ...
虚拟光驱程序。Linux 不需要虚拟光驱程序,直接 mount 就行了。
ftp 服务器:proftpd, vsftpd。proftpd 功能很强,但是我只用了最简单的一种设置。
WWW 服务器:apache。(我一般没有开)
ftp 客户程序:lftp,ncftp。它们都是文本方式操作的,但是比起图形界面的方便的多。比如 lftp 几乎具有 bash 的所有方便功能,Tab 补全,bookmark, queue, 后台下载,镜像…… Linux 也有图形界面的 ftp 客户程序,但是大多不稳定,有很多问题。这就是很多人抱怨 Linux 不如 Windows 的一个小原因。还有很多人用 Wine 模拟 Windows 的leapftp,其实 lftp 比 leapftp 好很多,你需要的只是适应一下。
自动下载工具:wget。它非常稳定,有一次我下载一个程序,用 IE 和 Mozilla 下载回来的文件都是坏的,最后还是 wget 可靠的传输了数据。用它甚至可以镜像整个网站,比起WebZip 这样的 Windows 程序强多了,而且不会因为你不付钱就在下载回来的网页里强制插入广告。
虚拟终端:rxvt, xterm, gnome-terminal, mlterm, ...
X server: XFree86
窗口管理器:FVWM。编译加入了 libstroke。
中文输入:XSIM。被我修改过以适应 FVWM 的需要。另外推荐你还可以用 SCIM。
email 处理:Mutt + Postfix + fetchmail
看 PDF, PS, DJVU 文件:Acrobat Reader, xpdf, GhostScript, gv, djvu工具包和netscape 插件。
看CAJ文档。我从来不看CAJ之类的文档,如果找不到PDF或PS,直接去图书馆借最好。
看网页:Mozilla, Phoenix, lynx。Mozilla-Xft 的显示效果比IE 好很多。
英汉字典:IBM智能词典,星际译王。
编辑网页:我用VIM 直接写 HTML。你如果想要图形方式的可以用其它的比如screem, BlueFish。
登录其它 UNIX, Linux 机器:openSSH, telnet。 我喜欢用 openSSH 把其它机器的X 程序通过 ssh 加密的隧道传到我机器上显示。
登录 Windows2000 server 的 display service: rdesktop,...我有一天试了一下,不错。后来就没有用过了。
同步程序:rsync。我用 rsync 通过 ssh 来跟某些机器同步数据,或者做自己机器上不同目录间的同步。
上BBS:rxvt(或任何一种终端) + telnet + chatbot(helloooo 机器人的程序)
QQ, ICQ: 我没有 QQ 或 ICQ。不过你可以用 Gaim, 它同时支持 QQ, ICQ 和很多其它的即时通信方式。ICQ 用户也可以用 Licq。
放录像:MPlayer, RealPlayer。MPlayer 太好了,直接就可以放 VCD, DVD, divx, wma, wmv ... 用 Windows 的同学都很羡慕我,说 Windows 要放这个需要大堆插件。rm 最好还是用 realplayer 放,它也是免费的。
放音乐: xmms(mp3,ogg都可以), mpg321(放mp3), ogg123(放ogg)。mpg321 不如xmms管理音乐文件那么方便,但是有时我还是用 mpg321 放 mp3 作为背景音乐,因为懒得开一个xmms窗口:-)
游戏:我觉得 KDE 的那个 ksokoban(推箱子),很好玩 :-)
看 Word 文档。请 Word 用户把文档全部转为 PDF 或 PS 再给我,文档里没有特殊的格式干脆就用文本吧,何必那么麻烦。以前很奇怪的是,通知里本来没有什么特殊的格式居然还要发doc附件的email。现在好了,我们系发通知都用文本,PDF,甚至图片了。
其它程序:还有很多我需要用而你不一定用得着的。比如,Doctor Scheme,
Scheme48, Scsh, kawa...这些程序只有 Doctor Scheme 有Windows版本。还有很多幕后工作但是你一般不察觉的:xinetd, telnetd, sshd, crond, atd, lpd, ... 他们都比 Windows 的对应者强的多,或者根本没有对应者。


附:

写给支持和反对《完全用Linux工作》的人们
作者:王垠

在一阵阵唾骂和欢呼声中,《完全用linux工作》被转载到了天涯海角。很多人支持我,也有很多人唾骂我。我不知道它是怎样流传到那么多地方,其实我不知道它都被转到哪里去了…… 我知道现在这篇文章又会罗里罗索写很长(因为我计划写这样一个东西已经很久了,坐在Emacs前面总是有一种巫师在炼丹的感觉……),所以先提出中心思想吧。中心思想就是:

我只是一个傻瓜。看《完全用Linux 工作》的时候请用你们自己的判断力。

几乎所有人都承认,那篇文章很偏激。当时的情况是这样,我用 Linux 的时候被一个同学鄙视了,说:"你怎么用像 DOS 一样落后的东西,真土!看我漂亮的 Win2000..." 这跟当面嘲笑别人老婆或者妈妈有什么区别?我义愤填膺啊,就几乎跟他吵起来。然后就写出了这篇文章放在主页上,叫了几个人来看。接着我珍爱的 TeX 又受到众人鄙视,于是我又写了一篇文章打击 Word,然后把 TeX 捧上了天。道理很简单,鄙视我喜欢的东西的人就是敌人 --邪教徒或者恐怖分子--他支持的我就反对,他反对的我就支持。为了使人信服,举例必用大科学家,世界一流大学,一流实验室的名号,虽然我不跟其中任何一种沾边。还好那时候我还不认识上帝,要不就打他的名字了。论据不管是实际经历还是自己推测的,先写上去再说。扬眉吐气啊!隔壁微软研究院的哥们居然都被我打动了,开始写 Linux 程序,学用 LaTeX 和 Emacs。不过几天之后我就把它删掉了,因为我自己都感觉到偏激。

于是就没管那篇文章了。可是没想到它竟然已经被转载到那么多地方,似乎引起不小的波澜。有段时间每天都收到十几封email,国内的,国外的,问技术问题的,夸我的,骂我的,讲道理的,鄙视我的,想交朋友的,语重心长的,号称要删掉机器上的 Windows 的…… 我的主页居然也占据了"王垠"在 Google 上的首选位置,把那个日本的什么王公贵族"李王垠殿下"都挤下去了。大家似乎都知道我天花乱坠的本事了,有人就想找我写文章向别人推荐商业软件,我很后悔没有趁机狠狠赚一笔。走到图书馆,亮出借书证,管理员张大了嘴说:"哇!你就是那个 Linux 牛人啊!",也不知道他是褒是贬。甚至有人把他的 BBS 昵称都改成了"坚决拥护精神领袖花生" (花生是我的外号)。为此还骗到了好几顿报告?quot;报告"是清华专用动词,意思是请客吃饭)。虽然我觉得自己身上没有什么值得自豪的东西,但是又有点为自己兴风作浪的本事感到惊讶。虽然我一再告诫自己要谦虚,但是不由的有一种毛泽东,甘地,甚至摩西的感觉。我更加体会到"网络上没有人知道你是一头猪"的真理性。其实,不但网络上没有人知道我是一头猪,实际生活中也没有人知道,其实我是一头笨猪。

这么长的时间之后,还有人写信给我说"深受鼓舞","提壶灌顶","对不起我还在用 Windows 给你写信","真想删掉Windows 啊" …… 我很好奇,我的文章真的有那么大的威力?我再看这篇文章,觉得有点惨不忍睹,看了开头就不忍心再看下去。我告诉同学我很后悔写了一篇这么偏激的文章,可是他?quot;徼枉必须过正,你没有错",所以我也搞不清楚自己这样写对不对,这样自责对不对。就像我从来不敢看自己照片,却有时被人称为帅哥,就让我无法判断自己是否帅一样。所以现在我就开始怀疑我自己是否真是一头笨猪。也许多年以后,我会正确的评价我的想法。就像我现在觉得我15岁的照片挺养眼一样,也许我会发现自己其实是一头聪明猪?

写这篇文章不是为了让自己免得被骂,也不是为了显示高深的猪的哲理。只是因为我深深的感到人应该有自己的判断力,不要简单的接受别人说的 DO's 和 DONT's。怀疑一切,同时又敞开心扉去了解一切。

看过《完全用Linux工作》的朋友,请仔细检查里面的 DO's 和 DONT's。

2004.8.26

看这篇文章写的挺好,忍不住转载一下,希望越来越多的人用Linux。

Linux背后的人


翻译: Axis(夏昊)

1. Linus和Bill

似乎在一夜之间,这个名字突然变得同象比尔。盖茨一样的耳熟能详。但是比尔。盖茨,哪怕身价有数不清倍的百万美金,也永远不会变成Linux Torvalds。这位29岁的芬兰人,简单而强大的Linux操作系统的创造者,超越了盖茨的神话。也有传闻说盖茨是一个卓越的程序员,但Linus是货真价实的高手。还在大学里时他就完成了一个货真价实的操作系统。年轻时的盖茨把拷贝他自己平庸的程序的程序员同行称为“贼”,而慷慨的Linus把他的杰作与全世界共享。哪个人,哪种运动会取胜,也许会决定技术发展的未来。

两年之前,如果有谁说技术巨人和微软的亲密合作伙伴HP,会忙着保证她生产的电脑顺利运行Linux,那会是天方夜谭。但Linus采取的开发模式,邀请全世界共享和改进他的个人原创,从而引发了一场革命。怀疑论者觉得微软面对美国司法部的起诉,把Linux标为值得重视的竞争对手,只是在制造假想敌,以洗脱垄断的罪名。但微软透露的真相也许比他们想象得多。去年岁末,一份称作“万圣节文档”的微软内部白皮书泄露到媒体,它的结论也许会让盖茨睡不安寝。

Linus被不少人认为是开放源码软件(open source software)的最佳代表人物,微软对付竞争对手的传统套路恐怕对他无可奈何。“Linux和其他开放源码软件,日渐可信地证实了OSS至少同商业软件同样强壮,如果没有超越后者的话。”微软工程师Vinod Valloppillil 的白皮书这样写道:“OSS聚积,发挥Internet上千百万人集体智能的能力令人惊异。”

但“万圣节文档”没有提到的是,Linus已经证明他是众多反盖茨人物中最高明,最强有力的一个。Oracle的CEO Larry Ellison的NC攻势只是过眼烟云,Sun的CEO Scott McNealy 尽管在JAVA上取得巨大的成功,但似乎已深陷在无条件反对盖茨的泥泞之中;相比之下,Linus 始终没有偏离自己的道路。尽管他自己绝不会承认,但你可以说他是一个圆滑老练的政治家。他避免了纯粹自由软件的支持者和以盈利为目的的厂商新人之间的对峙,将Linux搞得分崩离析。他欢迎所有能增强软件可靠性和可用性的商业Linux版本和商业Linux软件,也依然不遗余力地支持那些和他一起开创局面的自由软件激进派。

难以置信的是,在这个IPO和高科技亿万富翁层出不穷的时代,Linus并不显得急于将成功兑换成现钞。他仍然开着1997年初,离开芬兰开始在美国第一份工作(也是到目前为止唯一的工作--这是在硅谷)买的那一辆Pontiac Grand Am。一年之前,当Santa Clara 的那间小公寓再也住不下Linus,他的幼儿园教师妻子和他们的两个女儿时,他们租了所看的第一间房子--就在马路对面。关于他的雇主,高度保密的Transmeta公司的各种谣言,在硅谷甚嚣尘上,但到目前为止,Linus似乎没有什么大发一笔横财的迹象。

面对面聊天时,这位被大多数人只以名字Linus相称的人,戴着眼镜,语音轻柔,容易接近,对自己的才能和成就充满自豪,而且十分幽默。他从前是出名地逮什么吃什么,现在则对寿司情有独钟。由于编程太多,他的肚子已经有点儿凸,不过他的声音和他顽童般的笑容里远没有失去芬兰特色的那种轻快。

Linus看来是一个平民主义者,他希望打破垄断性软件定价的思想方式,也反映在他的其他口味上。比如,他不买精装书,因为他相信精装书卖不太好,所以定价一定偏贵。同样,他更喜欢好莱坞的娱乐片,而不是欧洲的高品位艺术电影。他的父亲在电台工作,他的母亲翻译报纸新闻,叔叔为芬兰电视台工作,祖父是报纸记者,所以他理解新闻媒体,而且似乎也对于自己越来越出名自得其乐。
2. 叛逆,叛逆

问:你是否认为自己是传统的,正面意义上的黑客,一个叛逆者?我觉得仅称你为”一心编程的程序员“是不够的。

答:我一般试图避免用黑客这个词。在和其他搞技术的人私下交谈时,我会称自己黑客。但同媒体接触时我只说“程序员”什么的,因为现在黑客往往是另外一个意思。

问:那么“叛逆者”这个标签如何?

答:“叛逆者”意味着你为某种事业而战,而且是在反对另一些东西。我不说自己叛逆,我说自己是有准则的。(ethical instead of rebel)叛逆的根本意义在于反对,而我觉得有自己的目的,两者的区别就是这样。我有自己的准则,我不关心别人是否也相信这些准则,我觉得这完全是个人的选择。

问:那么你如何描述你的准则和目标呢?

答:我的基本生活准则是:“己所不欲,勿施于人”,这不是仅限于基督教的思想,这是世界性的。这条准则很简单,而且在绝大多数情况下它可以告诉你该做什么。如果你举棋不定“我该干什么”,你可以自问“我会希望他(她)干什么?”马上你就知道答案了。

问:你是否相信你的工作或者你的技术中,有一定社会或政治的因素?

答:从开始就不是这样。一开始和社会完全无关,最初的动力是技术和我的个人兴趣。没有政治性是因为:政治在本质上就是要改变人的想法,我一直不希望这种事发生在我头上。

但许多其他的“开放源码”人士未必和我一个想法。其中许多是政治性的:一些人试图让另一些人接受自己的观点,我不希望自己那样做。我也会谈自己的看法,但只是在别人问我之后。

问:有许多机会你可以下海,或者决定Linux操作系统应该商业化,但你显然没有这样做,这让我很奇怪。为什么?

答:这是我个人的兴趣问题。吸引我搞Linux的一直是技术。它一开始就不是为了赚钱,即使到了可以赚钱的时候,那也不是我的本意。商业化会改变我的动机。

我很高兴有人在Linux上赚钱,那样增加了Linux的深度,也引入了新的动机和新的因素,如果不是因为商业目的那是不可能的。但我开始Linux的时候,商业化并不是我的选择。

问:许多人会认为那是一个困难的抉择。但你却处之泰然,你觉得是为什么呢?

答:也许在美国这是一个困难的抉择,但在世界的其他许多地方就未必了。美国是以金钱为中心的,每个人都重视钱,这当然也有好处。

但在芬兰就不一样了。那里的文化背景下,成功是值得赞赏的,但你也欣赏别的东西,也许更多一些。比如说我的家族就很重视学位。他们认为学习是重要的,他们并不太在乎钱。
3. Linus 2.0

问:围绕着你在Transmeta的工作有着重重的谜团,能给我点提示什么时候可以真相大白吗?

答:不行。也许明天就可以,也许得等15年。

问:是Transmeta找你还是你找Transmeta?

答:双向选择吧。我认识一个瑞典人,他在Transmeta工作。他到了赫尔辛基呆了一天和我见面,那时我说:“总算可以毕业了。”,因为那时我已经几年没有好好放松了。然后他就问我是否愿意去 Transmeta,然后我和他的老板谈。一周之后,1996年的秋天,我就坐飞机到加州来看。

问:我理解你不能透露和工作有关的事情,但是可以告诉我这份工作哪一点让你兴奋吗?

答:部分原因是那时我已经在Linux上干了6年,也希望有一些别的东西。我可不想在一根绳上吊死。我不希望Linux是我生活的全部,我希望能够找到一些本身就能激励人的东西。而且,小公司人情味比较足。还有,涉足一些世界上没有其他人涉足的领域也让人兴奋。

问:那些东西和Linux无关吧?

答:他们在内部就用Linux。我每天都用。他们也欢迎我在Linux上面的工作。一方面是因为公关效应,另一方面是因为内部也用得上。

问:但你在Linux上的工作是没有报酬的。许多人奇怪你怎么会花这么多时间在没有钱的...

答:即使是那些无法想象世界上有人做事会出于兴趣的人--那种人是挺可悲的,但也是有这样的人,我也可以向他们解释:10年之后Linux要是真的一帆风顺,我就要风得风,要雨得雨了,就象在银行存钱一样。这不是我的目的,但可以这样告诉那些除此之外就无法理解的人。

我认为自己是一个艺术家,在做自己乐意做的事情。而且我也不用活得特别惨,因为程序员的待遇并不差。
4. 时间就是一切

问:你对资本主义的看法很有趣。看来你也相信自由软件的一些观点,但也不反对为软件和服务收费。什么情况下收费更合理,什么情况下免费更合理呢?

答:收费总是合理的。但当我开始时,我无法使用商业软件,因为它们太贵了。Linux存在的部分原因就是,我不希望任何人再陷入那种境地--这就是“己所不欲,勿施于人”。但同时我也不认为收钱就有错。

我并不反对钱。钱是个有趣的概念,但你必须选择最重要的东西� Linux好就好在,如果你是一家公司而且愿意付钱买一年365天,一天24小时的服务,你也得付一大笔钱--即使在Linux上那也是昂贵的,但如果你是一个穷学生,或者在第三世界国家,也许Linux会带给你接触一些新鲜事物的机会。

问:Linux发展的速度或者Linux发展的方向曾让你始料不及吗?

答:去年的事情也是经过一定酝酿过程的。在某种程度上,当一个公司决定支持Linux后,其他这么多公司会纷纷响应,这是让人吃惊的。不过,我从来没有在家里看得合不拢嘴,除了“哇”以外就说不了别的,我的反应更象是“嗯,够酷的,真的发生了。”

问:是不是可以说Linux很好地把握了时机?

答:Linux的成功是时机、需求和市场机会的组合。比如,Linux刚刚开发时,人们没有CDROM。Linux 面世后一年,CDROM就随处可见,于是突然就有了一种高性能价格比的商业化发行Linux的可能。所以,时机确实很好。Internet也是一个大好机会。Internet流行起来之前就已经有Linux了,但网络的基础架构一旦建立,Linux确实也或多或少地从中得益。

问:我还觉得从微软那方面的事情发展来看,Linux的出现也是恰逢其时?

答:出于公关的原因,司法部的起诉变成了一个对付微软的大聚会。两年以前,没有人质疑过微软,大家认为微软做的事情是理所当然的。人们崇拜微软:大公司,成功,大把赚钱,人们觉得那就是美国梦。司法部的起诉的一个结果是,一些原先喜欢微软的人现在改主意了。
5.开发源码是民主

问:而且他们现在也知道除了微软以外还有别的选择?

答:你提到的这个事实意味着,突然之间你开始注意到有别的选择。以前人们并不寻找其他选择。现在,即使你不从Windows转到Linux,或者作其他的大改变,你还是会说:“看来微软说的东西还得想一想” 我认为这很重要。
6.开放 vs. 封闭

问:你如何对比你开发Linux的开放源码模式和微软开发Windows和Windows NT的封闭模式?

答:在Linux上,系统的使用者可以影响开发的方向。从用户无须放弃控制这个角度说,这就是民主。每个人都可以做任何的事情。当然,基本前提是你必须有足够的能力,不过那也不失为区分干活的人和不干活的人的一种好办法。而且,即使是不修改软件的人也可以提建议,作测试,等等。

我想,作为一种开发模式,开发源码是相当优越的--尤其是与传统的商业化封闭开发环境相比。问题的本质是如何激励人去创造。

但确实有许多工作怎么样也算不上有趣,一项工作如果没有趣的话,必须靠其他的激励手段。最明显的就是通过钱。从某种程度上说,在封闭的环境下更容易挣钱。封闭模式依靠的是不给其他人提供完整的信息,从而限制竞争。限制竞争对于公司是有利的。

问:你有什么比喻可以描述这两种模式的差别吗?

答:我会这样说:封闭模式是一家出版社,它掌握的是铅字而不是语言。用户有读的自由,写的自由,但出版社决定什么样的东西可以出版发行,流传于世。你可以读,也可以用手写,但如果想要对书做什么改进的话,就得自己从头开始,或者求出版社。

问:那么,开放源码模式的比喻就应该是一台打印机喽,打印机什么都不限制。

答:对,你可以有任意多台的打印机,而且打印机之间可以共享字体。

问:这是一个有趣的比喻。为什么Linux和开放源码模式如此成功,能告诉我你的看法吗?

答:Linux能走到今天这一步,其中一个原因就是,它是弱者。在某种程度上,市场的力量对Linux的开发者没有太大的意义。人们开发Linux,是因为他们感兴趣的东西得不到足够的市场份额,而且他们也没有什么董事会跟在后面,必须每个季度解释财务状况。

你改变了游戏规则,从而也改变了市场。(You also change the market by changing the rules in ways that Microsoft isn't willing to fail on)源代码公开变成了一个卖点。突然之间有了一条新的游戏规则,并非所有的人都在乎这条规则,但只要有人在乎,他会不假思索地拒绝微软。这就象两军对阵一样:你不能让敌军挑选战场,你必须掌握主动。

问:你认为Linux有可能使微软或者其他的主流厂商改变他们的战略或者战场吗?

答:某种程度上我希望会是这样。用一个我自认为贴切的比喻来解释:让我们看当前美国最大的 5家软件公司,把他们和50年代美国最大的5家汽车制造商作个比较。当时所有的汽车公司都在新功能,新附件上竞争,每年都会推出新车型。

听起来是不是很耳熟?现在每年都会有个新版本的Windows。当时汽车公司的工作是让人们注意每年的车型翻新。所以51年的凯迪拉克和52年的凯迪拉克差别很大。人们当然就会注意车型。为什么?公司就是希望人们在乎自己开的是什么车型,几几年的车型--新年的新车型会给公司赚取大量的利润。尽管前一年的车型照样工作得很好,公司还是希望卖新车型。

我和Linux就象当年的日本汽车制造业。确实,历史上有70年代石油危机,还有其他的因素。但问题的本质是美国的汽车业并不关心质量,而是关心新的功能,还有每年的新车型。然后,日本汽车出现了,一开始他们质量虽好,名声也不见得那么大,但是渐渐地用户们明白了:“嘿,日本汽车造得就是好。它们是没有流线型尾翼(fin),但是话讲到底,我每年换车干什么?”

我相信这是一个准确的比喻。如果微软能象美国汽车工业那样,改变它的做法,我会很高兴。如果微软真能改而在质量上和Linux竞争,那就是我的胜利。

问:微软的Steve Ballmer (第二号人物)最近提到开发Windows的源代码,你对此有何看法?

答:我所有的开发工作都是在Internet上完成的,你在Internet上学会的头一件事就是光说不练靠不住。 (and the first thing you learn on the Internet is that talk is cheap.) 除非看到了结果,否则我不相信任何言辞,这对所有的东西都是一样的,包括Ballmer的说法。眼见为实嘛。 (Show me the money! )
7. Linux vs. NT

问:谈到Ballmer和他的真正用意,你觉得微软是确实害怕Linux呢,还是它只不过利用媒体炒做对付司法部的起诉?

答:我相信一开始这是微软的有意操作,特别是去年秋天Linux刚开始引起注意的时候。微软内部没有人会这样认真地看待Linux,但他们看到它可以利用,作为法庭辩护的一个依据。但他们失算了,事情的结果是引起了许多舆论界人士的兴趣:“这个Linux到底是什么东西?”

问:你认为Linux有可能比NT使用更广泛吗?

答:如果只是比较Linux和NT,我的回答是肯定的。Windows NT和Linux占有差不多的市场份额。〖编者按:根据IDG的报告,1998年底,NT的服务器市场占有率为38%,Linux 16%,其他UNIX 19%,NETWARE 23%。 将来Linux会超过NT。那一天到的时候我不会太奇怪的。真正的目标是桌面系统。这不可能在一年、两年中发生,但也许会在3年,4年,5年间实现。

问:你认为两到三年内Linux会挑战微软在桌面市场的地位?

答:是三到四年。我希望那时Linux会成为非技术的电脑用户的选择之一。

问:那会对电脑工业和微软产生什么影响呢?

答:未必会到那样的地步。我只是认为,用户没有选择的市场是病态的。

问:你用病态这个词?

答:是的,是病态。你有一个非常广阔、复杂的市场,但有一家公司控制着这市场的绝大部分。不过最终垄断是维持不下去的。

在新兴的市场中,往往一个公司掌握着巨大的实力。当年的石油大王如此,当年的汽车工业如此,当年的电脑业也是如此,那时人们认为IBM是不可战胜的。 最后总会演变成五六家大公司并立的局面,那样才会稳定。所以我认为当前的市场是病态的。
8.今后5年的道路

问:你对自由软件和商业力量之间的对立有何看法?有些纯粹主义者不喜欢Redhat或者任何其他发售Linux 商业版的公司,他们认为Linux应该保持永远免费。

答:我试图避免看事情只分黑和白。我的观点是:有了Linux,你确实可以避免商业化。可以从网上下载你需要的一切,一分钱都不用付。但坦白的说,我不希望再下载所有的东西了。现在,如果有了一台新机器,我会插进一张Redhat或者Suse的光盘,然后安装,然后再加上我自己需要的其他东西。我不需要为光盘付钱,但如果有必要的话,我是乐意掏钱的。它们确实是提供了真正的服务。这就是选择。如果你看事情一定要分黑白,认为Linux就该彻底免费,那么你也是作出了自己的选择,但我觉得那样做是局限自己。

问:看来你并不担心Redhat和诸如此类的公司会操纵Linux?

答:那是因为Redhat这样的公司不会希望接管内核的开发--这个代价他们是明白的。他们会希望员工中有许多内核开发者,一旦发生问题,可以靠自己人解决。

但他们本身并不想涉足内核开发。一个象样的商业公司,总会花时间做市场调研,搞清楚客户在做些什么,可以带给用户怎样的额外功能或价值,保证产品容易安装,解决重要的细节漏洞。关键是成品--完成一个产品,还有市场运作和组织运营。(It's about finishing touches, and it's marketing and logistics. )

问:你认为5年之后,Linux会发展成什么样?

答:对我来说,最有趣的一点始终是它各种各样的用途。我对嵌入市场感兴趣,因为那里会有些别处找不到的特殊用途。从技术的角度,超级计算机总是很性感的,但是从另一方面说,它们有趣也是因为有别处没有的特殊需求。

我觉得最有趣的市场是桌面市场,因为桌面没有任何特殊化。而反过来讲,这意味着永远不会有一个十全十美的解决方案--人们要用的东西太多了。技术上,这是一个极其困难的问题,这也就是为什么我特别关注桌面。我希望在5年之内,你可以看到Linux成为桌面系统的一个选择。也许不会替代微软,但至少会成为一个真正的选择。当2004年有人去电脑商店买他的第一台电脑时,他们会停下来考虑一下,到底是要Linux,Windows还是MacOS。

问:Linux和开放源码模式看来工作得很好,是否有其他新的商业模式引起你的兴趣呢?

答:有一种让我很感兴趣,但无法让我相信,那是“Internet语言化” (internet phrasing)的商业模式,内容包括把E-加在公司的名字前头,然后把股票的市值炒上一个数量级。我觉得这很有趣,但长远来看不会成功。

问:那你认为会发生什么呢?

答:我认为传统工业会非常重视Internet。一小部分走在前列的公司会一战成名,然后发展不错;剩下的成功机会十成中可能超不过一成。也许Yahoo会生存下来--它的名声太显赫了,单凭这名声就可以赚钱--品牌认同还是很重要的。但通过现在的商业模式他们不会赚钱,也许他们自己已经明白了。

问:最后的问题,你认为软件产品的价格走向会怎样?

答:当年PC公司和微软是通过制作廉价的软件进入软件普遍昂贵的市场的。你看这些规模小,但是富于进取心的公司--例如Borland,现在叫Inprise,靠做编译器成名,或者微软,靠的是BASIC,他们就是这样进入市场的。令人沮丧的是,现在微软掌握掌握市场如此牢固,新一轮的涨价又开始了。Inprise当年率先推出价格低于100美金的编译器,引起了轰动,但当时的轰动已被淡忘了。我们又回到了软件价格居高不下的时候,因为又有大公司可以说:“你就该付这么多。”

我希望我们会再有一次那样的轰动。现在的经济模式允许以高价销售软件,但我相信那不会持久。这使有些人认为我是共产主义者,但我不是--我绝对相信竞争。我只是相信竞争会获胜,价格会再一次下跌。

照片来自维基百科,还有一篇文章介绍他。

软件业自由之神---Richard Stallman


作者:方兴东

导语:在Richard Stallman的理论下,用户彼此拷贝软件不但不是“盗版”,而是体现了人类天性的互助美德。对Richard Stallman来说,自由是根本,用户可自由共享软件成果,随便拷贝和修改代码。他说:“想想看,如果有人同你说:‘只要你保证不拷贝给其他人用的话,我就把这些宝贝拷贝给你。’其实,这样的人才是魔鬼;而诱人当魔鬼的,则是卖高价软件的人。”可以断定,进入世纪末,软件业发生的最大变革就是自由软件的全面复兴。在自由软件的浪潮下,软件业的商业模式将脱胎换骨,从卖程序代码为中心,转化为以服务为中心。

Richard Stallman白描:五短身材,不修边幅,过肩长发,连鬓胡子,时髦的半袖沙滩上装,一副披头士的打扮。看起来象现代都市里的野人。如果他将一件“麻布僧袍”穿在身上,又戴上一顶圆形宽边帽子,有如绘画作品中环绕圣像头上的光环。一眨眼的功夫,他又变成圣经中的耶稣基督的样子,散发着先知般的威严和力量。

五短身材,不修边幅,过肩长发,连鬓胡子,时髦的半袖沙滩上装,一副披头士的打扮。看起来象现代都市里的野人。如果他将一件“麻布僧袍”穿在身上,又戴上一顶圆形宽边帽子,有如绘画作品中环绕圣像头上的光环。一眨眼的功夫,他又变成圣经中的耶稣基督的样子,散发着先知般的威严和力量。野人与基督,恰恰就是自由软件的精神领袖理查德·Richard Stallman的双重属性:他既是当今专有(私有)商业软件领域野蛮的颠覆者,又是无数程序员和用户心目中神圣的自由之神。

在他的理论下,用户彼此拷贝软件不但不是“盗版”,而是体现了人类天性的互助美德。对Richard Stallman来说,自由是根本,用户可自由共享软件成果,随便拷贝和修改代码。他说:“想想看,如果有人同你说:‘只要你保证不拷贝给其他人用的话,我就把这些宝贝拷贝给你。’其实,这样的人才是魔鬼;而诱人当魔鬼的,则是卖高价软件的人。”可以断定,进入世纪末,软件业发生的最大变革就是自由软件的全面复兴。在自由软件的浪潮下,软件业的商业模式将脱胎换骨,从卖程序代码为中心,转化为以服务为中心。

有人说,Richard Stallman应该算是世界上最伟大,软件写得最多的程序设计师。但是,Richard Stallman真正的力量,还是他的思想。
自由软件是计算机业的传统

自由软件不是新生事物,而是计算机业与身俱来的传统。纵览计算机发展史,从1946年到60年代,从IBM蓝色巨人到ARPANET,从集成电路到PC机,从互联网到电信自由经营,每一个时期都留下了“自由”的影子。

可以说自由拷贝和源代码开放是整个计算机业,包括个人电脑及互联网两大领域的天然的软件开发和传播模式。早在60年代,就有以大学为阵地,以年轻人为主题,自由地交流的风尚,并在软件开发与研究方面硕果累累:如Unix、TCP/IP、Fortran、Pascal、 LISP等等。

当70年代,AT&T被迫退出计算机业时,Ken Thompson和Dennis Ritche从贝尔实验室将Unix的源代码拿出来,结果吸引了成千上万名程序员,为其改进、修正、添加,诞生了多年来高端系统最核心的操作系统--Unix的繁荣。

70年代中期,个人电脑革命还在酝酿之中,当时的软件是鼓励自由拷贝的(那时还没有发明盗版的名目),正是这种自由拷贝、信息共享的精神上点燃了个人电脑革命,促成了软件业的发展。甚至连盖茨起家的Basic也是依靠这种自由软件才流行起来,才为事实标准。其实,后来的许多软件都是依靠共享方式才取得成功。

在互联网发展初期,程序员也是将源代码自由共享。当时基于UUCP的UUCPNet和基于TCP/P的 ARPANet(互联网前身),都有Usenet社区,其目的就是共享源代码交流经验。进入90年代,奠定互联网爆炸的一些关键技术,如伯纳斯-李发明的 WWW技术,浏览器以及Apache、BIND等等全部都不是诞生在专有软件世界里。可以说,是自由软件的精神和创新奠定了整个计算机业的核心。忽视自由软件的传统和作用是不科学的。

70年代末,微软公司的创始人比尔·盖茨《致电脑业余爱好者的一封公开信》为标志,以世界知识产权组织《伯尔尼公约》为框架,软件步入了Copyright的时代。随着现代商业软件的发展,对利润的疯狂追逐不但割裂了传统,极大地偏离了计算机的基本精神。而且还在不断变本加厉。因此,自由软件的复兴首先是对现有版权体系的强力反叛。

软件源代码是交流技术、交流思想的主要媒介,正象传统的科学是通过论文、著作进行交流一样。企业为了保护软件的知识产权而将源码秘而不宣,已经背离了知识产权保护创新的基本精神。

Richard Stallman在《为什么软件不应有‘所有者’?》一文中指出,软件的编写者将软件“据为己有”看上去天经地义。但必须看到,一个软件并不是单纯的工具,一旦软件的编写者将其传播出去,就不简单地是在提供“工具”,而是在传播“思想”。在这一点上,现有的版权体系采用了所谓保护“表达(Expression)”,不保护“思想(Idea)”的两分法,为软件保护问题设置了无法解释的障碍,造成了软件的精神分裂。

同时,自由和共享也是计算机发展的内在精神和永恒的追求目标。有人指出:在互联网被标榜为“资源共享”、“资源优化”的利器的时代,却不能对软件产品真正实现“共享”和“优化”,这不能不说是一个巨大的讽刺。
黑客传统

Steven Levy的名著《黑客:电脑时代的英雄》论述了个人计算机兴起的历史。该书最后一章讲述了理查德·Richard Stallman的故事。题目就是:“最后一个真正黑客”。这是对他最恰当的评价。连他的反对者也说:“如果不存在Richard Stallman,人类也应该把他创造出来。”

1971年,年轻、聪明绝顶的程序员Richard Stallman进入MIT人工智能实验室工作,成为软件共享社区的重要成员。其实这个社区已存在多年。当然,软件共享也只不过局限于这个特定的社区中。它与计算机的历史一样悠久。就象配料共享与烹饪一样古老。计算机业的传统就是:一切为人人所共享。私有让人嘲笑,专用受人鄙视。

当时,人工智能实验室使用一个ITS(不兼容分时系统)分时操作系统。黑客们(不是大众媒体所谈的安全破坏分子,而是指酷爱编程的人)是用汇编语言为Digital的PDP-10设计和编写的。PDP-10是当时最著名的计算机之一。作为社区成员和实验室的系统黑客,Richard Stallman的工作就是改进系统。

当时没有人称它为自由软件,因为这个词还不存在。但实际上就是这么回事。无论是某个公司成员或另一所大学想获得它,大家都会非常高兴地把源程序给他。如果你看到别人使用一种你没见过且有意思的程序,你可以坦然地向他索要程序,这样你就可以读它、改它,或拆卸部分用于新的程序。进入80年代,这种自由发生急剧变化,DEC的PDP-10系列发生中断了。它的自由体系架构,在60年代显得强劲、先进。但到80年代就捉襟见肘,没有足够多的地址空间。这意味着几乎所有的为ITS编写的程序都作废了。黑客社区也崩溃了。

然而,到80年代后,计算机的商业化和软件专有化席卷整个产业,黑客们的黄金时代结束了。一个又一个有才能的MIT编程员离开了校园,投入了市场的怀抱。尤其是Symbolics公司的成立,挖走了社区中的许多黑客,大大伤了MIT人工智能实验室的元气。Richard Stallman感到:一个时代结束了。

Richard Stallman说:“那时,人工智能实验室已没法再支持下去,我是最后一个还想让它活起来的呆瓜。但后来我也没办法了,因为一个人根本发挥不了作用。” 开始,他觉得这样与现实抗争没有什么意义。但他终于看出,他真正的敌人不是Symbolics,而是整个不开放源代码的商业软件业。

1981年,当人工智能实验室购买了新的PDP-10时,领导决定用Digital专有的分时系统来代替ITS。当时的计算机,无论是VAX或68020都有他们自己的操作系统。但没有一个是自由软件:你要获得一份可执行的拷贝必须签署一份不准向外公开的协议。

这就意味着使用计算机就得承诺:不能帮助你的邻居和朋友。这是软软件业迈出的可怕的第一步。一个相互协作、彼此交流的社区就这样被禁止了。由专有软件所有者所制订的规则:“如果你与你的邻居共享,你就是盗版者。如果你想作点改动,那你得乞求我们来做。”
究竟谁违背了道德

实际上,恰恰是专有软件的理念--不允许共享或改动软件--是反社会的,也是不道德的,而且也是完全错误的。但是长期以来,软件出版商使人们相信:软件天生就该如此。这种片面的认识禁锢了人们的思维。当他们在谈论如何加强版权或打击盗版时,他们也认定这是天经地义,人们也会毫无异议地接受。

他们的第一个假设就是:软件公司对自己的软件拥有毫无疑问的天然权力,因而可以将权利施加到所有用户身上。(因为如果是天然权力,那不管对公众会造成多大的损害,我们也不能加以反对。)但有意思的是,美国宪法和美国法律惯例否定了这种看法,版权不是一项天然权力,只是一项人为由政府施加的独占,他限制了用户拷贝的天然权力。

另一个潜在的假设是,软件唯一重要的事就是它允许你可以做什么。而我们的计算机用户不必考虑我们处在的社会状况,被动接受就行。第三个假设就是如果我们不允许软件公司给用户施加权力,我们就没有可用的软件。这个假设看起来似是而非。实际上当自由软件兴起后,我们无须戴上锁链就能获得大量优秀软件。

如果我们拒绝接受上述假设,并从“用户第一”的基本道德常识上来考虑问题,那么我们将得出截然不同的结论。计算机用户应该有自由根据自己的需求修正程序;用户有自由共享软件,因为帮助别人是社会的基础。而软件厂商不可以对用户施加压力,剥夺用户的各种自由。

Richard Stallman经历过沉痛的遭遇。70年代,激光打印机大得像吉普车一样,所以Xerox(施乐)送了一台图象激光打印机给人工智能实验室时,人们发现唯有人工智能实验室的九楼机房里,才找得到位置放它。在大楼里所有人只要在各自的电脑上打些指令,叫打印机帮你服务。

它的打印速度令人满意,只是有时纸印光了或夹了纸,一大堆人的列印工作就全部停了下来。有时有的人要印上一大堆东西,而有些人只要印一两张时,不得不爬上九楼,把印表机的控制改一下,使它先印一两张。于是一天就这样爬上爬下,没有人受得了。

幸好印表机送来时,Xerox把驱动程序的源代码也随机附上,实验室的人就把控制打印机驱动程序的功能作了些修改,大家都省了不少麻烦和汗水。Richard Stallman回忆地说:“你的打印工作做完后,它还会通知你;如果夹了纸或你想问些什么打印上的事情,它也会让你知道。”

1978年,一切都变了。Xerox送了一台叫Dover的新打印机机给人工智能实验室,但不愿再附上源代码。Richard Stallman说:“因此我们没办法修改驱动程序,于是整个大楼的打印效率又回到从前,卡了纸或把纸印光了,你在下面也无法知道。”

他和人工智能实验室为给打印机添加功能以便机器更好工作,希望获得打印机控制程序的源代码,结果被严正拒绝。“因此,我再无法说服自己不公开协议是纯洁清白的。当他们拒绝与我们共享时,我十分气愤。我不能更更弦改辙,对别人做出同样的事。”
赤裸裸的道德抉择

“随着社区的终结,我面临着一个道德上的抉择。最简单的就是投身于专有软件世界之中,签署不公开协议,并承诺不帮助同行、同事。而且自己也很可能编写软件,并在不公开协议的前提下发布软件,去同流合污,迫使更多的人背叛自己的原则。显然,走这条路,可以挣大钱,而且使编写代码的工作增添一份金钱上的快乐。但是我知道,等到自己职业生涯终结时,我再回首这些年为分离人类而砌造的‘墙壁’。我会感受到,我将自己的一生都用在使这个世界变得更加糟糕。”

另一个选择,很直截了当,但令人不愉快,那就是从此离开计算机领域。“这样我的技能不会被滥用,但也将被浪费,我不会因为分化和限制计算机用户而感到有罪,但这些事情会继续发生。”“因此,我开始寻找一条出路,使程序员可以做真正的好事。我问自己,我能写什么软件,我能否让社区重焕生机。”

答案很明白:首先需要的是一个操作系统,这是开始使用计算机的关键软件。有了操作系统,就能做许多事,没有操作系统,计算机都无法运行。有了自由操作系统,我们就能再次组建一个相互合作的黑客社区。而且任何人使用自由软件都不必剥夺他/她与朋友家人的共享权利。

作为一名操作系统的开发人员,Richard Stallman无疑最胜任。“虽然我没有认为自己一定能成功,但我意识到自己就是命定做这项工作的。”Richard Stallman选择做一个与Unix兼容的操作系统。这样容易被移植,而且Unix用户可以方便地转移过来。GNU这个名字确定就是遵循黑客传统,是一个递归的缩略词:“GNU*S NOT Unix。”

一个操作系统并不仅仅意味着一个内核,而且仅能运行其他程序也是不够的。一个完整的操作系统,要有指令处理器、汇编程序、编译器、解释程序、调试器、文本编辑器、邮件软件等等一个完整的系统。

自由软件“free software”是一个被广泛误解的词,这个“free”完全与价格无关,它指“自由”。这就象“自由讲演(free Speech)”与“免费啤酒(free Beer)”的区别。其主要内涵就是用户可以自由运行软件,可以按自己的要求自由修改软件,用户也可以自己销售软件,不管是收费的还是免费的。自由软件与出售软件拷贝并不冲突。

开发一个完整的系统是项庞大的工程。Richard Stallman决定尽可能采用已有的自由软件,比如一开始他将Tex作为主要的文本格式标识符,几年后他又用X Windows系统作为GUN的图口系统。

思想比代码更闪光,但没有代码,思想是没有躯体的。
一个人的战争

1984年1月,Richard Stallman辞去了MIT的工作,他担心MIT会要求产品的所有权,会给产品强加入自己的销售条件,最终又会成为专有软件。一开始,GNU计划只有他一个人。他发现自己原来在人工智能实验室的办公室,还没有分给其他人用时,他就每天晚上溜进去工作。久而久之,白天他也跑去用实验室里的电脑。

当时人工智能实验室主任Patrick H. Winston并不干涉。因为Winston始终不把Richard Stallman的辞职当真,只要Richard Stallman能创造些好东西给大家用,实在没有必要把这位共事13年的老同事打发走路。因此他爽快地邀请Richard Stallman可以继续使用实验室的设备。从此,Richard Stallman就成了特殊的一员。

工程启动后,Richard Stallman听到有一个自由大学编译器套件(VUCK)。他去信询问能否用入GNU。答复是嘲弄式的,说对大学是自由的,但软件本身不行。于是,决定他为GUN编写的第一个软件就是一个多语言、多平台的编译器。他想利用Pastel编译器的源代码,但最终放弃。从头编写了新的编译器,名为GCC。

1984年9月,Richard Stallman开始GUN Emacs,1985年初,它开始可以工作。这使它可以用Unix系统进行编辑。此时,人们开始想使用Emacs。因此一个现实的问题是:如何传播它?当然,他将其放到了MIT计算机的匿名服务器上。但那时互联网 还未普及,人们很难通过FTP获得拷贝。而失业的Richard Stallman也需要收入。于是,他宣布任何人都可以用150美元的价格获得程序。自由软件的分销商业模式就此诞生。如今,整个基于Linux的GUN 系统都是如此。

为防止不肖厂商利用自由软件,使其专有化。Richard Stallman别出心裁,创造了Copyleft的授权办法。所有的GNU程序遵循一种“Copyleft”原则,即可以拷贝,可以修改,可以出售,只是有一条:源代码所有的改进和修改必须向每个用户公开,所有用户都可以获得改动后的源码。它保证了自由软件传播的延续性。
市场里出政权

EMACS这样的程序最难的是开头。一旦第一版本推出之后,就有一大堆人去玩它,然后精益求精,越改越好。目前已有几百种EMACS的副程序,可用在50多种电脑上,从微电脑到Cray的超级电脑都可用EMACS。

由于EMACS的成功,Richard Stallman设立了个新的基金会:自由软件基金会(Free Software Foundation(FSF));捐助FSF和GNU计划的厂商,也可享有减税的优待。单单1989年,FSF就收到267782美元的捐助,基金会也因出售GNU程序手册和电脑磁带,而赚了330377美元。此外,Richard Stallman也不再天天溜回人工智能实验室“借”用电脑,因为许多厂家已为FSF提供一大堆的高性能工作站等硬件设备,包括HP、Thinking Machine、Sony,甚至UNIX的娘家---贝尔实验室,也贡献了不少设备。也有一些厂商捐赠现金,并把技术人员送到FSF来向Richard Stallman学习,而且支付Richard Stallman的员工薪水。

FSF就用这些钱来养起14位基金会成员: 9位程序设计师,3位负责技术资料撰写。虽然Richard Stallman自己不支薪,但他不能期望他的同仁也和他一样看得开,而饿着肚子为理想拼斗。FSF的程序设计师一年也只有2万5千美元的薪水,这是一般厂商的一半或三分之一。Richard Stallman之所以以低薪待人,原因就是可多请几位志同道合的黑客,为理想而工作。

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

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

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

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

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

近几年,随着Linux的迅速崛起,再也没有人对自由软件的全新商业模式表示怀疑。在 Richard Stallman思想的指导下,自由软件已经成功地步入市场主流,占据了市场实地。毕竟,在商业横流的今天,思想在贬值。自由软件也只有在夺取市场政权后,才能真正确立自己的实力地位,促使整个软件业模式发生巨变。
孤独是思想家的归宿
 

 目前发展的势头表明,完全站在用户一边的自由软件不可抵挡。它面临的唯一敌人还是自由软件领域内部的分裂和争斗。除了市场原有垄断者外,这是任何人都不希望看到的。

Richard Stallman总是风尘仆仆,行囊相随,四处布道。他带着一台笔记本电脑,但这不是他个人的,而是属于自由软件基金(FSF)。其实,Richard Stallman 从来就没有拥有过一台自己的计算机。也从来只用自由软件(当然他从来没有用过Windows)。而且,他也没有自己的汽车、电视和房产。这位46岁的单身汉节俭地居住在一间租来的房子里。已有15年了,没有领取过一个月的正式工资。因为他的工作就是使软件获得自由。在商欲横流的今天,人们更愿意追逐财富,而不是贫寒的Richard Stallman 的高尚思想。因此不足为怪,连自由软件团体内的许多人也开始离他而去。

随着自由软件迅速崛起,影响力大增。Richard Stallman毫不妥协的个性和思想使其在自由软件内部也越来越成为争议人物。随着Apache Web服务器和GNU/Linux操作系统的日渐流行,新一代黑客们受到鼓舞,纷纷投入商业领域,越来越多的人加盟自由软件,他们是一类全新的黑客:一方面呼应自由软件的精神,一方面又积极拥抱商业世界。他们鼓吹自己能够创建比专有软件更稳定更灵活更少“臭虫”的软件产品,同时又积极捕捉每一个商机。

于是,“持不同政见者”将自由软件的标签改成了“开源软件”。看起来好象两者兼容,但Richard Stallman认为,两者最大的区别就是后者将自由精神放在首位。但是对商人来说,自由(free)与免费(free)是同一个词。与Richard Stallman布道“自由精神”不同,他们更愿意谈论实际问题。为了避免纷涌而来的投资者被Richard Stallman“吓跑”,他们还得联起手来,将Richard Stallman屏蔽起来。

Richard Stallman不喜欢实用主义的辩词,他宣称即使一个自由软件不是他最佳的解决方案,他也愿意作为首选。对Richard Stallman来说,自由是基本的道德美德:所有的计算机用户都应该享有相互协作、共享,以及拷贝和交换源代码的自由。

他的态度使一些“开放源代码”社区派系的人感到不安。实际上,他们标出“开放源代码”新旗号的目的就是要与激进分子Richard Stallman划清界线。不可否认,正是Richard Stallman领导了自由软件运动,正是他自己开发的千万行程序代码使如今的“Linux”成为一个整体,并走向成功。但对于新一代的人,Richard Stallman是一种困窘,是一种障碍,更是一个捣乱分子。必须将他不惜代价地推入密室,以免吓跑投资者。
现实主义与理想主义之争

毫无疑问,无论是自由软件运动还是开放源代码,都来源他15年前开始的努力,这肯定是计算机历史上最脍炙人口的传奇故事。对于目前的成功,Richard Stallman感到非常高兴,但也有更多的焦虑。因为他感到自己明显被排斥在外。“有人极力想改变历史,否定我在这场运动中的地位”对于人们用 Linux来指代整个操作系统,Richard Stallman十分痛心,他说正确的用词应是“GUN/Linux”。 Richard Stallman承认托瓦斯的贡献很关键,是他完成了GUN/ Linux的内核。但是Richard Stallman估算,内核只占整个系统的3%,相比之下,GUN项目贡献了30%的代码,其余67%的代码来源于其他方面。但令他欣慰的是,GNU的一些原则仍在起作用。他认为这种原则不仅使软件开发更显活力,更能生产出优质软件,还认识到这本身是一种行为准则。

批评者认为,Richard Stallman极力维护GNU的遗产,是沉湎于这场运动的枝枝末末,对整个自由软件都是有害的。对大多数开放源代码倡导者来说,颠覆微软才是主要的斗争方向。

“我关心的是精神,是GUN项目内在的哲学。这种哲学就是它存在的理由,那就是自由软件不仅仅是为了方便,也不仅仅是为了可靠。真正重要的是自由,协作的自由。我不关心某个人或公司。因此我认为单纯与微软作战偏离了这个运动的方向。”

Richard Stallman的拥戴者还有,但是Richard Stallman的大多数主张还是被人们忽略了。如今只有“Linux”充斥着媒体的标题,而背后的思想开始逐渐隐去。

Richard Stallman被邀请参加在硅谷湾区举办的“开放源代码开发者日”。这个1998年8月21日开幕的活动是程序员和自由软件热心家的大集会,由计算机图书出版公司O*Reilly联合公司组织的。而在4月份组织的“自由软件高峰会议”上,Richard Stallman没有被邀请。结果招致了广泛的批评,使得组织者再也不敢“忽视”他了。但是组织者告诫他,要他以“维护大局”为重,让他在有分歧的地方免开尊口。

不足为奇,Richard Stallman让许多自由软件的同行们十分棘手。他这个人不可控制,不可预知也不可能被改变。是这些非同寻常的素质促成了自由软件的兴起。但是随着自由软件前景大开,江山指日可待,这些个性开始被视为障碍。Richard Stallman的狂热和信仰保证了自由软件的成长,但如今人们认为他是多余的。在他们眼里,现在剔除了Richard Stallman,自由软件不但不会受阻,反而会更顺畅。

但不容置疑的是,正是Richard Stallman的思想成为自由软件运行的力量源泉。GNU-Linux系统的确比Windows系统问题少,Apache也是Web服务器的更好选择。但这只是问题的一个侧面,只有把实用和理想结合起来,自由软件运动才令人信服,才能激发人们的热情和献身精神。无论如何,Richard Stallman仍然是有名气的,仍然受到尊重,仍然被认为是自由软件运动的核心人物。Richard Stallman在计算机领域的重要地位不容动摇。为了使自由软件商业化而牺牲Richard Stallman,那就可能会失去这场重大革命的灵魂和方向。 后记

Richard Stallman依旧没钱、没势,连原先的许多信徒都被分化而去。这场运动给他带来的唯一收获可能就是:无论Richard Stallman走到哪里,都会有人乐意借给他计算机,使他能及时查看电子邮件。他还是那样不修边幅,无所顾忌。但是与当年执着相比,他的精神状态开始呈现一种新的焦虑和紊乱,而这一切正是他创造的自由软件的成功,施加给他的。而且可以肯定,Richard Stallman必将越来越被自由软件成功的浪潮所淹没。

未来难以预测,唯一可以肯定的是:Richard Stallman自己引燃的这场革命已经完全超越了他的驾驭范围。这也是许多思想家共同的命运。

其实,人类导演的故事总是一模一样的。

照片是从维基百科上来的,那里还有一篇介绍他的文章。