BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Java和.NET的专利问题简介

| 作者 Tim Smith 关注 0 他的粉丝 ,译者 侯伯薇 关注 0 他的粉丝 发布于 2010年12月18日. 估计阅读时间: 6 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

为什么不把Sun换成Oracle? by Liu Xing

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

这是商业行为导致的. by Liu Xing

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

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

直接用Go好了

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

或者iphone

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

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

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

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

Re: 为什么不把Sun换成Oracle? by 冯 希顺

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

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

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

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

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

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

9 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT