🏠

BILL JOY 1984 访谈

Table of Contents

INTERVIEW with BILL JOY

By Jim Joyce

AUGUST 1984


bill-joy-1984.png

Bill Joy 是那种罕见的能一边敲代码一边快速技术对话的人。他用不完的精力做出了 C shell 命令解释器、vi 屏幕编辑器和 Berkeley 分页内核,这只是其中几样。UNIX REVIEW 派 Jim Joyce 去 Sun Microsystems——Joy 在那里担任负责研发的副总裁——捕捉一些这种能量。

1. vi 是怎么来的

REVIEW: vi 是怎么来的?

JOY: 说来有趣。我 75 年到伯克利,是个学理论的学生,跟着 Mike Harrison 做通用上下文无关解析算法,想用 Pascal 写这玩意儿,因为 Pascal 有集合类型,而 Ken Thompson 允许集合长度任意。程序能跑,但有 200 行——对 Pascal 系统来说几乎太大了。我找 Thompson 商量,想弄清楚怎么让 Pascal 系统能处理这个程序。Chuck Haley 和我一起想办法让 Pascal 系统能跑它,但问题在于它把整个解析树都建在内存里。于是我被卷进去了,拿到了系里的资助,攒了一点希望,觉得最终能获得足够支持让这个程序在 Pascal 下跑起来。

ken-thompson-2019.jpg

Figure 1: Ken Thompson 2019

但做这事的同时,我们也在拿 ed 瞎折腾加功能。有天晚上 Chuck 跑进来加了 open mode——你可以在 CRT 最后一行移动光标。后来玛丽皇后学院的 George Coulouris 来到伯克利,带来了一个叫 em 的东西,全称是“editor for mortals”(凡人用的编辑器)。它有两个错误信息而不是一个。它有个提示符,还有一套为 ITT 终端做的奇怪的 open mode 变体,在 ADM 3A 上跑得不太好。

George_Coulouris.png

Figure 2: George Coulouris 1937- 2024

于是 Chuck 和我看了看,折腾了 em 一阵子,最后把 em 里的东西拆了,一部分放进了当时叫 en 的东西——其实就是加了点 em 功能的 ed。Chuck 晚上来——我们工作时间不太一样,不过下午有重叠。我把编辑器搞坏了,他来修;他搞坏了,我来修。我特别热衷于写手册页,所以给所有我们打算做但从来没实现过的伟大功能都写了手册页。

后来 Chuck 毕业了,靠他在 Pascal 系统那部分的贡献拿了博士。他走后,计算中心有了 ex Version 0.1。那是从 EP 016 来的编辑器版本——EP 016 代表 76 年 9 月 1 日,那个可执行文件创建的日期——之后我们很快就丢了源码,因为改动太多,又没有 SCCS1。

jimmy-carter-1977.png

Figure 3: 吉米·卡特 1976

说起来,这一切的起因是我们搞了几台 ADM-3A 来做屏幕编辑。我记得卡特刚当选后的一个星期六,我坐在加州奥尔巴尼的公寓里,听人们打电话给卡特问些蠢问题,同时在设计屏幕编辑器。这能定下时间:大概是 76 年。说到底就是最初对 Pascal 的挫败感引发的。从那里开始一路发展下去。后来他们做参考卡的时候——78、79 年——我就不再碰它了,到现在已经五年没碰过了。

Mike Horton 从贝尔实验室带来了他的编辑器,叫 hed,全称 "Horton's editor"。vi 赢了之后他很失望。但 vi 在本地用户中已经用开了——Mark 对这局面憋着气,干脆去实际支持了 vi。这挺好的,因为我没耐心再做下去了。光是处理人们寄给我的 termcap 条目每周就要花几个小时,搞了三四年我也累了。

REVIEW: Bruce Englar 是不是实现了计数域的功能?

JOY: Bruce 提过这个建议。有一段时间编辑器文档里有一个致谢章节,列出了所有帮过忙的人——不知道现在第二卷里还有没有。

屏幕编辑模式的很多想法是从一本 Bravo 手册里偷来的,我偷偷看了然后抄了。 Dot 其实就是 Bravo 的双 escape 命令,redo 命令。大部分东西都是偷来的。有些是从 ed 偷来的——我们拿到了 Toronto 版 ed 的手册页,我觉得 Rob Pike 跟那个版本有点关系。我们从里面拿了一些正则表达式的扩展。

REVIEW: 如果再来一次,你会怎么做不一样?

JOY: 我希望我们没有用掉键盘上所有的键。我觉得 vi 确实是基于模式的编辑器。就基于模式的编辑器来说,它做得不错。但 EMACS 好的一点是可编程性和无模式。这两个想法我从未想到过。我写 vi 的时候代码组织能力也不行。编辑器的重绘模块几乎是不可维护的。它做得确实很好,但当你边学边写程序的时候……这就是为什么我不再做下去了。

实际情况是,我正往 vi 里加多窗口功能的时候,我们安装了 VAX——那大概是 78 年 12 月。我们没有备份,磁带机又坏了。我继续工作,即使做不了备份。然后源码丢了,我也没有完整的打印稿。我几乎重写了所有的窗口重绘代码——那时候我就放弃了。之后我回到上一个版本,把代码文档化了,完成了手册,然后封存起来。要是那次源码没丢,vi 会有多窗口,我也可能会加上一些可编程性——不过谁知道呢。

vi 的根本问题是没有鼠标,所以你有这么多命令。从某种意义上说,它和面向鼠标的东西正相反。我觉得多级撤销也会很棒。但根本上,vi 内部还是 ed。你骗不了它。

bill-joy-1984-vi.png

Figure 4: vi 没有鼠标

它就像那种皮纳塔——里面是糖果,外面是一层又一层的纸糊。没有一个统一的概念。我想如果我要回去——我不会回去,而是从头再来。

vi 的好在于它市场份额这么大,是因为我们免费送。现在人人都有。所以它有机会成为基本 UNIX 的一部分。EMACS 也是个不错的编辑器,但因为要几百美元,总有人不会买。

REVIEW: vi 被纳入 System V,你怎么看?

JOY: 我很惊讶他们这么久都没做。我觉得这耽误了实验室里很多系统的性能很多年,因为人人都有 vi 的副本,但不共享,所以在内存很贵的时候浪费了大量内存。实验室里 92 个人各自维护自己的 vi,我觉得这最终浪费了难以置信的金钱。不过 vi 被纳入 System V 我确实挺惊讶的——我不知道它进了 System V。它出来之后很久我才知道。他们有个叫 se 的编辑器,不过我想它失败了。

我觉得编辑器必须出自某种特定的社区。你需要一个文化环境。就像你说的, Bruce Englar 想到了一些东西,Dick Fateman 贡献了 join 命令后的光标位置——诸如此类的小东西。有几十个人参与其中,但如果在一个管理层说“这个人应该做个编辑器”的环境里,不一定能成。贝尔实验室的政治挺有意思的。

REVIEW: 你今天早些时候演示时说过,在外来系统上你用 ed。

JOY: 没错。绝对。

REVIEW: 你都不试试 vi?

JOY: 我习惯用 24 行终端,不能回滚。我用 ed 是因为我不想丢掉屏幕上显示的内容。我以前有一台 Concept 终端,有 8 页内存,像个迷你版窗口系统。我就是不喜欢丢掉窗口里的内容。我很期待 Warren Teitelman 正在做的那个内嵌在窗口系统里的编辑器。能在到处都有编辑功能就好了,就像到处都有历史记录一样。

REVIEW: 那新编辑器会有历史机制吗?

JOY: 如果没有我倒会惊讶。Warren 基本上发明了所有这些功能。他对此很热衷。我试过 EMACS,也挺喜欢的。问题是我所有时间都在给它编程,因为它改进得太快,我的程序老是坏。我厌倦了维护自己的宏,所以我期待一个我能学会然后忘掉的编辑器。

不久前我开始写一个新编辑器,两天就做了大概一半。它几乎没有任何命令,而是用类似 Smalltalk 的编辑菜单、滚动条和滑块。行往右延伸,如果你的窗口不够大——那就对不起了——直接丢掉。会有一个编辑文件、一个 store 和一个 read file。就这些。

它叫 be。你自己猜这代表什么。实际上它代表大概八种不同的东西。

REVIEW: Bill's editor(Bill 的编辑器)?

JOY: 那是八种之一。也是英语动词“to be”,因为它就是。还有六种。我厌倦了人们抱怨 UNIX 太难用是因为编辑器太复杂。既然某种程度上是我发明了最复杂的编辑器,我觉得应该补偿一下,也设计一个最简单的编辑器。但后来分心了。要是再花一天时间……我就能真正用它编辑文件了。我确实用它来编辑它自己,然后又把源码搞丢了——有点重温旧日的感觉,因为我们以前老这样。

我曾威胁说要在今年 1 月 1 日删除所有 vi 的副本,强迫大家用 be。不过我觉得不会成功,因为我再也不知道这里的 root 密码了。这些编辑器总是活得太久——vi 都快十年了。想法前进得真不够快,是吧?

bill-joy-1984-ideas.png

Figure 5: 想法前进得真不够快

2. vi 的疆域扩展太远

REVIEW: 那你现在用 Interleaf?

JOY: 我用 Interleaf 做所有文档。写程序的时候,我用 cat 就能在不到一半的时间里敲完,因为程序就六行——一个 #include.main、一个 for 循环、一两个变量。我实际上用 vi 来编辑程序。James Gosling 在卡内基梅隆大学做的一个项目里做了个很不错的编辑器,叫 AWYSIWYG: Almost What You See Is What You Get(几乎所见即所得)。它也是内嵌在他正在做的窗口系统里的程序编辑器。我觉得最终它会取代 vi。

james-gosling-2008.png

Figure 6: James Gosling 2010

Interleaf 非常好。我预期这类程序会有很多竞争。它不会是唯一一个。到明年年底会有六套基于 UNIX 的集成办公系统。Interleaf 基于格式化流程。

我觉得你会看到其他专注于数据库、日历管理、邮件和电子表格的系统——你需要所有这些才能有一个通用的办公自动化应用。我不确定谁会赢。我知道几个还没发布的,但哪个最理想还不清楚。它们没有一个是真的开放的。没有一个像 UNIX 那样可编程。你没办法进去添加你需要的东西。这种不可编程性可能最终会毁掉 vi。它无法扩展自己的疆域。

REVIEW: 有人会说 vi 的疆域已经扩展得太远了。

JOY: 这大概也公平。这就是为什么它这么复杂,有左括号右括号命令。你从一个干净的概念开始,然后慢慢堆积鸟粪。它落在你身上就黏住了,你也没办法。

REVIEW: Interleaf 给了你什么 EMACS 给不了的东西?

JOY: 我可以看着屏幕,打印出来和屏幕上一样。它是已经格式化好的,我厌倦了用 vi。我真的觉得很无聊。有很多个晚上我直接在键盘前睡着了,就为了做一个 release。至少现在我会手里握着鼠标睡着。我用的是 Xerox 光学鼠标而不是那种,因为它和我办公室的颜色搭配。你注意到了吗?我更喜欢白色鼠标而不是黑色。总得找点乐子,对吧?

同一个编辑器用十年——就像同一个地方住十年。我们没人这么干。大家每年搬一次家,对吧?

REVIEW: Documentor's Workbench 和 Writer's Workbench 呢?

JOY: 我以前用过 diction。我给一些会议写过论文,用 diction 处理过。但用 Interleaf 之后我连拼写检查程序都没有了。

REVIEW: 为什么?

JOY: 不需要。好吧,也许需要。可以用一下。只是它没有拼写检查。

REVIEW: 你不用拼写检查?

JOY: 我一般不会拼错。除了 t-h-e-i-r。但总的来说拼写错误我不太有问题。拼写检查对我来说是抓 substitute 命令引入的错误。在用 ed 之类的东西时,你只看到一行,替换可能出错。用拼写检查能抓住文档里冒出来的毛球。但 diction 挺搞笑的。我不喜欢 diction 处理完之后读文档的感觉。

REVIEW: 你用过 suggest 吗?

JOY: 用过,试过一些这类东西。我不喜欢读那些被 diction 重度处理过的东西,因为它们不流畅。我想要一个专家系统来帮我,但我不觉得这些(style 和 diction)够接近。我也不需要 double 或 spell。我觉得这些都不能帮我写得更好或组织得更好。我觉得一个有层次结构的编辑器,能看到章节大纲或在边距做注释,会很有用。便利贴大概是过去十年最伟大的技术发明。便利贴的电子版会非常好,可以在文档上涂涂写写。我觉得比运行这些程序更需要的是能在屏幕上乱画。我觉得有些工具做得过头了。如果你只能用 troff 和 nroff,那 Writer's Workbench 还行。

我从没用过 pic。有人用它做过一些东西,但可惜的是,它不让你用图形方式思考和绘图,而是强迫你把图像翻译回文字再编译。这就像 Linda Ronstadt 那首歌,“You're Taking the Long Way Around”(你在绕远路)。

linda-ronstadt-1976.png

Figure 7: Linda Ronstadt 1976

3. 没有位图的机器没有未来

REVIEW: 你刚才提到了鼠标。你还看到什么能改善文档工作的硬件?

JOY: 我觉得 Macintosh 证明了人人都能拥有位图显示器。UNIX 面临的根本张力——我觉得 AT&T 不明白的是——每个人都得用上位图。位图显示器与点阵或激光打印机是介质兼容的。用鼠标指点,你就有了一套基本的设施,可以围绕它构建文档环境。我觉得你还需要全页显示器。我想我们得等 Apple 的 Big Mac,大概还有两年,才能有全页显示器。对开发者来说,一个重要的启示是这类开发必须从低端做起,做文档行业的 Volkswagen。

文档准备系统也需要大屏显示器。像 Sun 这样的设备是你需要的——19 英寸屏幕,能看到一整页,能调出屏幕和菜单,又快得足以让你以合理的速度滚动。没有鼠标,我们不知道怎么做到这一点。所有好的研究都是用指点设备做的。

触摸手指、操纵杆、语音输入都太晚或者太早了。

REVIEW: 语音太早,触摸太晚?

JOY: 我不确定语音现在能不能用。我说话不够清楚。《Datamation》上有篇社论说为什么 UNIX 用户界面糟糕透顶。文章写得不怎么样,但作者确实有些好观点。他说了关于人们买炉子的事。你看看炉子和旋钮的排列方式就知道了。为什么你走到一个陌生炉子前,分不清哪个旋钮控制哪个灶头?这真的很蠢。没有合理的方式在正面放旋钮来告诉你。有些炉子把旋钮放在中间,紧挨着灶头。那合理得多。

关键是你想要一个响应式的系统。你不想要一辆会跟你说话的车。我绝不会买会说“早上好”的车。UNIX 的好处就是它非常响应式。你就说“把 A 管道到 B”——它不会跟你啰嗦“执行开始”或“执行终止,IEFBR14”。

bill-joy-1984-ideas.png

Figure 8: 思想进步实在不够快

问题在于 UNIX 不像 Interleaf 那样可接近、可透明——你坐下来在菜单里戳戳点点就能探索整个系统。我认识一个人坐下来用 Macintosh 和 Lisa,挺失望的,因为半小时内他就把整个系统探索完了,没他想象的那么多东西。确实如此,但关键是半小时内几乎不用手册你就知道按哪个按钮,能找到几乎所有东西。东西不会找不到。我觉得这才是关键。

系统会变得越来越复杂。东西很容易找不到,除非界面是 Macintosh 风格的。用这些机器的人可能会跑应用程序,但不一定能把应用拼在一起。很多人甚至不会接触到底层的 UNIX 系统。

System V 的根本张力在于它是面向字符映射环境的。你要构建的软件完全不同。你不假设有鼠标,不假设有合理尺寸的显示器。你就忘了这些。这是两个完全不同的问题。

说到底,影响用户能看到什么的是你机器上的介质和外围设备。我不觉得 Macintosh 的软件有什么价值。我甚至不确定它能不能搬到大机器上去。你可以花时间把软件做小,或者花时间让它功能完善且合理。两者不可兼得。我觉得有一把斧头会把两者劈开。

你会看到 WordStar,那种没有位图、像操作数据库一样的文字处理环境,也会看到有位图的,两者之间的区别就像白天和黑夜……Macintosh 的日子不多了。没有位图的机器没有未来。个人激光打印机会促成这一点。非光栅的东西日子不多了,尽管单靠惯性也能把它们拖到 80 年代末。这些东西来了又走。

bill-joy-1984-the-days.png

Figure 9: 非光栅时日无多

我们从打印终端到哑 CRT 到智能 CRT,中间还岔出去过存储管显示器和黑白位图。我觉得连黑白位图的日子都不多了。彩色会解决这个问题。然后,随着最后一个真空管——CRT——的消亡,以及薄膜晶体管的出现——那就是平板显示器了——一切都会是彩色的。

黑白位图取代 CRT 只是小波浪,但如果你没看到这个小波浪,你真的会被后面的大海啸拍到。

我已经把 troff 从我机器上删掉了,我宁愿活在位图世界里而不是 spell/diction 世界里。我宁愿脸上沾泥、背上中箭,也要用位图。

4. 技术的巨大惯性

REVIEW: 那些可以用来做文档处理的基本 UNIX 工具很多,但被误解了。比如用 make 做文档控制。你怎么看?

JOY: 我觉得 make 这个程序让人们把以前写在墙上的东西写下来了。它就像个涂鸦记录器。这就是它的美妙之处。人们用 SCCS 和 make 用得不够。这里做文档的人现在用 SCCS,主要是因为我把所有文档都放在 SCCS 下,算是半强迫地用上了。

REVIEW: 真正的程序员用 cat 做编辑器。

JOY: 没错!就是这样!用 ed 都太麻烦,因为 cat 更小,只需要两页内存——而且不容易被换出去。这就是 ed 没有提示符的原因,你知道吗。那时候系统性能糟透了。它会随机换出东西,做各种事情。在 ed 里你打个“a”,但完全不知道系统落后了多少。只要它没落后几百个字符就开始扔掉行而不告诉你,那也无所谓。

通常没那么糟。如果有提示符,你打了回车等提示符,要花三秒钟才有反应。这是我们装 em 的时候发现的。我们加了提示符,然后突然意识到它得经过操作系统。

我觉得 UNIX 这么多年活得挺体面。过去人们看不出系统调度 CPU 做得有多烂,这是我们的体面。现在我们不能躲在分时后面了。

joe-ossanna.png

Figure 10: Joe Ossanna 1928 - 1977

我觉得 SCCS 被误解了。我觉得 make 从来没有一份好的文档。Henry McGilton 刚第一次重写了 troff 手册。因为 troff 从来没有真正的手册,他得坐下来搞清楚一些东西是什么意思——反斜杠、右对齐制表位。从来没人好好写过手册——部分原因是写 troff 的 Joe Osanna 在 1976 年去世了。这个程序是用汇编写的,然后逐行翻译成 C,全是全局变量——这是个老古董程序。它基本上是在一个非常非常小的基础上堆积起来的不相关玩意。人们不理解它也不奇怪。

你看手册的时候,tbl 看起来不错,但得靠迭代逼近才能做对;要弄出一张好看的表格非常难。我觉得真正缺少的是这些东西都无法帮助你处理图形或图形设计。我想要一个能帮我学画画、学绘画的程序。pic 做了一些尝试,但它在错误的领域里解决问题。我不想打“从 A 到 B 画弧线”。不过说出来倒也不介意。也许答案就是这个:跟程序说话。

我觉得所有这些工具的难点在于要花不少功夫才能熟练。大多数人很懒。我也懒。我现在喜欢用别人的软件。在伯克利那么久,我们用过的所有软件都或多或少跟我有关,那没什么意思。我用 Interleaf 觉得有趣,因为它崩溃了我不觉得有责任。我连操作系统的责任都卸掉了。不用操心它会不会崩溃。无愧疚编辑。

REVIEW: 你说的这些方向都假设计算能力比现在强很多。

JOY: 我觉得做这个假设不好。我看到的预测都说 1989 年内存会降到每兆字节 300 美元。很快处理器会变成 50 美元,你就能用它来刷新视频了。这些技术能做太多好事了,不可能不便宜下来。实际成本非常低。人们也该想想软件能值多少钱。它会以巨大的量产出。

这些东西什么时候能带着走?你不想办公室里拖个电话或者被绑在办公室里吧。你想把办公室带在身上,电话也带在身上。我想能把电话关掉,谢谢。我觉得这需要完全不同的技术。

dick-tracy-and-2-way-wrist-radio.png

Figure 11: Dick Tracy 双通路腕表

REVIEW: 你什么都提到了,就是没提磁盘。

JOY: 你可能想通过卫星电话来做分页……缺页中断,然后计算机打个电话。直播卫星或音频盘——就是做这个的技术。一张盘 500MB——数据速率 100KB 或 1MB 左右,我不太记得了。然后你可以随身携带所有需要的软件。你可以通过某种通信链路获取随机数据。这很像 Dick Tracy。你见过那些数字寻呼机吗?你真的可以在便携设备上传输数字信息了。

我不觉得你一定需要随身带个磁盘。很多人相信你需要有磁盘,所以他们会把磁盘做得便宜——因为有人相信。事情就是这样。重要的不是什么是可能的,而是人们相信什么是可能的。这就是想象力的美妙之处,对吧?硅是这么不可思议的放大器。如果你能想清楚应该做什么,并且让人们足够相信你、愿意给你钱,你几乎就能让它成真。这就是为什么 bubble memory 从来没成功过——人们不相信它是对的。但 bubble memory 本身没什么问题。

技术有巨大的惯性。你看真空管的惯性。全是规模经济。UNIX 有巨大的惯性。 UNIX 现在到底是什么其实已经不重要了。当厂商开始采用它,它就不再重要了。以前有人打电话给我说:“我不知道 UNIX 是什么但我一定要有!我怎么才能搞到?”现在已经到了这个地步。

billjoy7573.jpg

Figure 12: Bill Joy 2024

REVIEW: 就像设计师牛仔裤?

JOY: 我不买设计师牛仔裤——嗯,我穿的这条也不算差。这是我的麻布袋。现在流行皱的,你知道吧。

Footnotes:

1

SCCS:Source Code Control System(源码控制系统), 贝尔实验室在 1970 年代开发的版本控制系统,是 Unix 上最早的 VCS 之一。Bill Joy 在 BSD 时期用的就是它。Bill Joy 当时改动量很大,但没有 SCCS 这种版本控制工具来追踪变更,所以只能靠自己对系统了如指掌,才能 hold 住——他事无巨细都清楚,因为系统基本上就是他一个人写出来的。