Java 6何时停止更新?(在编写开发人员工具的情境中)

18

背景

这并不像你想象中那样容易理解。

首先,尽管Oracle自2013年2月停止了对Java 6的公共支持, 但是Premier支持将一直持续到2013年12月,Extended支持将持续到2016年12月,因此会有一定的时间延迟。除此之外,还有可持续支持,可能会一直持续下去。

下一个主要的Java供应商IBM, 似乎甚至没有发布Java 6的支持终止日期(并且仍在支持Java 5直到2013年9月!)

第三,我们有苹果公司:最新的补丁发布于2013年6月,而且"该公司没有明确说明其支持政策",似乎只能靠猜测……但如果以处理Java 5的方式为基础,那么可能还会再有大约18个月左右的时间……大约在2014年底?

最后我们有OpenJDK……Red Hat已经表示他们现在将提供支持……

至于其他JVM实现,我甚至没有开始考虑,只是看到了一些常见的实现方式!

所以从目前来看,只要你有钱支付Oracle/IBM/Red Hat,就可以继续获得无限期支持的Java 6版本……

也许我们可以更好地构思这个问题,并有机会得到一个非不确定的答案:

  • 如果您无法再购买特定JVM所运行的硬件/操作系统,那么该特定JVM继续得到支持就有点毫无意义了。扩展支持合同是为现有客户而设的,这些客户很可能通过他们现有的系统满足其现有需求…如果他们无法转换到更新的

    这实际上给了我们一些关于Apple的背景...因为Apple硬件受支持的时间为5年(加利福尼亚州为7年),那么唯一支持的Apple硬件应该是基于x86的硬件,因为在2006年12月(最后一台基于PPC的苹果硬件), 也就是说我们不必担心运行在PPC上的Apple Java版本,因为

    同样地,我们可能可以排除任何运行在旧版Windows上的Java版本。这意味着,在2014年4月之后,如果Java安装程序无法在Windows 7+上运行,那么我们可以有效地忽略Java版本在Windows XP上的支持。

  • 我的真正兴趣是开发工具何时可以提高最低Java版本。

    Jenkins 已经维护Java 5支持已经有一段时间了,但更改较新的变化意味着在主机和从属机上需要Java 6或更高版本才能运行1.520+。如果一些构建从属机,例如旧版硬件,无法运行更新的JVM,则可能会引发问题。

    Maven 有长期让您将JVM分叉到J2SE 1.3以运行单元测试的历史记录,但自Surefire 2.15以来,它仅支持在Java 5或更低版本上运行单元测试。

    javac正在采用1和三个后退策略,就-source-target而言...所以我们需要等到JDK 10之前,才能从javac中删除对Java 6源文件的支持...随着每两年发布一次版本,并计划于2014年初发布Java 8,这意味着JDK9将在2016年初推出,JDK10将在2018年初推出...但JDK9将公开维护另外3年,这意味着2019年是JDK 6源代码兼容性可以被放弃的时间。

问题

是否有一个明确的日期可以确定OSS开发者工具链可以停止支持Java 7之前的JVM,那个日期是什么?

OSS的区别很重要,因为OSS开发者通常没有资金购买扩展/高级/持续类型的支持合同,很可能也没有访问晦涩/主机硬件的权限。

更新: “停止支持Java 7之前的JVM”是指使用-target 7完全编译整个工具链是安全的,即字节码需要Java 7来运行。

更新2: 正如所述,这应该是一个基于事实可回答的问题。正确的答案应该是以下两种形式之一:

没有明确的答案,在这里提供了一个链接,“一些向OSS用户提供免费Java 6更新的人们”,他们还没有说他们什么时候会停止。

或者

是的,有一个明确的YYYY-MM-DD日期,这是证据


3
Java 5什么时候结束? :) - JIV
1
@JIV: Java 1.4什么时候结束?! - Joachim Sauer
我担心这将主要基于个人意见,因为它主要涉及权衡。另外:你是在谈论在Java 6上运行还是操作Java 6代码?如果您的工具需要Java 7才能运行,则问题较小。如果它只生成/处理/理解Java 7代码,则很可能会出现问题。 - Joachim Sauer
这就是为什么我试图把这个问题表述为“不,这是为什么不行/是的,这是为什么行以及日期”,而不是更一般化的……但是没错,在这个问题中存在一定程度的主观看法风险。 - Stephen Connolly
1
对于JVM支持选项的摘要,+1。 - Eli Algranti
显示剩余2条评论
1个回答

13
有没有一个明确的日期可以确定开源软件(OSS)开发者工具链可以停止支持Java 7之前的JVM,并且这个日期是什么?
答案是没有这样的日期。
开发工具链的人可以自由地在任何时候停止对Java EOL版本的支持,或者根本不停止。如果个人(或公司)已经与其他公司(例如客户)签订合同,以提供给定期间的支持,则这些协议显然会限制他们。但是,这不可能限制整个项目。
(然而,实际情况是,维护旧版本Java的支持变得越来越难以维持。开发人员希望/需要能够在工具链代码库中使用新的Java功能。因此,您可能会看到这样的情况:您可以使用工具链为遗留Java开发代码,但您必须在现代Java上运行工具链。)
对于Java代码库的开源软件(OSS)版本,您(作为Java用户)处于更好的位置:
- 在商业上不再具有可行性的情况下,很可能还会有一定水平的社区支持/开发。 - 如果没有,您可以访问源代码,因此您可以(理论上)自己支持,或者付钱请别人替您做。
Steve Conolly评论说:
OSS社区无法进入支持合同。
这是完全错误的。
OSS社区中的任何人都可以与您签订协议,以为OSS产品提供支持。这实际上是一些开发人员赚钱的方式,使他们能够继续开发自己的东西。
此外,所有主流的OSS许可证都允许这样做...包括GPL及其所有变体。
但是,如果没有办法通过不产生费用来访问技术,则无法增加OSS社区的开发人员,这将使得在Java 7之前提供支持成为不可能,这也是错误的。

Sun(以前)和现在的Oracle都提供免费下载Java的已停用版本...直到Java 1.1。停用并不改变其可用性,实际上是关于旧版Java最近发现的安全问题和其他漏洞补丁发布的可用性。这些需要付费。(公平的说,这需要Oracle投入资金来完成。)

问题在于,Java 5及更早版本没有以源代码形式免费提供。这意味着客户实际上没有修复Java 5中存在的安全漏洞的选项。相比之下,在Java 6中,他们有这个选择。OpenJDK 6代码库被发布为开源,而这一点无法撤销。此外,由于Java 7和Java 8也是开源的,因此人们可以跟踪Java 7和8中的安全修复,并尝试将这些更改向后移植到OpenJDK 6代码库中...


开源社区无法签订支持合同,因此它们是不相关的。而且,确实开发工具链的人可以提前停止支持。但是,如果一个开源社区无法成长发展开发人员,因为你根本不能访问技术而不产生费用,那么这就意味着 Java 7 之前版本的支持是不可能的。尽管如此,并不意味着有一个明确的日期! - Stephen Connolly
以Maven为例。如果您需要在Java 1.4上构建,目前可以选择:限制自己使用Maven 2.0.11或更早版本;或者使用任何当前发布的Maven、工具链,并将自己限制在Surefire 2.14.1或更早版本。因此,有一条使用较旧版本的Maven进行构建的路径。但是,在某个时候,您不能指望Maven开发人员能够继续在JDK 1.5上测试Maven。(现在我们可以使用MSDN许可证(感谢微软向Apache项目提供免费许可证)、虚拟化和旧版Java来降至1.5) - Stephen Connolly
Maven的示例与我所写的内容一致。事实上,官方Maven项目对于旧版Java平台的支持将会减少,并且可能会停止。但即使如此,您仍然可以选择自行支持...或者雇佣某人(甚至是核心开发人员之一)。惊人的是,只要给足够的钱,人们会做任何事情。 - Stephen C
好的,我认为修改后的答案是一个不错的选择。 - Stephen Connolly
刚意识到可能会有关于我的“OSS社区无法进入支持合同”的说法存在一些混淆。我的意思是,通常情况下,志愿者的OSS社区成员无法购买支持合同。OSS基金会可能会被授予这样的支持,或者可以使用资金为其成员购买支持,但这都是依赖于善意/有问题的使用他们的资金...因此,OSS社区实际上被封锁在外。 - Stephen Connolly
2
真正需要这些补丁的人是那些在使用已经停止支持的平台上运行生产系统的组织。对于试图使其代码在已停止支持的版本上可运行的OSS开发人员来说,安全补丁基本上是无关紧要的。一个OSS项目停止支持的真正原因是:1)旧平台阻碍了项目的发展;2)在这些平台上的用户数量减少,不值得投入精力。 - Stephen C

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