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 对 Google 提起的,声称 Oracle 对 Java API 拥有版权,并且 Google 在构建 Android 时侵犯了这些 API。我在这份简报中的支持与这两家科技巨头之间争端的细节无关,而是与知识产权法如何适用于软件,特别是软件接口的问题有关。

我不是那些断言软件中没有任何东西应该成为知识产权的人之一。虽然我认为 软件专利本质上是错误的,但版权是一种很好的机制,可以让软件作者对其辛勤劳动的成果拥有某种程度的控制权。

软件一直以来都是一个棘手的收入来源,因为它很容易复制。版权为控制至少一些复制行为提供了法律依据。如果没有类似的东西,人们就很难从事创造性工作并仍然能够支付抵押贷款。虽然我们都喜欢免费的东西,但我认为让人们有机会从他们的工作中谋生是公平的。

但是,任何知识产权机制都必须在这一益处与过度知识产权限制可能阻碍进一步创新的风险之间取得平衡,无论是扩展发明还是重新构想创意作品。因此,专利和版权制度都包含某种形式的限制。其中一项限制是时间限制:专利和版权会过期(尽管 米老鼠断裂 正在威胁到这一点)。

接口是事物如何连接在一起的方式。来自物理世界的例子是带有可互换镜头的相机。许多相机制造商不鼓励其他公司为他们的相机生产镜头,但这些第三方公司可以反向工程接口的工作原理并制造一个可以安装在相机上的镜头。我们经常看到这种情况发生在第三方零件供应商身上——这些第三方供应商在很大程度上提供了主要公司不支持的更低成本和功能。我用我的佳能相机使用了一个 Sigma 镜头,因为佳能当时没有生产 18-200mm 镜头。我购买了相机的第三方电池,因为它们更便宜。同样,我也用第三方零件修理了我的汽车,以降低成本或获得更符合我需求的音响系统。

软件接口非常相似,扩展开放接口或反向工程接口的能力在推动软件系统发展方面发挥了重要作用。开放接口是允许互联网发展的重要组成部分,没有人需要支付版权许可费来构建 HTTP 服务器,也不需要连接到 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 上,该 BIOS 被竞争对手反向工程。

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

软件接口对于软件来说是至关重要的点。通过保持接口开放,我们鼓励一个竞争激烈的软件系统市场,这些系统鼓励创新以提供更多功能并降低成本。关闭这一点会导致无法通信的计算机系统的不兼容岛屿。

这种不兼容的岛屿对新的竞争者来说是一个相当大的障碍,仅凭这一点就不好。但它们对用户来说也不好。用户重视可以协同工作的软件,即使各种软件供应商对通信不感兴趣,我们也应该鼓励其他供应商介入并填补空白。将系统绑定在一起需要开放接口,以便集成商可以安全地实现接口以创建通信链接。我们在物理世界中重视标准连接器,虽然软件连接通常过于多样化而无法标准化,但我们不应该使用版权法来增加更多障碍。

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

因此,为了我们编写程序的能力,为了我们的用户希望软件协同工作,为了社会希望自由市场激发竞争——版权不应该用于 API。

附录:最高法院的裁决

该案最终上诉至最高法院,最高法院于 2021 年 4 月 5 日裁决支持 Google。在这一裁决中,他们没有讨论 API 是否可以受版权保护,而是裁决 Google 重新实现 API 的行为属于合理使用。

我在上面的文章中没有考虑合理使用,但在我看来,这似乎是一种有效的框架,以这种方式对待 API 可以避免版权 API 所带来的问题。

意见开头四页的摘要 对论点的逻辑进行了相当清晰的解释。


致谢

Derek Hammer 指出,为适配器和测试实现接口是编程的常规部分。Andy Slocum、Jason Pfetcher、Jonathan Reyes、Josh Bloch 和 Michael Barclay 对本文的草稿提出了意见。特别感谢 Josh Bloch 帮助组织了签署该简报的 77 人。

重大修订

2021 年 4 月 8 日:添加了附录

2014 年 12 月 16 日:首次发布