最后,外宾提出,你们的东湖高新技术开发区成立的消息对外已经公布过了,正因为这样他才慕名而来,他也知道中方有些单位(这里使用“单位”这个词是最准确的,因为那个时候根本没有今天这么多的公司)想与外方合作,希望能实地考察其中几家。于是那位老同志友好地介绍了研究和制造光纤、激光器件、计算机系统的几个单位,包括以研究容错计算机系统和 Ada 语言的七零九所。于是,在他们的陪同下,我们几人一同驱车参观了这几家单位。
当时这家公司的电子邮件是通过专门租用的卫星线路从莫斯科投递到德国的,再从德国的计算机主机上进入 Internet 进行投递。我好奇地问他,中国有没有这样的计算机网络,因为我在国内时从来没有听说过有这样的服务。 他告诉我,他的公司与中国之间直接的卫星网络连接没有,但是中国科学院有计算机节点连接在 Internet 上,因为他曾经听说有人在德国收到过来自中国的电子邮件,所以他可以肯定中国应该有这样的网络。
但是,我不甘心就这么放弃我的计划,我苦口婆心地说服了父母亲支持我建立一个公司,最终他们还是心软了下来,被我说服了,但是他们始终以一种将信将疑的心态看着我,他们不相信我的公司能够在市场上成功。这也难怪,在 1995 年前,国内主流新闻媒体上从来没有出现过什么关于 Internet 的报道,你又如何让他们一下子相信我能去运作一个他们从来没有看到过的东西去获得成功呢?
正是有了这段时间的寂寞和孤独,使我真正能够沉下心来学习数学。我在这段时间里除了复习集合论方面的知识之外,还非常仔细地阅读了长达两千多页的《世界数学家思想方法》3 ,这本书收录了古今中外的一百位具有伟大原创性的大数学家和数学大师,分别介绍了他们的生平事迹、数学上的辉煌成就,以及他们取得的数学成就背后使用到的思想方法论。尽管这本书还存在一些不足,但是总体上说是一部极优秀著作,不亚于著名的数学史学家莫里斯·克莱因(Morris Kline) 所著《古今数学思想》(Mathematical Thought From Ancient To Modern Times)。因为它通俗易懂,将数学家的思想方法论介绍得比较全面、比较清楚,所以它实际上帮助我建立了关于数学这门科学的框架和背景,一切开始逐渐地变得清晰起来。
我首先试图学习 C 语言,因为 C 是开发系统程序常用的编程语言。C 语言本身很小,规则不算太复杂,但是 C 语言有一个特别让初学者感到困难的地方,那就是指针的广泛运用,对于没有硬件经验的人来说,学习 C 语言的指针就如同梦魇一般。
虽然我从 1995 年就开始学习 C 语言,但是真正能够熟练地使用它,却是在 1998 年以后的事情了。应该说 C 是功能强大的语言,而指针是它能量的源泉。我费了很大的工夫才意识到 C 指针的本质可以通过泛积原理,配合局整关系和形影关系来认识,C 指针变量是储存变量地址的变量,由于本质上编程中的一切东西都可以放到计算机内存中,因此指针实际上可以指向一切东西。一旦理解了指针的本质,那么 C 就是一门可爱的语言了,因为你可以直接去操作一些硬件。为了详细解释这一原理,我创作了《C 指针编程的艺术》一书。4
1996 年时,我还学习了汇编语言, 通过对汇编语言的学习,我真正了解到了计算机内部的工作原理。有了 C 语言的汇编语言的基础后,我开始学习计算机操作系统。由于 MS-Windows 之类的操作系统不提供程序的源代码,因此后来我选择了 GNU/Linux 系统作为学习的工具。在学习操作系统的过程中,我发现泛系的概念可以到处应用,操作系统本身就是一套完整的竞分规范,即对操作系统上的软件和硬件资源进行分配,竞分者就是各个进程。整个关于操作系统的课程可以视为学习泛系理论的一个极好实例。
我还掌握了 Lisp 语言(包括 Common Lisp 和 Scheme 两者,以及 GNU Emacs 内嵌的 Emacs Lisp),但是这却是后来的事情了。
All governments are more or less combinations against people... and as rulers have no more virtue than the ruled... the power of government can only be kept within its constituted bounds by the display of a power equal to itself, the collected sentiment of the people.
--- Benjamin Franklin Bache, in a Philadelphia Aurora editorial, 1794
爪哇(Java)是印度尼西亚的一个大的岛屿,因为风光旖旎而闻名于世,成为旅游胜地。但是, Java 语言除了名称与爪哇岛相同之外,其他东西与爪哇岛风马牛不相及。那篇文章还有相当的篇幅介绍它的新特性,说它是下一代的网络语言,特别是 Web 上的编程语言,可是使用它来设计网络上的动画片,这门语言设计得很像 C 语言,但是取消了指针;它又像 C++ 一样面向对象的,却比 C++ 来得简单,甚至可以用它来编写操作系统等。
单凭这么一些只言片语的介绍是无法掌握这门语言的全貌的,我需要更加详细的文档资料,于是我又上网查找有关的文档资料和介绍 Java 的书籍,当时系统全面介绍 Java 的书并不多见, 但我还是发现了一本书叫 “Java in a Nutshell”,书名照字面直译出来就是“坚果中的爪哇”的意思(实际上意思是对 Java 编程一个深入浅出的介绍),网上对它的评价不错。
书的作者是 David Flanagan,他毕业于麻省理工学院(MIT)。我知道这是世界一流的名牌大学,许多革命性的技术都产生于那里,我们泛系学友队伍中也有人在那里获得过数学博士的学位。我写信给美国的朋友让他们买一本书来给我看看。
Java 虚拟机本身是采用标准的 ANSI C 编写的,因此, Java 与 C 之间有清晰的接口,系统程序员可以采用 C 编写底层的模块,通过两种语言之间的接口,传递到 Java 虚拟机的运行环境中去运行,而采用 Java 编写应用程序时,由于有了大量的类库,因此应用程序的开发时间与采用 C 编写相比可以大大得以缩短,对于熟练的 C 程序员而言,学习和掌握 Java 不是太困难的事情。
还有另一大令人头痛的问题,原书中有许多插图,O'Reilly 在收到我支付的版税后提供了利用 Macintosh 计算机制作的高质量的图形文件,但是我当时没有昂贵的 Macintosh 计算机,因此在我的 PC 上无法读出这些文件。后来通过一位朋友终于找到了某个大的设计院内有一从事地图测绘的制作室,他们那里有 Macintosh 计算机和输出设备。我带着光盘到了那里,但是他们告诉我,我的 PC 已经排好的文件在他们的 Macintosh上无法制作,需要重新排版! 我的天,我花了将近一个月的心血眼看就要白费了。我拒绝这样做,只要他们制作封面和有插图的内页。
T 一听就急了,因为他好不容易才物色到我这么一个合适的伙伴,而且我也去吉隆坡见过他的老板,老板也认可了。现在一下就谈蹦了,他以后的工作无法开展,于是 T 拉着 D 离开了我进入了咖啡厅,只剩下 B 与我谈话 。
B 开始和稀泥,一会尔, T 回来了,要单独与我谈,他提出了他的看法,说一切还没有开始,但是他希望我能与他们合作。我想了一下,将我的预期计划改了一个说法,说原来我之所以愿意帮助 O'Reilly 公司开拓业务,正是因为你 T 提出过一个方案,现在我没有看到这个方案会执行,因此让他去与 D 商量,重新考虑原来他提的方案。
最后,在 T 的劝说下,D 同意了这个方案,我们达成了协议,由我负责帮助他们开拓中国市场。这次谈判最后以在北京前门烤鸭店的两只烤鸭被我们消灭而告终。
在此之前,我曾经同他讨论过为他写一本传记,因此我们正式谈话也就从这里开始。我开始提问,问他的过去,他的生活,自由软件的历史,对圈内外其他人的评价等,渐渐地,我发现斯托曼具有无穷的人格魅力,特别是当我了解到他当时辞掉 MIT 人工智能实验室职务去开发 GNU 工程自由软件的细节时,他便将自己的经历娓娓道出,也唤醒了我自己当年辞职而得自由的回忆,“同是天涯自由人,相逢何必曾相识?!” 我们一下子成了好朋友。
处于争论旋涡中心的自由软件哲学
不客气地讲,D 是一个伪君子,我曾经在开始时让他下不了台,虽然后来他被 T 说服而暂时妥协过。我想既然我们双方已经达成协议,这件事就已经过去了,不值得再去想它。可是 D 不这样想,他心中仍然是看不惯我,这一点后来我逐渐觉察到了,而且我觉察到了一个更大的圈套。
D 这个人的斑斑劣迹,我是有所耳闻的,在公司扩张的过程中,D 可以说为了自己的利益是不择手段。尽管奥莱理在法国、日本、台湾等地都有子公司或者办公室,后来却都由 D 和 B 收归自己的势力范围内。尽管这些国家和地区之间的差异很大,但他所使用过的管理伎俩却如出一辙: 先是让 T 出面扫清障碍,物色一个合适人选,然后利用这个人拼命工作,一旦公司规模上来,便将这个人一脚踢开,换上自己的心腹,达到自己彻底控制公司的目的。
对中国分公司的情况也是这样,D 在前期从不对我直接发表任何意见,一切通过 T 来发号施令。 在来北京几次后,他发现公司的 C 很听话,于是把 C 邀请到美国本部去,名曰岗位培训,我不明白翻译的工作需要什么样的岗位培训,如果说需要培训,也应该是我在中国找机会为 C 培训。C 后来负责市场开拓方面的工作,但是美国的那一套做法不能照搬到中国来,因为中美两国之间市场情况差异实在太大。
C 从美国受训回来之后变化很大,一下子像变成了另一个人似的,以前 C 说话非常谦虚,在公司内部颇得人缘。但从美国回来之后说话的口吻一如自己就是奥莱理的总老板了。我感到 D 与 C 之间一定有名堂。
由于找到了C,D 逐渐开始与我直接交锋了,这时 T 最窝囊,因为中国市场是由他直接负责的,现在却什么也不能说,什么也不能做,而且 D 与我之间的问题都变成了 T 的错。
变奏二:无处不用间
本来公司是一个公共场合,大家有相同的目的才走到一起来,为了实现共同的目标,面对市场的竞争,公司创造力、产品的生产销售和工作效率是最根本的东西,一切管理的措施都应该为优化这些要素服务, IT 行业的公司尤其应该注重效率,因为这个市场变化得实在太快了。遗憾的是,不是每一个公司都清楚地认识到这一点。有些管理者将对人的控制摆在了一个特殊的位置,他们认为只要控制了人,就可以控制一切。但是人是公司里最活性的要素,管理人主要应该靠制度,而不是依靠个人之间的远近关系。
D 就是持后一种态度的人。为了控制公司,他利用 C 向他事无巨细地汇报,北京这边白天发生的任何事情乃至细节,都源源不断地在晚上通过 C 到达了美国总部,于是我除了要应付市场方面的工作外,不得不开始应付来自公司内部的麻烦事,而这正好是我最不擅长处理的事情。
我从头安装 Slackware GNU/Linux 的经历使我成了经验丰富的系统管理员。为了利用网络推广奥莱理的产品和服务,我亲手管理着公司的 Internet 主机和上面的 Web 网站。系统管理员经常要备份数据,一天晚上,我工作到深夜,作为最后一项任务,我开始备份网络系统主机上的数据,我发现邮件服务器上还有人登录上来收发信件,我感到奇怪:这么晚了,还有谁工作?是不是有其他骇客在利用邮件服务攻击我们的网站? 骇客们的一些惯用技巧我是了如指掌的,Sendmail 是一个非常复杂的软件包,它工作在 25 号端口上,以往就有过骇客利用 Sendmail 中的安全漏洞攻击系统。经过阅读系统日志文件,我发现是 C 在工作,而且邮件服务器的日志文件显示邮件发向 D!
我一下子明白了 C 为什么变化这么大!C 是黑夜角落里的耳目。为了搞清楚公司内部还有哪些耳目,我将此事告诉了公司中的 C',看看美国方面会有何反应。果然,C' 也是耳目之一。 几天后,T 发给了我一份措词强硬的电子邮件,说系统管理员查看用户的邮件在美国是侵犯人权法律云云,因此以后不许这样做。去你的美国人权法律吧,你们白天派人暗中监视我的行动时,把我的人权放到哪里去了?从那时起,除了为同胞们感到悲哀之外,我觉得与这群美国人的合作失去了任何价值和意义。
变奏三:克隆与决裂
由于我的出色工作,奥莱理在中国市场上已经取得很大成功,许多原来不知道它的读者,通过我组织完成的一系列图书了解了它的价值,市场上的反应很好。 D 是知道这些的,他开始露出了狐狸的尾巴,跳出来急于要控制公司的一切,与我的矛盾也加剧了。天底下没有不散的宴席,我开始寻思出路。
早期的 Web 将重点放到发展 HTML 上,这是 SGML 的一个子集,但是后来在技术实现过程中,逐渐偏离了SGML 的分离信息的内容与格式的技术方向,而专注于格式的表达。等到 IT 界意识到问题的严重性时,又开始重新改造 Web,这次是使用 XML 规范来进行改造,XML 规范内容非常丰富,但是本质上还是 SGML 的一个子集。
九寨沟风景区的旅游线路可以近似地看成是一个“丫”字形状。我们一共进入九寨沟风景区两次。第一天游了一条分叉线路,第二天到另一条分叉线路,终点是长海。长海并不是海,而据说是在某个冰川时期由于强烈的地震造成的大面积地质沉降,后来周围高山的雪水融化流入而成的一个大的湖泊。水面的颜色随着天上的阳光和云彩飘动而变幻,一步一景,我们亦步亦趋。这样的景色变幻实在迷人,纵使以画海边风景闻名于世的俄罗斯名画家爱瓦佐夫斯基再世,将他所有的画笔、颜料和画布搬来,也未必能穷尽大自然造化的鬼斧神工。后来我们走累了,停下来歇歇脚,开始了一次长谈。
GNU Emacs
RMS 是 GNU Emacs 的原作者,如果从 1975 年 PDP-10 计算机上的那套 TECO 编辑宏算起,到 1986 年 GNU Emacs 第一版正式推出,他断断续续花了十多年的时间才完成,真可谓“十年磨一剑”,因此我打算在他的传记中安排相当大的篇幅介绍这一软件包。
GNU Emacs 是目前公认的最出色的文字编辑器,更准确地说,它是程序员的完整工作环境,因为它几乎无所不能,从写程序、日记、调试、排版、电子邮件,电子表格,到浏览网页, 无所不包。 良好的扩展性来自内置的 Lisp 语言,大多数 GNU Emacs 模块是采用 Lisp 编写的。
GNU Emacs 最初是作为一个文本编辑器而设计的,由于文本就是一种符号,因此采用 Lisp 来设计 GNU Emacs 在 RMS 看来是一个相当自然而合理的选择。 Lisp 程序中往往充满了一对对嵌套的小括号,这些嵌套的符号表达式体现着递归。递归是数学上的基本概念之一,从递归理论出发,一切可以计算的函数最终都可以划归为几种基本的递归函数的种种组合,还可以从数学上严格证明,一种叫着 mu 的递归函数与图灵机上的可计算函数是等价的。
GNU 工程的一个伟大之处在于,它构建了一个完整的操作系统,而正是在这个完整的操作系统中,从文本编辑器(Emacs)、编译器(GCC)、调试器(GDB)、库函数(GNU C Lib)、词法分析器(Flex)、句法分析器(Bison)、项目管理器(Make)、版本管理系统(CVS)、联机文档系统(Texinfo)等等,它提供了应有尽有的自由的软件开发工具。有了这些工具类的自由软件和开发环境,创作新的自由软件就有了真正实用的基砖。
泛对称的艺术
我通过探索 GNU 系统得出了结论:编程是泛对称的艺术。
在软件开发过程中,泛对称的例子是随处可见的。 GNU Emacs 中的少量 C 模块与大量 Lisp 模块就是一种泛对称关系。C 是编译型的语言,运行效率高,但是开发的速度慢;Lisp 是解释型的语言,扩展性好,但是效率上与 C 相比则显得不高。斯托曼的一个天才构想就是利用 C 编写直接与硬件作用的模块,例如屏幕显示模块,而涉及文本编辑的模块则几乎统统用 Lisp 语言编写,而且将 C 模块代码的函数名写得像 Lisp 的函数名,所以你不仔细研究模块内部的细节,单从函数名上是很难区分它们两者的,而这正是作者的目的,它巧妙地处理了子模块之间的异同关系,在满足效率的同时,也充分保证了系统应该具备的扩展性。
GNU 的编译器 GCC 和操作系统内核中也大量存在类似的泛对称技术。推而广之,由于计算机最终是为人服务的,各种程序实际上都是直接或间接地在硬件系统与人之间构建泛对称。
注意,这里的“一、百、万”不是指数字的一百万,所以有“‘一、百、万’不是一百万”的诙谐说法(MNM's Not a Million), 正好印合了黑客界对 GNU 工程的递归命名法则 (GNU's Not UNIX) 的传统。 实际上,“一、百、万”工程是下面三个方面工作的简称:
“一”字工程是指创建一个研究院,也就是“自由软件中国研究院”。
新的操作系统称为“明”(MING/OS),这个名称来自一位朋友的推荐 (MING Is Not GNU)。它是面向未来新的芯片体系开始设计的全新操作系统,即以基于堆栈的芯片为默认平台,采用“元内核”(Meta-kernel) 的体系,按照 GNU GPL 发布。它追求出色的实时反应速度,内置的健壮网络功能,以及支持图形用户界面等一大堆技术性能。
自由软件社团广泛地采用了原创自 MIT 的 X Window System,目前几乎清一色地在 X Window 系统上加入自己的图形界面元素构成一个完整的桌面环境,GNU 系统上是 GNOME (基于 GTK,一种以 C 语言开发的库)和 KDE (基于 Qt,一种以 C++ 开发的类库)。GNOME 的设计思想卓越,它采用了 CORBA 技术,将面向对象的编程技术和分布式计算结合在了桌面环境中。KDE 则是建立在 Qt 这一 C++ 类库基础上的桌面环境,而面向对象的思想是很适合具有图形用户界面的应用程序开发的。
无论是 GNOME 还是 KDE,它们都工作在底层的 X Window 系统之上。 X 最初提供了两种等价的库,一种是现在通用的以 C 编写的 Xlib; 还有一种是现在几乎废弃的 CLX,即利用 Common Lisp 编写的 X 库。这两种库都实现了对 X 协议的支持。“一、百、万” 工程将在 CLX 的基础上,利用 Scheme 来改造 X。
在 IT 界的 .com 泡沫破裂之前,市场上有大量的 IT 公司幻想着急剧膨胀公司规模,然后上市圈钱,以达到迅速发财致富的成功目的。 我们不打算这样做,因为我们的目的是推广自由,而且是通过泛系理论的指导自觉地创建成功的商业模式来推广自由,这是我的第二次创业。有了以前的正反经验和教训,加上泛系理论已经提供了足够多的方法论供我们采用,这次创业将涉及更宽和更深的范围,工程将集中在研究、出版和培训三个方面展开,这正好是“一、百、万”工程的三个既定发展方向。工程的资金来源主要依靠我们提供的服务:
(一) 出版《自由软件》杂志和自由软件图书
在我看来, 出版图书和发行软件都是出版活动,都是作者体现权利的方式。根据自己在学习 Scheme 方面的心得体会,我们开始尝试一种与现在所有发行版本不同的 GNU 的发行版,称为 GNU4U。 它是对 GNU Make 内秉的回溯的思想进行提炼之后形成的。详细情况可以参读本书杂篇中“GNU4U:一种新的 GNU 系统发行版”一章。
(二) 排版服务与电子文件
TEX 系统经过多年的发展,已经非常稳定了,我也摸索了多年,对其内部结构已经了如指掌,我在 2000 年组建了中文 TEX 用户俱乐部(CTUG, Chinese TEX User Group)。目前,CTUG 还在成长壮大,我们在 CTUG 的基础上组建了一个排版工作室,《自由软件》杂志的排版任务就是这一工作室承担的。除此之外,它面向世界市场提供高质量的商业性排版服务。