首先我们来说说 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 中文站用户讨论组中与我们的编辑和其他读者朋友交流。
评论