Java是一种开源编程语言吗?

85

我知道Python、Ruby和Perl都是开源的,但Java真的是一种开源编程语言吗?

我也在Google上搜索过,但没有找到合适的答案。


2
好问题。JVM(Hotspot)是开源的吗?类似javac编译器这样的工具也是开源的吗? - D.C.
2
OpenJDK 包含了工具、JVM、类库,以及可能还有更多的内容。 - Kevin Bourrillion
凯文:说得好。我的信息来源是维基百科,但看起来这些信息已经因JDK6的发布而过时了。 http://en.wikipedia.org/wiki/Java_(programming_language)#History - kusma
Sun的开放源代码领袖刚刚辞职。你可以自行评估这件事情的意义。http://www.theregister.co.uk/2010/03/09/simon_phipps_quits_sun_oracle/ - skaffman
FYI,一种替代的开源Java是Apache Harmony。然而,该项目在2011年停止了开发。另外请参阅http://en.wikipedia.org/wiki/Free_Java_implementations - ToolmakerSteve
更近期的,来自Oracle的有两个选择。完全开放的OpenJDK。几乎开放(最终)-一些许可条件:OracleJDK。OpenJDK现在与OracleJDK同步,基于多年来的相同代码,并修复了所有错误。 (根据Oracle;我没有验证。)另请参见OpenJDK - ToolmakerSteve
11个回答

87

一个编程语言本身并不是开源或非开源的,但它的实现可能是。是的,有Java的开源实现。Sun的Java实现(最受欢迎的实现之一)就是其中之一。


2
目前的“JDK6”是“公开”的源代码(在JRL、JIUL和可能其他许可下)。OpenJDK(6-open和7)是GPL(可以选择使用CLASSPATH例外)。 - Tom Hawtin - tackline
@Tom - 我觉得你没有理解重点 - 这个问题是关于编程语言而不是运行时或开发工具实现的。 - Rob Oxspring
3
从技术上讲,Sun作为JDK的一部分发布了一个Java实现作为开源,其中还有从未公开过的Sun代码和工具。现在Oracle拥有专利和Sun代码,情况变得更加复杂:Oracle仅因在Java中使用API而起诉Google。请参考维基百科的“Oracle v. Google”和CNET新闻的“Apache基金会退出专有Java进程”,称平台完全由Oracle控制,并于2010年12月10日辞去Java社区进程行政委员会的职务。 - ToolmakerSteve
更正:作为“OpenJDK”的一部分。这与原始的Sun“JDK”不同,后者具有更严格的许可证限制。请访问http://openjdk.java.net/获取当前版本和新闻。 - ToolmakerSteve

25

是的,或者最终会成为开源(可能还有一些他们正在替换的东西,因为它们是在许可下使用的)。Sun公司承诺使其成为开源,并且您可以从他们那里下载。请查看OpenJDK


11
这个回答在谈论开发套件,问题是关于语言的。 - Rob Oxspring
22
嗯,我认为这并不确切有意义,@Rob。所有语言都应该是开源的,因为它们都是规范指定的(源码是关于如何运行的规范,例如ISO C语言通过C99标准成为开源)。更有意义的是讨论一个语言实现的源代码是否是开源的。如果你谈论一个语言是否允许社区对其发展进行贡献,那可能有意义,但既然OP接受了这个答案,我就假设我的解释是正确的 :-) - paxdiablo
1
甲骨文-谷歌案正在查明Java API是否如此开放,以至于谷歌可以在Android中复制它们。 - Thorbjørn Ravn Andersen
1
@RobOxspring:对于某些语言,“开发工具包”只是工具和附加组件,核心语言及其库是一个独立的实体。我想最初Java也是这样的(或者JDK包含了它,但有限制的许可证)。然而,现在Sun已经进行了开源发布,JDK包括了Java类库的实现。这可以通过浏览JDK来看到。例如,OpenJDK > jdk8 最终浏览到 src/share/classes/java/awt/Graphics2D.java,这是Graphics2D类的实际Java代码,在8版中释放。 - ToolmakerSteve
请参考匿名回答,了解语言和核心库/开发工具包之间的法律区别。 - ryanwebjackson

16

“官方”的JAVA语言实现本身并不是,但有一个由社区推动的过程(不确定其效果如何),用于提出改进JAVA语言的建议 - Java社区流程。此外还有一些开放的JAVA开发工具和运行时实现,例如OpenJDK


你可能需要澄清你所说的“官方”的含义。尽管Sun本身正在推动OpenJDK的努力,但是否在Oracle的领导下继续进行,我不知道。 - paxdiablo

9
目前还没有,但它即将开源。

来源:


引用自https://blogs.oracle.com/java-platform-group/faster-and-easier-use-and-redistribution-of-java-se

  • Oracle提议将Java SE的发布节奏增加到每六个月一次
  • Oracle将简化开发人员、客户和消费者使用Java SE的方式
  • 从JDK 9 GA开始,Oracle计划在GPL下发布OpenJDK构建
  • Oracle为Java SE提出了一个基于时间驱动的发布模型,而不是历史上的基于功能的模型
  • Oracle JDK将向OpenJDK贡献以前的商业特性,例如Java Flight Recorder
  • Oracle将与其他OpenJDK贡献者合作,使社区基础设施完整、现代和可访问
  • Oracle JDK将继续作为商业长期支持产品提供
  • 一旦OpenJDK二进制文件与Oracle JDK可互换(目标为2018年底),Oracle JDK将主要面向商业和支持客户
  • Oracle将继续增强打包和分发完整的即用型应用程序的功能

我们已经将Java EE移至:http://openjdk.java.net/projects/jdk9/spec/

更多阅读:

  1. https://blogs.oracle.com/theaquarium/opening-up-ee-update
  2. https://blogs.oracle.com/java-platform-group/java-se-offerings
  3. https://blogs.oracle.com/java/java-9-release-now-available
  4. https://blogs.oracle.com/java-platform-group/convergence-of-oracle-java-se-embedded-with-oracle-jdk

8

“Java编程语言”这个短语指的是Sun(现在是Oracle)提供的规范。Sun提供了Java虚拟机和Java编译器的参考实现。它们两个都不是开源的(至少不像Python那样完全开源)。

然而,OpenJDK是JAVA编程语言的完整开源实现之一。可能还有其他的。

大多数程序员认为Java是由Sun提供的一种编程语言。我认为,Sun只提供了语言规范,任何人都可以根据任何许可证进行其实现。


7
这是来自Oracle America Inc v. Google LLC案件的内容,涉及到37个Java SE版本1.4和版本5.0的API包。我们已经得出结论,所讨论的37个Java API包的声明代码和SSO有版权保护。Java编程语言本身是免费且可供使用的,无需获得许可。目前为止,众所周知,要在Java编程语言中编写,“必须使用62个类(以及它们的一些方法),分布在Java API库的三个包中。否则,语言本身将失败。”任何使用Java编程语言的人都可以编写自己的预先编写程序库来执行各种功能。虽然Oracle向构建应用程序(“应用”)的程序员免费提供Java平台,但它设计了一种许可方案,以吸引程序员同时商业化该平台。在相关部分中,Oracle向那些希望在竞争平台中使用API或将其嵌入电子设备中的人收取许可费。为了保持“一次编写,到处运行”的理念,Oracle对许可证持有人施加了严格的兼容性要求。Oracle还根据开放源代码许可证免费提供了名为“OpenJDK”的Java版本。然而,Oracle认为OpenJDK有一个重要的限制:任何改进OpenJDK中的包的公司都必须“将这些变化免费提供给Java社区”。证据表明,到2005年,Oracle在700万台PC上授权了Java。尽管Oracle从未成功地使用Java开发自己的智能手机平台,但它为移动设备授权了Java SE。根据Oracle的说法,“移动设备市场特别有利可图”,并且Java很快成为在移动电话上开发和运行应用程序的主要平台。部分语言需要支付许可费,因此这些部分似乎不是“开放源代码”...

2

大部分的“Java”是开源的,只有一些小部分是Sun没有权利公开的...请查看OpenJDK网站获取更多信息。


1

OpenJDK

在你下载它到src文件夹后,你会看到windows、solaris、share、linux等文件夹。在share文件夹中,你可以找到classes文件夹。在那里,你可以查看所有类的源代码(例如JButton)。


1

Java语言是开源的,但Sun公司没有权利公开几个部分...请查看更多OpenJDK


1
在2006年11月13日,Sun公司以GNU通用公共许可证(GPL)的条款将Java的大部分内容作为自由开源软件(FOSS)发布。在2007年5月8日,Sun完成了这一过程,除了少量Sun未持有版权的代码外,Java的所有核心代码都可在自由软件/开源发行条款下使用。
OpenJDK(Open Java Development Kit)是Java编程语言的免费开源实现。这是Sun Microsystems从2006年开始的努力的结果。该实现根据GNU通用公共许可证(GNU GPL)授权,并带有链接例外。
为什么还有人说Java不是开源或者自由的?

4
因为现在它是由Oracle拥有的。 - Kshitiz Sharma
1
因为你使用它并开始赚取大量的钱后,你会被Oracle起诉,而其他“明显免费”的语言则不会有这个问题。 - b264

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接