api不应该享有版权

2014年12月16日

上个月,电子前沿基金会(EFF)向美国最高法院提交了法庭之友简报,要求法官复审下级法院早些时候的一项裁决,该裁决允许api(应用程序编程接口)具有版权。我是签署了这份文件的77位软件专业人士之一,尽管我对包括Abelson & Sussman、Aho & Ullman、Josh Bloch、Fred Brooks、Vint Cerf、Peter Deutsch、Mitch Kapor、Alan Kay、Brian Kernighan、Barbara Liskov、Guido van Rossum、Bruce Schneier和Ken Thompson在内的一群人感到有些害怕。

最初的诉讼是由Oracle对谷歌提起的,声称Oracle拥有Java api的版权,而谷歌在构建Android时侵犯了这些api。我在这份简报中的支持与这两家科技巨头之间争端的细节无关,而是与知识产权法应该如何适用于软件,特别是软件界面的问题有关。

我并不是那种认为软件中没有任何东西应该是知识产权的人。而我确实认为软件专利本质上是被破坏的在美国,版权是一种很好的机制,它允许软件作者在一定程度上控制他们辛勤工作的结果。

软件一直是一个棘手的收入来源,因为复制是微不足道的。版权至少为控制某些复制提供了法律依据。没有这样的东西,人们很难在创造东西的同时还能偿还贷款。虽然我们都喜欢免费的东西,但我认为给人们提供从他们所做的工作中谋生的机会才是公平的。

但任何知识产权机制都必须在这种好处与过度的知识产权限制可能阻碍进一步创新(无论是扩展一项发明,还是重新构想一项创造性工作)的危险之间取得平衡。因此,专利和版权制度有某种形式的内在限制。一个限制是时间:专利和版权过期(尽管米老鼠不连续威胁)。

接口是事物连接在一起的方式。现实世界中的一个例子是镜头可互换的相机。许多相机制造商不鼓励其他公司为他们的相机生产镜头,但这类第三方公司可以对界面的工作原理进行逆向工程,制造一个可以安装在相机上的镜头。我们经常看到这种情况发生在第三方部件供应商身上——这些第三方提供了大量的低成本和主要公司不支持的功能。我在佳能相机上使用的是Sigma镜头,因为佳能(当时)不生产18-200mm镜头。我为相机买了第三方电池,因为它们更便宜。类似地,我又用第三方零件修理了我的汽车,以降低成本或得到一个更好地匹配我的需求的音频系统。

软件接口是非常相似的,扩展开放接口或逆向工程接口的能力在推进软件系统方面发挥了重要作用。开放的界面是互联网发展的重要组成部分,没有人需要支付版权许可证来建立一个HTTP服务器,或者连接一个。Unix风格的操作系统的发展很大程度上依赖于这样一个事实:尽管AT&T的Unix的许多源代码是有版权保护的,但界面却没有。这使得BSD和Linux等分支可以遵循Unix的接口,这有助于这些开源系统通过使构建在Unix之上的程序更容易地与新的实现交互而获得吸引力。

SMB和Samba的故事是一个很好的例子,说明了非版权api是如何激发竞争的。当Windows成为主导桌面操作系统时,它的SMB协议主导了简单网络。如果非windows计算机想要与占主导地位的windows平台有效地通信,它们需要与SMB对话。微软没有提供任何文档来帮助竞争对手做到这一点,因为无法与SMB进行通信是竞争对手的一个障碍。然而,Andrew Tridgell能够推断SMB的规范并构建Unix的实现,称为Samba。通过使用Samba,非windows计算机可以在网络上协作,从而鼓励来自Mac和Linux系统的竞争。几年前,IBM的BIOS也发生了类似的情况,它是由竞争对手反向设计的。

自由市场体系的力量来自于竞争,如果我能找到一种比当地面包师更便宜或更美味的面包烘焙方法,我就可以开一家面包房,与他们竞争。随着时间的推移,我的小面包房可以成长并与最大的面包房竞争。要做到这一点,至关重要的是,我们要构建市场,使主导市场的现有参与者不能设置障碍,阻止新人们带着创新来降低成本或提高质量。

软件界面是软件实现这一点的关键。通过保持界面的开放性,我们鼓励软件系统的竞争市场,鼓励创新以提供更多的功能和降低成本。关闭它将导致互不兼容的计算机系统孤岛,无法通信。

这种不相容的孤岛对新竞争者构成了相当大的障碍,单就这个原因来说就很糟糕。但它们也对用户有害。用户看重能够协同工作的软件,即使不同的软件供应商对交流不感兴趣,我们也应该鼓励其他供应商介入并填补空白。将系统捆绑在一起需要开放的接口,这样集成商就可以安全地实现一个接口,以创建通信链接。我们重视物理世界中的标准连接器,虽然软件连接往往太过多样化,以至于无法标准化,但我们不应该使用版权法来增加进一步的障碍。

实现接口的需要也远不止于此。作为程序员,为了完成我们的工作,我们经常必须实现定义在代码库之外的接口。必须修改用一个库编写的软件以使其与另一个库协同工作是很常见的—一种有用的方法就是编写适配器通过转发第二个库来实现第一个库的接口。实现接口在测试中也很重要,因为它允许您创建测试双打

因此,为了我们能够正确地编写程序,为了我们的用户希望软件协同工作,也为了社会希望自由市场刺激竞争,版权不应该被用于api。

附录:最高法院裁决

该案件被提交至最高法院,最高法院于2021年4月5日裁定谷歌胜诉。在这一裁决中,他们没有说明API是否具有版权,而是规定谷歌重新实现API的行为是公平使用。

在上面的文章中我并没有考虑到“合理使用”,但在我看来,这似乎是一种构建情境的有效方式,以这种方式处理api可以避免api版权问题。

意见书开头的四页摘要是对论证逻辑的一个相当清晰的解释。


确认

Derek Hammer指出,为适配器和测试实现接口是编程的常规部分。Andy Slocum, Jason Pfetcher, Jonathan Reyes, Josh Bloch和Michael Barclay评论了这篇文章的草稿。特别感谢乔希·布洛赫帮助组织我们77个人签署了这份简报。

重大修改

2021年4月08:添加附件

2014年12月16日:第一次出版