InfoQ

InfoQ

文章

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

Java和.NET的专利问题简介

作者 Tim Smith 译者 侯伯薇 发布于 2010年12月17日

领域
企业架构,
运维 & 基础架构,
架构 & 设计,
语言 & 开发
主题
OpenJDK ,
Java ,
JDK ,
Mono ,
语言 ,
许可证 ,
开放源代码 ,
.NET ,
Google ,
编程 ,
商业 ,
专利

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

为什么不把Sun换成Oracle? 发表人 Liu Xing 发表于
Re: 为什么不把Sun换成Oracle? 发表人 Zhen William 发表于
Re: 为什么不把Sun换成Oracle? 发表人 Liu Xing 发表于
Re: 为什么不把Sun换成Oracle? 发表人 冯 希顺 发表于
Re: 为什么不把Sun换成Oracle? 发表人 Zhen William 发表于
Re: 为什么不把Sun换成Oracle? 发表人 Hou ke 发表于
这是商业行为导致的. 发表人 Liu Xing 发表于
Re: 这是商业行为导致的. 发表人 james xu 发表于
Re: 这是商业行为导致的. 发表人 強 周 发表于
  1. 返回顶部

    为什么不把Sun换成Oracle?

    发表人 Liu Xing

    现在早就没有Sun了.
    而现在Oracle的短视行为,才导致了Google对Java的失望.

  2. 返回顶部

    这是商业行为导致的.

    发表人 Liu Xing

    而不是技术优势.
    当然,.net也有比Java好的地方.
    但是微软连自己的Windows Phone都没搞好.
    我不相信Android迁移到.net平台会是件好事.

  3. 返回顶部

    Re: 这是商业行为导致的.

    发表人 james xu

    直接用Go好了

  4. 返回顶部

    Re: 这是商业行为导致的.

    发表人 強 周

    或者iphone

  5. 返回顶部

    Re: 为什么不把Sun换成Oracle?

    发表人 Zhen William

    似乎网上的每一个抠代码的,都觉得自己比Oracle CEO目光更长远

  6. 返回顶部

    Re: 为什么不把Sun换成Oracle?

    发表人 Liu Xing

    可能是因为Oracle的CEO Larry. Ellison不像Google的那几个创始人是个写代码的人出身吧.
    不过,我自己的观点即使错了,也不代表每一个抠代码的人吧.
    人家埃里克森好像关注金钱更甚于技术吧.
    对此我保留意见.
    比较Oracle,我更喜欢Google.

  7. 返回顶部

    Re: 为什么不把Sun换成Oracle?

    发表人 冯 希顺

    似乎网上的每一个抠代码的,都觉得自己比Oracle CEO目光更长远
    ,也不能这么说,写代码的和Oracle CEO在看待java上的出发点是不同的,所以观点不同是很自然的,这扯不上目光长远与否。

  8. 返回顶部

    Re: 为什么不把Sun换成Oracle?

    发表人 Hou ke

    关于这些争议是sun时代就有的啊!只是sun没有这么多精力在这个上面计较。而且sun直到被收购,和google之间一直都有诉讼的。
    而且很明显,没有google这么强大的实力,像MS,Oracle,Apple这样发展,我觉得更现实。(这3家应该都被自由软件基金会批评了很多了)

  9. 返回顶部

    Re: 为什么不把Sun换成Oracle?

    发表人 Zhen William

    不是观点不同,而是很多抠代码糊口的自觉得自己目光很深远