会写代码的法官
本文原载于 theVerge,作者 Sarah Jeong,由 ONES Piece 翻译计划 翻译。ONES Piece 是一个由 ONES Ventures 发起的非营利翻译计划,聚焦科技、创投和商业。
译者按:Waymo 和 Uber 的知识产权纠纷还在发酵,引发行业持续关注。但或许少有人知的是,审理该案的法官本人也是一位「技术宅」,写了几十年的程序,其对技术细节的熟悉程度甚至让很多科技公司的律师汗颜。在法律与科技越发紧密结合的今天,这位「极客法官」的经历不仅极富趣味,更是对两个行业从业者的一种鞭策:闭门专攻一门学科已经不够,唯有两者兼修,才能在未来的市场上立足。
2012 年 5 月 18 日,在加州北区的 William H. Alsup 法官主持的一次庭审中,甲骨文和 Google 的律师围绕着九行代码争论不休。甲骨文诉 Google 案(Oracle v. Google),一场关于 Google 是否抄袭了甲骨文的代码来开发 Android 系统的争议,正要结束第一次陪审团审理。
争议焦点集中在一个名为 rangeCheck
的函数上。在甲骨文测试的共计 1500 万行代码中,只有这一部分是「逐字逐句」抄袭的,每个字符都分毫不差。越是尽可能鼓吹 rangeCheck
的重要性,对甲骨文就越有利。甲骨文的律师 David Boies 于是开始主张 Google 抄袭了 rangeCheck
,目的是更快将 Android 推向市场。但 Alsup 法官对这个说法并不买账。
「判这个案子之前,我对 Java 一无所知,」这位法官说。「但是,我自己用很多其他语言编过程序,现在也还在编程。我写过一百多段 rangeCheck
这样的代码。这我都能做到。你也能。这太容易了。」
(甲骨文的律师试图继续发言,但只是让法官变得越来越不满)
这段不经意的评论像雪球一样,影响力越滚越大,以至失控。这让 Alsup 大为懊恼。它先是在律师和法律专业人士间被反复引述,然后又传到了科技媒体那里。每经过一次转述,Alsup 的技能就增长一分,直到最后他变成了「会 Java 的法官」——程序员 Alsup、黑袍加身的技术宅英雄、十倍速法官、「法庭和 Java 双料大师」。
Alsup 法官想让人们知道的是,他不懂 Java。
至少,他懂得不多。不过他确实会写代码。实际上,他已经用 BASIC 自娱自乐地写了几十年代码,包括一个写出来送给妻子的玩桥牌的程序,和一个自动给出桌游《珠机妙算》(Mastermind)解法的程序。
最花心思的,要数一个带图形界面的复杂多功能程序,用来方便他广泛爱好中的另一项——火腿电台(译注:指供业余无线电爱好者进行信息交换、技术实验、自我训练、个人娱乐、运动竞赛以及应急通信的一项使用无线电频率频谱的无线电业务)。
他的兴趣对法官工作大有帮助。是这份兴趣,使他形成了对面前这桩价值数十亿美元的知识产权案件的看法。科技公司的财富增减,全凭他的判决。甲骨文诉 Google 案对大公司和类似的小开发商将产生深远的间接影响,更遑论其九亿美元的争议标的。在正在审理的 Waymo 诉 Uber 案中,Alphabet 公司也是请求判决 Uber 赔偿数十亿美元,总额尚未确定。这笔钱的归属攸关 Uber 在新兴的自动驾驶汽车市场的存亡。
巧得很,这些要案都归到了可能是全美唯一能理解它们技术细节的法官——一位会写代码的法官的案头。Alsup 长年的兴趣给解决甲骨文诉 Google 案的核心问题带来了启发,而他在业余时间捣鼓摄影、镜头、光线学问的经历也为他审理 Waymo 诉 Uber 案提供了信息——该案涉及到一种名为 LIDAR 的基于激光为自动驾驶汽车提供导航的技术。
科技行业长期以来都对法律无法理解自己感到沮丧,而大多数司法系统正因如此难以跟上高速发展的步伐。那种认为法律永远不能「追上」科技的观念,一部分来自技术优越论(tech exceptionalism),即一种自由倾向的精英主义,嘲讽一切采用法律或规制形式介入技术发展的行为,将其比作纺织工人对织布机的抵制(Luddism)。但这种观念也来自对法律现状真实存在的不满。专利局被看作橡皮图章,为那些显而易见的技术颁发专利;最高法院的大法官似乎对编程的基本流程都感到困惑;还有律师让技术盲组成陪审团,他们做出了侵犯网上购物车专利的巨额赔偿判决。
在这样的背景下,Alsup 是一个异类——在「法律无法理解快速变化的科技行业」这一广为流传的经验面前,他成了一个谜一样的例外。但 Alsup 的秘诀也很简单:他当了一辈子的极客。
Alsup 在旧金山的律师中因为总是赶早而「臭名昭著」(而且还强迫出庭律师一起赶早)。早上九点,联邦法院大多数法官的房间还是一片漆黑、大门紧闭。但当我走到 Alsup 的房间时,发现大门敞开,忙碌的景象说明里边的人已经忙活几个钟头了。
Alsup 一头白发,戴矩形边框眼镜,操着一口温和的南方口音。虽然身型与常人无异,但他那强烈的存在感却给人居高临下的印象。
Alsup 的房间体现出很多法律从业者的传统审美:整架整架的皮面书、深色木墙板、一张大得吓人的桌子上挂着亚伯拉罕 · 林肯的小幅黑白像。另一头是一张沙发,上面扔了几个给狗玩的玩具。他经常带着上班的那只杰克罗素梗今天没在办公室。
法官请我在沙发上坐下,给我展示了他存在一台法院发的 2011 年款戴尔笔记本上的程序。他的台式机运行不了这些程序,他颇为恼火地告诉我,所以得留着这台戴尔。「这是最后一台支持 QuickBASIC 的机器,非常遗憾,我只懂这种语言。」
这位法官对硬件并不感冒。法院给他发什么电脑和手机,他就用什么。他用的是法院发的 iPhone,但他说,如果加州北区法院给他发一台 Android 手机,那他就会用 Android。
我问他能不能把他的代码发在 GitHub 上,结果他问我什么是 GitHub。作为替代,他递给了我打印版的程序代码,整整三叠纸,边角处装订整齐。他道歉说,最上面那叠有一些依赖程序没空打印出来。在成为审理硅谷案件的法官之前,Alsup 就是个特立独行的业余爱好者;他是个极客,不过是来自另一个时代的极客。
Alsup 于 1945 年出生在密西西比州的杰克逊市,父母都是德州乡下人——母亲是护士,父亲是土木工程师,从罗斯福时代的公共事业振兴署开始参加工作。
孩童时起,Alsup 就体现出他日后标志性的无拘无束的好奇心和技术天赋。他童年的大部分时间是和如今的奥本大学教授 Hubert Feild 一起度过的。两人从六岁起就成了朋友,一起堆过沙垒,埋过时间胶囊,放过用洗衣袋做的热气球,用晾衣夹发射过点燃的火柴(Alsup 的发明),还「用土块打过仗」(Feild 说,「不推荐这么玩」)。
「Bill 是个超级聪明的小孩,」Feild 说。Alsup 自从学了钢琴,因为不满意钢琴的声音,便把图钉摁进敲击琴弦的弦槌里。这番改动让琴声听起来好像是从消失已久的牛仔酒馆里传出来的。「我还留着 Bill 在他的『全新改进』版钢琴上弹经典歌曲(比如雷 · 查尔斯的作品)的录音,」Feild 说。
但最激发这两个男孩想象力的玩意儿还要数火腿电台。两人整小时地收听短波广播,还把一台天顶电子「跨洋」收音机(Zenith Transoceanic)的频段接到一个七寸的远距离接收天线上。他们调到遥远的电台,像莫斯科电台、基多电台、哈瓦那电台,但最多的时间还是花在收听业余操作员,也就是所谓「火腿」们的对话上。
「当我们听到来自美国各州和外国的『火腿』们的对话时,那感觉就像是在密西西比的边界外发现了『新世界』,」Feild 说。他曾亲耳听到高中就领到业余操作员执照的 Alsup 在自家卧室里和遥远的爱好者交流,有时用的还是摩斯电码。
(这是大约 1963 年,年轻的 Alsup 在火腿电台前)
「Bill 对我的人生影响很大,到现在还是,」Feild 说。「在过去的二十多年里,我每周六早上都用火腿电台和 Bill 聊天。」
高中毕业后,Alsup 进入了密西西比州立大学学习工程专业,立志像父亲一样成为土木工程师。但那是六十年代,民权运动正如日中天:他入校第一年就爆发了华盛顿大游行;大二那年,1964 人权法案又获得通过。
随着 Alsup 对更广泛的法律问题产生兴趣,他的目标明确起来。「我想成为另一个阿提克斯 · 芬奇(译注:《杀死一只知更鸟》中的律师父亲),」Alsup 告诉我。大学毕业后,他进入了哈佛法学院,随后成为最高法院大法官道格拉斯(William O. Douglas)的书记员。
他曾在密西西比州开业从事民权工作,但发现难以维持生计。最终,他和妻子在 1973 年迁到旧金山,多年间从事私人法律业务,同时在司法部工作。1999 年,他被比尔 · 克林顿总统任命为联邦法院法官。
Alsup 在加州北区律师圈中有着令人生畏的名声。他赶早的习惯是律师们的噩梦,要他们最早七点就开始提出动议;有时候,如果看到人都到齐,开庭时间可能更早。诉讼律师的时间被精确到分钟;他说什么时间,陪审团就得在那个点准时出去。
在甲骨文诉 Google 案的第二次开庭中,他拒绝律师在下午一点以后继续对施密特(Eric Schmidt)提问,即便这意味着这位 Alphabet 董事长第二天又得回到法庭。市值 5700 亿美元的大公司的生意要给陪审员让路,因为他们得去幼儿园接孩子,把晚饭端上桌,或者赶一趟回家的远途列车。「我知道证人很忙,」Alsup 说,「但陪审员们的时间现在更重要。」
他把自己法庭的温度维持得比法院别处冷得多;据传他把空调开大是为了让陪审员保持清醒。如果旁听席里有人咳嗽,Alsup 就会停下审理,找出是谁在咳嗽。人找出来以后,法官就掏出一颗止咳糖——这是他摆在椅子边为这种场合准备的,然后这颗让人难堪的止咳糖就从律师那一排一直传到旁听席上。如果那人还接着咳嗽,他就得离开法庭,越快、越安静,越好。
在陪审员关在合议室里听不见的时候,他对律师会很尖刻。但陪审员眼中的法官是一位爷爷般关切备至的南方绅士,他会花时间单独问候陪审员,感谢他们投入时间。
一次,甲骨文诉 Google 案中的一位陪审员在庭审中被蜜蜂蛰了,Alsup 就问她还能不能跟上庭审。听到她哼哼唧唧,法官说,「那我换种问法。你还能不能像被蜜蜂蛰之前那样清楚地理解现在的进程?」
「能,」她赶紧回答。
美国法律制度赋予律师很大程度上选择陪审员的权力。正因如此,即使是一桩发生在加州旧金山,这座科技之都的软件版权案件,陪审团里竟没有一个人有计算机行业从业经验。然而,律师决定不了自己会碰上什么法官。在科技业主导的加州北区,诉讼律师们已经明白,在 Alsup 法官面前,他们可占不到便宜。
(Alsup 法官 2012 年在甲骨文诉 Google 案意见中的代码样例)
甲骨文诉 Google 案是有关 Android 平台的一桩涉及面宽、影响力广的诉讼;对于本案,几十亿美元的标的只是诉讼可能带来的后果中最不重要的一个。
70 位著名程序员并不是无缘无故联名以「法庭之友」(译注:amicus curiae,指特殊案件中为法院提供中立建议之人)身份向联邦巡回法庭,后来又向最高法院提交《计算机科学概要》的。他们都是在担心甲骨文诉 Google 案对他们的职业可能造成的影响。
甲骨文在 2010 年就以多项专利权和版权主张起诉了 Google ,这些诉讼 2012 年在 Alsup 法官的审理下全部落败。但甲骨文上诉了,联邦巡回法庭改判其胜诉。当 Google 试图再次上诉时,最高法院拒绝审理这些案件,并将其发回地区法院,由 Alsup 法官重审。
本案是于 2016 年重新开庭审理的。和上一次一样,陪审团判决 Google 胜诉,而上诉案也又一次有待联邦巡回法庭作出判决。在七年的官司之后,本案此时已经归结为一个问题: Google 使用 37 行 Java API 的行为是否侵犯甲骨文的版权?
软件版权是个棘手的问题。如果争议的对象是音乐、电影、文学作品、绘画,甚至是印度瑜伽,判断是否抄袭都很容易。相反,软件版权却到很晚才以「文字作品」的形式被硬塞进原 1976 年《版权法》的 102(a) 节。
版权本意只保护独创性作品,其用途和功能则在所不问。因此,任何事物的功能性部分——人体模型、会计账簿、电脑程序菜单——都被排除在版权保护之外。
代码到底是有用的工具,还是一种独创性表达呢?从代码「表达含义」的层面看,它确实如艺术作品一样可以主张版权保护。想想那些嘴边挂着「优雅的代码」「差劲的代码」的程序员就能明白。但当代码被执行起来,用于操作机器人手臂拾起并拧紧螺丝时,似乎又完全是功能性的,这种东西因此也就不能以版权处理。
你没法给一个小便器申请版权,但小便器的塑像或许就可以申请。而代码,正如杜尚的著名作品一样,身兼两种属性。
「你会发现法院已经在这个问题上纠结了几十年,」康奈尔技术学院法学教授 James Grimmelmann 说,他曾经在微软当过程序员。「事实证明,要把软件切分成功能性或非功能性的部分是很难的,」他说,「这需要对软件内部的功能和含义有非常细致的理解。」
甲骨文诉 Google 案涉及的是软件的一个特定组成部分:程序编程界面(Application Programming Interface, API)。
API 是一组定义完整的交互,一种快速访问服务、库和其他功能的捷径。API 一直被比作包含了单词及其定义的词典,但 Public Knowledge(译注:华盛顿一家致力于知识产权、开放互联网等问题的非盈利公益组织)的一位高级律师 John Bergmayer 说,它们更类似于代词或习语。要说出语法正确的英语,你没必要懂得习语;但正如许多以英语为第二语言的学生所知,如果不懂习语,交流就会太花时间。
习语有时是一种俏皮的表达方式;但在特定的一群人中,习语用得越多,就越是完全成为一种简略的说话方式,用于省去详述所需的更多时间。类似地,API 也经常是常用或繁杂代码的凝练。
这正是甲骨文诉 Google 案的核心问题。《版权法》的 102(b) 段将「一切操作的概念、过程、程序、机制和方法」排除于版权保护之外。API 是操作的过程、机制或方法吗?或者,它是版权所保护的独创性表达吗?
Google 最初创造 Android 时,决定让它兼容 Java 这门流行的编程语言。用上了 Java, Android 就能利用现有的开发者社区,甚至可能利用他们现成的代码。任何人都可以用 Java 写程序,但 Java 语言的开发者 Sun 微系统公司牢牢把控着 Java 标准版(Java Standard Edition)和移动版(Java Mobile Edition),它们分别用来将 Java 代码部署在桌面电脑和手机上。
在与 Java 的授权谈判破裂后, Google 的一群工程师另起炉灶实现了 Java SE——这意味着一个拿不到源代码的团队以逆向工程的方式获取了代码。甲骨文在 2010 年收购了 Sun,几个月后,就以 Android 侵权为由起诉了 Google 。
Google 对 Java API 的重新实现几乎完全是从头来过的。但它与 Java SE 的 API 在声明代码——用来指明代码其余组成部分名称的代码——上是相同的。不仅如此,Google 实现方案的结构、排序和组织也与 Java SE 很类似。
这就要说到那著名的九行代码 rangeCheck
了。这段代码是被 Joshua Bloch 写进 Android 的;令人生疑的是,他之前在 Sun 微系统公司工作过,并且写出了 Java API 的很多部分。(Alsup 法官后来裁判称这只是个不幸的巧合。Bloch 在离开 Sun 加入 Google 后又继续为 Java 的开源实现 OpenJDK 贡献过代码,他的代码同时出现在 Android 和 Java SE 中是无意之举。)
为了和 Java 兼容,对特定 API 的特定调用必须在外观上相同。例如,在一组数中找出最大值的方法被命名为一目了然的 java.lang.Math.max
。甲骨文主张 Google 本可以把名字换成 java.lang.Arith.larger
。
Google 则主张,Java API 就好比是 QWERTY 的键盘布局,键盘确实可以换一种布局方式,但制造商必须生产 QWERTY 布局的键盘,因为人们已经习惯了。
编程语言是建立在其他语言的基础之上的,这就意味着其 API 看起来也很类似。Java 的正则表达式 API 是对 Perl 5 语言的重新实现,其字符串格式 API 则是对 C 语言的重新实现。
这正是程序员们对甲骨文诉 Google 案感到气愤的原因之一:阻止 Google 做一件别人都在做的事,是毫无道理的。
软件开发者的共识是,甲骨文错了,API 的本意就是拿来用的,阻止它们用途的行为违背了其本意。
的确,连甲骨文也很难坚持自己的立场。2015 年,甲骨文的一名公司证人在证词中说 Java API 和免费使用的 Java 语言是「不可分割」的。一顿午饭过后,他汗流浃背地收回了这段话。
2012 年,当甲骨文诉 Google 第一次开庭时,陪审团支持了 Google 的所有专利权主张,但版权问题则被分为两个部分。首先,甲骨文所主张的 API 部分能否被授予版权?如果能,Google 的行为是否构成合理使用?前一个问题取决于 Alsup 法官,后一个问题则由陪审团判断。
对于 Google 使用 Java API 的行为是不是合理使用,陪审团犹豫不决。但这似乎并不重要,因为 Alsup 法官判定甲骨文对其宣称的代码及其实现方法的结构、排序和组织并无版权。Google 没有侵权,因为它无权可侵。理由是,Alsup 法官总结道,API 实现代码的结构、排序和组织在本质上是功能性而不是独创性的。
在这样一个证人和律师费力解释 API,将其比作文件柜、电插座等一系列事物的案件中,Alsup 法官意见之细致和专业独树一帜。这份意见整页整页地描述了代码的运作方式,从源代码和目标代码的区别说起,再说到类、声明、头部、子程序、方法、接口、数据包,甚至还包括了代码实例。
很难想象一个没有 Alsup 这样长年编程经验的法官能给出这样一份意见。显然,在对 rangeCheck
这著名的九段代码做出判决的过程中,Alsup 的背景帮了他的忙。
「这种东西我用 QuickBASIC 写过好多遍了,」离那次庭审五年后,他说。(Alsup 法官用的是微软的 QuickBASIC,这是用于写 BASIC 语言的一个集成开发环境和编译器。)「如果你要我用 QuickBASIC 解决这个问题,我保证可以一个小时后带着一个能用的 QuickBASIC 模型来见你。」
交流过程中,Alsup 法官谈起甲骨文诉 Google 案很谨慎,因为联邦巡回法庭尚未作出第二次上诉的判决。但他似乎仍对甲骨文把抄袭 rangeCheck
代码称作「重大问题」感到恼火。他作为程序员的那一面或许多少对 rangeCheck
作者遇上的麻烦有些同情。Alsup 对此事感到十分困扰,以至于在法官意见中花了整整一节来阐述。「甲骨文过度强调了这段同时在 Android 和 Java 中出现的代码。该情形完全事出无心,却被甲骨文夸大了,故本庭将在下文阐述认定的事实,以便上诉庭参考。」(这九行代码再也没有在本案中被提起。)
如 Grimmelmann 所说,Alsup 在 2013 年对甲骨文诉 Google 案的意见,是司法机关有关软件版权问题「最详尽、最困难、最细致入微的一次参与」。他在自己的知产课堂上讲解甲骨文诉 Google 案。「这是对 Java 运行方式、源代码中不同部分的框架阐述。这已经不仅仅是就案判案了。这是一篇有教学意义的文章。」
多亏 Alsup 的意见之细致,他对 Java 和软件开发的理解有很大一部分被保留在了判例法中,将被传给年轻的未来法律人。这或许是这位程序员法官所做标志性判决最深远的印记——因为判决本身已经被彻底推翻了。
Alsup 在 2013 年对甲骨文诉 Google 案的判决几乎立刻被上诉。2014 年,联邦巡回上诉法庭作出了令人震惊的相反判决,该判决引发恼火的版权法学者写出了连篇累牍的法律评论文章。上诉法庭在判决中写道,甲骨文「对 Google 抄袭的 7000 行代码有无限多种选择和排列方式。」甲骨文不一定要把那个函数称作 java.lang.Math.max
。它的名字「想有多少就能有多少」,比如 Math.maximum
或者 Arith.larger
。
这说法听起来像是对代码一无所知。(在意见的另一部分中,法庭称,「 Google 完全可以开发自己的 API 包,然后『游说』程序员接纳它们。」)
Google 将联邦巡回法庭的判决上诉到最高法院,但最高法院拒绝审理本案。案件被发回到最初审理的地方:由旧金山的 Alsup 法官再次进行陪审团审理。2016 年 5 月 26 日,陪审团判决 Google 构成合理使用。
Google 或许胜诉了,但案件不但仍然悬而未决——甲骨文再次上诉到联邦巡回法院——其长期现实影响也尚不可知。何时可以、何时又不可以照搬声明代码,或是 API 的结构、序列、组织?陪审团的合理使用判决并未给出任何指导方针。
无论 Alsup 基于自己长年的 BASIC 编程经验,写出了多么有洞见、清晰的意见,它们都被上诉法庭彻底推翻、消失不见了。
(Sarah Jeong 摄 / The Verge)
Alsup 毫不羞于谈论自己的编程技能:「我确实觉得自己是个好程序员,你看我写的程序就知道了——因为我全都是自学的——这些 QuickBASIC 程序里有些很巧思的编程手法。」他补充说,「只可惜不是 Java。」
这位法官从 1985 年得到第一台电脑起就开始编程:那是一台旧型 IBM,后来被打发到他在优胜美地的牧场里的牛棚,一个黑乎乎、灰蒙蒙的角落里。这机器用的是 5.25 英寸软盘,没有硬盘。你可以买到带一个软驱的版本,也可以买到有两个软驱的版本。他和妻子买了豪华双驱动器版。
这台电脑随附了两本书,一本讲的是 DOS 操作系统,另一本讲的是 BASIC 语言。「有一次,我看到了那本 BASIC 书,决定学习一下。」他完全靠这本书自学,在他的回忆中,这本书「相当开门见山」。
他最开始写的程序是演示性的,用来做简单的算术。接着,他越写越复杂:一个可以算 21 点,一个用来玩七张牌扑克。这些程序都存在一张 5.25 寸软盘上,但 1988 年被他两岁的儿子用订书机弄坏了。
「他可自豪了,」Alsup 伤感地说。
(Alsup 的短波电台传送预测程序。Sarah Jeong 摄 / The Verge)
在写过的所有程序中,他最自豪的是一个短波传送预测器。他有理由为此自豪:这是一个相当复杂的软件,有多个依赖程序和复古的图形界面,显示着一幅根据你选择的起始位置显示的等距方位投影地图,辅之以展示太阳移动轨迹的彩色线条,以及 Alsup 从地图册上人工采编的详尽数据库。(他对自己在业余时间输入这些数据所花的大量时间十分自豪,这横跨他被美国总统任命为终身法官前后。)
通过计算给定两点的方位,这个程序能预测将他的火腿电台信号对准世界各地传送的最佳时刻,甚至能为他从全球选择的几个关键位置生成数据表格。
即使在他刚开始编程的 1995 年,市场上已经发售了类似的程序。但他说,「我就是想看看自己能不能做到,从中获得乐趣。」
他用自己的程序校准 Yaesu Mk V Field 收音机,和世界各地的朋友聊天,包括他的朋友「小」Feild,以及结交的远在日本和新西兰的操作员朋友。他至今还每个月花两小时操作电台,大多数都是在 Sierra 山脚下。他的呼号是 N6XMW,或者按他的说法,「November Six X-Ray Mike Whiskey」。
法官花了差不多一个小时向我解释这个程序,讲到了每一种可能改变短波传送的不同输入,以及背后的原理。随着他耐心解释起太阳波动、K 指标、电离层,这次采访变成了一次即兴物理讲座。
预测电台传送除了要考虑日期和时间,还要考虑大量持续波动、根据你的位置和目的地而变的变量。
当他输入这些变量后,敲击回车,电脑就开始了运算。「看,」他说。「它在思考呢。」
的确,电脑屏幕现在几乎一片空白,上面只有几个字,「正在思考……」
在这段长长的演示中,程序的确出过一次故障:一个依赖程序出错了,不知为何不让我在位置中输入纽约。「差劲,」他对自己嘟囔着。「好吧…… 是我弄糟了,」他对我承认。我们决定试试另外的位置,结果程序此后运行得都很流畅。
几十年间,Alsup 几乎是完全独自在编程,用书本自学、人工采编数据库。这与当代软件开发者的典型做法截然不同,后者的工作流程和习惯往往涉及一个更大的社区。Alsup 不用 Google 搜答案,不逛 StackExchange,也不用现成的库。他的每行代码都是从头写起的。
实际上,Alsup 和当代开发者的文化和社区最近的一次接触,似乎就是因甲骨文诉 Google 案引发的。
在第二次审理的一段著名对话中,前 Sun 公司 CEO Jonathan Schwartz 试图向陪审团解释免费软件和开源软件。他先讲了 GNU,一个整合在 Linux 中的项目,可以粗略描述为一个操作系统加上相关的软件套件。
「GNU 指的是什么?」Alsup 打断他的话问道。
「GNU is Not Unix,」Schwartz 说。
「G 指的是 GNU?」
Schwartz 说是的。
「这根本说不通,」法官说。法庭中响起一些笑声。但这远比不上事后 Twitter 上的骚动——全世界成百上千的技术宅都忍俊不禁。(我后来甚至看到一幅描绘这番对话的网络漫画。)
GNU 是一个递归式缩写,意思是它自己在全称中提到自己,无限循环——这在电脑程序中是常见的做法。程序中有大把的递归缩写,包括 PHP(PHP: Hypertext Processor)、cURL(cURL URL Request Library),以及民间戏传的 Bing 搜索引擎(Bing Is Not Google)。这都是些不怀好意的笑话,是一种封闭文化戏弄外行的标志,它根本没想过得跟法庭解释自己的含义。
而即便 Alsup 写了这么多年程序,他也直到那时才知道 GNU 指的是什么。我问起这件事时,他显得有些懊恼。显然,他的一个工程师朋友(他的远足野营伙伴之一)拿他对 GNU 的评论寻开心了。「我以前不知道这个定义是递归的,」Alsup 说。「当别人解释给我听的时候,我想的是,『好吧,挺可爱的。』」
电脑编程近年来的变动让 Alsup 不那么容易坚持自己的爱好了。几年前,他试图学习 Python,但最终搁置一边,因为他「太忙了」,或许是因为身为联邦法官的日常工作。微软后来不再在 Windows 中同捆 QuickBASIC,这让 Alsup 没法在新电脑上跑自己写的程序。
这件事本身就很有诗意:一位法官审理着有关兼容性的要案,现在自己成为了兼容性问题的受害者。
(Sarah Jeong 摄 / The Verge)
十二月,Alsup 将审理 Waymo 诉 Uber 案,该案涉及数十亿美元,Uber 被诉盗窃 Alphabet 子公司的汽车自动驾驶技术知识产权。与甲骨文诉 Google 案不同,Waymo 案并不触及知识产权法的核心原则,但其结果将永远改变这个行业的面貌。
在我们的对话中,Alsup 非常小心地回避了还在进行中的 Waymo 案。但他对围绕着这个案子的科学原理兴趣浓厚。这一回,跟 Waymo 诉 Uber 案最相关的大概是他对摄影和光学的兴趣。三月份,Alsup 要求原被告各列举关于 LIDAR 这一本案争议的自动驾驶车激光检测系统的一本书或一篇论文,这样他就可以找来看。但他也在一则法庭命令中严厉告诫双方不要看轻他。
请注意本庭已经熟知有关透镜的基本光线和光学原理,如焦距,焦点(即物体在透镜后光屏上聚焦的位置)与物距呈非线性函数关系,以及镜片在聚焦和投影上的用途。
因此,最有用的材料应是关于在自动驾驶汽车上适用 LIDAR 的论文,包括在透镜后如何放置发光二极管以获取最佳整体效果,以及如何用单镜头同时向外投射光线并将传入的反射光线聚焦。(当然,也包括本案的专利。)
Alsup 还要求双方律师就 LIDAR 进行讲解。他在很多案件中都如此要求。他很享受这些讲解,他告诉我,而且听得很认真。然而,他还是怀疑在很多案件中,他对技术的理解比律师还要深入。
他记得有很多次怀疑律师试图压制他,结果都栽在他的工程师背景和毒舌上。跟所有极客一样,他对任何有混淆技术之虞的行为都心怀不满。
在大约十年前的一个涉及 FastTrak(湾区一种过桥收费自动追踪设备)专利的案子中,双方就如何解释该专利的技术方面达成了一个有法律约束力的协议。但 Alsup 法官没有盲目认同这番约定,而是自己钻研了专利,得出的结论是它们的约定毫无意义。
「我知道那个技术是什么,也告诉了它们。然后我写了一道命令,说明我拒绝接受这个约定,以及真正含义应该是什么。他们后来都认同了我的观点。」
没过多久,双方和解结案。
「我猜他们会觉得法官疯了。」
在 Waymo 案中,Alsup 对律师的不留情面展现得淋漓尽致。这或许是源于他对 Alphabet 和 Uber 烧了数百万美元雇佣业内最好的律师的行为极不赞同。过去,他从不掩饰对公司在法庭上烧钱行为的厌恶。在甲骨文诉 Google 案的一场预审中,他打断说,「你知道你们争论一个账单会耽误我处理多少社保请求吗?」
他还特别在 Waymo 案中动用媒体来审查两家公司在法庭上的行为,要求记者留意哪一方在陪审团决策过程中试图用技术障碍摆脱陪审员。与此同时,Alphabet 甚至 Lyft 都要求部分审理过程不向媒体开放,称这可能将值钱的交易机密公之于众。
此后,一群媒体(包括 The Verge 的母公司 Vox Media)介入本案,要求保持庭审开放。虽然案件的部分环节——确实涉及一定数量交易机密的部分——将维持保密,Alsup 仍坚持媒体有尽可能大的知情权。
一次庭审中,Uber 的律师要求闭门开庭,让审理情况对公众封闭。但庭审一开始,Alsup 法官就认定这是越权行为,是出于难堪而拿秘密当借口,而不是出于合法的理由。
「听着,别再跟我玩这套了,」他说。「这样你们双方都会上负面报道,我可阻止不了。公众有知情权,」随后就是 Alsup 招牌的转折,「实际上,这不是有全程笔录吗?我会把它公开。」
(2017 年 3 月 26 日 Waymo 诉 Uber 案笔录节选)
1999 年起,Alsup 就开始将他的案件分给两个书记员,他分别称作刑事部和知产部。放不进这两类的案件,工作就平均分配。
这些日子,他往往为知产部寻找一些有理工科(STEM)背景的书记员。这么做不是必要的,但能帮上忙。审理甲骨文诉 Google 案期间的知产部书记员 Bill Toth 没有理工科背景,但他告诉我,法官特地要求他在准备上岗时修一门计算机科学课程。
当我向 Alsup 求证此事时,他微微一笑——他不记得「强迫」Toth 选修任何课程——但他承认有时会提前告诉书记员会碰上什么类型的案子,以及提前上什么课会派得上用场。
Bill Toth 现在在为联邦巡回法庭的 Sharon Prost 首席法官做书记员。当然,他不能再处理甲骨文诉 Google 案的工作;这会构成利益冲突。
但 Toth 属于新生代法律人的一份子,他们将逐渐代表法律职业中的更大比重。尽管 Toth 在法律之前主修宗教,他却是个彻头彻尾的程序员。「我写些代码来自娱自乐,」Toth 告诉我。
「过去三四年我都参加了 Google Code Jam 竞赛(不是特别当真),写的是 Java。我记得除了一次都过了资质轮,而且每次参加肯定都学到很多。」除了 Alsup 让他上的计算机科学课,在给 Alsup 当书记员之前,他已经学了 HTML、Javascript、CSS、BASIC,以及「一点点」Python 和 Perl。Toth 不愿意说自己的编程技能是否在甲骨文诉 Google 案的工作中发挥了作用,但我很难想象这会没有用。
科技社群固执地相信,法律永远不会理解自己在做什么。显然,上级法院对甲骨文诉 Google 案的判决无助于驱散这种观念。然而,Alsup 的存在本身就是对这种观念的挑战:一位 72 岁的前工科生,几十年来一直独自兴高采烈地玩转 BASIC,摆弄电台和相机,将自己所知所学教给书记员和各路记者。
在甲骨文案意见中,Alsup 向联邦巡回法庭解释软件概念时的耐心和细致,一如向我解释电离层时那样。他的解释是如此精准、专业,巡回法庭因而不得不对软件开发投入更多关注。无论巡回法庭最终判决如何,Alsup 对软件理解的很大部分在上诉判例法中得以保留。
他的观点如今在法学院的知识产权课堂上被教授。随着科技领域吸引到越来越多的资金,专攻于此的法律人不断涌现,以填补需求。他们中的很多人将会在培养过程中接触到 Alsup 的细致教导——大多数是通过书本,少数的幸运者还能亲耳聆教。
在我结束采访、离开法院的几个小时后,Alsup 发给我一封题为《找到 bug 了》的邮件,告诉我他找出了演示短波电台传送程序时的故障所在。「我之前不记得为什么把一行关键代码注释掉了。现在我让它重新生效就没问题了,」他写道。
我回想起在他办公室里的最后一段时间。那时我正把录音笔和笔记本收进包里,喊了他一声「极客法官」。结果,他看起来很困惑,问我,「那是件好事儿吗?」
听到我肯定地说是,他报之以咧嘴一笑。「在我那会儿,极客可不是什么你会想当的角色。」
你也许感兴趣的:
- 我的开源代码被大公司盗用后:有人承认,有人让我滚
- 土豆网使用人人影视字幕需要取得授权吗?
- 【外评】电脑从哪里获取时间?
- 【外评】为什么 Stack Overflow 正在消失?
- Android 全力押注 Rust,Linux 却在原地踏步?谷歌:用 Rust 重写固件太简单了!
- 【外评】哪些开源项目被广泛使用,但仅由少数人维护?
- 【外评】好的重构与不好的重构
- C 语言老将从中作梗,Rust for Linux 项目内讧升级!核心维护者愤然离职:不受尊重、热情被消耗光
- 【外评】代码审查反模式
- 我受够了维护 AI 生成的代码
你对本文的反应是: