只花十天写成的语言,至今仍在驱动网页

原标题A Ten-Day Language That Still Runs the Web

Brendan Eich 在与 Lex Fridman 的对谈中讲述,JavaScript、Firefox、Mozilla 和 Brave 是怎样从仓促的赌注、开源(open source)逃生舱和意外的追踪机制中诞生的。

BEBrendan Eich嘉宾
频道
Lex Fridman Podcast
发布
2021年2月12日
视频
3:03:38
阅读
33 分钟
原文
英语
在 YouTube 打开
往下滚动阅读时,视频会缩到右下角继续播放。字幕跟随阅读语言。
阅读语言共 2 种语言可读
由 AI 从英语原文翻译。打开“对照原文”可以逐段核对。
摘要

30 秒看懂

1995 年 5 月,Brendan Eich 用了大约十天写出 JavaScript,以免网景(Netscape)把脚本语言的位置让给 Visual Basic。将近三十年后,他与 Lex Fridman 对谈,从那场冲刺讲起,一路谈到浏览器大战、Mozilla 像海盗船一样的岁月、Firefox 靠搜索默认设置赚钱的模式,以及 Brave 想把隐私和广告收入重新交还给用户的尝试。贯穿其中的主线是“较差反而更好”(worse is better):粗糙、先出现、被广泛分发的软件可以不断改进,但早期的错误,包括草率的相等运算符和 Cookie,会被固化进平台。

  1. 1Eich 当年选了一款指令集很漂亮、却从未真正上市的 National Semiconductor 芯片。技术判断可以很优雅,但如果平台选错了,你依然无法站上起跑线。
  2. 2Marc Andreessen 在 Mosaic 里率先推出了图片,而 Tim Berners-Lee 那边还在另一套设计上。在互联网上,先发优势极大,Richard Gabriel 的那句话依然成立:较差反而更好。
  3. 3Bill Joy 和 Andreessen 想要一门与 Java 的 C++ 相对应的 Visual Basic 式语言。Java 面向高薪专家;JavaScript 则面向设计师、会计和业余爱好者,用来把组件粘合在一起。
  4. 4十天之后,早期用户要求在 == 中加入隐式类型转换,他答应了。Niklaus Wirth 的教诲是:设计的精髓在于删减,而他没能坚持住。
  5. 5一张来自其他域名的 1x1 像素图片,加上一个 Cookie,就足以在《纽约时报》和 ESPN 上认出同一个人。追踪经济正是从 1990 年代那些无人设计、也无人能撤销的意外中长出来的。
  6. 6Firefox 从未需要占据多数份额,才能重新打开浏览器市场。Eich 说,一小撮固执的少数派,就能让整个市场倾斜,去对抗那些巴不得它消失的既有势力。
全文

按章节阅读完整文稿

01

离开物理专业的学生明白:漂亮的芯片也可能启动不了

Lex Fridman 开场介绍 Brendan Eich:JavaScript 的创造者、Mozilla 联合创始人,也是 Brave Software 的 CEO。Eich 在高中时并没有太多编程经验。他的一位朋友有一台 Commodore PET;看完《星球大战》后,他们用 BASIC 做了一个死星沟槽飞行的动画,Eich 主要帮忙算数学。他真正热爱的,是 1970 年代中期的惠普 RPN 计算器:沉重、偏科学,做工像金砖。他原本想搞物理,读了很多科幻小说,然后发现曲速引擎并没有按他的时间表到来。

在圣塔克拉拉大学,他一边学物理,一边折腾计算机,并躲过了工程系那门用穿孔卡写 Fortran 的课程。Pascal 是转折点。它是一种啰嗦、属于 Algol 家族的代码,区分了有返回值的函数与没有返回值的过程。这算是老派的结构化编程,但它教会了他过程抽象。Pascal 的作者 Niklaus Wirth 既是作家,也是教师,他的课程要求学生从零开始,搭出一台计算机、一个编译器和一个操作系统。Eich 还想在自制硬件上运行 Unix。他选了 National Semiconductor 的 1632,一款复杂指令集芯片,却始终没能顺利启动。RISC 赢了。这个教训一直留在他心里:如果平台始终无法出货,再漂亮的技术选型也毫无用处。

读了三年之后,他从物理转向数学和计算机科学。原因是硅谷正为 Apple II 和 IBM PC 热火朝天,而在他看来,理论物理已经漂移到了无法检验的模型里。他在 Silicon Graphics 待了七年,随后跟着朋友 Jeff Weinstein 去了 MicroUnity。那是 1990 年代的一家“超级创业公司”,想尝试一种新的芯片制造工艺,在一块巨大的芯片上同时集成模拟与数字电路,还要做一个可通过软件升级的机顶盒。Jim Clark 后来拿乘法原理打趣他:连押十次 10 比 1 的赌注,中奖概率只有一百亿分之一。MicroUnity 最终没有成功,却让 Eich 积累了编译器、协议栈和内存模型方面的经验,这些在网景都用得上。

02

到 1995 年 4 月,网景这枚火箭已经点燃,Scheme 却已出局

1994 年,Eich 放弃了网景的机会;1995 年 4 月他才加入,正好赶上同年 8 月的首次公开募股(IPO),那次上市开启了互联网泡沫时代。1993 年的 Mosaic 曾是路上的一块绊脚石。在那之前,他接触的技术栈是电子邮件、Usenet、FTP 和那些老式互联网协议。Marc Andreessen 给一个邮件列表发信,说网页应该能放图片;Eric Bina 当时已经写好了代码。Tim Berners-Lee 后来告诉 Eich,他们另有一种做法。这已经无关紧要,因为 Mosaic 先出货了。这让 Eich 领悟了网络世界的一条规律:抢先上线,比做对更重要。这与 Richard Gabriel 在 Unix 与 Lisp 之争中提出的“较差反而更好”(worse is better)是同样的生存逻辑。新泽西的“农夫”打败了 MIT 的“大教堂”。

网景浏览器已经凭借图片、表格、框架和插件拿下了 Mosaic 的市场,但网页仍然是静态文档。管理层想要一个可编程的浏览器。Eich 被招来,就是为了把 Scheme 放进去,那是 Guy Steele 和 Gerald Sussman 设计的优雅方言。至今他还拿一张幻灯片开玩笑:画面里是 Bruce Willis 在《虎胆龙威》的通风管道里爬行。Sun Microsystems 的那笔交易让 Scheme 出局。Bill Joy 是 Eich 敬佩的人,他是 Berkeley Unix 的开发者,也是 Sun 的创办人之一。他希望把 Java 虚拟机放进网景,包括一个 16 位的 Windows 3.1 版本。1994 年底,微软已经试图以过低的价格收购网景,Jim Barksdale 和 Jim Clark 让他们滚远点。随后盖茨让微软调转了方向,网景内部的每个人都感觉到时钟在加快。

但同伴语言的空间依然存在。Joy 和 Andreessen 观察过微软的技术栈:C++ 用于昂贵的组件开发者,Visual Basic 用来粘合。Java 将成为面向受薪专家的正式编译型语言。JavaScript 则面向设计师、会计师和业余爱好者,是一种通俗的组件连接方式。Andreessen 喜欢“Mocha”这个名字;市场部门试过“LiveScript”;1995 年 12 月,Java 的商标授权终于到位。客户端团队没有空缺的岗位,于是网景把 Eich 安排到服务器团队,做了一个月的 HTTP 工作。5 月初,他终于转到客户端,并告诉 Andreessen,他们等不了了。

03

十天冲刺押注一等函数与双向注释技巧

管理层说,要让它看起来像 Java,远看就像 C:花括号、表达式与语句的语法,甚至包括 Java 的位运算符和无符号右移,因为 Java 没有无符号整数。原始类型(双精度数、字符串、布尔值、对象)必须能在两个堆之间互相映射,两种语言才能交换数据。尽管如此,Eich 仍坚持要有一等函数。早期的浏览器是单线程的;大多数用户还没准备好使用互斥锁;你不能阻塞界面,所以需要稍后执行的回调。他不想要 Scheme 的 call/cc,他想要的是可以传递和返回的函数。Java 直到 Java 7 或 8 才有像样的 lambda。onclick 这类事件名称来自 HyperCard 的事件语法。至今还有很多人讨厌 onmouseover。

Andreessen 还希望脚本直接嵌在页面里。SGML 圈子的人称之为异端。一位 SGML 圈子里的大人物愤怒地写信,要求使用标记段(marked section);Eich 回复说,HTML 里根本没有标记段,浏览器也不支持。他把代码藏进了 Netscape 1.1 和其他旧客户端都会忽略的 HTML 注释里,这个注释嵌在新的 script 标签内。随后,在 Netscape 2 中,他改变了这些分隔符的含义,于是同样的字节就变成了活的代码。他至今仍把这称为“双向注释隐藏”的技巧。他说,没有这个技巧,JavaScript 根本无法自举:Netscape 2 没有独立的脚本文件,只能内联脚本。他喜欢说,演化更接近内共生,离大教堂式的设计很远。

演示版的时间窗口,大约是从某个周四的晚上到随后的周一,共约十天。他没有睡够。他来不及做垃圾回收,于是用了竞技场(arena),也就是对象池,结果很快就耗尽了内存。冲刺结束后,他匆忙加入了引用计数,因为游戏和事件驱动的分配耗尽了对象池。在不安全的 C 中做引用计数,既会溢出导致内存泄漏,也会下溢导致释放后使用。这就是一个远程代码执行漏洞:用伪造的字符串塞满堆,让计数下溢,保留对对象的句柄,再通过伪造的函数表调用。Netscape 2 发布后,正值一连串紧急安全补丁的发布期。那十天里,他最引以为傲的,依然是一等函数。从精神上说,Scheme 算是进去了。

04

他本该拒绝更草率的相等比较,此后二十年只能向前修补

在那十天里,不同动态类型对象之间的 == 比较给出的答案是否定的。后来,早期的内部用户想把数字与字符串化的数据库字段做比较。为了讨好他们、推动采用,他同意了。隐式转换破坏了这个运算符仅剩的一点等价性,NaN 本来就是一团糟,至今人们仍拿这件事调侃他。这种草率是在冲刺之后才出现的。他在推特上总结的教训是:当人们请你把语言弄得更草率、加入一个可爱的功能时,答案应该是“不”。Wirth 是他的偶像之一,曾说设计的精髓在于删减。而他没能守住这条底线。

他仍然认为,要是不赶这一趟,这个位置就会被 VBScript 占走,那会更糟,谈不上什么更漂亮的语言。网页的兼容性随后冻结了早期的错误;你没法回头去改写 ATP 代谢那样的底层机制。你只能保留仍然有效的部分,在其上叠加新功能,就像生物那样演化。他在标准机构里大致花了二十年做的,正是这件事。HTML 本身以一种 XML 从来做不到的方式包容错误。微软甚至让 XML 先经过 IE 的 HTML 纠错器处理,才让它能用。纯 XML 从来不可能接管一个已经像活体系统一样运作的网页。

即便在严格的变更控制之下,用户的创新依然有所帮助。Bill Dortch 1996 年做的山地艺术画廊,至今仍能在 Web Archive 里看到,是一个单页应用,带有一个本地对象数据库,看起来就像提前出现的 JSON。人们已经在页面里进行计算,并通过隐藏的框架与服务器通信,也就是还没有“Ajax”这个名字时的 Ajax。Eich 引用 Eric von Hippel 的观点:即使不开源,把一门语言交给领先用户,他们也会告诉你它应该变成什么样子。Java applet 始终被困在插件的方框里。LiveConnect 把两个堆粘在了一起;随后插件变成了可选项;再后来 Sun 把 Java 当作分发工具管理得一团糟;微软又把它踢出 Windows,并把 Outlook Web Access 里的一个 Java 邮件对象替换成了后来的 XMLHttpRequest。

05

ES4 死在委员会里,随后把器官捐给了 ES6 和 TypeScript

网景把 JavaScript 交给了欧洲计算机制造商协会(ECMA),因为这个欧洲机构此前已经把 Windows 3.1 API 的一部分变成了标准。不过微软还是派出了强手,包括 Sean Katzenberger,他写了第一版草案的大部分内容,并告诉上司别再打断他。Sun 派来了 Guy Steele,一个脑子极其厉害的人,口袋里还装着 Scheme;Richard Gabriel 写了第 4 条款,即对这门语言是什么的一段引言。Java 是 Sun 的商标,保护得极其强硬,甚至向名叫 Jovanovic 的人发过停止侵权函,所以这个标准被命名为 ECMAScript。人们口头上仍说 JavaScript,版本则用 ES 加一个数字,而这个数字和年份对不上。第 1 版于 1997 年在尼斯完成,席间吃了普罗旺斯鱼汤(bouillabaisse)。第 3 版在 1999 年推出。在一次很晚的会议上,Eich 和 Katzenberger 各自发现了一个差一错误(fencepost bug),两人对视一眼,此前 Eich 迟到引发的怒气也就烟消云散了。

随后微软夺取了网络,反垄断诉讼惩罚了这家公司,网景并入 AOL,委员会陷入沉寂。下一代设计 JavaScript 2 交给了另一位毕业于 MIT 的工程师,只在微软的 ASP 技术栈中以变形的形式出现,随后在那里消亡,又在 Flash 中以 ActionScript 3 的形式存活下来。与 Adobe 合作的 ES4 试图把类、类型和模块引入语言。委员会分裂了。一派认为改动太大,主张渐进式改进,不要新语法。ES4 被搁置;2009 年的 ES5 是那个较小的增量版本,带来了严格模式和实用的 API。ES4 中人们喜欢的部分被移植进了 ES6,于 2015 年定稿:类、模块、箭头函数、let 和 const、Promise。Eich 从 1996 年起就想要其中一些函数式形式。它们花了将近二十年才实现。

TypeScript 由微软的 Anders Hejlsberg 领导开发,他曾参与 Turbo Pascal、Delphi 和 C# 的工作。TypeScript 是 JavaScript 的超集:最短的 JavaScript 程序仍然也是合法的 TypeScript 程序。你可以逐个文件地添加类型注解,得到的是开发工具里的警告,运行时并不强制约束。Eich 认为,这在今天是有益的。微软必须猜测模块和装饰器未来的语法,等标准推进后再重新收敛。他认为微软总体上玩得还算公平,只是把 TypeScript 作为专有的控制权握在手里。框架是一种相关的进化筛选。John Resig 的 jQuery 把 1990 年代那套 DOM 压缩成了一行代码,那套 API 是为 Java 和 JavaScript 设计的,需要先构造对象、再绕上好几步才能用。标准后来吸收了 querySelector。Eich 的态度是:真正有价值的东西会留下,其余的应当淘汰。保护落伍者只会拖慢这个生态。

06

Asm.js 让虚幻引擎(Unreal Engine)跑进了浏览器标签页,随后演变成 WebAssembly

乔布斯在 iPhone 上禁用 Flash 是致命一击,但网页仍必须具备竞争力:视频、WebGL、Web Audio、canvas。Mozilla 的路线是一个有类型的 JavaScript 子集,不引入新语法。Alon Zakai 的 Emscripten 把 C 和 C++ 编译成 JS。Eich 从东北大学招来的类型理论学者 Dave Herman,以及编译器工程师 Luke Wagner,把这个快速子集整理成了 asm.js。类型就是控制流图中支配节点位置上的类型转换。从 Java 继承来的那些位运算符,会把双精度浮点数压成整数。能在正确位置输出这些运算符的编译器,就能在线性时间内完成类型检查和编译,跳过垃圾回收,并获得确定性的性能。他们在 Epic 的四天里,只靠按下编译键,就把虚幻引擎移植了过去。2012 年秋天,他们做了演示;2013 年的 GDC 上,人们在浏览器窗口里看到《Unreal Tournament》运行,无需插件、无需 Flash、无需 Java,在当时的硬件上跑到了每秒 30 帧。

在拿出这个证明之前,人们仍然希望 Google 的 Portable Native Client 能成为杀死 Flash 的东西。Eich 的评价是:新老板,老样子,只是以插件外衣包装的进程隔离。asm.js 之后,2015 年春天,各方就一种二进制语法达成一致,它可以加载进同一个 JavaScript 虚拟机:两种源语言,一条编译流水线。这就是 WebAssembly。在移动设备上,二进制很重要,因为即使是 gzip 压缩过的 JavaScript,在内存中依然会膨胀,解析器需要消化的是“function”这八个字符的关键字。Eich 现在希望当初把它缩短了。快速 JIT 本身也是旧时代的产物:Anamorphic 公司的 Smalltalk 和 Self 虚拟机,然后是 Sun 的 HotSpot,再然后是 Lars Bak 在奥尔胡斯的 V8 团队。他们把引擎重写了四次,并且厌恶 JavaScript 的各种怪癖,以至于最终又造出了 Dart。Mozilla 用 TraceMonkey 回应,苹果用 SquirrelFish Extreme 回应。2008 年,JavaScript 快到开发者们终于注意到它的程度。

被问到为什么 JavaScript 会成为最流行的语言时,Eich 指向一等函数、足够简单的类 C 运算符层级,以及在单线程事件循环中二十年的倾听。Nick Thompson 写道,Java 的专家们并不关心普通程序员如何构建动态网络应用;Eich 则在那里一人身兼数职,让这门“米老鼠”式的语言活了下来。人们爱它,就像船长爱一艘不好好伺候就会要了他命的船,它更像飞船《Serenity》,离十四行诗很远。他说,类并没有毁掉它:Smalltalk 和 Python 都有类。这种社会结构才是不寻常的部分。C++ 委员会更像是一群精英白发老人;JavaScript 社区则包括 PayPal、Salesforce,以及一群不需要资历认证的年轻人。Fridman 把 C++ 比作华尔街,把 JavaScript 比作 WallStreetBets。Eich 不愿把话说过头,但他喜欢这门语言让更多人进得来。

07

网景败给了默认设置;Mozilla 则像《星球大战》里的逃生舱,在没有法律实体的情况下逃了出来

Eich 说,Internet Explorer 能胜出,靠的是分发渠道,与品味无关。苹果也强制 Safari 绑定。IPO 之后,网景管理层收购了一些公司,去和微软正面竞争,把第一层楼的团队耗尽,又让那些从未做过浏览器的新人轮流掌舵。Netscape 4 本来应该是 3,结果延期发布,并以 Windows 为先。微软的版本遵循经典的抄袭曲线:一代是垃圾,二代令人生畏,三代告诉你结局,四代不错。而 IE4 随 Windows 免费附赠,这就是捆绑。他们还推进了动态 HTML。当时的网景销售主管 Ram Shriram 接完一个电话,脸色煞白:一位客户说,如果网景仍是默认浏览器,微软就会收回它的 Windows 授权。这种霸凌几乎没有出现在反垄断案中。微软最终还是被判有罪,然后任由 IE5 和 IE6 带着安全漏洞慢慢腐烂,而其他浏览器则在加入标签页和弹窗拦截。

AOL 的收购是一个体面的退场,否则网景就要关门了。高管们提议做一个开源的逃生舱:在《星球大战:新希望》里,炮手不会去打那个逃生舱,因为上面没有生命体。Mozilla 于 1998 年启动。代码库乱成一团。加密模块被视为“电子军火”,他们无法发布 1024 位的 SSL。Tim Hudson 和 Eric Young 不在商务部和国家安全局(NSA)的管辖范围内,把后来成为 OpenSSL 的东西塞进了代码树,这可能是最初几个月里最漂亮的一招。Mozilla 以海盗船的形式运作,没有法律实体。大多数人仍是网景的员工,只是换到了另一张组织结构图上。第一任工程经理离开了;Eich 成为代理经理,这是他第一次做管理。曾起草网景和 Mozilla 公共许可证的律师 Mitchell Baker 休完产假回来,主动提出来管理。Jamie Zawinski 在一年后辞职,他称这个项目是失败的,因为它没能重新启动浏览器市场。Eich 说,那原本就不可能:网景仍在发布旧代码,而 Mozilla 则在为开发者推倒重来,从一片空白开始。

他们用一个开源的 COM 变体(引用计数、虚函数表)实现模块化,从 JavaScript 为这些组件编写脚本,并用 XUL 构建可移植的界面,不再依赖表格或 XML。Dave Hyatt、Joe Hewitt、Chris Waterson 和 Blake Ross 做了这些工作,Ross 当时还是高中实习生。2001 年,Mitchell 接到电话:她被裁员了。下一周的社区电话会议上,她依然在位。付薪员工、Red Hat 的外部人士,以及从社区成长起来的网景员工,都选择留住她。网景最弱的工程师,是那些讨厌在公开场合与更优秀程序员竞争的人。Eich 说,忠诚可以超越企业与开源之间的界限,这是普通公司结构做不到的。

08

Firefox 重新打开了市场,随后靠着一个谷歌已在取代的搜索默认项维持生计

2002 年的 Mozilla 1.0 来自 Eich 规划的大约六周一次的发布列车,这一节奏至今仍被浏览器沿用。套件里仍有邮件、新闻和编辑器,以及 AOL 的 AIM 和 ICQ 按钮,像是赛车上贴满了 NASCAR 徽章。Hyatt 和 Ross 把浏览器单独剥离成一个应用,叫 Mozilla Browser,更简单,只做一件事,其余功能交给扩展。Hyatt 是资深黑客:他在 Camino 里实现了原生的 Mac 标签页;为了一门课的作业,他改了五版,而同学还在等待那个理想中的程序。2001 年,他作为 Safari 的创始工程师之一去了苹果,并持续在博客上写如何实现标签页,直到有人告诉他这是专有技术。Opera 早已有标签页。名字带来了法律麻烦:Phoenix Technologies 阻止了 Phoenix 这个名字;一个澳大利亚开源数据库像《疯狂的麦克斯》那样对 Firebird 大喊大叫;最后,“Firefox”,一个红色熊猫的昵称,终于留了下来。它在 2004 年发布,正值 Web 2.0 时代:维基百科、Craigslist、Gmail、Google 地图,JavaScript 加上图片,就能拖动地图。后来一位微软工程师在飞机上告诉 Eich,他们本该在襁褓中就用弹窗拦截和标签页扼杀 Firefox。Mozilla 当时动作太慢。大公司的产品线,比从零开始的浏览器更难转向。

钱来自默认的搜索协议。2004 年前后,Sergey Brin 派 Fritz Schneider 前来谈判;双方都看到,搜索和浏览器彼此需要,这也是为什么搜索引擎至今仍想拥有自己的浏览器。用户很少更改一个并不糟糕的默认设置。到 2006 年,Mozilla 就已经知道谷歌在开发 Chrome。早期的演示没有用上那个仍在丹麦被重写的快速 JavaScript 引擎,展示的是那个令人难堪的标签页:加载 Flash,Flash 崩溃,整个浏览器却不会崩。受 GreenBorder 启发的进程隔离设计,是 Firefox 当时仍缺少的真正安全措施。Larry Page 谈到与 Firefox 的关系和 WebKit 时,告诉 Eich 不必担心 Firefox:打造你自己的浏览器,拥有你自己的观点。Chrome 于 2008 年悄然发布。Firefox 一直增长到大约 2011 年,然后随着 Chrome 的崛起而下滑。第二次浏览器大战依然是关于分发和默认设置的战争,而 Firefox 最大的资金来源,同时也是它的竞争对手。

Yahoo 的实验显示了默认设置的价值上限。2014 年 12 月中旬,Firefox 把默认搜索切换为 Yahoo。Marissa Mayer 曾谈到重建搜索,Carol Bartz 此前已经裁员,并把搜索业务转向谷歌和微软那边。用户把默认设置改了回来。流量在一年里持续流失。据 Danny Sullivan 撰文披露的条款,Yahoo 仍在为留不住的流量支付固定费用。Eich 的冷静判断是:默认设置的价值,等同于用户的懒惰程度,而且只有当替代品不明显更好时才成立。靠默认设置生存的任何生意,都是在与用户的耐心赛跑。他给创业者的建议,与这段历史一致:如果你想推出一门语言或一个产品,先考虑分发。IE 靠的是 Windows,Firefox 靠的是搜索勾选框,Chrome 靠的是谷歌的覆盖范围。那是结构问题,与道德无关。

09

Cookie 原本是为登录做的权宜之计;Brave 的默认设置是拦截它们无意间开启的追踪

Cookie 是浏览器里按网站存放的一小块数据,每次响应时都会被带回服务器并更新。1990 年代的 HTTP 是无状态的:没有 Cookie,你从确认页面点到账户页面的每一次点击,都得重新登录银行。一名网景工程师在 1994 年、Eich 加入之前,就匆忙把它用于保存凭据。图片同样会发出请求,有时是发给另一台服务器,并携带上一次的 Cookie,再返回一次更新。一个 1x1 像素的图片(广告技术界仍称之为“像素”)出现在《纽约时报》和 ESPN 上,就能给用户 1234 分配一个编号,并建立画像。这本无意为之。等 Eich 到来时,撤销已经太晚了。Netscape 3 让脚本也能悄悄做同样的事。追踪经济,以及地球上一些最富有的公司,都是从这些意外中成长起来的。Eich 打趣说,他自己得到的,只是几件难看的 T 恤。

Brave 始于 2015 年,出发点很简单:第三方 Cookie、追踪脚本和恶意广告都并非设计初衷,如今已经不安全,因此浏览器应当默认拦截其中一部分。区分第一方与第三方,不能只看域名是不是不同。发布者会从无关的主机加载无害的脚本。Brave 组建了一支研究团队,制作由人类与机器学习混合构建的拦截名单。大约同一时期,苹果也在本地实施智能追踪预防(ITP)。乔布斯在世时,Safari 较早的规则(阻止来自你从未访问过的网站的第三方 Cookie)确实是一次真正的隐私举措,但它有一个漏洞:只要你访问过一次追踪方,它就会被加入白名单。AppNexus 曾让广告点击先经过自己的域名,从而种下一个第一方 Cookie。Safari 堵上了这个漏洞;Brave 仍在持续迭代。指纹追踪则更难。32 个网站各自存一个比特,就是 32 比特,约四十亿个标识符,相当于一个超级 Cookie。这场较量没有终点。

速度是一种你能亲身感受到的副作用。广告技术脚本会串成一连串程序化竞价的请求。拦截它们之后,Brave 比 Chrome 更快,流量费用更低,电池也更省,因为无线电模块的工作量减少了。Google 的工程师朋友们告诉 Eich,慢速网站会自行修复。他调研了一些页面,大多数都是那个样子。谷歌不可能接管每一家发布者的技术栈。AMP 试图用搜索轮播的位置笼络他们,而在 Eich 看来,它让发布者看起来像挂在谷歌网址与框架下的客座文章,对品牌不利,而且还带来了反垄断的问题。对用户而言,隐私是一种默认设置,本不该另外标价 3 美元。你不妨试试一个默认拦截的浏览器,看看页面是否还能正常工作。

10

基础注意力代币(Basic Attention Token)尝试把七成的广告分成交给用户

拦截是一种防御。Eich 想做的,是重新连接品牌和代理商已经在花的钱与发布者之间的通路,去掉中间环节。《卫报》曾经有一个月自己购买广告库存,投入 1 英镑,只收回 30 便士,70% 被中间商拿走了。App Store 抽成 30%,留给开发者 70%。旧式有线电视超级频道大约保留 85%。欺诈让情况更糟:一个假的《纽约时报》拿到了机器人的点击,真正的报纸却一无所获,而交易所照样收取手续费。恶意软件也在同一管道中传播,就像嵌在真实发布者页面广告里的 JavaScript 加载器。Brave 的基础注意力代币(Basic Attention Token)是一个三方市场:用户、创作者、广告主。广告在本地从每日目录中匹配,并使用轻量的设备端学习。Brave 看不到你的浏览历史、搜索内容或滚动深度。广告主购买的是匿名的注意力。毛广告收入的 70% 归用户所有,用户可以提现,也可以打赏网站和 YouTube 频道。

第一个原型于 2016 到 2017 年运行在比特币上。拥堵和手续费让一笔 5 美元的购买几乎花掉 4.50 美元,即使嵌入了 Coinbase 的小组件,这依然是个糟糕的入口。以太坊为三方分成增加了智能合约。随后是监管问题:OFAC 制裁、反洗钱,以及了解你的客户(KYC)。Brave 的默认设置并不知道用户是谁;收入被归于浏览器,再导向已验证身份的创作者。提现需要身份验证。Eich 是加密货币的务实派。无须两天电汇的点对点交易很美,但他们所促成的收入分成依然需要牌照。他希望把匹配机制,以及 David Chaum 提出的盲签名确认,写进网络标准,让不止一款浏览器能运行这套协议。他说,谷歌会把建立在同一密码学基础上的“信任令牌”(trust tokens)标准化,但不会用于广告确认,因为那会炸掉它的业务。

如果 Brave 哪天拿到了互联网的 95%,他会要求重新计票。关键在于把各部分放进标准里,并靠信任和用户的交易条件来竞争。创作者的赞助和打赏已经存在;它们是中心化的,抽成约 5%,而且可能被审查。如果是通过浏览器中介的版本,抽成 3%,就更难被封杀。他还告诉学习编程的人,要挑选几种工具,别只用一把锤子:动态语言用于原型,C 或 Rust 用于底层和内存安全(他在 Mozilla 支持了 Rust,因为他已经厌倦了远程代码执行漏洞),Go 用于服务器网络,Python 或数组语言用于线性代数。把 JavaScript 作为第一门语言,能让你很快在屏幕上看到东西;Python 的语法错误则能让初学者更早发现问题。如果你在设计语言或 API,当早期用户要求你放宽限制时,答案应当从“不”开始。

11

谷歌无法靠“隐私优先”摆脱 DoubleClick,所以关系图谱应当留在浏览器里

Eich 对谷歌创新者困境的解读是结构性的。发布者不太懂技术,他们依赖一大堆广告技术供应商。一夜之间杀掉那些脚本,就会烧掉你自己的客户。Privacy Sandbox 和 FLoC 很有谷歌风格:用差分隐私噪声把你藏进人群中。他说,噪声随时间可以被剥离,攻击者能把你重新拽出来。他不指望苹果、Brave 和 Mozilla 会立正敬礼并采用它。如果谷歌聪明,它可能会剥离类似 DoubleClick 的业务,以换取监管上的和平。反垄断在美国和欧洲又回来了。法官 Thomas Penfield Jackson 在没有补救听证的情况下下令拆分,微软险些被一分为二;上诉法院将案件发回,微软选择和解,没有被拆成只做操作系统或只做 Office 的公司。Eich 认为,反垄断真正造成的损害,是多年的分心。微软转回了专有的锁定,还有失败的 Windows Vista。

社交网络和搜索一样,是对朋友的朋友关系图谱的一种中心化算法。你应该拥有这种关系和帖子。他尚未实现的想法是:浏览器本来就能看到你使用的每一个网络;它可以保存关系图谱,把 Facebook 和 Twitter 的好友合并成一个视图,即使你在一个平台上被封禁,也仍能在另一个平台上找到对方。浏览器主要是通过搜索被中心化力量攫取的。Larry Page 多年前就说过,交出查询内容是以隐私换取更好的结果,早期是笔好交易,但在谷歌挤占了自己页面之后就变成了更糟的交易。Eich 认为 Parler 被下架是恶劣且有选择性的:Twitter 上充斥着暴力威胁,却没有被断掉服务器。这看起来像内部人士在清除一个新来者,就像对冲基金做空 GameStop 那样。他并非“零审核”的绝对主义者。如果把言论自由的旗帜挥得太猛,最糟糕的人会占领产品,并毁掉这门生意。他想要的是以用户为先的辅助性原则(subsidiarity):你自己组合自己的网络,封禁或迁移的成本保持在低位。

当美国诉微软案的救济裁决落地时,网景早已死去,或者说,被 AOL 收购后已名存实亡。让浏览器重新回到赛场上的,是 Mozilla,判决并没有做到这一点。在他看来,让用户拥有友谊、能够绕过下架的工具,比等待一场来得太晚的拆分更重要。少数人选择退出,就足够了。这与 Firefox 的故事是同样的“固执少数派”故事,也与公链的故事相同,还与他眼中黑客对抗寡头的 WallStreetBets 轧空行情相同。那是黑格尔所说的“理性的狡计”,不靠街头巷战。

12

不需要多数;百分之几就能重新启动一个既有势力厌恶的市场

Fridman 问,如果重来一次,他是否还会在硅谷起步。Eich 十几岁时于 1976 年来到加州。他认为,这个黄金之州正背负着疫情封锁留下的沉重债务:税率最高,森林无人管理而频频焚烧,道路规划缺失,洛杉矶的有轨电车通行权被石油、汽车和橡胶等利益集团抹去了,所以马斯克才要挖地下隧道,因为地面上的走廊已经没了。住房建不起来。曾经的魔力在于,年轻人可以不顾成本去尝试大胆的事,加上斯坦福、天使投资人,以及一个包含 ARPANET 的联邦故事。这并不是什么自由至上主义的童话。芯片工厂也走了;劳动力和环保的套利,把制造业送到了法律更便宜的地方。远程办公最初让谷歌员工欣喜,因为换团队不用搬家;然后另一只靴子落下:保留中西部的老家,失去湾区的薪水。地理套利从公司转移到了员工身上。他预计,奥斯汀、迈阿密和其他地方会出现更多的流动和更小的硅谷,但不会是文明的干净终结。他说,美国是一个由十三个殖民地演变而来的商业共和国,残留着辅助性的精神,尽管这种精神已经被侵蚀。

他会想到死亡吗?不太多。他是罗马天主教徒,并不畏惧死亡。他理解那些害怕死亡的人:也许是缺少死亡可以超越的信仰,也许是没有孩子,又或者是年纪已大,却确信自己错过了那些能够流传下来的工作。他引用了泰伦提乌斯(Terence)的话:没有任何人类的事情与我无关。遗产首先是子女和孙辈,其次才是网络标准、Firefox 和 Brave,而他不会对 Brave 过度夸大。Brave 的主张是:几十年来,你可以不断证明,少数几个领先用户就能让一个市场倾斜,而那些有钱的既得利益者原本并不想让它打开。Firefox 已经表明,当所有人都说不可能时,浏览器市场仍然可以被重新启动。你不需要所有人,你需要的是固执的少数派。对他来说,这是一种美国式的模式,并非激烈的革命:权利与义务,务实,直到寡头变得专横,然后就会出现一批愿意把生命、财产和神圣的荣誉都押上去的少数人。一小段代码,依然能改变世界。

这三个小时的实际收获,与他 1995 年使用的检验标准相同:用户能否立刻看到结果,这东西能否在已经存在的安装基础中存活下来?在单线程浏览器中,一等函数比漂亮的语法更重要,也比他后悔的那个相等运算符更重要。那十天的成果,至今仍运行在每一台带有网络技术栈的设备上。粗糙、先出现,并且第一批就发布出去,仍然胜过那座错过了时机的大教堂。设计中最难的动作是拒绝。分发中最难的动作,是长期拥有一个足够重要的默认设置,然后不再依赖那个正在打造你替代品的赞助者。健康的生态会淘汰。那些选择退出的少数人,依然能够改变其他人的成本结构。

同频道的其他文章

3:36:56EN → 简体中文
Lex Fridman· 2026年9月16日播客精神病学至今没有属于自己的青霉素主持 Lex Fridman历史学家 Andrew Scull 与 Lex Fridman 谈到,这门学科对症状有所缓解,但没有哪一种重大精神疾病真正被根治;过度自信的时候,代价要由病人来扛。Mental HealthPublic HealthNeuroscience
5:15:51EN → 简体中文
Lex Fridman· 2026年8月26日播客 · 2 人对谈DHH 没有亲手写一行 Omarchy Quattro 的代码嘉宾 DHH · 主持 Lex Fridman与 Lex Fridman 一次充满怀疑的对话过去十三个月后,Rails 的创造者讲述了 Opus 4.5、一群编码智能体(Agent)和一个一分钟的 Linux 安装器,如何结束了他一凿一凿手写 Ruby 的时代。编程智能体Vibe Coding智能体工程+3
3:12:58EN → 简体中文
Lex Fridman· 2026年8月12日播客 · 2 人对谈一个冷水澡,二十位冠军:Khabib Nurmagomedov 是如何炼成的嘉宾 Khabib Nurmagomedov · 主持 Lex Fridman在马哈奇卡拉的一间学校体育馆里,七十个人共用一个淋浴间,而且只有冷水。Martial ArtsCombat SportsCoaching+3
3:46:18EN → 简体中文
Lex Fridman· 2026年7月28日播客 · 2 人对谈抽掉奴隶制,就没有美国内战嘉宾 Gary Gallagher · 主持 Lex Fridman1860 年,美国奴隶主名下的奴隶价值,超过了全美所有铁路和工厂的总和。Political PhilosophyLeadershipHistory
3:51:47EN → 简体中文
Lex Fridman· 2026年6月30日播客 · 2 人对谈46% 的皇帝被暴力推翻,帝国照样延续下来嘉宾 Anthony Kaldellis · 主持 Lex Fridman历史学家 Anthony Kaldellis 与 Lex Fridman 一起走过 2200 年的罗马史,并主张我们所说的拜占庭,其实就是罗马本身。Political PhilosophyGeopoliticsLeadership
2:53:42EN → 简体中文
Lex Fridman· 2026年5月29日播客 · 2 人对谈月亮一直在下落,却总也落不到地球上嘉宾 Biggest Mysteries in Physics · 主持 Lex Fridman费米实验室(Fermilab)物理学家 Don Lincoln 在与 Lex Fridman 的对谈中说,物理学的历史就是一部统一的历史;反物质(antimatter)、暗能量(dark energy)和万物理论(theory of everything)依然远在我们能做的实验之外。Quantum MechanicsScience CommunicationPhilosophy of Science