# 布兰登·艾克：JavaScript、Firefox、Mozilla 与 Brave

> JavaScript 之父回顾语言的诞生、Firefox 与 Mozilla 的历史，以及 Brave 对隐私的探索。

- 原标题：#160 – Brendan Eich: JavaScript, Firefox, Mozilla, and Brave
- 期数：第 160 期
- 发布日期：2021-02-12
- 嘉宾 / 主题：布兰登·艾克
- 网页版：https://lexfridman-cn.pages.dev/ep/brendan-eich/
- 官方页面：https://lexfridman.com/brendan-eich/
- 精读字数：约 13939 字（阅读约 31 分钟）

> 本文为 lex.qiaomu.ai 基于原始访谈的 AI 改写中文精读，非官方翻译；引用请注明出处并链接网页版。

1995 年 5 月，一个人用了十天，写出一门编程语言。今天，全世界绝大多数网页都在跑它的代码。更反常的是，这个人后来说，他在这门语言上最后悔的决定，发生在十天冲刺结束之后：早期用户跑来求他，能不能让这门语言更"宽松"一点，他心一软答应了。

这个人叫布兰登·艾克（Brendan Eich）。那门语言叫 JavaScript。二十多年后，他自己在播客里把这段历史摊开来讲，讲得毫不留情，包括那些让他被骂了四分之一个世纪的错误。

这期访谈接近三个小时，从物理系的叛逃，到十天的疯狂编码，到浏览器战争、开源逃生舱、追踪经济的意外起源，再到 Brave 想干的事。信息密度很高，值得慢慢拆。

## 一个物理叛逃者的编译器启蒙

艾克高中时没怎么编程。他有个朋友家里有台 Commodore PET，两人看完《星球大战》，朋友说，咱们写个 Basic 程序，把死星爆炸的动画跑一遍。他就帮着算数学，做点二维图形。

他真正着迷的是惠普计算器。七十年代中期的 RPN 机型，科学函数齐全，做工扎实得像块金砖。他本来想读物理，读了很多科幻小说，脑子里全是曲速引擎和混合驱动。后来他发现，物理学的黄金时代已经过去了，自己生得太晚。

在圣克拉拉大学读本科时，他开始同时啃计算机。他躲过了 Fortran 那门课，也就是那种要在穿孔卡片上写程序的工程系课程，改学了 Pascal。Pascal 对他来说是个转折点，因为它把人怎么用程序抽象世界这件事讲清楚。函数返回值，过程不返回，这些今天看来老派的区分，当时让他第一次理解什么叫结构化编程。

他后来还自己搞了台带 Unix 的机器。选了国家半导体的 1632 处理器，指令集复杂漂亮，结果这芯片 bug 太多，永远没能真正点起来。他挑错了赛道。RISC 才是最后的赢家。这段折腾教会他一件事：**技术判断可以很美，但工程上选错平台，你连起跑线都上不去。**

本科毕业前三年，他从物理转到数学和计算机。他的理由很坦诚：当年他对物理太天真了，而硅谷正在为计算机疯狂。于是他去了硅谷图形公司（Silicon Graphics，SGI），一待七年。后来又跳去 MicroUnity，一家想做家庭媒体处理器芯片的公司。这家公司同时押注新半导体工艺、新的模拟和数字电路、软件可升级的机顶盒，每件事都是九死一生。吉姆·克拉克（Jim Clark）后来评价说，你做十件事，每件事成功的概率是十比一，乘起来就是十亿分之一。

MicroUnity 没成，但这段经历给了他编译器、协议栈、内存模型的底子。这些东西后来全用上了。

## 1995 年 4 月，他登上了一枚已经点火的火箭

他其实错过了 Netscape（网景）的第一班车。1994 年他本有机会去，那时他还在 MicroUnity，没有立刻动身。1995 年 4 月，他才正式加入。IPO 是 1995 年 8 月，所以他赶上了那场人类历史上最著名的上市之一。

真正让他动心的是 1993 年的一块石头：Mosaic 浏览器。在那之前，他们用的是邮件、Usenet、FTP，一堆各说各话的老互联网协议。Mosaic 把图片塞进了网页里。马克·安德森（Marc Andreessen）当时给一群人发邮件说：我觉得网页里应该能放图片。等这封邮件发出来的时候，埃里克·比纳（Eric Bina）的代码已经写好了。

这件事让艾克意识到一个规律：**在互联网上，先发优势大到离谱，快比完美更重要。**后来他把这条规律总结成一句被引用到烂的话，worse is better，更烂的反而更好。

他进入 Netscape 的时候，公司正在朝 IPO 冲刺，整个公司像被点燃的火箭。浏览器从 Mosaic 手里抢市场，加了图片、表格、框架、插件，但页面还是死的，没有真正的动态逻辑。管理层想让它变成一个可编程的浏览器，而不只是一个文档查看器。

故事的另一半是 Sun。Netscape 和 Sun 谈 Java 授权，想把 Java 虚拟机嵌进浏览器。比尔·乔伊（Bill Joy）是中间人，也是 Java 进浏览器的主要推手。艾克原本的梦想是在浏览器里实现 Scheme，一个他喜欢的函数式语言。结果 Sun 的交易一谈，Scheme 就没戏了。

但还有空间给一门"伴生语言"。比尔·乔伊和马克·安德森都观察到：微软的产品线里，C++ 写组件，Visual Basic 写胶水，两门语言搭配，各司其职。**Java 是给拿工资、水平高的程序员写的，还需要另一门给设计师、会计、业余爱好者的语言。**这就是 JavaScript 的生态位。

## 十天，和一场关于"要不要在标记里写代码"的豪赌

1995 年 5 月上旬，艾克才从服务器团队转到客户端团队。之前他被招进来时，客户端没有招聘名额，他在服务器团队干了一个月，写 HTTP 1.1 的东西。转到客户端后，他对马克说，不能再等了，得赶紧做。

然后就是那十天。从周四晚上开始，一直干到下一个周一。他没睡够。

他当时心里有很多选择。语言要不要更像自然语言，比如比尔·阿特金森（Bill Atkinson）在 HyperCard 里做的 HyperTalk？管理层说，要看起来像 Java。于是他用了花括号，用了 C 系的表达式和语句语法，复用了 Java 的位运算符，包括无符号右移，因为 Java 没有无符号整型，只能用运算符模拟。这些选择后来被证明非常重要。

他坚持要的是第一类函数。原因很具体：浏览器是单线程的，所有早期浏览器都是单线程，大多数用户根本没准备好理解互斥锁和线程。在单线程世界里，你不能阻塞界面，所以你必须有回调，有"稍后执行"。他不想搞 call/cc 那种捕获续延的花活，他只想让函数能当参数传、能当值返回。Java 当时没有这个东西，直到 Java 7、Java 8 才有了像样的 lambda。

于是 onclick 这种写法出现了。这个命名来自 HyperCard 的 on-event 语法。今天还有人抱怨 onmouseover、onmouseout 这些名字丑，但当年就是边写边定的。

更疯狂的一件事是：脚本要直接内嵌在 HTML 标记里。当时很多人觉得这是异端。一个 SGML 专家写信骂他，说你为什么不用标记段（marked section）？艾克回：SGML 的标记段在 HTML 里根本不存在，浏览器也不支持。

只好土法上马。他用 HTML 注释把代码包起来，让不认识 script 标签的老浏览器把整段当注释忽略。而在 Netscape 2 里，这个注释容器又有了新语义，里面的真代码会被执行。这是一种双向隐藏的 hack。

> 没有这个 hack，JavaScript 根本没法起步。（布兰登·艾克）

这种写法谈不上优雅，可它是让新事物在旧世界里活下来最现实的办法。进化不讲美学，讲存活。

## 他赌对了第一类函数，赌错了双等号

十天里他做对的事，第一类函数排第一。这一点即使放到今天看，也是 JavaScript 能活下来的关键。因为在浏览器里，事件驱动是唯一可行的模型，而事件驱动离不开回调，回调离不开函数是值。

他做错的事，一部分是十天里被迫留下的，一部分是十天之后自己作的。

被迫留下的，是没有垃圾回收。他赶时间，只用了类似对象池的 arena 分配，内存用完就没了。后来发现有人写游戏、写事件驱动的分配，内存很快耗尽。他赶紧补了引用计数。但引用计数在 C 里手写，会溢出，会下溢。溢出就泄漏，下溢就释放了还在用的内存。而下溢直接意味着远程代码执行漏洞。攻击者往堆里塞满精心构造的字符串，伪造函数表，就能在用户打开一个网页的时候执行任意代码。这在 Netscape 2 发布之后立刻成了现实问题。

自己作的，是双等号。十天里他原本定的是：两个不同类型的对象比较，直接返回不相等。后来内部早期用户跑来说，能不能做隐式类型转换？数据库字段是字符串，数字得跟它比较。他当时想讨好用户、推动采用，就答应了。

> 当人们跑来跟你说，能不能把它做得更松一点，加个可爱的功能，答案应该是不。（布兰登·艾克）

这成了他二十多年被反复鞭尸的痛点。他自己引用的那句话是尼克劳斯·维尔特（Niklaus Wirth）说的：**设计的本质就是舍弃。**他当时没守住。

## Worse is better：为什么丑的东西赢了

理查德·加布里埃尔（Richard Gabriel）写过一篇著名文章叫《Worse is Better》，本来是拿 Unix 和 Lisp 做对比。MIT 那帮人觉得 Lisp 是法贝热彩蛋、是大教堂，贝尔实验室那帮人是新泽西的农夫，写出来的东西粗糙。结果农夫赢了。

艾克把这个逻辑搬到了整个 Web 上。HTML 不是严格的标记语言，它容错，能从小错误里恢复。XML 严格、纯粹、漂亮，但它永远没法接纳那些会打错字的普通用户。微软当年在 IE 里把 XML 硬塞进 HTML 的错误纠正器，做了个"杂种版"，反而让 XML 能用。纯粹的 XML 没有未来。

JavaScript 也是同一个逻辑。这门语言谈不上多漂亮。可它在正确的时间做了正确的事。艾克说得很直接：最好的语言未必是设计最漂亮的，能活下来的才算好。

> 我常说，另一个选项是根本不干这件事。我可以对 Netscape 说，这太赶了，我做不了。那这个位置就会被 Visual Basic Script 占掉，而且会很难看。（布兰登·艾克）

这就是他后来在标准委员会里待了二十年的心态。你没法回头改早期错误，因为 Web 兼容性是铁律。你只能往前加东西，把好的部分一点点补进去。生物学也是这么干的，你不会去改 ATP 代谢，你只会在上面叠新功能。

## 标准会议上的对手，后来成了同谋

1996 年，他们把 JavaScript 送进欧洲计算机制造商协会（ECMA）做标准化。选这个机构，是因为它此前逼微软把 Windows 3.1 的一部分 API 开放成标准，欧洲政府说，不开放标准我们就不用你的系统。这个机构有对付微软的经验。

但微软也派了人来，而且派了很强的人。第一版规范的初稿，很多是微软的肖恩·卡岑伯格（Sean Katzenberg）写的。还有 Sun 派来的盖伊·斯蒂尔（Guy Steele），一个人顶一群人。加布里埃尔也被拉来写了标准的第四节，一段介绍 JavaScript 是什么的文字。

名字是个麻烦。Java 是 Sun 的商标，Sun 的法务很凶，连姓"Jovanovic"、域名以 Java 开头的小公司都收到过警告信。所以标准名只能叫 ECMAScript。今天大家嘴上还是说 JavaScript，说版本号时才用 ES 加数字，而且这个数字和年份对不上，ES6 其实是 2015 年。

有一个细节很有人情味。有一次艾克修 bug 迟到，肖恩很生气。等他到了，两人同时看出规范里有个"栅栏柱错误"，也就是差一的那种边界错。四目相对，气就消了。标准会议上的敌人，很多时候也是同行。

## ES4 死了，但它的器官移植进了 ES6

1997 年，第一版标准在法国尼斯定稿。1999 年，第三版出来。之后 Netscape 被美国在线（AOL）收购，微软靠捆绑 IE 把浏览器市场吃干净，标准和实现都慢了下来。

2003 年前后，下一代的 JavaScript 设计被交给另一位 MIT 出身的人，这个人后来在 Google，设计了 Dart。他设计的东西太超前，只以变形的方式出现在微软的 ASP 服务器端和 Flash 的 ActionScript 3 里。

真正的转折是 ES4。这一版跟 Adobe 合作，想大规模改语言，加类、加类型、加模块。结果委员会分裂。一部分人说太大了，先做增量改进，不加新语法。于是 ES4 被搁置，2009 年先出了 ES5，一个较小的版本，加了严格模式，加了几个有用的 API。

但 ES4 里的好零件，后来都被拆下来装进了 ES6。2015 年，ES6 定稿，加上了类、模块、箭头函数、let 和 const、Promise。这一年，JavaScript 才真正长成一门能写大工程的语言。艾克说，他从 1996、1997 年就想加的那些函数式特性，等了将近二十年才补齐。

## TypeScript 是补丁，也是拥抱

TypeScript 是微软做的，负责人是安德斯·海尔斯伯格（Anders Hejlsberg），他此前做过 Turbo Pascal、Delphi、C#。TypeScript 是 JavaScript 的超集。最短的 JavaScript 程序，也是合法的 TypeScript 程序。你可以一个文件一个文件地加类型注解，逐步获得警告。

艾克对它的评价是：现在看是有益的。TypeScript 只在工具阶段做类型检查，不在运行时强制，这个取舍让它在现实里推得动。微软在标准委员会里得不断猜未来的语法走向，猜错了就得回头改。他觉得微软总体上还算守规矩，虽然 TypeScript 本身是微软的专有资产，不会交给标准组织。

框架生态是另一个话题。jQuery 当年之所以火，是因为原生 DOM API 太啰嗦。那些 API 是九十年代为 Java 和 JavaScript 一起设计的，面向对象、过程化、冗长，做一件小事要跳三段舞。jQuery 把它压成一行。后来标准委员会把这些能力吸收进 querySelector 之类的 API，jQuery 的历史使命就完成了一大半。

艾克的态度是：**框架里真正增加价值的那部分会留下，其余会死掉，这是好事。**一个健康的生态，靠的从来都是淘汰，保护落后只会让它变慢。

## 让虚幻引擎在浏览器里跑 30 帧

2012 年秋天，Mozilla 做了一个 Demo。2013 年 GDC 游戏开发者大会，他们把虚幻引擎（Unreal Engine）搬进了浏览器。没有插件，没有 Flash，没有 Java。现场的人看傻了。

这件事的技术路径叫 asm.js。它是一门"JavaScript 的子集"，没有新语法。类型是通过在支配节点位置上的强制转换来表达的，位运算符把双精度浮点当成整数用。编译器只要在合适的地方识别这些模式，就能把它当作有类型的代码来编译，线性时间，确定性性能，完全不碰垃圾回收器。

做这件事的人里，有 Alon Zakai，他做了 Emscripten，把 C 和 C++ 编译成 JavaScript；有戴夫·赫尔曼（Dave Herman），类型理论出身；有卢克·瓦格纳（Luke Wagner），编译器工程师。他们一起把艾克脑子里的想法变成了可执行的规范。

从 2015 年开始，这项工作演化成了 WebAssembly。它有自己的二进制语法，加载进同一个 JavaScript 虚拟机，跑同一套编译器阶段。两门源语言，一套执行环境。下载体积更小，解析更快，移动端尤其明显。

回头看，这一步很关键。在 asm.js 之前，很多人还在说 JavaScript 是玩具，要做重活得上 Google 的 Portable Native Client。可 PNaCl 本质上是把插件换了个包装，还是"新老板，旧老板"。asm.js 加上 WebGL 加上 Web Audio，才真正把 Flash 和 Java Applet 送进了历史。

## 上半场：Netscape 是怎么被碾碎的

1995 年 8 月 IPO 之后，Netscape 面对的是微软的全面碾压。微软在 1994 年底就想收购 Netscape，出价太低，被吉姆·巴克斯代尔（Jim Barksdale）和吉姆·克拉克赶了出去。之后微软决定复制。比尔·盖茨那封著名的"互联网浪潮"备忘录之后，整个公司掉头。

IE 的前几版很烂，第二版开始让人紧张，第三版能看出结局，第四版已经不错了。而且它随 Windows 免费送，这叫搭售，在反垄断法里是有明确说法的。Netscape 的销售负责人拉姆·施里拉姆（Ram Shriram）有一次接完电话脸色发白，因为一家公司说，微软刚通知他们，如果默认浏览器设成 Netscape，就断掉他们的 Windows 授权。

这类事在反垄断案里没被充分呈现，但它是当年真实发生的事情。

Netscape 自己也有问题。上市之后，管理层开始四处收购，想跟微软正面硬碰。收购通常不奏效，因为你把创始团队的热情耗掉了，又塞进来一批想"轮到我了"的新人，他们没做过浏览器，也不真正理解浏览器。Netscape 4 原本该是 3，一拖再拖，还先只在 Windows 上发。微软那边反而在进步，第四版做得相当可以，动态 HTML 的创新也是他们先推的。

微软最终被判垄断，但判决来得太晚。Netscape 早已经被收购，浏览器市场已经被吃干。

## Mozilla：一艘没有法人身份的逃生舱

艾克用《星球大战》里的比喻形容开源这件事。AOL 收购 Netscape 之后，高层说，咱们搞个开源的逃生舱吧，就像那艘救生艇，炮手不会开火，因为上面没有生命反应，不构成威胁。

1998 年，Mozilla 项目启动。表面上是把浏览器开源给全世界，实际操作起来极其困难。那套代码已经被乱改了好几年，是一团毛球。更要命的是加密模块，当年 SSL 属于"电子军火"，美国政府不允许出口 1024 位以上强度的实现。最后是两个澳大利亚人，蒂姆·哈德森（Tim Hudson）和埃里克·扬（Eric Young），把 OpenSSL 从美国商务部和国安局的管辖范围外塞回了 Mozilla 的代码库。艾克说，这大概是开源之后头几个月里最漂亮的一次 hack。

Mozilla 长期是一艘"没有法人身份的海盗船"。大部分人还是 Netscape 的员工，只是挂在另一个组织名下。第一任工程经理很快走了，艾克临时顶上，那是他第一次做管理。后来写开源许可证的律师米切尔·贝克（Mitchell Baker）休完产假回来，说要不我来管，艾克和杰米·扎温斯基（Jamie Zawinski）说好。

扎温斯基一年后走了，他觉得这个项目彻底失败，因为 Mozilla 没能重新点燃浏览器市场。艾克说，那本来就不可能。Netscape 还在卖基于老代码的产品，Mozilla 是在做一次推倒重来，它的目标落在社会层面，跟技术指标关系不大：给开发者一块干净的地。

他们的做法是：模块化代码库，用 XPCOM（一种开源的组件对象模型，带引用计数和虚函数表），用 JavaScript 去脚本化这些组件，用一门自定义的标记语言 XUL 来做可移植的界面，不用表格，不用 XML。戴夫·海厄特（Dave Hyatt）、乔·休伊特（Joe Hewitt）、布莱克·罗斯（Blake Ross）这些人陆续加入，罗斯当时还是个高中生实习生。

2001 年，Netscape 裁员，米切尔被裁掉了。但下一周 Mozilla 的社区电话会上，米切尔又出现了。艾克说，这件事说明，只要项目有足够的忠诚度，你可以超越公司和开源的边界。真正留在 Mozilla 的人，很多是从社区里长出来的，水平高于 Netscape 的平均招聘。**被裁掉的人第二天照样出现在社区会议里，这种结构在传统公司里根本不可能存在。**

## Phoenix 改名两次，最后叫 Firefox

2002 年 Mozilla 1.0 发布，艾克设计了类似今天六周一个版本的路线图。发布之后大家发现，这套东西其实不差。但整个套件太重，有邮件、有新闻组、有编辑器，还背着 AOL 的各种要求，工具栏上要放 AIM 按钮、要放 ICQ 按钮，越来越像一辆贴满赞助商贴纸的赛车。

于是有了一个新想法：只做浏览器。它更简单，只干一件事，剩下的靠扩展。海厄特和罗斯做了第一版，叫 Mozilla Browser。海厄特是真正的主力，他此前在苹果做过多卷的浮动窗口实现，是那种会把一件事迭代五遍、第五版才漂亮的人。他后来去了苹果，是 Safari 创始团队成员之一。

名字是个麻烦。先叫 Phoenix，结果有家公司叫 Phoenix Technologies，说不能用。改叫 Firebird，澳大利亚一个开源数据库项目用近乎《疯狂的麦克斯》的语气发来抗议。再改，就叫 Firefox，红熊猫的昵称。这次没人反对了，反而都很高兴。

2004 年 Firefox 发布。标签页、弹窗拦截、更好的 CSS 支持，用户第一次觉得浏览器可以是让人喜欢的东西。那一波还有 Web 2.0 的热潮，Gmail、Google Maps、Craigslist、维基百科都在同一时期起来，人们第一次意识到网页能做出这么复杂的交互，而支撑这一切的，是 JavaScript 加图片。

标签页这件事值得多说一句。微软后来有人私下承认，当年只要在 IE 里加上标签页和弹窗拦截，Firefox 根本长不起来。可他们没做。大公司动作慢，问题往往出在内部：一整条产品线、一整套考核、一堆既得利益绑在一起，改起来的成本比从零开始还高。

## 浏览器的钱从哪来：默认搜索引擎

这里有个很多人不知道的事实：Firefox 的主要收入来源，是把默认搜索引擎卖给 Google。2004 年前后，谢尔盖·布林派了一位工程师弗里茨·施耐德（Fritz Schneider）来接触 Mozilla，双方很快意识到，搜索和浏览器互相需要。

这个判断至今成立，这就是为什么几乎所有搜索引擎都想要自己的浏览器。默认设置本身就值钱。**用户很少改默认值，只要默认的那个东西不烂到让他动手。**

2014 年，Firefox2014 年，Firefox 把默认搜索从 Google 换成 Yahoo。当时玛丽莎·梅耶尔（Marissa Mayer）想重建搜索团队，但雅虎的搜索研究团队已经被裁光了，人去了 Google 和微软，拼不回来。接下来一年，流量持续流失，因为用户自己把默认改回去了。雅虎按合同付了固定费用，等于为留不住的流量买了单。

艾克从这个案例里提炼的东西很冷峻：默认值有商业价值，但这个价值有上限，它等于"用户懒得改"的那部分。一旦替代品明显更好，默认值撑不住。**所有靠默认值吃饭的生意，本质上都是在跟用户的耐心赛跑。**

## Chrome 的那张"悲伤标签页"

2006 年前后，Mozilla 这边已经知道 Google 在做自己的浏览器。有人看到过内测。那个版本还没有后来那种极快的 JavaScript 引擎，但它有一个东西：每个标签页跑在自己的操作系统进程里。

演示的方式很绝。他们打开一个带 Flash 的页面，Flash 崩了，按过去的经验整个浏览器会一起挂掉。结果只出现了一张小的悲伤脸，标签页还在，刷新一下就好了。这在当年是真正的安全进步。

2008 年 Chrome 发布。它起量很慢，Google 没有大规模预装，但它确实推动了整个行业重新加速。艾克说，真正让微软认真起来的，是 Chrome。微软后来做了 IE9，做了 Chakra 引擎，但为时已晚。

Firefox 的巅峰大约在 2011 年，之后因为 Chrome 开始下滑。这是浏览器战争的第二轮，胜负手依然是分发渠道和默认设置。

这里有个绕不开的结构性问题。Google 一边是 Firefox 的最大金主，一边在做自己的浏览器。这种关系维持了很多年。艾克后来回忆，他和拉里·佩奇聊过这件事，佩奇的态度很坦率：你别管 Firefox 了，你自己做一个浏览器吧，你可以有自己的一套想法。这话听着像建议，实际上也是宣判。**当你的收入来源同时在跟你竞争，你迟早得自己找活路。**

## Cookie 是怎么变成追踪工具的

Cookie 眼下的名声很坏，它被发明出来的时候跟追踪毫无关系。1994 年，一位 Netscape 工程师赶时间做出来的东西，目的是让用户不用每次翻页都重新登录。因为 HTTP 是无状态协议，你从登录确认页跳到账户页，如果没有 Cookie，你就得再登录一次。

但问题是，图片也是从服务器请求的。一张图片，可以来自完全不同的域名。请求会带上上一次的 Cookie，响应会更新 Cookie。于是只要页面里有图片加 Cookie，追踪就出现了。**一个 1x1 像素的图片，广告技术行业至今还在用"像素"这个词指代它，就能在《纽约时报》和 ESPN 之间认出你是同一个人。**

第一次访问时没有 Cookie，服务器给你分配一个编号，往数据库里写一条记录。之后你在别的网站再遇到同一个图片服务器，它带着编号回来，数据库继续更新。你被追踪了。这不是设计意图，等你意识到的时候已经来不及改。

再往后，JavaScript 也能做到同样的事。脚本可以发请求、带 Cookie、更新 Cookie，而且看不见。整个追踪经济就建立在这些 1990 年代的意外之上。

> 最后我只拿到几件 T 恤。就这么几件破 T 恤。（布兰登·艾克）

与此同时，靠这套机制长出来的是全世界最值钱的公司。

## Brave 想解决的具体问题

2015 年，艾克开始做 Brave。起点是一个很朴素的判断：既然第三方 Cookie、追踪脚本、恶意广告都是意外产生的、现在又不安全，浏览器就应该默认拦掉一部分。

难点在于区分第一方和第三方。这事没法靠"来自不同域名就拦"这种简单规则解决，很多出版商会用看似无关域名下的良性脚本。所以必须做人和机器结合的判断。Brave 从一开始就建了研究团队，用机器学习来驱动拦截规则。苹果差不多同期在做 ITP（智能追踪预防），也是本地机器学习。

苹果早期的策略是：如果用户从来没访问过某个第三方域名，就拦掉它的 Cookie。这在当年是真正的隐私进步。但它留了一个洞：只要你访问过一次那个域名，Cookie 就被放行。有一家广告技术公司就钻了这个洞，让广告点击先跳一下自己的域名，落地页之前顺手种一个第一方 Cookie，从此被白名单接纳。后来 Safari 补上了这个漏洞，Brave 也在持续迭代。

更难的是指纹识别。只要浏览器里每个站点能存一个 bit，32 个站点就是 32 bit，就是四十多亿个编号，足以给你做一个超级 Cookie。这种对抗没有终点，只能一直打下去。

速度是副产品，但非常实在。广告技术脚本造成的请求链，业内叫"程序化瀑布"，一个接一个。拦掉之后，Brave 比 Chrome 还快，省流量，省电，因为无线模块少跑了大量请求。

艾克在这里说了一句很实在的话：很多 Google 的工程师朋友跟他说，那些慢网站是网站自己的问题，他们会修的。他做了抽样，发现大部分网页就是这样。**Google 再强，也没法接管全世界所有出版方的技术栈。**他们试过 AMP，用搜索排名逼出版方就范，结果出版方普遍反感，因为它损害品牌，文章顶上是 Google 的域名和框架。

## 注意力代币：让用户拿七成

拦广告只是防守。艾克想的是重新接上那条断掉的线：品牌和代理商的钱，本来该到出版方手里，中间被抽走太多。

《卫报》做过一次实验，自己买自己的广告位，投放一英镑，最后到手 30 便士。中间商拿走了七成。而 App Store 的分成是三七开，平台拿三成。更早的电视时代，媒体方拿八成五。分成结构这些年彻底失衡了。

更糟的是欺诈。假的《纽约时报》页面被机器人点击，广告主付钱，钱到了假站点，真的《纽约时报》一分没有。而这一切都通过广告交易平台结算，平台照样收手续费。恶意软件也走同一条路，广告里塞进 JavaScript 加载器，落到正规出版方的页面上。

Brave 的方案是基本注意力代币（Basic Attention Token，BAT）：用户、创作者、广告主三方。广告目录每天固定，投放在浏览器本地用轻量机器学习匹配，**Brave 看不到你的历史、搜索、停留时长，这些数据不出设备。**广告主买的是匿名的注意力，你的身份不在交易里。广告收入的七成给用户，用户可以选择提现，也可以把它打赏给自己常看的站点和 YouTube 频道。

最早的原型跑在比特币上。2016 到 2017 年比特币拥堵，手续费高，用户买五美元的币要付四块五的手续费，体验很糟。后来换到以太坊，可以用智能合约。监管也随之而来：一旦涉及资金拆分和提现，就要满足了解你的客户（KYC）和反洗钱的要求。所以默认模式下，Brave 不知道用户是谁，只是把收入记在浏览器里，由用户决定流向；需要提现时才做身份验证。

这套机制如果只在一家浏览器里跑，价值有限。艾克的态度很明确：希望它能变成标准，在多个浏览器之间通用。广告匹配、盲签名验证曝光这些技术，本来就应该进标准。他甚至提到，Google 也在推所谓的"信任令牌"，底层是 David Chaum 的盲签名，只是不会用在广告确认上，因为那会动到自己的生意。

> 我们拿走三成，跟 App Store 的分成一样。如果我们做得更大，也许可以拿得更少。（布兰登·艾克）

## Google 的创新者困境

艾克对 Google 的处境有一个具体分析。Google 不推隐私优先，背后有它的结构性原因：这家公司被生态绑住了。大量出版方不 Technical，靠一堆广告技术供应商撑着收入，Google 如果一刀切掉这些脚本，等于砸掉自己服务的客户。

所以 Google 的做法是"隐私沙盒"、FLOC 这类方案，工程上很 Google，用差分隐私加噪声把你藏进人群。但差分隐私随着时间推移会被对抗性地剥离，噪声加得再多，长期看也能把你从人群里挑出来。艾克判断，这套东西很难让苹果、Brave、Mozilla 一起接受。

他也没有把话说死。他说如果 Google 聪明，可能会主动剥离 DoubleClick 之类的资产来换取监管上的缓和。反垄断在美国和欧洲都重新回到了桌面上。当年微软差点被拆分，法官托马斯·彭菲尔德·杰克逊（Thomas Penfield Jackson）没开听证会就直接下令，上诉法院把案子打回去，最后以和解收场。**反垄断真正的威力往往不在判决本身，而在它迫使公司花几年时间应付官司、错过窗口期。**微软就是在那些年里掉头回去做封闭的 Windows Vista，结果 Vista 彻底失败。

## 社交关系应该存在浏览器里

访谈里有一段很值得注意的构想。艾克说，社交网络本质上和搜索一样，是一个中心化的算法，帮你做朋友关系图上的传递闭包。可你的好友关系不该被某家公司拥有，你的帖子也不该。

他的设想是：浏览器能不能替你记住这些关系？能不能把 Facebook 和 Twitter 的朋友合并成一个视图？如果某天你在一个平台被封，朋友在另一个平台还能找到你，关系不会断。

浏览器本来就是唯一同时看到你所有在线活动的地方。问题在于，浏览器过去二十年被中心化的力量俘获了，主要途径就是搜索。拉里·佩奇很多年前就说过，用搜索意味着把查询交给我们，换取更好的结果。这个交换在早期是划算的，后来就未必。

他对平台封禁的态度很直接。Parler 被下架那次，他觉得处理得很双标：Twitter 上同样有大量威胁暴力的内容，为什么只有新来的被拔掉服务器？**有权力的一方选择性执法，看起来就像对冲基金做空 GameStop 一样难看。**

他也不回避另一面。平台如果完全不加管理，会被最恶劣的人占满，最后毁掉整个社区和生意。所以他想要的是"用户优先的辅助性原则"：让用户自己决定把哪些网络拼在一起，让封禁和迁移的成本降下来，而不是让一家公司替所有人决定谁能说话。

## 关于硅谷、关于死亡、关于遗产

访谈最后，莱克斯问了一个很轻也很重的问题：你创造了改变世界的东西，但人终有一死，你怎么看？

艾克说他不太想这事。他是罗马天主教徒，不怕死。他理解那些恐惧的人，可能缺一份超越性的信念，也可能没有孩子，或者到了某个年纪觉得自己错过了能做长久之事的机会。他引用泰伦提乌斯的那句话：我是人，凡是人的事，没有一件与我无关。

至于遗产，他说得很平淡。排在第一位的是孩子和孙辈。然后是 Web 标准，是 Firefox，是 Brave。他不愿意过度吹嘘 Brave，但他认为 Brave 证明了一件事，而且这件事会一直有意义。

> 你可以只有几个百分点，就能撬动整个市场。不需要所有人都跟着走。历史上真正推动改变的，从来都是少数人。（布兰登·艾克）

Firefox 证明了浏览器市场可以被重新打开，尽管当年所有人都说不可能。这件事比任何一个产品都重要，因为它说明**既得利益者不喜欢的事，仍然可以做成一两成。**

关于硅谷，他的判断是悲观的，也没有绝望到认为一切都结束了。他说这个地方曾经给年轻人自由，让他们敢想敢做，哪怕税高、房租贵、路修得一塌糊涂。现在的问题是，钱把价格推高，房价推高，政治上层层腐败，普通人正在往外走。远程办公可能让很多小型的"硅谷"分散出现，奥斯汀、迈阿密，或者别的地方。

他提到一个细节很有意思。疫情之后 Google 允许远程办公，员工很高兴，终于不用因为换组就搬家。但接着公司说，可以搬回中西部老家，薪水按当地生活成本重算。这个政策一旦推开，硅谷的高薪溢价就会慢慢摊平，人才会真正散出去。**远程办公最深远的影响，可能就是把地理套利从公司手里收回来，交还给个人。**

他讲到加州的另一个层面：基础设施的账早就欠下了。洛杉矶当年拆掉有轨电车，波音、通用汽车和石油公司一起把高速公路推成主角，地权走廊一旦没了就再也收不回来。今天想补，只能往地下挖，像马斯克在做的隧道。房子不够、路不够、山火年年烧，这些问题叠在一起，才是人往外走的真实推力。

他不认为这是文明的终点。美国的底色是一个商业共和国，本质上是十三个殖民地长起来的，很多东西是自下而上的。真正让这个国家特别的，是少数人可以用几个激进的想法改变社会，就像当年写代码改变世界一样。

## 给今天还想动手的人

整场访谈里，最实用的部分其实散落在各处。艾克反复回到同一个判断标准：这件事能不能让用户立刻看到结果，能不能在真实世界里活下来。

- **第一门语言学 JavaScript 还是 Python，取决于你想要什么反馈。**想要立刻看到画面、动画、能分享给别人玩的东西，选 JavaScript，它更容易让你爱上编程。想要被语法错误早点拦住、少踩隐式转换的坑，选 Python，它对初学者更严格。
- **至少学三到五门语言，按用途分。**动态语言做快速原型，C 或 Rust 做贴近硬件的高性能部分，Go 做服务端网络，Python 做机器学习里的线性代数和胶水。每门语言都是一件不同的工具，别指望一把锤子干完所有活。
- **如果你在做语言或 API 设计，早期用户求你"放松一点"的时候，先说不。**艾克的双等号就是反面教材。设计里最难的从来都是拒绝，加功能反而容易。
- **如果你想做产品，先想清楚分发。**技术再好，默认设置和入口决定了生死。Firefox 的收入靠默认搜索，IE 的胜利靠 Windows 预装，Chrome 的崛起靠 Google 的分发能力。这是结构问题，跟道德无关。
- **如果你想挑战巨头，别指望正面赢，去改默认值。**哪怕只有百分之几的用户选择你，只要他们把那几个百分点用在最关键的接口上，就能改变整个生态的成本结构。
- **隐私是一组默认值，没法单独购买。**普通人不必理解 Cookie 和指纹识别，只需要换一个默认就帮你挡掉的浏览器，然后打开看一眼，页面还能不能用。
- **想做开源项目，先想清楚法人结构。**Mozilla 头几年是没有法律实体的海盗船，靠的是社区忠诚度和一批愿意留下来的人。这种模式能撑住，但它脆弱，你得提前想好下一步。
- **想做出能活二十年的东西，先接受它会带着缺陷出生。**别指望第一版就漂亮。真正决定成败的是它能不能先上船、能不能持续改进、有没有人愿意为它留下来。

1995 年那十天里，一个从物理系叛逃出来的人，在赶工的间隙做了一个判断：函数应该是值，因为它得能被回调。这个判断的分量远超语法层面的漂亮，也远超他自己后来犯的所有错误。二十多年过去，那十天的代码还在全世界每一台设备的浏览器里跑着。

技术的历史，很多时候就是由几天、几个人、几个不肯妥协的小决定累积成的。这些决定当时看起来都像权宜之计，回头看，全成了分水岭。
