cat /dev/random meh

第2章 黑客道德

一些全新的概念正围绕着TX-0诞生,这是一种包含哲学、道德和梦想的全新生活方式。

TX-0的黑客们以前从来没有意识到,如果他们能像修道士那样全身心地将自己的技术能力奉献给计算机科学,那么他们就会成为人与机器之间开创性共生关系的先驱。像改装高速车的年轻人痴迷于加大引擎马力一样,他们具有同样的热情,把这种几乎独一无二的氛围当做是理所当然的事情。尽管在那个时候,文化元素正在形成,传奇经历正在诞生,他们的编程技术也已经超越了以往的任何水平,但这十几个黑客仍然不愿意承认他们这个能够与TX-0亲密接触的小团体正在缓慢而悄悄地形成一个体系,一个融合了概念、信仰以及更多东西的体系。

具有革命性意义的黑客道德并没有经过太多的讨论和辩论,大家心有灵犀地达成了一致。既没有发表什么宣言,也没有传教士似的说教和转化。是计算机实现了这种转化,那些最为忠实地遵循黑客道德的人是像萨姆森、桑德斯和考托克这样的人,他们在进入MIT之前的生活好像只是为他们能够坐在TX-0控制台后面实现自己价值做铺垫。以后,还会出现比TX-0黑客更为认真地遵循黑客道德的黑客,比如格林布莱特或高斯珀这样的传奇式人物,但在黑客主义宗旨被明确定义之前,这依然需要若干年的时间。

不过,即使是在TX-0的时代,这种纲领的要点也已经形成了。黑客道德是:

对计算机的访问(以及任何可能帮助你认识我们这个世界的事物)应该是不受限制的、完全的。任何人都有动手尝试的权利!

黑客们相信,通过将东西拆开,了解它们的工作原理,并根据这种理解创造新奇的甚至更有趣的东西,可以学习到关于系统(关于世界)的重要知识。他们痛恨一切试图阻止他们这么做的人、物理障碍或者法律。

在黑客想要修复(他认为)已被破坏或需要完善的东西时,这种信念尤其强烈。不完美的系统会激怒黑客,其原始本能就是去调试系统。这也是黑客们通常讨厌开车的一个原因:毫无规律可言的信号灯系统以及设计得千奇百怪的单行道是造成交通拥堵的罪魁祸首,而这些交通拥堵是完全可以避免的。他们甚至会冲动地想要重新摆放路标、打开信号灯控制箱……重新设计整个系统。

在完美的黑客世界里,任何被激怒的人都可以打开交通信号灯旁边的控制箱,将它拆下来并改进其工作效率,这种尝试应该大受欢迎。那些阻止你自己动手处理这种事情的规则都太荒谬了,根本不用考虑去遵守。正是在这种态度的影响下,TMRC以完全非正规的方式开办了“午夜征用委员会”(Midnight Requisitioning Committee)。如果TMRC需要一套二极管或一些额外的继电器来为系统搭建一些新功能,则几个S&P成员会等到天黑后来到存放这些东西的地点。一般来说,这些黑客在其他方面会保持着严谨的诚实态度,但是他们似乎不会把这种行为与“偷窃”划上等号。这是故意的视而不见。

所有的信息都应该可以自由获取。

如果你不能访问用来完善系统的信息,那么怎么能够修复它们呢?信息的自由交流,特别是以计算机程序形式存在的信息,能够提高整体的创造力。如果在像TX-0这样几乎没有附带任何软件的机器上工作,每个人都得编写大量系统程序,以便更轻松地进行编程,这就是“创建工具的工具”(Tools to Make Tools),这些程序会保存在控制台下的抽屉中,任何使用这台机器的人都可以轻松拿到。这避免了重复做无用功这一可怕且浪费时间的古旧陋习:程序的最佳版本应该对所有人开放,每个人都可以自由地钻研代码并进行完善,而不是每个人编写同一个程序的自己的版本。如此一来,这个世界将充满功能完善的程序,不但具有最少的错误,而且可调试至完美状态。

“信息应该是自由的”这种信念(有时被无条件地接受)最直接地体现在那些优秀的计算机或计算机程序中——二进制位流会以完成其复杂职责所必需的最为直接且符合逻辑的途径移动。计算机不就是从信息自由流动中受益的东西吗?打个比方,如果累加器发现自己无法从磁带等读取设备或交换机之类的输入/输出(I/O)设备中获取信息,那么整个系统将会崩溃。从黑客的角度来说,任何系统都能从自由流动的信息流中获益。

不迷信权威——促进分权。

要促进这种信息的自由交流,最好的方法是拥有一个开放式系统,不要在黑客和信息或设备之间设置任何界限,因为这些都是他们追求知识、改进和联机所需要的东西。

IBM的计算机之所以是批处理的“巨人”4,真空管技术只是其中一部分原因。真正的原因是IBM不理解黑客的冲动。如果IBM自行其是(TMRC的黑客们这么认为),则世界将会被搭建在那些令人恼怒的小穿孔卡片上批处理,并且只有享有最高特权的“牧师”才允许与计算机进行实际交互。

你可以逛逛计算中心,那里放着704和709机器,后来又放入了7090机器,这些是IBM能提供的最好产品了。你会看到,在中心里,所有的一切均井然有序,这令人窒息,而未获批准的人员是无法进入这里的。你可以将这些与TX-0所处的完全非正规环境做个对比。

目前,IBM已经做了许多事情并且将继续促进计算的发展。由于其具有庞大的规模和强大的影响力,IBM已经让计算机成为美国人生活中不可或缺的一部分。对于许多人来说,“IBM”和“计算机”基本上是同义词。IBM的计算机是可靠的工作机器,完全值得商业人士和科学家对其的信任。这种现象的出现部分归功于IBM的保守工作方式:它不会创造技术上最先进的机器,而是依靠已经成熟的概念以及认真积极的营销活动。IBM已经在计算机领域建立了统治地位,因此它已成为一个自成体系的帝国,神秘而自得。

真正让黑客生气的是IBM各层管理人员的态度,他们似乎认为只有IBM才能生产出“真正”的计算机。你无法与这些人沟通,没办法说服他们。他们是批处理世界中的人,这不仅体现在他们对计算机的偏爱上,还表现在他们对计算中心以及世界应有的运行方式的看法。这些人永远无法理解分散式系统的显著优越性,没有人发号施令——通过这样的系统,人们可以按照自己的兴趣来行动;而如果在这个过程中他们发现了系统中的缺陷,可以大胆地着手进行改造。不需要填写申请表,只有完成这些事情的需求。

这种渴望平等自由的倾向恰好与许多黑客的个性相符,他们自孩童时代就爱好科学项目,而他们的同学却热衷于在体育场上奔跑和学习社交技能。这些一度被同龄人疏远的早熟少年发现计算机是个奇妙的东西,这使他们找到了平衡,他们体验到了一种情感,彼得·萨姆森将这形容为“就像你打开了门,走进了一个全新的宇宙……”一旦走出那扇门,坐在价值数百万美元的计算机控制台前,黑客便充满了能量。因此,黑客不信任任何试图限制这种能量的势力,这是再自然不过的事情了。

评判黑客的标准应该是他们的技术,而不是那些没有实际用途的指标,比如学位、年龄、种族或职位。

TX-0社团(而不是那些非黑客的研究生)乐于接受年仅12岁的彼得·多伊奇就是个很好的示例。同样,带着似乎让人印象深刻的证书急匆匆进入TX-0社团的人往往不会被重视,直到他们能够在计算机的控制台后面证明自己的能力。这种精英主义的特征并不一定来源于黑客心中与生俱来的善良——这主要是因为黑客不太会关注他人表面上显露的品质,而会更多地关心他们的真实技术水平,更看重他们编写优秀程序的潜力,以及是否能够为系统提出新的功能。

你可以在计算机上创造出艺术与美。

萨姆森编写的音乐程序就是这样的示例。但对于黑客来说,程序的艺术并不存在于从联机的扬声器中发出的动听声音。程序的代码有自己固有的美感。(但是,萨姆森却非常不愿意为他的代码添加注释以解释代码的功能。他曾编写过一个优秀的分布式程序,里面有数百条汇编语言指令,而只有一条包含数字1750的指令旁边附加了一条注释。这条注释是RIPJSB,人们绞尽脑汁也想不出其含义,直到有人指出1750是Bach(作曲家巴赫)去世的年份,因此萨姆森写的注释应该是“Rest In Peace Johann Sebastian Bach”(安息吧,约翰·塞巴斯蒂安·巴赫)的缩写。

某种对编程风格的审美观出现了。由于TX-0的内存空间有限(对于那个年代所有的计算机而言,这都是一个障碍),黑客们非常欣赏通过很少的指令实现复杂任务的创新技术。程序越短,留给其他程序的空间就越多,程序也会运行得越快。在某些时候,如果不需要过快的速度或很多的空间,也没有考虑到程序的艺术与美,那么你会编写一个看起来不够优雅的程序,这个程序只是用“蛮力”解决当前的问题。“嗯,我们可以添加20个数字来实现它,”萨姆森可能会自言自语地说,“编写指令来实现更快,而不是开始想出一个循环,最后再用七八条指令来实现同样的工作。”但是同行们可能会崇拜后一种程序,有些程序用最艺术的方式将行数压缩到最少,创作者的同事们看到这种程序时会佩服得五体投地。

有时,程序压缩会成为一种带有竞争意味的事情,好像是用来证明自己在控制系统方面能力的比赛,看谁能挖掘出删去一两条指令的美妙捷径,或者更好的是,重新思考整个问题并设计出可以去掉一整块指令的新算法。(算法是一种具体的流程,我们可以用它来解决复杂的计算机问题,它是一种数学上的万能钥匙。)实现程序缩减最为明显的方式是不按常理思考,从之前从未有人想到但仔细想来却完全合理的非传统角度来处理问题。那些能够应用这种奇妙技术的人,身体里一定流淌着艺术创作的血液,这种技术就像魔术般神奇而充满想象,于是人们可以摆脱那些陈腐观点的束缚,创造出完全超乎人们想象的新算法。

十进制打印程序就是如此。这是一个子例程(是程序中的一个小程序,你可以在某些情况下将其集成至许多不同的程序中),用来把计算机生成的二进制数字转换成常规的十进制数字。用桑德斯的话来说,这个问题“在编程中不值一提——如果你可以编写能够正常工作的十进制打印例程,只能说明你对计算机有了一些了解,勉强称得上是程序员”。而如果你编写出了非常棒的十进制打印例程,那么你也许可以称自己为黑客。十进制打印例程的终极压缩版则不仅仅带有竞争的意味,它更是黑客心目中的圣杯。

各个版本的十进制打印例程已经出现了好几个月了。如果你故意装作不知道,或者你真的是一个笨蛋(不折不扣的“失败者”),那么你可能要用100条指令让计算机将机器语言转换为十进制。但是,任何级别的黑客都会用更少的指令来实现,最终,通过充分利用各种程序、在各个地方压缩指令,这个例程会缩减到50条左右的指令。

在这之后,黑客们越来越苛求这种优化。他们会花费很多时间来寻求一种用更少的代码来实现同一个功能的途径。这不仅仅是竞赛了,它是一种追求。不管付出了多少努力,似乎没有人能够突破50行的瓶颈。问题开始产生了,用更少的代码实现这个功能是否真的可行呢?是不是程序到一个点之后就无法再继续压缩了呢?

深受这一难题困扰的包括一个名叫简森的高个小伙子,他是来自缅因州的黑客,沉默寡言,可以安静地坐在Kluge Room中,拿着打印材料写写画画。简森总是寻找各种方式来提高自己程序的运行速度并压缩占用空间——他的代码完全是混合着布尔和算术函数的奇怪序列组合,通常可以在同一个18位“字”的不同部分运行若干个不同的计算。这令人吃惊,就像是神奇的特技。

在简森出现之前,黑客们曾普遍认为,十进制打印例程的唯一逻辑算法是让计算机重复进行减法,并使用一个10的乘方表将数字存储在适当的数字列中。而简森则发现,10的乘方表其实并不是必需的。他想出了一个算法,可以按倒序转换数字,但能够通过一些数字技巧将它们按正确的顺序打印出来。这里面包含了复杂的数学论证,直到简森将程序公布在布告板上,其他黑客才明白其中的道理。简森这一举动是在告诉大家他已经将十进制打印例程压缩至极致了——46条指令。人们会张大嘴巴,目不转睛地看着这段代码。玛吉·桑德斯回忆说,黑客们在之后的几天内都异常沉默。

“我们知道这是终点了,”鲍勃·桑德斯之后说道,“这就是涅槃。”

计算机可以让你的生活更美好。

这是黑客的信念,他们的行为微妙地体现出了这一信念。黑客很少试图将“计算机具有神奇力量”这种观点强加给外行人。但是,这个信念主导了TX-0黑客以及在他们之后各代黑客的日常行为。

计算机显然改变了他们的生活,丰富了他们的生活,并且成为他们生活的重心,令他们的生活充满冒险。计算机让他们主宰了自己的一部分命运。彼得·萨姆森后来说:“我们做黑客有25%~30%是因为我们想这么做,因为这是我们能做且能做好的事情,而有60%是为了给我们的子孙后代留下一些在我们离开后依然可以独立存在的东西。这就是编程的美妙之处,它有着神奇的吸引力……一旦你修复了某个(计算机或程序的)行为问题,它就会永远处于修复完成的状态,这恰恰反映出了你的意思。”

就像阿拉丁神灯,你可以让它听从你的召唤。

毫无疑问,每个人都可以体验这种能量并从中受益。毫无疑问,每个人都可以生活在构建于黑客道德之上的世界中并从中受益。这是黑客绝对的信念,他们坚定地扩展了传统观点对于计算机可以做什么和应该做什么的看法——引导整个世界以一种新的方式看待计算机并与其交互。

这并不容易实现。即使是在MIT这样的高等学府中,仍然会有一些教授认为对计算机近乎疯狂的迷恋是愚蠢的,甚至是精神错乱的。TMRC的黑客鲍勃·瓦格纳曾经不得不向一位工程教授解释计算机是何方神圣。瓦格纳还更为生动地体验到了计算机与反计算机之间的冲突,他修了一门叫做“数值分析”的课程,授课教授要求每位学生使用咔咔作响的笨重机电计算器来做作业。考托克也上了这门课程,他们两个一想到要使用这种技术含量极低的机器就非常不情愿。“我们为什么那样做?”他们问道,“我们不是有这台计算机吗?”

于是,瓦格纳开始编写可以模拟计算器行为的计算机程序。这种想法挺荒谬的。对某些人来说,这是在滥用宝贵的机器时间。按照人们对计算机的一般看法,计算机的时间非常珍贵,所以应该只尝试那些能够最大限度地充分利用计算机的事情,这些事情如果不用计算机实现,则会让满屋子的数学家盲目地计算好多天。黑客们则不这么认为:任何看起来有趣或好玩的东西都可以是计算的来源,并且使用交互式计算机,没有人严密监视你并要求你提供具体项目的许可,你可以按照这个信念行动。瓦格纳用了两三个月的时间研究在一台没有简单方法可以执行基本乘法的机器上进行浮点型计算的各个复杂方面(程序要知道在哪里放置小数点,这是必须的),然后编写了3000行代码来实现这种功能。他让这台超级昂贵的计算机执行仅值其千分之一价格的计算器的功能。为了纪念这个具有讽刺意味的程序,他称其为“昂贵的桌面计算器”,并自豪地用这个程序完成了他的课堂作业。

他的分数是:零分。“你用了计算机!”教授这么跟他说。“这不可能是正确的。”

瓦格纳甚至懒得去解释。他怎么可能让他的老师明白计算机正在把曾经不可能的事情转变为现实呢?另一个黑客甚至编写了一个叫做“昂贵的打字机”的程序,将TX-0变成了可以用来编写文本的机器,它能够以字符串的形式处理文字,并在电传打字机上将其打印出来。你能想象到教授会接受在计算机上写的课堂作业报告吗?那位教授(事实上,还有那些没有沉浸在这未知的人机互动世界里的人)怎么可能明白瓦格纳和他的黑客伙伴们天天使用这台计算机来模拟(用瓦格纳的话来说)“人们几乎无法想象的奇怪事情”?这位教授迟早会明白,每个人也都会明白,由计算机打开的世界是没有边界的。

如果有人还需要进一步的证明,你可以引用考托克在计算中心正在做的项目:国际象棋程序。大胡子人工智能教授约翰·麦卡锡大叔已在IBM 704上开始了这个研究,他在黑客学生当中颇为出名。尽管考托克和帮助他完成该程序的其他几个黑客非常反对仅仅把IBM当做一台批处理机器来用,但他们设法获取了夜晚的一些时间,来交互使用IBM机器,并与704的系统程序员们展开了一场非正式的战斗,看哪组人会是计算机时间的最大消耗者。两组人难分高下,这给穿着白衬衫打着黑领带的704工作人员留下了足够深刻的印象,他们真的让考托克及其小组摸到了704的按键和开关:要知道,能够这样亲密接触IBM机器的人并不多。

在实现国际象棋程序的过程中,考托克所扮演的角色可以代表着黑客在人工智能领域将要扮演的角色:像麦卡锡或他的同事马文·明斯基这样的重要角色会启动一个项目,或者大声问自己某些事情是否可能实现,然后如果对这些事情感兴趣,黑客们会着手实现。

这个国际象棋程序最开始是使用最早的一种计算机语言FORTRAN编写的。计算机语言比汇编语言看起来更像英文,也更容易编写,并且可以用更少的指令实现更多的功能。但是,在像FORTRAN之类的计算机语言中,每下达一条指令,计算机必须首先将该命令转换成自己的二进制语言。这个过程由一个叫做“编译器”的程序来实现,而编译器要完成工作也需花费时间,而且也会占用计算机宝贵的空间。实际上,使用计算机语言,你离与计算机进行直接交互又远了一步,黑客们通常更喜欢汇编语言,他们称之为“机器”语言,他们不喜欢如FORTRAN一类不够优雅的“更高级”的语言。

但是考托克意识到,由于国际象棋程序中需要处理大量的数字,因此部分程序不得不由FORTRAN完成,而另一部分则可用汇编语言实现。他们一部分一部分地实现它,尝试了“移动生成器”、基本数据结构以及所有类型的创新策略算法。在向计算机灌输了移动每个棋子的规则后,他们为其提供了一些参数,用来计算棋子位置、考虑各种走法并且这种走法要对自己最为有利。考托克几年来一直在坚持完善这个程序,随着MIT不断地升级IBM计算机,这个程序也在不断发展。在一个难忘的夜晚,几个黑客围坐在一起,看着程序在真实的比赛中走出前几步。它的开局相当不错,但是大约走了八步左右,计算机便陷入了真正的麻烦中,它要被将死了。所有人都在好奇计算机将作何反应。它用了一些时间(在场的所有人都知道,在这些停顿中,计算机实际上是在“思考”,计算机的思考过程就是机械地考虑各种走法、进行评估、排除大部分走法并使用预定义的一套参数来最终做出决定)。最后,计算机将兵向前移动了两格,不合规则地跳过了另一个棋子。这是Bug!但也是非常聪明的一招——这让计算机走出了死局。也许程序正在计算能够征服国际象棋的新算法呢!

在其他的大学里,教授们都公开宣称,计算机在国际象棋比赛中永远下不过人类。但黑客们则知道得更多。他们是那些赋予计算机超常能力的人。同时,通过与计算机进行有效且有意义的交流,黑客将会是最主要的受益者。

但他们不会是唯一的受益者。在智能的自动化世界里,使用会思考的计算机能够让每个人获益。而且,如果所有人都像遵循黑客道德的黑客那样怀着强烈的好奇心去探索世界,同样渴望平等,欢迎创新,无私地分享成果,渴望进步和创造,那么每个人从中获得的好处不会更多吗?如果我们都能在不带偏见的基础上接受其他人,就像计算机接受给电传打字机输入代码的任何人一样,那么每个人的受益不也会更多吗?如果我们向计算机学习创建完美系统的方法,并且开始在人类体系中模仿这种完美制度,我们难道不会从中受益吗?如果每个与计算机进行交互的人能够像黑客一样具有同样单纯、有效且充满创造性的动力,那么黑客道德也许可以像慈善事业一样在社会中传播,而计算机将确实能够让世界变得更美好。

在MIT的院墙内,人们拥有实现这个梦想的自由——黑客的梦想。没有人敢设想这个梦想会广泛传播。相反,就在MIT,人们开始着手打造黑客的世外桃源,这可能是永远也无法复制的天堂。