ivaneeo's blog

自由的力量,自由的生活。

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

#

1 flavor [ˊfleivә] n. 特色,风味
posted @ 2005-12-04 17:18 ivaneeo 阅读(410) | 评论 (0)编辑 收藏

1. effect [iˊfekt] n. 结果,影响,效果;
2.
environment [inˊvairәnmәnt] n. 环境
3. exert [igˊzәːt] v. 发挥,运用
4. existence [igˊzistәns] n. 存在,实体
5. evolve [iˊvɒlv] v. 进化,逐渐发展
posted @ 2005-12-04 17:15 ivaneeo 阅读(417) | 评论 (0)编辑 收藏

1. pattern [ˊpætәn] n. 模式,模型
2
. possibility [pɒsәˊbiliti] n. 可能性,可能的事
3. procedure [prәˊsi:dʒә] n. 程序
posted @ 2005-12-04 17:10 ivaneeo 阅读(479) | 评论 (0)编辑 收藏

1. separate [ˊsepәreit, ˊsepәrit] v. 分开,隔开
2.
several [ˊsevәrәl] pron. 几个
3. spell [spel] n. 符咒,魅力;
4.
spirit [ˊspirit] n. 精神,灵魂
5. standalone adj. 独立的,单独的,不需要外部的。

6. syntax [ˊsintæks] n. 语法
posted @ 2005-12-04 17:05 ivaneeo 阅读(433) | 评论 (0)编辑 收藏

1. manipulate [mәˊnipjuleit] vt. 操纵,操作
2. myriad [ˊmiriәd] n. 万,无数,无数的人或物
posted @ 2005-12-04 17:04 ivaneeo 阅读(412) | 评论 (0)编辑 收藏

1 hurdle [ˊhәːdl] n. 障碍,跳栏,临时活动篱笆
posted @ 2005-12-04 16:54 ivaneeo 阅读(347) | 评论 (0)编辑 收藏

这篇短小的文档用于描述linux内核编程中推荐的编程风格。编程风格是很个人
化的东西,我不想把我的观点_强加_给任何人,但这是我必须维护的代码中所遵守
的,我也建议其他部分的代码也能遵守它。请至少给这里的观点一些考虑。

首先,我建议你打印一份GNU代码风格,不是去读它,而是把它烧了,这是个很
不错的姿态。

不废话了,下面就是Linux内核编程风格:

                第一章:缩进

制表符(tabs)占8个字符,所以缩进也是8个字符。有些异端运动想使用4个字符
(甚至是2个字符)的缩进,这和把PI(圆周率)定为3没什么两样。

原因:缩进的根本目的是用来清晰地标识一个控制块的起始。特别是当你连续盯
着屏幕看了20
个小时后,你就会体会到更长的缩进的好处了。

现在,有些人提出8字符缩进会使得代码太偏向右边,当使用80字符的终端
时很难阅读。答案是如果你需要三层以上的缩进,那么你已经完蛋了,应该改改
你的程序了。

简而言之,8字符缩进使得阅读代码更为容易,并且在你的缩进层次过深时提出
警告。应该留心这样的警告。

                第二章:括号的位置

括号位置的问题在C编程风格中经常被提出。和缩进大小不同,括号位置的选择
并没有太多技术上的原因,而更多的是个人的喜好。比如Kernighan和Ritchie的
弟子们把左括号放在一行的最后,把右括号放在一行的开始,象这样:

        if (x is true) {

                we do y

        }

但是,函数是一种特殊的情况,函数的左括号放在下一行的开始,象这样:

        int function(int x)

        {

                body of function

        }

全世界的异端人士指出这种不一致的做法 ...嗯...
不太一致,但是所有思维正
确的人知道 (a) K&R是_对_的 (b)
K&R是对的。而且,函数确实是特殊的(你在C
中无法对函数进行嵌套)。

注意到右括号完全占有单独的一行,_除非_当它后面还有未完成的语句,比如do
语句中的“while”或者if语句中的“else”,想这样:

        do {

                body of do-loop

        } while (condition);


        if (x == y) {

                ..

        } else if (x > y) {

                ...

        } else {

                ....

        }

原因:K&R。

还有,注意到这种括号的布局方法还减少了空行(或者说是几乎是空行)的数目,
而且没有减小可读性。因为你屏幕上的空行是不可回收资源(这里想一下25行的
终端屏幕),这样你会有更多的空行用于加注释。

                第三章:命名

C是个斯巴达式(崇尚简洁风格的)语言,所以你的命名方法也应该如此。与
Modula-2和Pascal程序员不同,C程序员不使用
ThisVariableIsATemporaryCounter这样可爱的名字。一个C程序员会把一个变量
叫做“tmp”,这样的变量名更容易写,而且理解起来也不算太难。

_但是_,尽管人人都会对大小写混杂的名字皱眉头,全局变量名则必须如此。管
一个全局函数叫“foo”是故意找岔。

_全局_变量(只有在_真正_需要时才使用)需要有个描述性强的名字,这点和全
局函数一样。如果你有个函数用于对活跃用户进行计数,你婴儿叫它
“count_active_users()”,而不是“cntusr()”。

把函数的类型加入到名字中(所谓的匈牙利命名法)是脑损伤的表现
- 编译器
知道类型,能够对它进行检查,这种命名法只会把程序员自己搞晕。难怪微软做
了那么多充满bug的程序。

_局部_变量应该短小扼要。如果你有个随机的整数循环变量,可能最好叫它“i”。
把它叫做“loop_counter”是效率低下的,在不会发生混淆的情况下。类型地,
“tmp”可以被用于任何类型的存储临时值的变量。

如果你担心混淆你的局部变量,那么你就会有另一个问题,所谓的函数膨胀荷尔
蒙失衡综合症,请看下一章。

                第四章:函数

函数应该短小而甜美,而且只能做一件事。他们应该只用一两屏幕(我们都知道,
ISO/ANSI标准屏幕大小是80x24)就能装下,只做并且做好一件事。

函数的最大长度应该与函数的复杂性和缩进层次成反比。所以,如果你有个只有
一个很长(但很简单)的case语句的函数,对许多case做一些很少的操作,那么
这个函数长点也没有关系。

但是,如果你有一个复杂的函数,你担心一个中等智力的高一学生可能无法理解,
那么你应该更严格地遵守最大长度限制。使用有描述性名字的帮助函数(你可以
让编译器in-line这些帮助函数,如果你认为性能很重要的话,而且编译器恐怕
会比你做的要好)。

函数的另一个指标是局部变量的数目,局部变量的数目不应超过5-10个,否则一
定是哪里有问题了。再设计一下这个函数,把它分解得更小一些。人的大脑一般
可以同时跟踪7个不同的东西,超过了7个就会晕菜。虽然你很聪明,不过可能你
有时会想理解一下两星期前所写的代码。

                第五章:注释

注释是好东西,不过存在过分注释的危险。_永远_不要在注释中解释你的代码是
如何工作的:更好的做法是写出工作方式显而易见的代码,解释糟糕的代码是浪
费时间。

一般来说,注释应该说明代码在做什么,而不是怎么做。并且,不要把注释加在
函数主体中:如果函数太复杂以至于必须对各个部分进行注释,那么你可能要再
去读读第四章。你可以加入一些短小的注释来提醒或警告一些聪明(或难看)的
做法,但不要太过度。更好的选择是,把注释放在函数头,说明函数在做什么,
可能还包括它为什么做。

                第六章:你的代码乱七八糟

没什么,我们都遇到过。你可能从老Unix用户那里听说过“GNU
emacs”会自动
对齐C源代码,但缺省的设置不是很好(事实上,缺省设置比胡乱敲打还糟糕
-
一群使用GNU emacs猴子永远不会做出漂亮的程序)。

所以,你或者彻底仍掉GNU
emacs,或者采用更理智的设置。如果选择后者,你
可一把下面的代码加到你的.emacs文件中:

(defun linux-c-mode ()

  "C mode with adjusted defaults for use with the Linux kernel."

  (interactive)

  (c-mode)

  (c-set-style "K&R")

  (setq c-basic-offset 8))

这会定义 M-x linux-c-mode
命令。当编写Linux模块时,如果你把字符串“-*-
linux-c
-*-”放在文件的头两行中,这个模式就会被自动激活。还有,如果你
想在编辑/usr/src/linux目录下的源文件时linux-c-mode被自动激活,你在你的.
emacs文件中需要加入

(setq auto-mode-alist (cons '("/usr/src/linux.*/.*\\.[ch]$" .
linux-c-mode)
auto-mode-alist))

但是即使你用不了emacs,并不是世界末日:你还可以使用“indent”。

又一次,GNU indent使用了和GNU
emacs一样的脑死亡设置,所以你需要给它一
些命令行选项。但是,这不算太坏,因为即使是GNU
indent的作者们也意识到了
K&R的权威性(GNU的人也不是魔鬼,他们只是在这件事上被误导了),所以你可
以使用选项“-kr
-i8”(表示“K&R,8字符缩进”)运行indent。

“indent”有很多选项,特别是注释布局部分,你可能想看看它的man手册。但
是请记住:“indent”不能修改糟糕的程序。

                第七章:配置文件

配置选项
(arch/xxx/config.in,以及所有Config.in文件)使用了有些不同的
缩进方式。

代码中使用的是3字符缩进,config-选项中应该使用2字符缩进标识依赖关系。
后者只应用于bool/tristat选项。对于其他选项,采用你认为最合适的缩进方式
就可以了。例如:

if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then

   tristate 'Apply nitroglycerine inside the keyboard (DANGEROUS)'
CONFIG_BOOM

   if [ "$CONFIG_BOOM" != "n" ]; then

      bool '  Output nice messages when you explode' CONFIG_CHEER

   fi

fi

一般来说,所有不稳定的选项应该标为CONFIG_EXPERIMENTAL。所有可能损坏数
据的的选项应该标为(DANGEROUS),其他的试验选项应该标为(EXPERIMENTAL)。

                第八章:数据结构

供多线程使用的数据结构应该采用引用计数(reference
counts)。在内核中,
垃圾回收(garbage
collection)是不存在的(内核之外的垃圾回收效率不高),
这意味着你_必须_使用引用计数。

引用计数的使用能避免锁的使用,使不同的用户能够并行使用数据结构
- 不需
要担心结构会因为睡眠而突然消失。

注意到加锁_不是_引用计数的替代物。加锁用于保证数据结构的完整性,而引用
计数是一个内存管理技术。通常你两个都需要,不应该有任何混淆不清的地方。

一些数据结构可能使用两层的引用计数,当对不同的“类”都有使用的时候。子
类的计数统计所有子类用户的数目,当子类的计数为零时只对总计数减一。

这种“多层引用计数”的例子可以在内存管理代码(“struct
mm_struct”:
mm_users和mm_cout)和文件系统代码(“struct
super_block”:s_count和
s_active)中找到。

记住:如果另一个线程能够看见你的数据结构,而你却没有对它使用引用计数,
那么几乎可以肯定会有bug存在。

posted @ 2005-12-02 13:14 ivaneeo 阅读(604) | 评论 (0)编辑 收藏

这是一个不应该有的话题,因为最早没有选择,我们只有一台机器,一个系统,程序设计改变了我们的思想。各种为实现业务所开发的语言用到了OS上,unix就是一­个很好的例子
这里想说的是,对于一个人来说,用什么系统不是重要的,但是实现业务是基本的,
很多人都片面的受到一些物质困惑,在强大的广告效益下,作出了不是很好的选择,就像我们从小就认为白雪公主就是那个美丽的女子。如果不是他这种类型的就会认为是­丑的,同样,没有被接受的OS也会被人排斥。

linux在GNU下得到了飞速的发展,通过internet,我们传播她,他就是一个在虚幻世界出来的恶魔(freeBSD)的兄弟,这次他的对手是wind­ows。和他的兄长相比他的竞争更加复杂化。(bsd与商业unix的之间关系)。
windows是完美的剽窃了apple,让自己从3.1开始不听的发挥自己。走到了longhorn。走到了现在,但是他现在不是在单单的与apple竞争,­谁会想到91年出的如同dos的东西会让微软不敢小看,(91年正是微软的3系列的产品)。
可以说linux和windows一同成长。但是linux的关注度没windows的高,最好的解释就是微软的商业模式太完美了,已经不是我们简单的去看一个­简单的软件,如果在这个革命的选择,就有很多狂热分子,如同宗教般,对某个不断的执迷,互相唾骂对方,这就如中世纪和圣战一样,最后没有胜利。
人是应用者,操作系统这是一个简单的人机对话的gui,借此完成业务计算。这样看来操作系统只是系统软件,也是为应用程序服务,他已经不是重要的环节。

不管你在这场OS大战中,选择那方,你都会对计算机感兴趣,因为不管是不是自由的狂热,还是铜臭的金钱,计算机技术仍然会推动这个真实世界的前进。

下面是20世纪短短的10年linux的走过
###################################################################
Linux发展大事记(www.blogchina.com)
篇章一:98年前大事列表
1984年Richard Stallman 发起GNU和Free Software Foundation。
1991 年4月 芬兰计算机系研究生Linux Benedict
Torvalds开始为一个以后被称为"Linux"的内核而工作。
1991年8月25日Linus
网上发贴,寻找志同道合的合作伙伴。
1991年10月5日Linus Torvalds在新闻组comp.os.minix发表了Linux
V0.01,约有一万行代码。
1992年,全世界大约有1000个左右的人使用Linux,并有不少人提供初期的代码上载和评论。
1993年
大约由100多个程序员参与内核代码修改,内核核心由5人组成,V0.99
约有十万行代码。
1993 年12月 Linux 全球用户数约在10万左右。
1994年3月,Linux1.0问世,约有17万行代码。它按完全自由免费的协议发布,源码必须完全公开,之后很快Linux正式采用GPL协议。
1995年 Linux 全球用户数大大超过50万, Linux 已可在Intel,
Digital 和Sun SPARC 处理器上运行,Linux Journal
杂志已发行了10万册。内核发展到1.2,
约由25万行代码。
1996年6月 Linux 内核2.0
发布,可支持多个处理器,约由40万行代码。Linux
全球用户数约在350万左右。
1997 在日本、波兰、德国和南斯拉夫有Linux
月刊发行。版本升至2.1,约有代码80万行。  
1997年夏,制作电影《泰坦尼克号》所用的160台Alpha图形工作站中,有105台采用了——Linux操作系统。
篇章二:98年大事列表
一月份
Linux Weekly News
出版,1月22日第一期并不代表LWN以后的发展方向。从那时起Linux世界变得愈来愈复杂了,这真是一种有趣的探险。
Netscape
宣布将在一种自由软件许可协议下,公开其浏览器的源代码。不容置疑,这成了本年度最重大的事件之一,它使很多人看到了Linux和自由软件将会带来什么。
小红帽高级研发实验室成立。在这里,人们为自由软件和Gnome
工程的一个重要部分辛勤工作并得到报偿。RHAD吸引到了象Rasterman和
Mena Quintero.这样的开发人员。
Stampede
Linux的发布实际上是在去年的十二月份。Stampede把自己定位在成为高性能的真正的黑客级别Linux发行版。
有消息说轰动一时的电影Titanic
部分是在运行Linux的Alpha机器上制作完成的:人们接受Titanic,也接受每件与它关联的事物,包括Linux。
二月份
Cobalt
Qube发布,并且由于其高性能,低价格,以及可爱的外形而成为商业媒体的幸运儿。Cobalt的Linux相关工程全部由David
Miller完成。
Linux用户社区获得了InfoWorld的技术支持奖,Red Hat
5.0赢得了操作系统奖项。但人们更为技术支持奖感到震惊,以前每个人都认为Linux没有技术支持。“Linux没有技术支持”的观点被推翻了。
Red Hat声称他们有Linux安装队伍的支持。
Eric Raymond
和他的朋友们提出“开放源码”这个术语,启动opensource.org
网站,开始正式推进Linux 的商业应用。
Linus Torvalds 和 Richard
Stallman获得了EFF先驱奖。这一奖项是对他们为电子信息自由所做贡献的认可。奇怪的是,Electronic
Frontier Foundation站点上没有提及此事。
Caldera1.2 发布,与基于libc6的Red
Hat不同,Caldera基于libc5。
坚信基于专有BIOS
代码的系统不可能自由,人们启动OpenBIOS
项目和相应的站点。
人们为GGI 是否该归入Linux内核争论不休。GGI,
或普通图形化界面,旨在为Linux和其他系统上的视频卡提供更好的界面。GGI
此次没有提出融入内核的要求,这次争论也没有结果,但从此,GGI与内核黑客的交流却增强了。
三月份
Linux
全球用户数约在750万左右,有大约1万程序员参与新闻组讨论,代码测试和修改。
Learning Tree, International 组织增加了Linux
系统管理课程,并在美英两国频繁授课,这样“Linux软件的性能提高极快,它成为一种适合于商业环境的低价、可靠并拥有强大支持的计算平台。”
消费者权益保护人士Ralph
Nader倡导大的PC厂商提供非微软的系统,包括预装Linux的系统。
Sun 公司对从Linux向Solaris 升级的客户打3折。
Bruce
Perens,曾经是Debian工程的领导者,由于在工程怎样发展上的分歧而彻底辞职不干。
Eric Allman,成立Sendmail, Inc,
这家公司试图在保持sendmail代码公开的情况下,通过销售sendmail支持服务来赚钱。
John Kirch发表"Microsoft Windows NT Server 4.0 和Unix"
一文。这篇文章非常棒,想采用NT 4.0或Unix
的人都该读一读。
四月份
Mozilla源码在网上发布,世界各地的人们争相下载,很快,人们增添了功能强大的加密特性和Qt端口。
Linus被Inter@ctive周刊列为“网上25位无名英雄”之一。
四月份以后,Linus不再无名。
Open Group宣布了新的X
window系统的许可协议方针。新版本的X
window将用专有许可证,只有付钱购买者才能使用,他们还保留了一些安全补丁。XFree86称他们不能苟同新的许可协议方针,将考虑走自己的路。
美国全国公众广播电台报道了Linux,这是首次Linux在主流非技术媒介上出现。
OReilly 召开首次自由软件高层会议,与会者有Larry Wall,
Brian Behlendorf, Linus Torvalds, Guido van Rossum, Eric Allman, Phil
Zimmermann, Eric Raymond和 Paul Vixie。
Linux Weekly News(LWN)每日更新专栏开办。尽管LWN
想保持其每周焦点的特色,但每日专栏在访问量上已超出每周时事一栏,同时Linux大事专栏也开办起来。
Linux 3.0发布;Linus
第二个女儿的出生给他带来巨大的欢乐和内核研发的停滞,许多补丁程序都丢失了。有的人开始抱怨Linux内核对Linus的依赖性太强了。
Red
Hat宣布商业支持计划,这一计划基于世界范围的支持合作伙伴网,其中
Eklektix, Inc则是Linux Weekly News的发起方。
Avalon Beowulf 集群在Los Alamos
一发布即成为全球最快的计算机系统之一。
Eric S. Raymond在网上发表"Homesteading the
Noosphere",表述了他关于开放源码软件如何商业化运作的观点。
五月份

内核黑客Alan Cox 转而为小红帽工作。
Bruce Perens
基于他在Debian的经验,提出一种新的Linux发行版。这一版本从未出现,但其中很多部分后来包含于Linux基础标准(Linux
Standard Base)工程中。
C|Net 的异端工程将只采用Linux工作,媒介反响强烈。
太阳微系统加入Linux International。
"Google"搜索引擎出现,它不仅是最好的搜索引擎之一,且是基于Linux,以Linux方面的网页搜索为特色。
Sm@rt Reseller报道说Oracle 和
Informix不打算支持Linux。“事实上,——无论它多么稳定、便宜——很多人怀疑Linux在商业市场上是否能同资金雄厚的Windows
NT 和 Solaris竞争”
SuSE 5.2发布。
Corel正式接受Linux,
保证为Netwinder系列产品提供Linux支持。
The Association Francophone des Utilsateurs de Linux et des Logiciels
Libres (AFUL)
在法国成立,并很快在法国计算机界颇具影响力。
Linux大型数据库到来。Computer
Associates为其Ingres系统,Ardent
Software为其O2对象数据库,纷纷表示支持Linux。
Linux
Core/Layer工程发布,它是Linux系统标准化的最初探索。
有人提议创立Linux Standard Base (Linux
基础标准)工程。这个提议由多个Linux核心人物在Linux展示会上讨论并付诸实施。Bruce
Perens成为该组织的领导人。
Red Hat 5.1
发布并迅速推出一系列更新,这些更新部分归功于Linux
安全检查项目组。
六月份
Gartner集团称自由软件没有希望:这些操作系统在未来两三年内不会成为主流的商务应用平台,也不会得到广泛的第三方应用程序的支持。
Gimp 1.0 不负众望,终于发布了。
稳定内核2.0.34 经历一番坎坷,终于推出。
出于对US出口禁令的焦虑,Beowulf
站点暂时关闭。任何人都可以组建超级电脑了,有些人变得很担心。但很快Beowulf
站点又恢复了正常。
Datapro
调查研究显示在操作系统用户中Linux拥有最高的满意度,它也是唯一一个市场份额增长的操作系统。
Corel 启动 Netwinder 。
Debian 2.0 在多日推迟后进入测试。
Adaptec 改变长期的封闭政策,宣布支持Linux , 并首选Red
Hat为合作伙伴,陆陆续续其他发行商也与Adaptec 结合。
汉语 Linux Extension 工程启动,旨在促进Linux的本地化。
IBM 与Apache 队伍达成协议,将销售和支持Apache WEB
服务器。
硅谷 Linux 用户组召开 “1998
伟大的Linux革命”大会,在两个最主要的零售店将微软Windows
98产品发布庆祝会变成了Linux 宣传会。
硅谷 Linux 用户组还不满足,制造了一只标有Windows 98
字样的火箭并点火升空。
英国Linux研发人员大会在曼彻斯特召开。
七月份
Caldera 和Red
Hat将合并的消息径走,但是合并没有发生。
KDE 和 GNOME
各自的拥戴者纷纷开始指责对方,Linus介入,指出KDE桌面也是不错的。在这样的情况下,KDE
1.0
发布,而且变得很流行,但不少人很不喜欢Qt库的许可协议。
NC World 杂志停止刊出Nicholas Petreley对Windows
NT的猛烈抨击,但这篇文章依旧可从网上获得:该文指出Windows
NT 5 (即现在的Windows 2000)是绝对的灾难。
稳定内核2.0.35 发布。
互联网操作系统计数器启动,对数以万计的主机进行统计后,Linux
占有了最大的WEB 服务器市场份额。
LinuxPPC 4.0 发布。
Oracle
宣布支持Linux,并承诺在1998年底推出与Linux兼容产品。这正预示了Linux未来的成功,Oracle的这一宣布引起了社会各界的关注。
几乎在同一天, Informix宣布支持Linux。
SVLUG/Taos "Linux的未来" 座谈会召开,与会的有 Linus
和其他的名人, 这次会后,Intel
开始正式考虑支持Linux。
Linus
出现在福布斯杂志的封面上,该期杂志内有一篇文章对Linux予以高度的评价。从此,越来越多的普通人开始听说Linux。
Mandrake
Linux首次发行,该版本从小红帽发展而来,融合了KDE和多语言支持。
Stampede Linux 0.86 发行。
Debian 2.0
发布,而且容量极大,达1500个包共两张光盘。
MkLinux Linux DR3 发布。
Caldera推出面向Linux的 Netware 1.0
八月份
在开放源码协议下,EiffelBase
库推出,这个库原来是采用专有协议的。
小红帽再次向公众强调它的软件安装支持队伍:队伍即将启动,请公众耐心等待。
Bruce Perens, Eric Raymond, Ian Murdock,和 Tim Sailer发起 Open
Source
Initiative,旨在管理开放源码商标的使用(一个月后
Russ Nelson 和Chip Salzenberg 也加入管理小组)。
Richard Stallman 呼唤为自由软件建立自由文档。
GNOME 0.25 发布,代码名为Drooling Macaque。
原先的Linux基础标准工作陷入僵局,目标上无法一致,Red
Hat和Debian于是共同组建Linux兼容标准工程。然后Bruce
Perens离开了Linux基础标准组织,在自由软件圈消失了一段时间。
Software in the Public Interest
(SPI)组织在大多数原先的核心人员离开的情况下组建新领导班子,包括了Ian
Jackson, Martin Schulze, Dale Scheetz 和 Nils Lohner。
Red Hat
发表评论,阐述讨厌Qt许可证的理由,以及为何他们暂时不会在发行版中包含KDE

Linux Standards Association
(LSA)突然冒出来并宣称为Linux制定真正的标准。LSA
的说法令舆论哗然,当舆论纷纷指出Linux社区讨厌统一标准的束缚,LSA
慢慢消失了。LSA
的价值可能在于促进Linux基础标准工作组织和Linux兼容标准工程组织的联合。
Red Hat 将他们在研发中的版本命名为 RawHide。
LSA组织的创办人Michael McLagan对 Linux
商标的合法性提出质疑,Linux
International组织委托律师做出反应,Michael
McLagan最后做出让步。
内核 2.1.115 发布,同时,Linus宣布代码将处于停滞期。
九月份
Linux
互联网服务器管理指南工程启动,同时,法语Linux杂志出版。
Stackguard/Immunix 5.1 发布。StackGuard
实际上是gcc的一个版本,用以对抗堆栈溢出攻击;
Immunix 则是内建了StackGuard编译器的小红帽版本。
Microsoft的Steve Ballmer
承认他们开始为自由软件的出现感到担忧,建议NT部分源代码对研发人员开放。
SuSE 5.3 英文版发布。
Caldera 分为两家公司: Caldera Systems 在Ransom
Love领导下从事 Linux 商务, Caldera Thin
Clients负责研发Linux内嵌系统。
由于小部分5.3版本用户反映了安装过程中出现错误,SuSE
停止向国际发售5.3版本。
Uniform Driver Interface
(UDI)工程建议Linux研发人员为UDI接口开发驱动程序,但是Linux社区反应冷淡。
SuSE 公布Office 99 套装软件,捆绑了ApplixWare, KDE,
和其他优秀软件。SuSE Office 99
可能与微软的办公套件发生竞争,引起了不少关注。
IBM 宣布对在 Linux运行DB2提供支持。
Sybase 宣布支持
Linux,这一次宣布,意味着Linux已可拥有全系列数据库产品。
Inter@ctive
Week报道,戴尔公司向大客户出售预装Linux系统已有一段时间,戴尔小客户很惊讶,因为他们也有同样的需求。
Neomagic
向XFree86项目组提供其视频硬件驱动程序的源码并对外界免费分发。这种视频硬件驱动程序原先是在小红帽的赞助下由Precision
Insight开发的,而且源码是封闭的。
Open Group做出让步在开放源码协议下发布X11R6.4
,从而结束自由软件史上不甚光彩的一页。
Microsoft
在提交美国************会的年度报告中指出Linux是微软的一大威胁,据估计他们这种提法是为了影响微软垄断案的裁决。
加拿大 Linux 用户在全国范围内举办 Installfest
并获极大成功。
十月份
Intel 和 Netscape (作为两家风险投资企业)
宣布小额投资小红帽软件,这一投资将用于在小红帽内部成立企业支持部门。宣布引起了媒体的强烈关注,被视为商业社区认同Linux的信号。
Intel加入Linux International.
网络先驱 Jonathan Postel 逝世。
Linux国际内核包出台,既可提供加密机制,又不与臭名昭著的国家加密产品限令冲突。
GNOME 0.30 发布, LWN 对其发表了评论。
Linuxpower.org 站点启动,这是一个Linux
论文和教学的中心。
Cygnus 在开放源码协议下发布实时内嵌操作系统(eCos)。
Red Hat 在 CDE中发现了安全问题,
迅速将CDE从包中去除。这反映了这样的一个事实:因为CDE
不是开放源码的软件,所以不容易修正错误。
Caldera 1.3 发布,此版本包含了Sybase, KDE, 和StarOffice 4.0,
仍采用libc5,同时Caldera出台Linux系统管理员培训课程。
LinuxToday
出笼提供每日更新的Linux新闻。这是新一轮Linux站点发布潮的开端。
Linus在内核中放了太多补丁,Linux内核问题变得紧张起来。Linus有点生气,休假了一段时间。这次事件说明了内核变得越来越大,不适合再由一个人来­领导。但是事情并没有妥善的解决。
bootX 发布使得 PowerPC 用户更为方便了。
Oracle8 for Linux 可供下载了,但是142 MB
绝不是个容易下载的小玩艺。
AFUL 赞助法国Linux安装聚会,聚会非常成功。
Microsoft 引 Linux
为证指出他们没有在操作系统方面垄断,他们的宣布还称Linux只是一个人的研发成果。
Larry Wall
夺得第一届年度自由软件基金会奖。Larry是Perl语言的发明人。
Debian
考虑到Qt许可协议问题,决定将KDE从他们的发行版中剔除。
Novell 宣布与Caldera 合作将 NDS 移植到Linux。
Allaire 宣布 Cold Fusion的未来版本将支持 Linux
,这也是很多人期待已久的。
Compaq
对增值分销商在其硬件上安装Linux提供支持,但没有销售预装Linux系统的计划。
LinuxWorld
网站启动,意味着Linux商业媒介登台。该网站的总编是Nicholas
Petreley,在商业媒介一直 是Linux的支持者。
Microsoft 在法国发布反Linux公开信,这是微软FUD
战略的开端。这封公开信臭名昭著,受到强烈的指责,最著名的当推来自AFUL的驳斥。
France Telecom 投资 Cobalt Networks.
墨西哥 ScholarNet
项目出笼,该项目将在140000个学校构建基于Linux的计算机实验室。为推进GNOME
项目进展,项目主要采用GNOME 。
亚特兰大 Linux Showcase取得极大的成功。
Corel 宣布个人版本的 Word Perfect 8 for Linux
将可通过网络免费下载,另外宣布了与小红帽合作一起为Netwinder提供Linux的计划。
Corel 承诺帮助 WINE 的研发,这无疑给
WINE注入了一剂强心剂。
Pacific HiTech 宣布将TurboLinux
深入美国市场。TurboLinux在日本有最大的占有率,现准备进军其他的市场。
www.alphalinux.org站点启动,首次为Alpha
系统提供相关的Linux信息。
AFUL 与法国教育部签约,在法国校园内推行自由软件。
内核黑客 David Miller结婚。
十一月
两个Microsoft关于Linux和开放源码软件的内部备忘录到了
Eric
Raymond之手,他及时地予以公开。内部备忘录阐述了Linux强大的一面,各种可能对微软构成的威胁,以及微软准备采取的对策。这无疑在媒介激起了轩然大­波。
Extreme Linux 在 Supercomputing 98上一石激起千层浪。
Linux在COMDEX成为了热点,但不是焦点。
在开放源码协议下,Eddie
软件套装发布,这是一套用于构建高性能集群的应用程序。
专有I2O 总线标准公开源代码, 这样,I2O
总线对Linux的支持(这也是Linux迫切需要的)终于实现了。
Red Hat 5.2
发布,这将是6.0发布前最为稳定的一款,6.0将融合2.2的内核。
LinuxPPC 5.0 宣布其实际发布日期将定为1999年1月5日。
Ext2 成为第二个 Linux 月刊杂志。
Informix 和Apropos 在100多个Jay Jacobs
服装店安装Linux机器,Linux开始进军主流商业领域。
Digital Creations 以开放源码协议发布 Principia, Principia
最终将和Bobo 和Aqueduct 一起组成
Zope。颇为有趣的是,发布
Principia并和Bobo及Aqueduct的结合是由Digital
Creations的风险投资方提议的。
硅谷茶会欢庆微软学园的成立。
StarOffice 5 for Linux 正式发布,个人应用可免费下载。
Troll Tech 宣布将在开放协议下发布 Qt
2.0。但此开放协议颇受争议,因为它规定软件修改后只能以补丁的形式再分发。所以,
QPL 只是名义上的开放源码协议。
稳定内核2.0.36 发布。
OpenBIOS 0.0.1 发布。
Slackware Linux 3.6 发布。
Red Hat 和SuSE
均在COMDEX上宣布技术支持计划,均面向企业级技术支持。
Netscape 购买NewHoo web
目录,并承诺研发其适用的数据库。
十二月份
为了更好的反映网站的目的,摆脱Sun公司商标的影响,Sunsite.unc.edu
站点更名为
MetaLab.unc.edu。这个站点是Linux资源仓库以及Linux文档工程的大本营。
为了破纪录,CLOWN 工程搭建了 550节点的Linux集群。
开放源码商标所有权之争爆发,Eric Raymond和Software in
the Public Interest均宣称对 Open Source Initiative
商标的所有权。
Linus 和Tove
成为芬兰独立日庆典的荣誉客人。他们会见了芬兰总统并被与会者评为最有意思的一对。
小红帽的黑客 Eric Troan 结婚。
为了便于新内核源代码的散发,Linux
内核文档镜象系统启动。
在Riley Williams和其他人的帮助下,Linux 内核历史出版。
Mandrake Linux 5.2 发布。
Netscape发布Gecko。 Gecko 是Netscape/Mozilla
研发的拳头产品,是一个更精干,更快,更符合标准的网页编辑器。
适用于PowerPC的Yellow Dog Linux发行版出台。
Corel 与 KDE 研发组结盟,为Netwinder 提供KDE界面。
IBM 发布适用于Linux的文件系统AFS 3.5。
GNOME 1.0 进入代码停滞期,0.99 测试版发布。
Compaq 在GPL协议下为PCI RAID 控制器发布Linux驱动程序。
LibGGI 2.0 测试版发布。
IBM 在开放源码协议下发布一些小软件,象Jikes Java
编译器和 Secure
Mailer,同时推出可免费下载的DB2测试版。
Sun 逐渐开放 Java 协议。
Sun 在UltraSparc上支持Linux。
Silicon Graphics 加入 Linux
International并宣布在其系统上运行Samba。
KDE 1.1 进入代码停滞期,其测试版发布。
据报道,IBM
曾考虑成为Linux的支持服务提供商,考虑到专利和其引发的法律责任而放弃。
SuSE 6.0 测试版发布。
报道称Apple 将发售预装了Linux的 Power Macintoshes 。
WordPerfect 8 已可供下载。
2.2 稳定内核快发布了。
IDC 称Linux
发售量1998年增长了200%,市场份额增长超过150%。Linux已拥有17%的市场份额,这种增长是任何其他操作系统无法匹敌的。
篇章三:99年大事列表
一月份
内核 2.2
测试版发布,预示世人长久期待的正式稳定内核
2.2即将发布。
Linux
内核文档镜象系统启动,性能卓越,从而解决获取内核源代码的问题。
Joey Hess 发起Debian每周新闻
SSC 发布Michael Hammel所著《Gimp 艺术家指南》
Kernel Traffic 启动,详细总结了有关Linux 内核的讨论。
Tucows 启动LinuxBerg站点,这是一个Linux 软件下载站点。
Samba
2.0发布,它反向工程了微软域名控制协议,使得Linux服务器可以为Windows网络提供完整服务。
Corel将它的NetWinder部门卖给Hardware Computing Canada。
Slackware 网站开始运作。
1月25日,Kernel 2.2.0经两年多的研发正式发布。
惠普和康柏公布将提供基于Linux系统的计划。
TCP捆绑代码被携带后门的版本取代,这证明了开放式代码中也存在后门。但是,很快后门代码就被修补,没有站点受到危害。
Linus
宣布2.2.1几星期内不会发布,结果有人在2.2.0版本中植入可导致系统崩溃的Bug,这促成了2.2.1提早发布。
寻求制造Qt 库的LGPL 克隆的“和谐工程”正式破产。
Loki Entertainment Software 宣布将Civilization: Call To
Power游戏移植到Linux.
二月份
Linux 认证如火如荼,SAIR和Linux Professional
Institute纷纷发布计划。
Wichert Akkerman 取代Ian Jackson成为Debian 工程的领导人。
Lyx1.0.0 发布。
Dell 开始销售基于Linux 的服务器。
Linuxcare
推出服务计划,创下一夜成名的Linux公司神话。
基于Red Hat 5.2的Linux-Mandrake 5.3 发布。
KDE 1.1 发布。
Samba 2.0.1 和 Samba
2.0.2接连发布,虽然后者并未完全公开代码。
Debian 2.1 的发布计划在3月2日举行。
SuSE 6.0 国际化发行成型。
Glibc 2.1
发布,这样gcc和egcs编辑器工程项目的分歧日益明显。
Burlington制衣厂宣布将在250家店铺的1100多台机器上安装Linux。
IBM
宣布与小红帽建立伙伴关系,以确保小红帽在IBM机器上正确运行。
Bruce Perens 因为“自由软件”定义的分歧从Open Source
Initiative 组织辞职。
意大利文本地版Prosa Debian GNU/Linux发布。
SGI发布GLX扩展代码。
3月
第一届LinuxWorld 大会在San Jose
开幕,象征Linux时代的来临。
3月2日,Debian 2.1发布不能如期举行。
在LinuxWorld 媒体发布上,GNOME 1.0 成为大热点。
有消息称Sun 将有条件公布Solaris 的源代码。
Digital Creations提供赞助,Amos Latteier所著《Zope
每周报道》启动。
Troll Tech 公布向Linux移植 Opera 浏览器计划。
Linux Magazine 杂志粉墨登场。
VA Research 和Intel 合作将Linux移植到Intel Merced
处理器,同时Intel 直接注资VA。
Red Hat 启动Linux 门户站点。
VA Research 用100万美元买下Linux.com 域名。
Dell 开始为其Linux系统捆绑Linuxcare 提供的服务 。
IBM、Compaq、Oracle和Novell均宣布投资小红帽。
内核2.2.3发布。
9日,Debian 2.1 发布。
Cendant 宣布在4000个旅馆应用Linux 系统。
Qt
通用许可证1.0版本发布,引起有关源码开放与否的争议。
Corel宣布将发布自己的Linux发行版并将其推向市场。
Apple公司宣布其操作系统非核心部分将采用“开放源码”的模式。
CeBIT 99 在德国开幕,KDE
获得年度软件革新奖,Linux社区获得“焦点”奖,同时SAP宣布其R/3
ERP 系统将支持Linux。
MTI 购买20%Caldera Systems 股票。
VA Research 业务繁忙,将部分生产委托第三方进行。
SAP 注资小红帽。
美丽莎病毒全球肆虐。
向Intel 和PowerPC平台移植的Blackdown JDK 1.2 预发行。
4月份
网景为Mozilla 发行一周年举行庆典。
Jamie Zawinski 认为Mozilla 计划是一个失败,从中退出。
Dell
投资小红帽,开始启动预装小红帽Linux的服务器市场。
Dell 销售的Linux系统包含了Linuxcare 90天技术支持。
Al Gore 的总统竞选站点宣称是“开放源码”的。
TheLinuxStore.com 站点开张,销售低价Linux系统。
Mindcrast
研究报告发布,很快成为争议焦点:这次研究由微软投资并在微软实验室进行,高度评价Windows
NT,诋毁Linux,但从中也发现Linux内核确实是存在问题的。很快,内核黑客修正了内核。
FreeS/Wan 1.0发布。
Caldera OpenLinux 2.2 发布,这是第一个基于Linux
2.2的发行版。
Core 宣布其Linux发行版将基于Debian
KDE,这大大提升了Debian 项目的知名度。
Linus Torvalds 在春季COMDEX大会上演讲。
SuSE 6.1 发布。
为Linux新手服务的LinuxNewbie.org 发布
egcs
工程委员会成为gcc维护的当家,从此自由软件内部一次不友好的分裂结束。
Python 1.5.2 发布。
KDE 1.1.1 测试版发布。
HP 为 Caldera, TurboLinux, Red Hat 和 SuSE 提供 24x7支持服务。
VA Research 收购Linux Hardware Solutions。
Red Hat 6.0 发布,同样也是基于2.2内核,但与 OpenLinux
2.2相比则滞后了。
UltraSparc 走到了尽头,它的每个功能特性Red Hat
6.0都有。
Cygnus 宣布开放源码
Java编译器,而且,据称,IBM刚向Win32
移植的JVM也将能移植到Linux。
第一次国际操作系统调查结束,140万主机中,31.3%运行Linux。
5月份
Mindcraft
卷土重来,宣布用公开标准重新对NT和Linux进行测试,这次测试,懂得Linux的人均可参与。
Guido van Rossum 和Donald Becker 获得由 Dr. Dobbs
Journal颁发的编程精英奖。
wu-ftpd
导致一时间网络安全问题成灾,但很快出现不少补丁程序。
Creative Technologies 发布测试版 SB Live
驱动程序。程序很糟糕,因为没有开放源代码而无法及时修复。
Linus 书写新USB驱动程序并将其植入2.2.7内核。这一点令
UUSBD项目组成员惊讶,同时Linux对USB的支持确实大大增强了。
Definite Linux 6.0 发布。
Tcl 8.1 发布。
KDE 1.1.1 发布。
Rebel.com 成为Hardware Computing Canada的新名,
这家公司购买了Corel的Netwinder部门。
经第九巡回法庭的判决,关于加密算法出口的限制违反美国宪法第一修正案。
内核 2.2.8 推出同时 2.3.0研发开始。
Debian日本项目组推出日文Debian 2.1.
TurboLinux 宣布将提供高性能Linux集群。
Sun Microsystems 宣布Linux 代码可与Solaris x86兼容。
LinuxHQ 最终由 Linux.org购买,并更名为 kernelnotes.org。
两个开放源码交流站点:sourceXchange
和Cosource.com同时开铺,采用不同的办法对开放源码项目组成员进行协调。
OReilly 在网上发布 "Open
Sources:来自开源革命的呼声",此书包含来自Eric
Raymond, Richard Stallman, Linus Torvalds, Michael Tiemann, Larry Wall,
和Bruce Perens的精华观点。
Stockholm 大学数学研究院授予 Linus Torvalds
荣誉博士学位。
Linux.com 新近开铺。
Pacific HiTech 更名为TurboLinux。
VA Research 更名为 VA Linux Systems。
SGI 宣布向 Linux移植XFS文件系统。
VA Linux Systems 雇用内核黑客 Ted Tso.
Slackware 4.0 发布。
Corels WordPerfect for Linux 下载量突破100万。
LinuxToday发起LinuxPR.com,这是一个专业
Linux相关媒体发布站点。
Havoc Pennington的每周Gnome 研发总结创刊推出。
安全 Linux 发行版计划出台,同时3个相关项目诞生:
SecureLinux, Khaos Linux和 Bastille Linux。
Linux-Mandrake 6.0发布。
Linux Counter 在 5月 26日访问量突破10万。
6月份
Red Hat提交IPO申请,发言人Melissa
London拒绝就IPO发表评论。
Microsoft 向开放式研发迈出第一步,与ActiveState签约
在Artistic license许可协议下开发 Perl。
LinuxDev.net开铺,带来专为Linux研发人员定制的新闻。
Debian 组织公布新的Logo。
第一届菲律宾Linux 99在Makati城的香格里拉饭店召开。
Linux Professional Institute
宣布企业赞助方,包括Linuxcare,IBM,Macmillan USA, Computing
McGraw-Hill, Linux Journal, New Riders Publishing以及 SuSE, Caldera
和 New Wave Technology.
澳大利亚开放源码座谈会在墨尔本召开。
2.2内核出现远程拒绝服务问题,Alan Cox
在数小时内修正了内核。
Carsten "Rasterman" Haitzler 从Red Hat 辞职来到VA Linux Systems。
Sun
Microsystems在太阳社区源代码协议下发布高性能集群工具。
Guylhem Aznar接管 Linux 文件系统工程。
由于美国专利商标局不愿意,"Open
Source"作为商标的计划搁浅。
VA Linux Systems 从Compaq 雇用了Jon maddogHall。
LinuxPPC 5.0 发布。
PostgreSQL v6.5
发布,其新性能包括高性能锁定机制和热备份。
VA Linux Systems的董事会成员包括 Eric Raymond,Eric Raymond
同时也是开放源码运动的非正式发言人。
Linux Expo 99 巴黎会议召开。
Eric Raymond 在微软做演讲。
VA Linux Systems 从Intel, SGI, Lehman Brothers以及 Sumitomo
Corporation获取投资。
Hewlett-Packard 发布一款基于Linux的工作站。
Eric Raymond 出版“超级魔法炉
”这篇文章是一个系列三篇中的第三篇,第一篇是“教堂和集市

Mindcraft
的基准在Linux专家的同意下执行,NT仍然赢了,但是Linux的问题很快就得以修复。
Andover.net收购Slashdot.net。
TurboLinux 工作站3.6发布。
Apache 软件基金会成立。
Qt 2.0 发布。
LinuxTag 99 在Kaiserslautern大学召开。
Alan Cox发起Linux Portaloo。
Sun 发布 JDK 1.2.2.
IBM 发布自己版本的 、面向Linux的Sun JDK 1.1.6,
其中包含了实时编译技术。
又一Perl 协商会在 Carnegie-Mellon大学召开。
NVidia为它的芯片集发布开放源码驱动程序。
Matrox 为其G400 芯片集发布规格说明。
7月份
Lotus宣布他将把Domino 向Linux移植。
Debian 项目组为9月份发布讨论暂时的冻结。
Midgard 1.1 发布。
澳大利亚Linux 用户协商会在墨尔本召开
Red Hat
公布股票发行计划,Linux研发人员得以IPO价格购买Red
Hat 股票。
Oracle 为Linux推出 Oracle8i,在业界激起千层浪。
Caldera 瘦客户端有 Lineo; 重点从 DR-DOS 转向OpenLinux
内嵌版"Embeddix."
Dataquest 预测 Linux
在2003年将占服务区应用销售份额的25%,
Sun/Netscape 联盟成立,Netscape
应用服务器将不再面向Linux。
渥太华 Linux 讨论会召开。
IBM 启动对
Linux的支持服务,从此有关Linux得不到支持服务的历史一去不复返了。
IBM 发布Linux DB2。
VA Linux Systems 启动Linux支持服务。
TurboLinux 宣称在日本其销量超过Windows。
8月份

SGI 发布基于Linux的服务器1400L, 并与Red Hat
建立伙伴关系,大举参与内核研发。
Eric Raymond 推出新版本“大教堂和集市 ”,OReilly
出版。
MandrakeSoft 雇用 KDE黑客David Faure 开发 Koffice 。
Red Hat 发布 GNOME 更新,30%的Red Hat 6.0用户采用了更新。
第二届 LinuxWorld Conference and Expo 在San Jose开幕。
Red Hat股票发行,发行日以每股50美元收盘。
IBM 加入 Trillian 工程,此工程计划将Linux 移植到IA-64
("Merced", "Itanium")处理器上。
Microsoft 在网上测试 Windows 2000
系统安全性,一天之内就被攻破好几次。
稳定内核 2.2.11 发布, Linus 将2.2 内核工作完全移交给
Alan Cox.
Linus抱怨得不到ISDN补丁,2.4内核将可应用ISDN。
Definite Linux 6.1 发布。
摩托罗拉宣布与Lineo建立伙伴关系,开展Linux内嵌系统的研发、支持和服务。
LWN.net 开辟Linux股票专栏。
Freshmeat.net 收购Andover.net。
RAID 0.90
被融合进2.2.12补丁中,之后出于各种考虑又从中剔除。
Andrea Arcangeli和 Gerhard
Wichert宣布Linux在32位Intel系统上支持的内存可达到4G。
Atipa Linux Solutions 为摩托罗拉构建 200个节点 Beowulf
集群,用于半导体建模和研发。
Genetic Programming, Inc发布面向基因编程达1000个节点的
Beowulf 系统。Corel 和Rebel.com 捐赠了一批 NetWinder
系统到联合国发展署。
AXA 创新基金投资 MandrakeSoft。
Red Hat 和Caldera Systems发布“系统不存在2000年
问题”的声明。
SGI 在Linux内核中加入回旋锁定测量代码。
Ted Nelson最终以开放源码的形式向世人发布 Xanadu。
Midgard 1.2 发布
SourceXchange首批发布 RFPs, 均来自HP公司。.
Red Hat 与日本 Itsutsubashi
研究公司断绝关系,宣布推出自己的日语发行板;
Itsutsubashi 发布 LASER5 版本,与小红帽公司竞争。
OReilly 开放源码大会在CA的Monterey召开。
新出现的 FTP 安全问题导致网上陷阱重生。
Sun 收购StarDivision并在太阳社区源码协议下推出
StarOffice 。
Cryptix纯粹的太阳公司Java 加密扩展发布。
9月份
SGI 推出图形化研发环境"Jessie"。
Zope 2.0 发布。
首次Linux 股票狂飙, Applix 发行量为原有的两倍, 达到
2700万股。
HPTi
获得向美国政府提供Linux集群的合同,在竞争性极强的政府大项目中,这是Linux的首次大胜利。
Bind 8.2
在发布过程中,系统的一部分没有开放源代码,这曾引起争议,后来解决了。
SCO 在北欧发行的宣传手册上诋毁Linux:
"Linux此时不足以满足企业营运、安全的需求,它只是计算机专业学生的玩具而不是一个严肃的操作系统;Linux本质上是一个完全免费的玩艺,没有公司和个­人对其负责。”
Proftpd的安全问题使网络变得极为脆弱。
Caldera OpenLinux 2.3 发布。
GNU Privacy Guard (GnuPG) 1.0发布。 GnuPG
是免费的PGP加密程序替代品。
Gateway 开始供应预装Linux的服务器。
Burlington制衣厂向小红帽购买支持服务。.
Red Hat 股价升至$135/股,价位出奇的高。
Caldera Systems 发布"Lizard" 安装器源码。
Pluto Meeting 99 在意大利 Padua开幕,演讲人包括内核黑客
Andrea Arcangeli。
Channel One Gmbh 在德国注册 "Linux"
商标但很快在一片讥讽声中草草收场。
IBM 通过在 Thinkpad 600E 笔记本电脑上安装 Linux
的认证,尽管安装过程非常困难而且安装部件没有全部成功安装。
Debian 2.1r3 发布,仅包含了Bug以及安全补丁。
研发中内核 2.3.18 发布,集成了PCMCIA驱动,
这种驱动原先是单独发布的。
Corel 将对其发行版测试,但是测试协议却违反了GPL
条款。
KDE 1.1.2 发布。
Cobalt Networks 提交IPO申请,筹集大约2300万美元。
Linux 演示在全世界举行。
Ext3 首次发布使得 Linux日志系统成为现实。
Linux-Mandrake 6.1 发布。
Andover.net 提交IPO申请。.
LinuxOne
提交IPO申请,这一次IPO令人惊讶:首先,很少有人听说过LinuxOne,其次,这家公司没有产品,没有收入,没有人担保,仅存在了几个月而已。
Netcraft称英国王室站点是在Linux系统上运行的。
内嵌系统大会在 San Jose开幕,Linux成为焦点。 Cygnus
在会上推出"EL/IX"。
PC Week
提出了向Linux系统进攻的挑战,Linux系统被攻破了,但问题在于第三方CGI程序而不在Linux本身:PC
WEEK没有对Linux系统进行更新。
VA Linux Systems 宣布新的专业化服务团队。
Linus Torvalds被Stockholm 大学授予名誉博士。
LinuxWorld Conference and Expo 在东京开幕。
Blackdown将JDK1.2向Linux移植出现突破,稳定版本有望推出。
两个开放源码GPL 电子商务应用程序OpenSales和
Yams发布。
开放源码实践管理高峰会在多伦多举行,此次大会由Minoru
Development Corporation提供赞助。
LinuxPPC 1999 Q3 发布。
十月份
Sun Microsystems 宣布将在太阳社区源码协议下开放Solaris
代码。
Microsoft 推出《Linux Myths》全面攻击 Linux。
Ssh 1.1.12
不象以后的版本,是在自由协议下发布的,由此诞生的OpenSSH
项目旨在去除专利算法,研发真正意义上的自由安全的Shell。
Definite Linux 7.0 发布。
SCO投资Linux Mall。
Red Hat Linux 6.1 发布。
TurboLinux 从 Intel, Broadview Associates,和August
Capital获得投资,并取得在日本诊所安装20000套系统的合同。
亚特兰大Linux 展会开幕。
LWN 企鹅陈列室建成,现已陈列200多个企鹅像。
VA Linux, OReilly, 和SGI 一起赞助 Debian “盒子”产品。
Bruce (Perens) 2.0 发布。
第二届KDE 研发人员协商会在德国的 Erlangen开幕。
VA Linux Systems 提交IPO计划。
Bob Young新书“红色旋风”由Coriolis出版发行。
Cobalt Networks和Gateway 达成协议, Gateway 成为
Cobalt服务器分销商。
Internet.com收购LinuxToday,协办人Dave Whitinger离开。
十月份GNOME 推出,内含众多修补或更新的程序。
Motorola 投资 Lineo。
Red Hat 和Compaq 签订互惠支持协议。
Wu-ftpd 导致了Linux 系统更多的安全漏洞。
IBM 公布面向Linux JDK 1.1.8的 JVM
,称其性能比在NT下运行为佳。
Sun 预先宣布与 Java 2兼容的面向 Linux的JVM。
FreeGIS
项目宣布,旨在促进更多自由地理信息系统软件的研发和使用。
GRASS GIS 系统在 GPL 条款下发布。
面向Linux内嵌系统的LinuxDevices.com开铺。
十一月份
Corel 与 PC Chips 签订协议,将在2000年随同PC
Chips的主板捆绑2000万个Corel Linux发行版。
Linux DVD 研发人员破解了 DVD 加密格式,这证明了DVD
加密格式很糟,封闭源码的加密本身是一个错误。
Ingo Molnar 在2.3
内核中的改进使Linux可以在32位Intel处理器下支持64G内存。
Debian “马铃薯”冻结将延续到11月7日。
Slackware 7 发布,前一个版本号为
4,这个跳跃是为了适应市场的需求。
Creative Technology 在GPL条款下推出SB Live声卡驱动程序。
Red Hat 建立开放源码Red Hat 中心,
这是一个非盈利的组织,旨在基于大众利益出发推进开放源码原则,赞助,支持和从事范围广泛的科研和教育项目。
Linux-India 在IT.COM 99——一个
印度焦点会议中表现突出。
Red Hat 宣布与
Oracle联合推出新款发行版,其中含了Motif。
Microsoft
被美国地方法院裁定为垄断。调查结果显示Linux还未对Microsoft构成威胁。
SGI 发布新内核机制:内核崩溃垃圾分析器。
来自Namesys的研发人员发布新版日志系统Reiserfs,这样Linux拥有了两套日志系统。
Debian “马铃薯”冻结推至
2000年1月15日。启动盘问题是导致推迟的原因。
Kondara 日文MNU/Linux 1.0 发布,此发行版基于 Red Hat的Raw
Hide。
Cobalt Networks 上市,很快股价升至$130/股,
几乎是发行价的6倍($22/股),股市强烈看好Linux。
Comdex
Linux商展在赌城拉斯维加斯开幕,参观者络绎不绝,其中许多人是首次见识Linux。
Corel 在Comdex Linux商展中首次推出Linux发行版。
Linux Professional Institute 举行首次专业Linux认证测试。
SuSE 6.3 将在十二月面市。
Mozilla Milestone 11
发布,此开放源码浏览器终于有了一点可用性。
OReilly出版《Samba
使用指南》并被Samba项目组采用,此书是在open content
license下发行的。
Sybase 宣布对Zope 开发提供支持。
Red Hat 以7亿股价收购 Cygnus,Red Hat
的并购似乎启动了。
VA Linux Systems 将股票发行价定为 $11-13/股。
VA Linux Systems 和SuSE 建立研发伙伴关系。
Supercomputing 99 开幕, Linux 也是会议焦点。
XFree86项目组以荣誉会员身份加入X.org。
Linux 文档工程有了 新的logo, 新网页,新文档和用DocBook
格式工作的能力。
ET-Linux 1.2 由Prosa 发布。
Real-time Linux 2.0 发布。
VA Linux Systems
公布定向配股计划,这样使得Linux研发人员可以用初始价购进VA
Linux部分股票。
SuSE 从Intel和Apax Partners获得投资。
Blackdown的JDK 1.2.2 和JDK 1.1.8可望在月中发布。
Sun 招聘支持 Java在 Linux平台上应用的程序员。
Gimp
用户指南第二版发布,网上可以获得,另Coriolis以书籍形式出版。
十二月份
SuSE资助的 ALSA 专业团队成立,旨在研发高级Linux
声音体系。
Andover.net 以$18/股发行, 当时收盘价突破
$60。这被视为Andover.net和OpenIPO的共同胜利。
VA Linux Systems
经两次重新调价,第二天首次发行,发行价
$30/股,股价迅速攀升并突破 $300/股,
当日以$250/股收盘,这是 NASDAQ IPO的新纪录。.
Linux 股热波及了任何与Linux沾边的股票。
Linux 内核2.3.30 发布,内含了对 NUMA
系统的支持。NUMA是大规模多处理器系统应用中的一项重要技术。
Sun 发布面向Linux的Java 2 应用,Sun
在发布中忽略了Blackdown的功绩,造成了很多人的不愉快。
SuSE 6.3 面市。
Zope 2.1.1发布。
Dell 宣布对全线 PowerEdge
服务器提供Linux,同时Dell系统包括了90天Red Hat
技术支持服务。
OReilly 网络开始启动。
Matra Datavision 在开放源码协议下发布CASCADE。 CASCADE
主要用于几何建模; Matra Datavision
宣称为CASCADE花费了7500万,采用的协议与
GPL颇为相似。.
Miguel de Icaza 因为他在GNOME项目中的工作被授予FSF Free
Software Award 。
Bastille Linux 1.0.0
发布,旨在推出一个高度安全可靠的发行版。
测试内核2.3.33发布。
Zack
Brown发起内核期刊,旨在成为内核信息的权威来源。
Red Hat收购德语发行版Delix。
Debian 2.1r4 发布,修复一些安全以及2000年问题。.
Linux-Mandrake 6.1 经认证无2000年问题。
Storm Linux 2000 发布
KDE 2.0不稳定预览版KRASH发布。
Zope和Mozilla 建立伙伴关系。
HP
旨在提供网络服务,而且服务的寻找、集成和获得无需事先协议的确定,此次先推出E-speak测试版。
Xybernaut 发布耐用稳定的 Linux 系统。
Linuxcare 收购Puffin Group, Prosa,和Cheek Consulting并获得
3250万风险投资。
Caldera, Red Hat, SuSE, 以及TurboLinux 加入 Trillian项目。
Bruce Perens 成为Linux Capital
Group总裁,这是一家为刚启动的Linux公司提供风险投资的公司。
Applix 一成立在一周内就收购了 CoSource.com。
巴西立法局立法规定政府机构必须使用开放源码软件。
Red Hat 公布拆股计划。
Eric Raymond 开始撰写《unix 编程艺术》
Sun 从与 European Computer Manufacturers Association
(ECMA)合作设立Java标准的工作中退出,拒绝提交关键文档。
Sun 再一次提前宣布基于Linux 的Java 2 的推出,
同时透露正与 Inprise 合作推出JDK
1.2.2。这次举动令Blackdown组织颇为不安。
很快 Blackdown 也宣布推出JDK 1.2.2 RC3,而恰好一年前
Sun的JDK 1.2 面世。
Gimp 1.1 进入最后测试,1.2 稳定版估计在2000年初发行。
Mozilla M12 发布,几乎到达alpha阶段了
Linux-Mandrake 7.0
以测试版的形式发布,内含了一个可由用户配置的安全级别设置工具。
GNUPC.com
启动,他们没有在系统中预装Linux,相反,随系统附上了7种发行版。
Eric Raymond 的 《Unix
Programming艺术》正在撰写中,这是一本关于在Unix环境下如何编程的书。
Richard Stallman 号召制裁Amazon.com。
实时Linux 工作室在维也纳启动。
DVD拷贝控制协会对 72
个被告提交指控。被告中有的参加了DVD加密格式反向工程,有的或多或少与DVD格式的破解有关。
1999 Debian GNU/Linux 大事记发布。

posted @ 2005-12-02 13:12 ivaneeo 阅读(591) | 评论 (0)编辑 收藏

几个重要的RedHat Linux内核文件介绍 [转贴 2005-09-30 090534 发表者 fannao_linux]

在网络中,不少服务器采用的是Linux系统。为了进一步提高服务器的性能,可能需要根据特定的硬件及需求重新编译Linux内核。编译Linux内核,需要根­据规定的步骤进行,编译内核过程中涉及到几个重要的文件。比如对于RedHat
Linux,在boot目录下有一些与Linux内核有关的文件,进入boot执行:ls –l,如图所示。编译过RedHat
Linux内核的人对其中的System.map
、vmlinuz、initrd-2.4.7-10.img印象可能比较深刻,因为编译内核过程中涉及到这些文件的建立等操作。那么这几个文件是怎么产生的?又­有什么作用呢?本文对此做些介绍。

一、vmlinuz
vmlinuz是可引导的、压缩的内核。"vm"代表"Virtual Memory"。Linux
支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名"vm"。vmlinuz是可执行的Li­nux内核,它位于bootvmlinuz,它一般是一个软链接,比如图中是vmlinuz-
2.4.7-10的软链接。
vmlinuz的建立有两种方式。一是编译内核时通过"make zImage"创建,然后通过:
"cp usrsrclinux-2.4archi386linuxbootzImagebootvmlinuz"产生。zImage适用于小内核的情况,它的存在是为­了向后的兼容性。二是内核编译时通过命令make
bzImage创建,然后通过:"cp
usrsrclinux-2.4archi386linuxbootbzImagebootvmlinuz"产生。bzImage是压缩的内核映像,需要注意,­bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示"big
zImage"。 bzImage中的b是"big"意思。
zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip­解压缩代码。所以你不能用gunzip
或 gzip –dc解包vmlinuz。
内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage解压­缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage
或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。
vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。
二、 initrd-x.x.x.img
initrd是"initial ramdisk"的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。
图中的initrd-2.4.7-10.img主要是用于加载ext3等文件系统及scsi设备的驱动
。比如,使用的是scsi硬盘,而内核vmlinuz中并没有这个scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存­储在根文件系统的libmodules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题。
initrd-2.4.7-10.img是用gzip压缩的文件,下面来看一看这个文件的内容,操作步骤如下图所示:

从图中linuxrc这个脚本的内容可以看到,initrd实现加载一些模块和安装文件系统等。
initrd映象文件是使用mkinitrd创建的。mkinitrd实用程序能够创建initrd映象文件。这个命令是RedHat专有的。其它Linux发­行版或许有相应的命令。这是个很方便的实用程序。具体情况请看帮助:man
mkinitrd

下面的命令创建initrd映象文件:

三、 System.map
System.map是一个特定内核的内核符号表。它是你当前运行的内核的System.map的链接。
内核符号表是怎么创建的呢 System.map是由"nmvmlinux"产生并且不相关的符号被滤出。对于本文中的例子,编译内核时,System.map创建在usrsrclinu­x-
2.4System.map。像下面这样:
nm bootvmlinux-2.4.7-10 System.map
下面几行来自usrsrclinux-2.4Makefile:
nm vmlinux grep -v '(compiled)(.o$$)( [aUw] )(..ng$$)(LASH[RL]DI)' sort
System.map
然后复制到boot
cp usrsrclinuxSystem.map bootSystem.map-2.4.7-10
下图是System.map文件的一部分:

在进行程序设计时,会命名一些变量名或函数名之类的符号。Linux内核是一个很复杂的代码块,有许许多多的全局符号。
Linux内核不使用符号名,而是通过变量或函数的地址来识别变量或函数名。比如不是使用size_t
BytesRead这样的符号,而是像c0343f20这样引用这个变量。
对于使用计算机的人来说,更喜欢使用那些像size_t
BytesRead这样的名字,而不喜欢像c0343f20这样的名字。内核主要是用c写的,所以编译器连接器允许我们编码时使用符号名,当内核运行时使用地址­。

然而,在有的情况下,我们需要知道符号的地址,或者需要知道地址对应的符号。这由符号表来完成,符号表是所有符号连同它们的地址的列表。上图就是一个内核符号表­,由上图可知变量名checkCPUtype在内核地址c01000a5。

Linux 符号表使用到2个文件:
procksyms
System.map
下图是procksyms的一部分。
procksyms是一个"proc
file",在内核引导时创建。实际上,它并不真正的是一个文件,它只不过是内核数据的表示,却给人们是一个磁盘文件的假象,这从它的文件大小是0可以看出来。­然而,System.map是存在于你的文件系统上的实际文件。当你编译一个新内核时,各个符号名的地址要发生变化,你的老的System.map具有的是错误­的符号信息。
每次内核编译时产生一个新的System.map,你应当用新的System.map来取代老的System.map。

虽然内核本身并不真正使用System.map,但其它程序比如klogd, lsof和ps等软件需要一个正确的System.map。
如果你使用错误的或没有System.map,klogd的输出将是不可靠的,这对于排除程序故障会带来困难。没有System.map,你可能会面临一些令人­烦恼的提示信息。

另外少数驱动需要System.map来解析符号,没有为你当前运行的特定内核创建的System.map它们就不能正常工作。
Linux的内核日志守护进程klogd为了执行名称-地址解析,klogd需要使用System.map。
System.map应当放在使用它的软件能够找到它的地方。执行:man
klogd可知,如果没有将System.map作为一个变量的位置给klogd,那么它将按照下面的顺序,在三个地方查找System.map:
bootSystem.map
System.map
usrsrclinuxSystem.map
System.map也有版本信息,klogd能够智能地查找正确的映象(map)文件。

本人评述:绝对好文!!!

转自:httpwenwei.blueidea.comarticle.aspid=44

posted @ 2005-11-28 20:43 ivaneeo 阅读(402) | 评论 (0)编辑 收藏

这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有方向,所以把我的经历写出来与大家共勉,希望能给刚如行的朋友们一点点帮助。

一转眼我在IT行业学习工作已经七年多了,这期间我做过网页,写过MIS、数据库,应用程序,做过通信软件、硬件驱动、协议栈,到现在做操作系统内核和IC相关开发,这中间走了很多弯路,也吃了不少苦。

我上的是一个三流的高校,就连同一个城市的人多数都不知道。因为学校不好也就没有指望能靠学校名气找一个好工作。所有的希望都寄托在自己的努力上了,大一开学前的假期我就开始了学习,记得我买的第一本书是《计算机基础DOS3.0》,大家别吓着了,其实当时已经普及了DOS6.22了,只是我在书店里看到了DOS4.0,5.0,6.0的书,以为像英语那样是第四、五、六册,记得当时到处找DOS1.0,现在想想也幸好我没有找到:)开学前我学完了PASCAL,那时既没有计算机也没有人可以请教,我连程序是什么的概念都没有,只好死记硬背代码,然后拿纸写,我一直到大三才有了一台486,在这之前用纸写了多少程序我也记不清楚了,只知道最长的一个我拿A4大小的草稿纸写了30多页,我的C语言、C++、VC都是在这样的条件下入门的。所以说条件是可以克服的,希望我的经历多少给条件艰苦的同学们一点信心。第一次上机是在我姐夫的机房,我的心情激动的无与伦比,但是一上机我立刻傻了眼,他们用的是英文版的Win3.1,我的那点DOS知识都见了鬼,上机提心吊胆的一阵瞎摸,一不小心把Word弄成了全屏,怎么都还不了原,当时真是心急如焚,我以为机器被我弄坏了。第一个C语言程序,就是那个经典的HelloWorld,我调了几个星期,上机机会非常少,也没有书告诉我开发环境(TC2.0)需要设置,而且开始我都不知道有编译器,我甚至自作聪明把写好的程序扩展名从.c改成.exe,结果可想而知。大一学完了C、X86的汇编、数据结构、C++。由于精力都花在自学上了,大一下四门课挂了彩,三类学校就是这点好,挂上一二十门也照样毕业。不过扯远点说,我那么刻苦都及不了格,可见我们国家的计算机教育有多死板。

大二准备学VC和BC,当时难以取舍,后来选了VC,不为别的,只为书店里两本书,VC那本便宜6块钱。我的努力在班上无人能及,学的日夜不分,大三有了计算机后更是如此,很多次父亲半夜教训我说我不要命了,我一直觉得自己基础差,记忆又不行,条件也不好,所以觉得只有多花点时间才能赶上别人。居然后来有许多朋友说我有学计算机的天赋,让我哭笑不得。我用的是486,16M内存,1G硬盘,当时同学们的配置都是P166MMX,我安装一个Windows
NT4.0需要一个通宵,
编译一个BC5.0向导生成的程序需要近两个小时,我的显示器是个二手的,辐射非常大,开机屏幕冒火花,看起来很酷的:),有一次程序写的太久,觉得怎么白色的编辑器背景变成了紫色,以为显示器坏了,后来才发现眼睛不行了,不过说来也奇怪,到今天我的视力还能保持1.5,真是个奇迹。但是就是那台破机器陪伴了我两年,让我学会了VC、Delphi、SQLServer等。后来那台机器给我阿姨打字用,据她说一天她正打的开心,一股青烟夹着火苗从显示器钻出来,之后它才寿终正寝。

大三假期找了个机会在一个计算机研究所实习,与其说实习不如说是做义工,工作了两个月一分钱没有拿。但是这两个月对我的发展帮助很大,让我早一步了解了社会,刚去的时候我当然是一窍不通,在那里我熟悉了网络,学会了Delphi和Oracle。由于工作很认真,得到了比较好的评价,在一位长者的引荐下,我开始和他们一起做项目,这使我在大三大四就有了自己的收入,大四又找了两家MIS公司兼职,虽然钱不多,但是在学生期间有1000多的收入我已经非常满足了,我终于用自己赚的钱把计算机换了。大四下开始找工作,这时我的工作经验已经比较多(当然现在想想非常幼稚),开始听父母的想去那个研究所,实习过那个部门也希望我能去,但是不知道为什么最后不了了之,这种单位就是比较官僚,我一气之下就到了我兼职的一个公司做MIS的TeamLeader。在大三到毕业一年的时间,做过了各种MIS,从煤气、烟厂、公安、铁路、饮食到高校,什么有钱做什么,工作也很辛苦,经常加班和熬通宵,从跟客户谈需求到设计、编码、测试、交付都要上。那时觉得很有成就感,觉得自己还不错,现在想想真是很肤浅。

刚走上工作岗位的学生很容易被误导,各种开发工具让人眼花缭乱,同时也觉得很受公司器重,但这样工作永远是一个低层次的开发者。不要跟我说什么系统分析有多么多么重要,多么多么难。你以为自己跟用户谈需求做设计就是系统分析和设计了吗,国内又有几个公司能够做的很到位很规范?我是ISO9000内审员,也在Rational公司受过多次培训,拿了4个证书,还有一个公司让我去做CMM。这些我听过很多,但是很多事情到国内就变了性质,一个公司不是通过了ISO9000或者CMM就能规范了,我现在在一家有几十年历史的外企工作,里面的管理不是一般国内企业能及的。作为一个毕业不久以前没有步入过社会的学生,几乎不可能在很短的时间掌握系统分析和设计,面向对象、UML只是一个工具,关键是人本身的思想,不是说你熟悉了C++、Rose就能够做出好的设计,相反如果你具备了很高的素质,你可以用C写出比别人用C++更加模块化的程序。

话说远一些,国内软件开发行业有一个怪圈,很多人觉得VC > Delphi >
VB,真是很搞笑。这几个软件我都做过开发,说白了他们都是工具,应该根据应用的需要选择采用哪个,而不是觉得哪个上层次。如果你因为用某个开发工具很有面子而选择的话,只能说明你很浅薄。如果说层次,那么这些工具都不上层次,因为它们用来用去都是一些系统的API,微软的朋友不会因为你记住他们多少个API或者多少个类就会觉得你很了不起,你永远只是他们的客户,他们看重的是你口袋里的银子。我也做过系统内核,我也封装过很多API,同样我也不会看重那些使用这些API做二次开发的客户,除非他能够作出自己独到的设计。

至于有人认为C++ >
C那更是让人笑掉大牙,不妨你去打听一下,现在有几个操作系统内核是用C++写的,又有几个实时系统用的是C++,当然我也不是说C++不好,但是目前的内核和实时系统中C++还无法与C匹敌,至于说C++适合做应用系统的开发那是另外一回事。所以我的观点是不在于你用什么工具和语言,而在于你干什么工作。你的设计体现了你的技术层次。

这样干了一年我觉得非常苦闷,做的大多数都是熟练工种的活,个人技术上没有太多的提高也看不到方向。所以决定离开这个城市去上海,寻求更好的发展,并且打算放弃我以前的MIS转到通信行业。
写到这里不能不提到我女朋友,我们是在来上海前半年认识的,她大四在我公司实习,公司派她给我写文档,我们的感情发展的很快。她告诉我很多事情,她家原本是改革开放的第一批暴发户,她母亲爱打牌,输掉了几百万,还欠了很多债,她有男朋友,但是她对他没有感情,只因为他给了她母亲两万多块钱,后来还强迫她写了四万块的借条,她男朋友背叛过她并且不止一次打她,现在逼她结婚不然就要她还钱。这人居然还是一个高校的老师!她母亲把父亲给她的学费花了,因为拖欠学费她没有办法拿到毕业证。她母亲现在有病需要钱,我拿出了自己的一点积蓄并且跟朋友们接了一些,替她交了学费并给她母亲看病(后来才知道看病的钱又不知所终,就连她母亲是不是有病我都不知道,但她也是没有办法)。这个时候我家知道了一些事情,坚决反对我和她在一起,她原来的男朋友也极力破坏。无奈之下我们决定早一定离开这个伤心的城市,并且瞒着我们家。由于时间仓促,我只准备了4000块钱,她仅有的几百块钱也被她母亲要去了,我买了三张票,一张是中午的,两张是晚上的,中午我的家人把我送上船,他们一离开我就下了船,我和她乘坐晚上的船离开了这个我和她生活了很多年的城市,带走的只是一身债务。没有来过上海的我们两个性倔强,都不愿意去麻烦同学和朋友。来到上海是傍晚6点半,我们都不知道该去哪里,我们找了一个20块钱的旅馆,这个房间连窗户都没有,7月份的天气酷热难耐,房间里非常闷热。第二天我们开始租房子,因为身上的钱不多,我们基本都是步行,花了一个星期时间,不知道在浦东转了多少圈后找到了一个400块的房子,但是我们都不了解上海是付三压一,还要付半个月的中介费,买了一些锅碗瓢盆后,我们身上只有800块钱了,工作都还没有着落,这800块钱要支持到我们拿到第一个月工资,为了省钱我们自己做饭,每天买菜只花两块钱,她非常喜欢吃(也可能她在大学经常挨饿的愿意),看到她现在这样省吃俭用我真的很不忍心。她以前的男朋友也没有放过她,经常打电话来骚扰,并且来上海看她,还说了不少恐吓她的话,她过于善良,说他以前毕竟帮助过她,叫我不要与他一般见识。以后的每天在家就是苦等面试通知,原本我想迅速找一家MIS公司解决眼前的困难,但是她坚持让我不要放弃自己的理想,终于功夫不负有心人,我找到了一家通信公司,4000块的工资虽然赶不上MIS公司给我开出的价位,但也够在上海生存。她也找到了工作,第一天上班她哭了,这是她来上海第一次流泪,我心里很难受也很感动。

由于是全新的行业,我把自己降到了零点,我学的VC、Delphi、数据库派不上用场,摆在我面前的是嵌入式、协议、信令一些我从未接触过的知识。我知道我没有退路,于是拼命的学习,我把自己当做一个应届毕业生一样,一分努力一分收获,半年过去我终于熟悉了工作,并且得到了公司的表彰,薪水也加了一级。后面的日子里我们省吃俭用,把欠朋友的1万多块钱还了,日子终于上了正轨。这时女朋友告诉我她想考研究生,我也很支持,于是她辞职在家备考。

另外,在这里我要感谢我的ProjectManager,他原来是一个大通信公司的产品经理,对人非常和善,我从他那里学到了很多知识,而且他也给了我许许多多无私的帮助。在工作上他给我充分的空间和信任。记得公司安排我维护一个接入服务器软件,由于代码量不算太小(5万行),资料和文档都不齐全,我维护起来非常吃力,所以想重新把它做一遍,公司领导不太支持,可能觉得工作量太大,但是他极力支持我,私下里他让我放手去做,我的维护工作他挤时间做。在他的支持下,我花了半年时间完成了接入服务器的软件,并且实现了一个相对完整的TCP/IP协议栈。在这里我学会了嵌入式系统设计、驱动开发、TCP/IP和很多通信的知识,我花了一年时间终于使自己从MIS开发转到了通信行业,并且站稳了脚跟。我的开发大量是对硬件的直接操作,不再受微软的操作系统,VC、Delhpi这些开发工具的约束,我终于看到了另外一片天空。
我做事情喜欢追根问底,随着开发的深入,软件开发与硬件联系越来越紧密,硬件知识的匮乏又对我的发展产生了障碍,而且芯片技术基本上掌握在国外公司的手里,这对做系统级设计是一个非常大的制约,一个新产品出来,第一道利润(也往往是最丰厚的利润)常常都被IC公司如Intel、Motorola赚去了,国内的厂商只能喝点汤。所以我决心解决自己的硬件技术障碍,并打算离开通信行业,进入IC设计相关领域。

当然我明白如果我对硬件了解的非常少,没有哪家IC公司会仁慈到招我这样一个一窍不通的人来培训。所以我必须努力打好基础,学一些相关知识为以后做准备。就像我开始从MIS转到通信一样,我看过大量通信方面的书,并且给一个ISP做过RADIUS计费分拣台,在这样的背景下这家通信公司才给了我这个机会。我在的通信公司是做系统设计的,有不少PCB
Layout硬件人员,平常我就注意向他们学习,由于我做的是软件,在公司看硬件资料不好意思,所以开始只好在家看,刚来上海工作我连续一年都在加班,后来不加了,因为我要挤出时间学习,通常我12点左右睡,第二天5点半起,我上班比较早,地铁上如果人不多我也用来看书。学习当然不会是一帆风顺的,有些实在不懂的问题就积累起来问硬件人员,他们的帮助使我学习进度快了很多,因为在没有人点拨的情况下自学,我的一半时间是花在解决疑难问题上,但这种问题经常是别人的一句话就可以让我豁然开朗,我非常庆幸我有这样的学习环境。在后面的一年里,我学会了看硬件原理图,学会了简单的硬件设计(模拟电路方面还有不小的差距),事情就是这样的,当你安安份份做软件,别人永远认为你是软件开发人员,在你开始学习硬件时别人未必会认同,有位中兴通讯的朋友还对我说过,一个人不可能把所有东西都学完。我也明白这一点,但我希望自己做的更好。但当你熟悉硬件后大家又会觉得你好像原本就是软硬件都懂的,同事们也都习以为常了。这个时候我可以把硬件资料堂堂正正的拿到公司看,没有人再大惊小怪了。让我比较自豪的是我通过自己的努力做了一个IAD(软交换的终端设备)系统方案,包含软硬件的选型、设计等内容,这个方案得到了公司和同事们的认同,让我感到非常欣慰。

技术是相辅相成的,当我的硬件有了一定的进步后,我的软件设计也有了很大的提高,我可以从更深层次理解问题,我做的接入服务器CPU是Motorola
PowerPC860,熟悉的朋友都知道860
QMC与软件的批量数据传输通常采用BD表的方式,硬件人员做驱动的时候习惯采用固定BD表,每接收或发送数据都将数据从BD表拷贝到用户Buffer,或从用户Buffer拷贝到BD表,由于理解的比较深入,我自己重新实现了这个过程,采用动态BD表的方式,驱动从一个网口接收数据,提交给我的软件进行三层交换,直至从另外的接口发送出去,没有进行一次拷贝。这样的设计大大提高了性能,使系统的指标接近理论值。软硬件的结合使我的设计水平上了一个台阶。我现在写的这个操作系统,编译后我把程序反编译成汇编,找出其中不优化的代码,然后在C程序中进行调整。举个例子,很多CPU没有专门的乘法指令,这个大家应该都知道,在这种CPU上进行一个乘法操作常常会花费大量的指令周期,有的朋友会说这个我知道,我会尽量避免采用×号,但是事情往往不是那么简单,你知道C语言中数组的下标操作是怎么实现的吗?仔细看看反汇编的代码你就会明白,同样是通过下标的定位操作,C编译器会有时候会产生位移指令,但有时候会用乘法实现,两者效率往往是天壤之别,所以明白这些问题你才能将系统性能提升到极致。这些问题就不多说了,有兴趣的话以后可以共同探讨。

话说远一点,我由衷的希望在软件上做的比较深入的朋友们有机会学学硬件以及其它相关知识,尤其是做底层开发和嵌入式设计的。这对软件技术的提高有非常大的帮助,否则很多事情你只知道该这样但不会明白为什么该这样。我这个观点在我现在的IC公司Project
Manager那里也得到了验证。他告诉我们公司现在的802.11芯片产品的软件经理原本是做该芯片硬件设计的,
某某某原本是做软件的,现在在做IC,类似的例子还有很多,只是在国内这样的风气不是非常流行。

我有一些心得体会与大家分享,只有当我干好本职工作后,我才会学习与工作关系不大的技术,这样公司的上司才不至于反感,在入门阶段的问题我通常不去问那些资深人士,而是问一些资历比较浅的朋友,比如刚毕业不久的学生,因为他们往往会跟你详细的讲解,而资深人士通常觉得你的问题太简单,所以回答的也很简单,我又不好意思多问。等技术上了一定的层次后我才会问他们,他们也能给你比较深入的回答。另外,有些朋友说我机会比较好,他们也希望能从事新的工作可惜没有机会,我听了只有苦笑,我的机会了解的人都应该知道,我没有出生在什么IT世家:)也没有谁一路提拔我,所有的路都是自己走出来的,我母亲去世比较早,我的后母(我叫她阿姨)看着我努力过来的,一次她看我大年30还在写程序,她说像我这样努力木头都能学出来。

我的最终目的是IC而不是PCB,所以我下一步的准备开始学习IC设计的知识。公司的同事没有懂IC设计的,后面的路又要靠自己了,我买了不少相关的书,在网上也查了很多的资料,我花了大量的时间去学习VHDL,并且用软件进行了一些简单的设计和仿真(没有设计ASIC,只是针对FPGA),随着学习的深入,我渐渐明白了IC设计的基本流程,同时也明白了这条路的艰辛。这个时候我已经做好了跳槽的准备,我向一家业界又一定知名度的IC设计公司投了简历,并通过了漫长的面试(4个多小时)。其他的一切我都比较满意,唯独薪资差强人意,我也明白原因,因为我是这个行业的新人,我没有经验,我再一次将自己清零了。公司老板问我6000多一个月能不能接受,我知道他也是照章办事。想想我通信行业的朋友们,基本上都是年薪10万以上,月薪过万的也比比皆是,朋友们也帮我介绍了不少待遇不错的公司,我该怎么选择,当时我很犹豫,我热爱我的事业,我向往我的追求,但我也是一个普通的人,我也需要养家糊口,我也想早一点买房买车。生活给我出了一道难题。

爱因斯坦在63岁时说过"一个人没有在30岁以前达成科学上的最大成就,那他永远都不会有。"这句话给了我很大的压力和震动,我马上就26岁了,离30只有四年时间,我必须抓紧这几年宝贵的时间,努力达到我技术上的最高峰。为了这个理想,为了能离自己的梦更近一些,我选择了这家IC公司,我明白自己的薪资和公司刚进来的硕士研究生相差无几,但为了今后的发展只能忍受,一切又得重新开始。换行业是一个非常痛苦的过程,尤其从一个春风得意的位置换到一个陌生的岗位,感觉象从温暖的被子里钻出来跳进冰水中,让人难以接受。在原来那家通信公司,我是唯一两年时间涨了五次工资的员工,公司和同事都给了我极大的认可,工作上也常常被委以重任。但现在这一切都成了过去,在新的公司我只是一个新人,没有人知道也没有人在意我过去的成绩。我决定重新开始,我把自己看作新毕业的学生,我要用自己的努力得到公司的认可。进入新的行业是非常痛苦的,我告诉自己必须忍受这一切,虽然外面有很多诱惑,但是既然作出了选择我就不允许自己轻易放弃。

我现在已经在这家新公司上了一个多月的班,开始非常艰难,现在慢慢适应了。第一个月结束时,Team
Leader找我谈话,说我是新进员工中最优秀的一个,我心里很欣慰,这也算对我努力的一个肯定吧。在这里还要感谢我的女朋友,她给了我很大的支持和鼓舞,每次在我动摇的时候她都在鼓励我,让我坚持自己的理想,刚来上海是她让我不要勉强去做MIS,这次也是她让我顶住了月薪过万的诱惑,没有她我可能不会有今天的成绩。

现在的公司有自己的操作系统,自己的CPU、DSP和其它芯片,在这里我能学到世界上最先进的技术,我们的设计开发不再完全依赖别人的硬件和系统,这让我很开心。我打算等工作步入正轨后,全力学习新的知识,实现我的理想。

在后面的两年里我给自己定下了几个目标:

一.努力做好本职工作,在工作上得到公司和同事们的认同;

二.努力学习IC硬件设计知识,多向同事请教,并利用一切机会多实践;

三.实现我的实时操作系统的主要部分,完成TCP/IP协议栈模块,并免费发布源代码;

四.和我女朋友结婚并买一套小房子,这是最重要的,因为我明白事业是可以重来的,但是珍贵的感情很难失而复得。

在这里提一下我现在开发的操作系统,它是一个实时嵌入式系统,目前支持以下特性:

a.支持时间片轮转调度和基于优先级调度,最多64个优先级;

b.抢占式实时内核;

c.为了便于移植,主体用标准C实现;

d.汇编代码非常少,不到100行;

e.支持任务管理,各任务有独立的堆栈;

f.进程同步和通信目前完成了Semaphore,Message Queue正在调试;

g.实现了定时系统调用;

h.可以在windows上仿真调试

我还打算下一步实现优先级反转保护,Event Flag,Data Pipe,内存管理(以前实现过)、驱动接口等。

在这之后我还会努力完善它,比如加入文件系统,协议栈、调试接口等。希望朋友们提出自己的意见和建议,在此不胜感激!

后记:

就像有的朋友说的,我的经历或许会给一些朋友产生误导,在这里我必须说明一下。我来上海以前学习过于拼命,常常晚上只睡3个多小时,我身高1米71,那时只有108斤(我现在130多),家人也说我这样拼命活不过60岁,但是当时的我太固执,我对他们说只要能实现理想活50岁我就够了。那时的拼命使我的身体受到了影响,有一次早上突然腰肌剧痛难忍,痛的我倒在床上站不起来。虽然我现在已经比较注意,但有时候还会隐隐作痛。后来在女朋友说服了我,来上海以后我不再如此。我经常引用父亲的一句话"身体是革命的本钱"。

而且我也发现拼命不是办法,我可以熬一两个通宵,最多的一次我连续工作了三天三夜,但是我半个月都没有恢复过来,这样是不是得不偿失?学习工作应该是一个长期的过程,像马拉松而不是百米冲刺。我现在非常注意调整学习和工作的强度,我要保证每天尽量有相对充沛的精力,一些年轻的朋友觉得自己也应该拼命努力,这让我多少有些担心,如果我的故事能让你在学习工作上多一点兴趣,我会感到很开心,但如果误导了某些朋友,让你做一些不值得的付出,我会感到很内疚。

技术没有贵贱只分,我以前换行业是因为自己的兴趣所致,而不是对哪个行业有什么偏见。我希望我的经历不要给朋友一个错误的导向,觉得我始终向更高的技术发展。其实各行各业做到顶尖都是很困难的。话又说回来虽然技术没有贵贱,但是门槛是有高低的,无论如何,做IC的门槛要比做网页的高,这一点无可否认。国家各种人才都是需要的,但是作为个人奋发向上的想法还是应该有的,努力在自己喜欢的行业上做的更好,而不应该停留在比较肤浅的层次上。

我是一个自己觉得比较有自知之明的人,或许我最大的优点就是知道自己有很多缺点:)。我的故事中很多的曲折和错误都是由我的缺点造成的,希望大家用审慎的眼光看待我的经历,不要被我的"花言巧语"所迷惑。我学习有些随心所欲,这给我带来了无尽的麻烦,也大大阻碍的我的发展。记得我小时候成绩比较出色,但是后来学习严重偏科,导致我中学成绩一再滑坡,也没有考上什么好的学校,小时候的一个朋友,当时的成绩和我相仿,但是没有我这个缺点,她上了清华,后来在去了美国深造,在一个著名导师手下研究理论科学,这未尝不是一条更好的出路。另外我的学习方法也是在不断改善中的,过去的学习过于讲究数量和时间,那样学习既苦而已效率不高,现在我非常注意学习的效率和技巧,这样才是学习的捷径(当然不是指投机取巧),比如说学一相对陌生的技术,如果有条件,不妨问一问有经验的人,不需要问很多,往往他不经意的几句话会给你非常大的帮助,甚至超过你看一个星期的书。带着这样的思想再去学习你会节省很多时间,这样何乐不为呢?这些年中我学了不少的东西,由于开始非常盲目,所以学的东西杂乱无章,现在回想起来让我啼笑皆非,我把大量的时间浪费在一些没有必要深入了解的知识上,毕竟一个人的精力是有限度的。很多朋友很我一样都背过五笔字形,的确它是一个不错的输入法,但是对一个研发人员它绝对不值得你去背,你的时间应该花在有价值的地方。我这样的事情还做过很多,我背过CCED、WPS的命令和快捷键,在dBase基本退出历史舞台后我还花了很多时间去学习它的使用。所以我的学习在前期缺乏规划,没有明确的短期目的、中期目标,只有一个虚无飘渺的长期的理想。这就像做设计一样,好的设计是从需求抽象到代码有很多过程,而不能得到了需求就立刻开始开始编码。

当然这么些年的学习和工作多多少少有些收获,下面我说说我的一些学习的心得,这些方法未必正确,我也在不断探索和改进中。我的学习和工作有相对明确的目标,我不会一时心动而去学习某一技术,在下决定之前我会考虑很多,包括长期的发展,个人路线的规划,需要付出的代价、可能遇到的困难及解决的办法等等,在决定后还会制定更加明确的计划,包括短期、中期和长期的,身边可以利用到的资源(包括好的书籍、资料、软硬件环境,也包括有经验的朋友或者师长),以及每一个阶段是怎么过渡到高一阶段的计划,往往在一个学习阶段一旦上路后会走的相对顺利,但是跨阶段通常比较麻烦,比如从学习基础知识转到实践。另外我买书也有自己的方法,现在世面上高质量的书远不如低质量书多,对于一个陌生的技术,往往在第一次买书会选择错误,即使买到一本好书但是它的方向也未必适合你,所以我通常会先在网上查找一些该技术的介绍,有了一点点概念后再去买一本比较薄、相对便宜并且内容相对泛泛而谈的书,这是国内作者最善于写的书:),再把它浏览一遍后我就会基本明白这门技术的要点,后面买书和制定计划就会明确的多。否则一开始就想找本好书往往比较困难,而且买回来后努力学习,有时候学了一半才发现是本低质量的书或者是相对过时技术,让人非常懊恼。另外让有经验的人帮你介绍,通常也是一个不错的选择。
有些朋友想学通信、嵌入式开发,但总觉得自己没有软硬件环境,我就按我的了解给大家介绍一下怎么建立这样的环境,当然我了解的只是我学习和工作的方向。通信我做的是数据网方面的工作,包括TCP/IP、二三层交换、对接入网、
H.323和软交换也有一点认识
。这些软硬件环境都是可以在PC上构建的。你甚至可以在一个没有网卡的PC上建立一个包含多个路由器、接入服务器、VoIP网关、网守、主机等的仿真网络环境,而且与实际的网络相当接近,当然这需要你有清晰的网络概念和一定的网络知识,我一直在努力开发一套软件将这个过程简化,目前试验已经做完,我可能会将它融入我的操作系统外围扩展软件中。这样的方法我无法用简单的语句讲的很清楚,我可以说一下大概的思想,就是在PC上实现仿真网卡,(知道Windows怎么在没有网卡的机器实现虚拟网卡技术的朋友都应该会明白),然后每一个仿真网卡对应一个虚拟设备,如路由器或者主机。你也可以借助第三方工具完成部分工作,如VmWare等。我现在就是利用一个仿真网卡做自己的开发的。

至于嵌入式开发环境更加容易实现,PC就是一个非常大的硬件平台,现有的嵌入式操作系统通常都支持X86,你可以在上面做开发,通过软盘Boot或者使用虚拟机装载,我用VxWorks做了试验,在一台PC上跑Windows和VxWorks两个系统。另外Windows上的兼容DOS的16位仿真X86环境也为很多操作系统提供了绝佳的试验环境,我的操作系统在Windows上就是这样实现的。Linux在嵌入式中应用也比较广泛,它在网上有大量的资料,而且也相对比较容易实践。同时很多完善的嵌入式开发环境支持软件仿真,如Tornado、WinCE等。

前段时间处理了很多事情,一直没有写下去,花光了所有的积蓄买了一套房子,同时把户口的事情也基本办完了,这几天稍微缓口气。昨天跟我的一个老上司见面聊了半天,心里感慨万千。他从外在条件看让不少外人羡慕,二十多岁做过到了863项目的负责人,博士毕业的爱人单位也非常好。现在三十出头的他在一个通信公司做产品经理,工资虽然不算高但也有一两万,而且还持有股份。但是我们了解的人才理解他的艰辛。"白领"这个词在一些人看来是仿佛是一个动人的光环,但是在我看来是一个无奈的名字,每天行走在大街上,来来往往的车流中有多少是"白领"的?又有几个"白领"住的起高档的住宅?在上海一套别墅300万不足为奇,按揭贷款下来总额接近600万,年薪二十万在上海算是一个中高级"白领",高额的税金去掉了你百分之几十的收入后,这样算下来不吃不喝也要四十多年,加上生活的其他开支,注定了你与这样的住宅无缘。看着外面一套套别墅,一辆辆好车,我不知道它们是谁的,但我知道其中没有什么白领。我觉得自己很渺小,在这个喧闹的都市中我如同一只蚂蚁,但我有不甘于平凡,我不愿做一个单纯的"白领"。

其实很多朋友并不了解我,我不是一个追逐时尚技术的人,我只是不愿意做一个所谓的"白领",更加不愿意做一个单纯的"程序员"。我不甘愿平凡的生活一辈子。我在不断的努力,我的方向非常明确,我要做多数人不做和做不到的事情,很多朋友对我这样频繁的换方向不理解,觉得一个人只要熟悉一种技术就可以了,对于这样的看法我只能说你浅薄,现在的大的系统和产品往往都是软件、硬件和应用相结合的,我要做的不是哪个方面的专家,而是希望能够成为系统设计师。我不相信一个只精通发动机的专家能够设计一辆好车,同样我也不相信对硬件一窍不通的人能做出一个操作系统,或者一个对财会没有一点概念的人能设计出一个优秀的财务软件。在工作中我发现社会上非常缺乏边缘人才,尤其是在国内。在国外一个人软硬件兼修非常普遍。如果设计产品的人只了解他的专业那么是很难有出色的设计。所以我必须趁着自己年轻学的更加广泛一些,这样才能提高自己的综合素质,这也是为什么高校那么多非专业课程。学习工作了这些年,实际上都没有脱离IT这个行业,我现在的公司开发一个系统时,先是将最终功能列举清楚并分析可行性,然后划分哪些是用芯片实现,哪些是用硬件电路实现,哪些是用软件实现,这样的设计才能做出最好的系统。如果一个设计者单纯只懂一个方面是不可能做到这一点的。

自负常常伴随着无知,记得我大学毕业时,论文答辩会上我和专家组组长争起来了,因为我对自己的设计非常得意,而他虽然是鸡蛋里挑骨头,但是由于知识非常有限,我无法回答他的问题,所以有些"恼羞成怒"。我原来一直喜欢用"所谓"最好的开发工具,记得做过一个愚蠢的设计,一个排课表的软件我用VC+Oracle开发。这些经历我牢记在心,时刻提醒自己学会谦虚。我的亲身经历加上我对一些身边朋友的观察发现这样一个现象。当一个人只会他认为最好的技术,而对其他的一无所知,这样的人经常是目空一切。

从第一个"Hello
World"到今天的操作系统,前前后后写了很多代码,从这中间我也积累了很多心得。由于我是在没有人指导的情况下自学编码的,所以走了很多弯路,也犯了不少错误。最初我写程序全凭自己的感觉,写一个新程序对结构设计不很重视,以为学好语言,数据结构就可以写出好的程序,其实远不是这样的。没有设计的情况下,也可以写,但是程序无法写的很大、很复杂。我个人的经验是这样的系统超过8000行我就无法控制了,以前我用VC写过一个Windows下的应用程序,大概8000行左右我对它失去了控制,整个代码一团糟,这8000行倒是可以相对稳定的运行,但是我没有能力再增加什么新的代码,动辄前后冲突,要么就是新代码与旧设计格格不入,需要调整旧的程序。最开始我写程序喜欢追求代码的精巧,别人很多行写出来的代码自己只写很少就可以实现,感觉那样比较酷。其实这样也是非常错误的,我现在写程序非常注重结构设计,为了结构清晰我愿意牺牲一点效率。

下面一段话是我写程序的座右铭,希望与大家共勉:

Make it right before you make it faster.

Keep it right when you make it faster.

Make it clear before you make it faster.

Do not sacrifice clarity for small gains in efficiency.

Brian Kernighan
- 作者: zidanz <javascript:void(0);> 2005年11月17日, 星期四 13:46
 Trackback

- 作者: zidanz <javascript:void(0);> 2005年11月17日, 星期四 13:46
 Trackback
posted @ 2005-11-18 09:48 ivaneeo 阅读(664) | 评论 (0)编辑 收藏

仅列出标题
共67页: First 上一页 29 30 31 32 33 34 35 36 37 下一页 Last