Java 和.NET 的专利问题简介

阅读数:2599 2010 年 12 月 17 日

话题:Java.NET开源GoogleDevOps语言 & 开发架构

首先我们来说说 Java。 对于 Java 你可以从两种许可中选择。 首先,你可以使用(可能带有你自己的修改)OpenJDK 中的代码。 其次,你可以基于 Java 规范创建新的 Java 实现。

关于 OpenJDK 没有显而易见的专利许可。 OpenJDK 遵循 GPLv2,并且一般我们认为当许可码在 GPLv2 之下时,许可就包含隐式的专利许可。 在 2004 年,自由软件基金会的高级律师 Dan Ravicher 对 BSD 和 GPL 脆弱的专利保证提出了警告,并建议添加专利赋权。

这意味着隐式专利许可的范围是不确定的。 另一方面,如果你所做的就是使用不经改变的 OpenJDK,那么就应该被完全覆盖。 另一方面,如果你做了无法由 Java 识别的扩展变更,从而违反了 Oracle 的非 Java 专利,那么你就可能不在隐式许可的范围之内了。 关于你是否跨越了专利覆盖范围的界限,是非常模糊和不明确的。

如果你选择创建自己的实现,那么就有显式的专利许可。 如果你实现完整的规范,或者你不做严令禁止的改变(向标准类中添加字段和方法,向标准命名空间中添加新的内容,诸如此类),或者你的实现通过了“技术兼容性工具”的测试,那么你就处于许可的范围之内。

主要问题在于 TCK 的需求。 Sun 能够(也这么做了)让不用 Java 的方式做事的人们无法访问 TCK。 对于你的实现,没有 TCK,也没有专利许可。 Apache 的 Geir Magnusson 在 2007 年发表了一封公开信,抱怨说Harmony 项目无法“获得 Java SE5 技术兼容性工具的可接受许可”。

上述的各种方法都无法在 Google 下工作。 由于很多原因,它们无法采用 OpenJDK。 首先,它是 GPL。 手机的制造商和销售商希望在其中添加独有的特性,从而和竞争者区分开来,Google 觉得,如果处于不允许这样做的许可之下,Android 就很难为人所接受。 其次,Java SE(也正是 OpenJDK 所实现的)并不适合像手机之类的设备。 如果 Google 让代码变得更像是 Java ME,那么它就会位于模糊的区域,没人能够确定是否有某些隐式的专利许可会覆盖它们。

遵循 Java SE 规范实现它们自己的 Java,然后对其进行扩展(要小心地避免对专利许可禁止改变的部分进行变更)可能会有效——但是它们还是会有 TCK 的问题。 那条路可能会非常困难,因为 Sun 只是希望 Google 获取 Java ME 的许可。

因此,Google 只是使用了 Java 的语法和语义,而没有使用 Java 虚拟机。 这没有任何专利保护。

现在让我们与.NET 做下比较,如果 Google 使用 Mono 是否会更安全。 微软针对独立.NET 实现的专利许可是微软社区承诺(Microsoft Community Promise)。 和 Sun 的专利许可一样,它不需要你实现规范中所有强制的部分。 和 Sun 不一样的是,它不需要你通过特定的测试,但对于做出改善是有限制的。 在特殊情况下你可以实现强制的部分——如果你是金牌伙伴。(如果你对其做出了改善,那些改善不会覆盖在承诺之中,当然,有些地方还是需要注意。)

这样我们马上就能看出来,专利的情形更好一些——你不需要获得微软针对实现的批准,从而获得你的专利许可。 这更符合 Google 想要做的事情。

Mono 实现了规范中的强制部分,也做出了一些改善。 有些改善是对 Microsoft .NET framework 的实现,它们并非规范的一部分,像 WinForms。 Mono 的那些部分可能会有专利问题,所以如果 Google 已经使用了 Mono,那些问题最好能够避免。

Google 可能已经对 Mono 做出了修改,使得它更适合手机之类的弱电设备。 那会把它们带到 ECMA/ISO 规范之外,而导致专利的风险。 然而,微软有一种叫做.NET Micro Framework 的产品,它是对 Java ME 所作出的响应。注意.NET Micro Framework 的许可:Apache2。 那个许可带有显式的专利赋权。 如果 Google 基于 Mono 和.NET Micro Framework 中的代码来创建 Android,那么它们很可能已经做出来了,并且所有部分都在微软的专利之下——社区承诺包含了所有 ECMA/ISO 标准部分,而 Apache2 许可的专利赋权涉及到对手机的改善。

而实际上微软遵循了开发技术的一般规则。 他们向独立的标准组织提交了 C# 语言和.NET 架构。 他们提供了一种专利许可,它包含了对那些标准的实现,而没有任何限制,而不是带有通用和一般的限制,让你需要实现标准中指定的部分。

Sun 没有遵循一般的规则。 他们拒绝把 Java 提交给独立的标准组织。 他们把一些内容放在专利许可中作为标准,这样你在获得许可之前就先要获得他们的批准。 稍后,他们遵循 GPL 发布了 OpenJDK,那是一种改进,但是他们还是没有把它放在显式的专利许可下,所以无人知道能够对 OpenJDK 做什么(除了在不修改的状态下使用它),而不会有违反 Sun/Oracle 专利的风险。

查看英文原文:A Brief Introduction to the Java and .NET Patent Issues


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。