`
yantaoliu2006
  • 浏览: 92405 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

亲爱的Oracle: Java API不是艺术品

 
阅读更多

Oracle曾经说Java API就像是优美的画作。Google却说API就是文件柜里的文件。最后,William Alsup(负责审理Oracle和Google关于Java纠纷的法官)比较同意Google的观点,Java作为一门编程语言,其API就像是图书馆里的藏书一样。

 

“Java里的包(package)就像是图书馆的书架一样”,Alsup法官在他最近一周的所作出的广受关注的裁定中这样写道,该裁定正是针对Google和Oracle关于Java API的漫长的法律诉讼所作出的,“每一个类(Class)就像是书架上的一本书,类中的每一个方法(Method)就像是书中的‘阅读指南’章节。程序员的工作,就是前往正确的书架,选择正确的书,打开这本书,找到所需要的章节。”
bookshelf

Alsup法官的基本观点是:库文件的组织形式并不受制于版权。是的!他明确地表达了这个观点:书是有版权的,但是你在书架上怎么放书,按什么顺序放,这跟版权一点儿关系都没有。

换句话说,Google复制了37个Java API,用以构建其Android手机操作系统,这一行为并不侵犯Oracle的版权。尽管Google照搬了这些API的组织形式,但Google自行构建了代码,至少是绝大多数自行构建的。“Java和Android的类库在组成形式上大致相同,基本上提供了相同的功能,解决相同的问题,不过Google对这些功能函数都做了自己的实现,这些实现和Oracle所属的Java是不一样的。”

亲爱的Oracle: Java API不是艺术品
Google和Oracle关于Android是否侵犯Java版权开展诉讼  

根据这一裁定,Alsup法官终结了这场关于Google Android系统侵权使用Java的诉讼,该诉讼长达六周之久。Oracle于2010年控告Google非法侵占了Java的版权和专利权,并企图通过该诉讼在Google Android系统的巨额利润中分得一杯羹。不过,依照Alsup法官的裁决,数据库巨头Oracle这次要一无所获了。Oralce已经表明了对此案上诉的态度。

如果Alsup做出相反的判决,那么Oracle很可能会引发一场‘令人难以想象’的灾难,还好法官没有这么做。Bret Bocchieri表达了这样的观点,他是来自一家名为Seyfarth Shaw LLP的国际法律公司的知识产权专家律师。

更重要的是,Alsup法官的裁决让全世界范围内的软件公司和独立开发者们都松了一口气。在软件世界里,复用API是非常普遍的行为。例如,一些云计算平台,就模仿了Amazon所拥有的著名的云计算架构ECC(Elastic Compute Cloud)的API形式。API是应用程序的可编程接口,是不同软件之间交互的重要方式,行业内普遍默认对接口的组织和使用并不会触犯到版权保护法律。Oracle对这个默认规则的挑衅,至少在业界引发了巨大的争议。周四,Alsup法官的裁定结束了这些纷争。

“如果Oracle的观点得到认同,那么着就意味着任何人都能给自己实现的系统或功能加上版权,同时,他还能够根据版权的保护条例禁止其他任何人用他们自己的方式实现跟你的系统和功能相同的软件。(也就是说,这种软件只能有版权的人做,其他人会做都不能做——译者注)”在法官的41页的简报里,他写到:“没有任何理由可以支持这种极端的提议。”

亲爱的Oracle: Java API不是艺术品
Alsup法官 为了审案甚至亲自学习了Java编程
 
Ed Walsh,一位来自于Wolf Greenfield国际法公司的律师,表示他对这样的裁定并不感到惊讶。但是他同时也指出,这个裁定并不意味着从此以后API就不受版权的约束了。Walsh认为,Alsup法官部分出于Sun公司的原因,帮了Google一把,允许Google复制API。Sun公司才是Java真正的创始者,后被Oracle收购,而后Oracle才取得了Java的版权并起诉Google.

“我认为有一些因素对裁定结果产生了影响,那就是Sun公司原先是允许人们随意使用Java的”,Walsh说,“所以Oracle不能用版权去限制这些本来就已经开放的事物。”

Catherine Lacavera, Google的诉讼代表,也表达了同样的观点。“这个判决重申了我们长期以来对法律的理解,这些API是可以被所有人自由使用的,正如我们使用它一样,我们采用了这些功能的声明,并自己独立实现这些声明所包含的功能代码。”,她说,“这就是开发者使用Java的正常模式,你不能说,一种语言是可以自由使用的,然后又禁止人们使用这种语言的名词或者动词。”

Alsup法官则考虑得更细,他使用了大量的细节来描述什么是Java API以及在法律范围内这些API应当如何对待。他所提出的图书馆的比喻非常经典。但是他可不是仅仅停留在比喻的层面上。他似乎真的理解什么是API.他也很清楚复制一个接口(Interface)和复制实现接口的代码,这两个概念是有区别的。

“每个成员方法(Method)和类(Class)都是用来实现特定的功能的,因此,‘声明’(或者说‘头文件’)所包含的代码必须和实现功能的代码一致”,Alsup法官在做出图书馆的比喻后还这样说过。

2008年时,Java共包括166个API, 涉及到该600个类,6000多个方法。 Google复制37个API包(package)的名称和操作方式,但是Google用自己的代码对这些方法和类进行了实现。

在诉讼中,Oracle的法律顾问Mike Jacobs常说,构建API就像是进行交响乐创作,或者是,是的,就像是绘制一幅优美的画作一样。Alsup法官当然意识到了开发API是一种创作性行为。但是他也为这种行为加上了概念性的级别,API这样的发明只能由专利权来保护(而不是知识产权)。Oralce当然也从专利权的角度进行过诉讼,但是同样没有成功。

Java依赖一种特殊的“词汇表”一样的组织形式,称之为“方法规格说明书(method specification)”,程序员这通过这个说明书告诉计算机需要做什么事情。Alsup法官表示,根据美国版权法案,无论“方法规格说明书”是如何地有创意,任何人——包括Google——都有权利使用相同的“方法规格说明书”,只要他们对“方法规格说明书”中定义的方法的实现代码不同。“方法规格说明只是一种‘概念’,方法本身的实现才是具体的表达。法律不能让任何人对‘概念’进行垄断”。Alsup法官如此写道。

法官说,目前还没有哪个上诉法庭或者地区法院对API受版权保护一事做出裁决。但是他也的确参照了其他的案例进行判决,包括1879年最高法院裁定Baker针对Seldon的诉讼——这是一场讨论关于会计技能是否受版权限制的官司。法院最后裁定会计记账方法学只受专利权的约束,而不受版权的约束,因为一旦判决其受版权法约束,将会“极大挫伤出版业的积极性”。

“Baker的案例已经很久远了,但是这个案例并不过时。相反,即便是在当代,Baker案也会被告到上诉法庭才能有最终裁定。”

他还引证了1994年苹果公司针对微软公司的诉讼案,1992年冠群电脑国际有限公司(Computer Associates International)针对Atari的官司,以及1985年Whelan Associates, Inc. 针对 Jaslow Dental Laboratory, Inc.的诉讼案,所有的这些案件都是关于计算的各个方面是否违反版权的。Alsup得出结论:如果一个概念有不只一种表达方式,那么没有人可以申请对概念本身的版权。

名称和短语都是不受版权保护的,他说,版权保护的范围不会延伸到任何概念,过程、进程、系统、操作方法,或者观念——无论以任何形式。他还说,对实现互用性所必要的功能性元素不受版权限制。这里就包括了Java API.

从很多方面来说,Google和Oracle的官司的结果并不让人激动。但是从某些方面来讲,这个案子又远远超传统的意义。该案的亮点在于,Alsup法官告诉法庭,他自己为了审案而学习了Java编程,这给了Oralce一记响亮的耳光,别想用技术蒙蔽法官的双眼。回顾这长达6周的诉讼,在法庭上,Alsup法官多次向双方的律师和技术证人提出各种专业而尖锐的问题,这真是非常精彩的表现!我们信任这样的法官!在他的裁决书里,他甚至自己写出了各种代码,来演示方法(method)、类(class)和包(package)的具体概念。并且,最后,他做出了正确的判决!
 
英文原文:Caleb Garling  编译:伯乐在线 – 黄小非

分享到:
评论

相关推荐

    骑士飞行棋:Java 开发的全新棋类体验

    亲爱的棋类游戏爱好者们, 您是否厌倦了传统的棋类游戏,渴望一种全新的、充满挑战的游戏体验?现在,我们自豪地推出 骑士飞行棋 —— 一款完全用 Java 开发的创新棋类游戏。无论是用于休闲娱乐、智力挑战还是社交...

    Prj_RestAzure_JAGD:Project API测试RestAssured-Java-Maven

    4. **API测试**:API测试是针对应用程序接口进行的测试,目的是验证API是否按预期工作,包括验证其功能、性能、安全性和兼容性。在"Prj_RestAzure_JAGD"中,这些测试可能针对与Azure服务的交互,如存储、计算或身份...

    ExcelToSQL-_Java:Java转换器

    3. **SQL连接与JDBC**:Java Database Connectivity (JDBC) 是Java平台上的一个标准API,用于连接和操作数据库。开发者需要使用JDBC驱动程序建立与SQL数据库的连接,执行SQL语句,并处理结果集。 4. **数据映射与...

    python-sdk:FreeClimb API的Python SDK

    FreeClimb是基于云的应用程序编程接口(API),可将Vail平台的强大功能掌握在您的手中。 FreeClimb简化了创建可以使用全部电话功能的应用程序的过程,而无需专用或现场电话设备。 使用FreeClimb REST API编写应用...

    LPYahooFinanceJava:雅虎财经 API 的 Java 接口

    LPYahooFinanceJava 是 Yahoo Finance API 的简单且有用的 Java 接口,使用 YQL 语言。 目前,它包含从雅虎网络服务检索汇率的实现。 通过实施几行代码,可以获得所有货币的最新汇率。 LPYahooFinanceJava 是开源...

    tyt:java

    Java是一种广泛使用的高级编程语言,由Sun Microsystems(后被Oracle公司收购)于1995年发布。它的设计目标是“简单、面向对象、健壮、安全、高性能、平台独立和可移植性”。Java语法与C++类似,但更注重代码的简洁...

    竞争性编程:我的编程挑战解决方案

    # 标题 解决方案 困难 1748 简单 1480 简单 1476 中等的 ...语言:Java ...语言:Java ...语言:Java ...语言:Java ...语言:Java ...语言:Java ...语言:Java ...语言:Java ...语言:Java ...语言:Java ...语言:Java ...语言:Java

    JAVA课件.rar

    Java是一种广泛使用的高级编程语言,由Sun Microsystems(后被Oracle公司收购)于1995年推出。它的设计目标是“简单、面向对象、健壮、安全、高性能、平台独立和可移植性”。这些特性使得Java成为开发各种类型应用...

    API-Samples:API样本

    在“API-Samples: API样本”这个资源中,我们可以期待找到一系列的API调用实例,这些实例可能覆盖了不同的编程语言,如Java、Python、JavaScript、C#等。这些样本代码对于开发者来说是非常有价值的,因为它们可以...

    Banjara:Java中的RPG

    9. **Sound and Music**:Java的音频API,如Java Sound,用于播放背景音乐和音效。 10. **Networking**:使用Java的Socket编程,实现多人在线对战或协作功能。 在Banjara-master压缩包中,可能包含以下文件和目录...

    收获,不止Oracle01

    在这《收获,不止oracle》里读者将会跟随作者一同对oracle数据库的相关知识进行梳理,最终共同提炼出必须最先掌握的那部分知识,无论你是数据库开发、管理、优化、设计人员,还是从事java、c的开发人员。接下来作者再...

    CMPUT301W21T11.github.io:Java Docs网站

    【Java Docs网站】是Java开发者的重要参考资料,它包含了Java API的详细文档,这些文档由Sun Microsystems(现为Oracle Corporation)维护。Java Docs是通过Javadoc工具生成的,它能够自动生成关于Java源代码的规范...

    Splitter:Java制作的简单游戏,游戏创意来自网络

    Java的Graphics2D API可以用来创建和操纵形状,实现精确的绘图操作。开发者可能需要使用fillOval()方法来绘制圆,以及translate()和scale()方法来处理圆的位置和大小变化。 此外,为了保证游戏的流畅性,开发者需要...

    fireblocks-api-client:Fireblocks API客户端的C#实现

    fireblocks-api-client Fireblocks API客户端的C#实现 创建本地.env文件 为了能够运行某些集成测试,您应该在src文件夹中使用以下变量创建一个.env文件: FireblocksApiConfiguration__ApiPrivateKey=******** ...

    ekIRC:Java IRC 聊天实现

    Java IRC 聊天实现 Java1.7! —— 执照 本软件根据获得许可。 如果有冲突/权利侵犯/等,请与我联系。 与现有项目。 源代码的某些部分来自/受到以下启发: Bukkit:(事件系统) ( ) 博文 (谷歌代码项目...

    Travel:Java Web项目

    【Java Web项目详解】 在IT领域,Java Web项目是一种基于Java技术栈的互联网应用程序,用于构建动态、交互式的Web服务。这些项目通常涉及到多种技术,包括HTML、CSS、JavaScript前端开发,以及Servlet、JSP、...

    java-projekt:亲爱的计划书

    在Java编程领域,一个名为"java-projekt"的项目可能是开发者用来实现特定功能或解决特定问题的一个软件工程。这个项目可能包含多个组件、模块或者类,旨在展示Java技术的应用。"亲爱的计划书"可能指的是项目的规划...

    pnky-promise:Java 中的 Promise

    承诺类是承诺或期货框架的... PnkyPromise框架源于对 Guava 的ListenableFuture和 Java 8 的CompletableFuture类中缺乏的功能的需求。 请参阅有关的JavaDoc 并在实用方法有关功能的更多信息。 另请参阅的示例用法。

    如何用java实现邮件方式每天发送消息

    在Java编程环境中,使用Spring Boot框架来实现每天定时发送邮件是一项常见的需求。Spring Boot以其便捷的配置和强大的功能,使得创建此类应用变得简单。本文将详细介绍如何利用Spring Boot结合Spring Task(Spring的...

Global site tag (gtag.js) - Google Analytics