From Fedora Project Wiki
m (→‎Summary: elaborate a tiny bit more)
(Update current status)
 
(10 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<!-- The actual name of your proposed change page should look something like: Changes/Your_Change_Proposal_Name.  This keeps all change proposals in the same namespace -->


= Java 8 =
= Java 8 =


== Summary ==
== Summary ==
Make Java 8 (OpenJDK 8, <code>java-1.8.0-openjdk</code>) the default Java runtime. The current default Java runtime (OpenJDK 7, <code>java-1.7.0-openjdk</code>) will be removed.
Make Java 8 (provided by OpenJDK 8 which is <code>java-1.8.0-openjdk</code>) the default Java runtime. The current default Java runtime (Java 7, provided by OpenJDK 7, <code>java-1.7.0-openjdk</code>) will be obsoleted and removed.


This is essentially an upgrade of OpenJDK.
This is essentially an upgrade to the latest Java and OpenJDK version.


== Owner ==
== Owner ==
Line 24: Line 22:
== Current status ==
== Current status ==
* Targeted release: [[Releases/21 | Fedora 21 ]]  
* Targeted release: [[Releases/21 | Fedora 21 ]]  
* Last updated: 2014-03-13
* Last updated: 2014-06-26
<!-- After the change proposal is accepted by FESCo, tracking bug is created in Bugzilla and linked to this page  
<!-- After the change proposal is accepted by FESCo, tracking bug is created in Bugzilla and linked to this page  
Bugzilla states meaning as usual:
Bugzilla states meaning as usual:
Line 33: Line 31:
CLOSED as NEXTRELEASE -> change is completed and verified and will be delivered in next release under development
CLOSED as NEXTRELEASE -> change is completed and verified and will be delivered in next release under development
-->
-->
* Tracker bug: <will be assigned by the Wrangler>
* Tracker bug: [https://bugzilla.redhat.com/show_bug.cgi?id=1084097 #1084097]


== Detailed Description ==
== Detailed Description ==
The current default Java 7 runtime in Fedora is OpenJDK 7. The latest version of OpenJDK, 8, is to be released by the end of March 2014. Given that Fedora 21 will not be released before August, it makes sense to include the latest version of OpenJDK in Fedora 21.
<!-- Expand on the summary, if appropriate.  A couple sentences suffices to explain the goal, but the more details you can provide the better. -->
 
The current default Java 7 runtime in Fedora is OpenJDK 7. The latest version of OpenJDK, 8, was released on 18 March 2014. Given that Fedora 21 will not be released before October 2014, it makes sense to include the latest version of OpenJDK in Fedora 21.


OpenJDK 8 is a significant update to Java. It brings in significant new features to the Java language, including lambdas, a new javascript engine and lots of new library features. A [http://openjdk.java.net/projects/jdk8/features complete list of features] is available.
OpenJDK 8 is a significant update to Java. It brings in significant new features to the Java language, including lambdas, a new javascript engine and lots of new library features. A [http://openjdk.java.net/projects/jdk8/features complete list of features] is available.


OpenJDK 8 is a backwards compatible update. Theoreticallyn everything that worked against OpenJDK 7 should continue working against OpenJDK 8. There are a few exceptions:
OpenJDK 8 is a backwards compatible update. Theoretically everything that worked against OpenJDK 7 should continue working against OpenJDK 8. There are a few exceptions:
* OpenJDK8 is much more strict when it comes to building javadocs. Many <code>-javadoc</code> package in Fedora fail to build. Those that are built should continue working just fine.
* OpenJDK8 is much more strict when it comes to building javadocs. Many <code>-javadoc</code> package in Fedora fail to build. Those that are built should continue working just fine.
* Packages that rely on non-public OpenJDK API may fail to build/run.
* Packages that rely on non-public OpenJDK API may fail to build/run.
 
<!-- Expand on the summary, if appropriate. A couple sentences suffices to explain the goal, but the more details you can provide the better. -->
A complete [http://www.oracle.com/technetwork/java/javase/8-compatibility-guide-2156366.html list of incompatibilities is available].
 
Scratch and side-builds will be done (against OpenJDK 8) for most Java packages to spot any source incompatibilities earlier.


== Benefit to Fedora ==
== Benefit to Fedora ==
<!-- What is the benefit to the platform?  If this is a major capability update, what has changed?  If this is a new functionality, what capabilities does it bring? Why will Fedora become a better distribution or project because of this proposal?-->
<!-- What is the benefit to the platform?  If this is a major capability update, what has changed?  If this is a new functionality, what capabilities does it bring? Why will Fedora become a better distribution or project because of this proposal?-->


Shipping the latest version of OpenJDK works towards the Fedora goal of "First". OpenJDK 8 brings significant new features to the Java language and libraries and platform.
Shipping the latest version of OpenJDK works towards the Fedora goal of "First". OpenJDK 8 brings significant new features to the Java language and libraries and platform. Soon, programmers will want to use these Java features and Fedora should provide them. Sooner or later, upstream projects will start to require Java 8.  


If what happended with OpenJDK 6 is going to repeat, then development of OpenJDK 7 will stop before Fedora 21 is End-of-Life'ed and security patches may not be backported to OpenJDK 7 (or if they are, they will be severly delayed). If Fedora 21 ships with OpenJDK 7, this will leave users vulnerable to exploits.
Fedora 21 will probably End-of-life around early 2016 (around when F23 is released). OpenJDK 7 will publicly End-of-life [http://mail.openjdk.java.net/pipermail/jdk7u-dev/2014-January/008242.html in April 2015]. Security patches may not be backported to OpenJDK 7 (or if they are, they will be significantly delayed). If Fedora 21 ships with OpenJDK 7, this will leave users vulnerable to exploits.


== Scope ==
== Scope ==
Line 58: Line 60:
* Proposal owners:
* Proposal owners:
<!-- What work do the feature owners have to accomplish to complete the feature in time for release?  Is it a large change affecting many parts of the distribution or is it a very isolated change? What are those changes?-->
<!-- What work do the feature owners have to accomplish to complete the feature in time for release?  Is it a large change affecting many parts of the distribution or is it a very isolated change? What are those changes?-->
** Deprecate/Obsolete <code>java-1.7.0-openjdk</code>  
** Deprecate/Obsolete <code>java-1.7.0-openjdk</code> (Done)
** Promote <code>java-1.8.0-openjdk</code> to a full java runtime status
** Promote <code>java-1.8.0-openjdk</code> to a full java runtime status (Done)
** In case of a mass rebuild, supply/apply patches to fix build against OpenJDK 8  
** In case of a mass rebuild, supply/apply patches to fix build against OpenJDK 8 (Done)


* Other developers:
* Other developers:
<!-- What work do other developers have to accomplish to complete the feature in time for release?  Is it a large change affecting many parts of the distribution or is it a very isolated change? What are those changes?-->
<!-- What work do other developers have to accomplish to complete the feature in time for release?  Is it a large change affecting many parts of the distribution or is it a very isolated change? What are those changes?-->
** <code>icedtea-web</code> maintainers will need to update <code>icedtea-web</code> to run against OpenJDK 8
** <code>icedtea-web</code> maintainers will need to update <code>icedtea-web</code> to run against OpenJDK 8 (Done)
** Other java packagers will need to apply patches to their java package to ensure they build against OpenJDK 8
** Other java packagers will need to apply patches to their java package to ensure they can build against OpenJDK 8 (WIP)
** Everyone will need to test packages to verify that they work against OpenJDK 8
** Everyone will need to test packages to verify that they work against OpenJDK 8 (WIP)


* Release engineering: N/A (not a System Wide Change)  <!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
* Release engineering:
<!-- Does this feature require coordination with release engineering (e.g. changes to installer image generation or update package delivery)?  Is a mass rebuid required?  If a rel-eng ticket exists, add a link here.  -->
<!-- Does this feature require coordination with release engineering (e.g. changes to installer image generation or update package delivery)?  Is a mass rebuid required?  If a rel-eng ticket exists, add a link here.  -->
** Remove <code>java-1.7.0-openjdk</code>
** Remove <code>java-1.7.0-openjdk</code> from kickstarts, comps and so on (Done)
** Mass-rebuild (?) all package related to java


* Policies and guidelines: N/A (not a System Wide Change) <!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
* Policies and guidelines:  
<!-- Do the packaging guidelines or other documents need to be updated for this feature?  If so, does it need to happen before or after the implementation is done?  If a FPC ticket exists, add a link here. -->
<!-- Do the packaging guidelines or other documents need to be updated for this feature?  If so, does it need to happen before or after the implementation is done?  If a FPC ticket exists, add a link here. -->
** Most <code>-javadoc</code> packages fail to build. The OpenJDK 8 maintainers and the Java SIG is working on identifying a solution. The solution may require guideline changes making <code>-javadoc</code> subpackges optiona.
** N/A


== Upgrade/compatibility impact ==
== Upgrade/compatibility impact ==
<!-- What happens to systems that have had a previous versions of Fedora installed and are updated to the version containing this change? Will anything require manual configuration or data migration? Will any existing functionality be no longer supported? -->
<!-- What happens to systems that have had a previous versions of Fedora installed and are updated to the version containing this change? Will anything require manual configuration or data migration? Will any existing functionality be no longer supported? -->


Upgrades from previous Fedora versions should be seamless. java-1.8.0-openjdk will replace java-1.7.0-openjdk.  
Upgrades from previous Fedora versions should be seamless. <code>java-1.8.0-openjdk</code> will replace (<code>Obsoletes</code> and <code>Provides</code>) <code>java-1.7.0-openjdk</code>.  


OpenJDK 8 is a backwards compatible update. Code that worked against OpenJDK 7 should continue to run against OpenJDK 8.
OpenJDK 8 is a backwards compatible update. Code that worked against OpenJDK 7 should continue to run against OpenJDK 8. Code compiled against OpenJDK 8 will not run against OpenJDK 7 by default (separate compiler flags are needed to generate OpenJDK 7-compatible bytecode).


TODO: Add more impact concerns.
Customizations of OpenJDK 7 will be lost with an update to OpenJDK 8.


== How To Test ==
== How To Test ==
Line 90: Line 91:


Remember that you are writing this how to for interested testers to use to check out your change implementation - documenting what you do for testing is OK, but it's much better to document what *I* can do to test your change.
Remember that you are writing this how to for interested testers to use to check out your change implementation - documenting what you do for testing is OK, but it's much better to document what *I* can do to test your change.
-->


A good "how to test" should answer these four questions:
This is a software only change. The results should be consistent across all architectures (i686, x86_64, armv7, aarch64) and hardware.


0. What special hardware / data / etc. is needed (if any)?
0. What special hardware / data / etc. is needed (if any)?
Answer: None
1. How do I prepare my system to test this change? What packages
1. How do I prepare my system to test this change? What packages
need to be installed, config files edited, etc.?
need to be installed, config files edited, etc.?
Answer: Install any Java package (<code>ant</code>,<code>maven</code>, <code>eclipse</code> are good candidates).
2. What specific actions do I perform to check that the change is
2. What specific actions do I perform to check that the change is
working like it's supposed to?
working like it's supposed to?
Answer: Run the java package you installed in step 1.
3. What are the expected results of those actions?
3. What are the expected results of those actions?
-->
Answer: <code>java-1.8.0-openjdk</code> (or <code>java-1.8.0-openjdk-headless</code>) should be installed as a dependency. The Java application you installed should work like it does normally.
 
<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
'''TODO'''


== User Experience ==
== User Experience ==
<!-- If this change proposal is noticeable by its target audience, how will their experiences change as a result?  Describe what they will see or notice. -->
<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
This change to the Java runtime should be mostly invisible to a user.
This change to the Java runtime should be mostly invisible to a user.


Java developers will notice that a newer version of Java is packaged.
Java developers will notice that a newer version of Java is packaged. Java applications will run on top of the latest Java runtime.


== Dependencies ==
== Dependencies ==
Line 116: Line 118:


<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
<!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
None (not a System Wide Change)
 
The OpenJDK packages will need to be updated/removed:
* java-1.7.0-openjdk
* java-1.8.0-openjdk
 
OpenJDK 8 depends on various system libraries, but no new changes are required to other packages. In fact, a non-default version of <code>java-1.8.0-openjdk</code> is available on older Fedora releases too.


== Contingency Plan ==
== Contingency Plan ==
<!-- If you cannot complete your feature by the final development freeze, what is the backup plan?  This might be as simple as "Revert the shipped configuration".  Or it might not (e.g. rebuilding a number of dependent packages).  If you feature is not completed in time we want to assure others that other parts of Fedora will not be in jeopardy.  -->
<!-- If you cannot complete your feature by the final development freeze, what is the backup plan?  This might be as simple as "Revert the shipped configuration".  Or it might not (e.g. rebuilding a number of dependent packages).  If you feature is not completed in time we want to assure others that other parts of Fedora will not be in jeopardy.  -->


'''TODO'''
* Contingency mechanism:  
 
** Leave OpenJDK 7 as the default Java SDK and runtime.
* Contingency mechanism: (What to do?  Who will do it?) N/A (not a System Wide Change)  <!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
** Ship OpenJDK 8 as a leaf package.
<!-- When is the last time the contingency mechanism can be put in place?  This will typically be the beta freeze. -->
** For packages that were rebuilt against OpenJDK 8, rebuild them against OpenJDK 7
* Contingency deadline: N/A (not a System Wide Change)  <!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
* Contingency deadline: 2014-08-01
<!-- Does finishing this feature block the release, or can we ship with the feature in incomplete state? -->
* Blocks release? No
* Blocks release? N/A (not a System Wide Change), Yes/No <!-- REQUIRED FOR SYSTEM WIDE CHANGES -->
* Blocks product? TODO
* Blocks product? product <-- Applicable for Changes that blocks specific product release/Fedora.next -->


== Documentation ==
== Documentation ==
<!-- Is there upstream documentation on this change, or notes you have written yourself? Link to that material here so other interested developers can get involved. -->
<!-- Is there upstream documentation on this change, or notes you have written yourself? -->


* [http://www.oracle.com/technetwork/java/javase/8train-relnotes-latest-2153846.html Java 8 Release Notes]. Please note that these release notes refer to a few proprietary components (including JavaFX, Deployment, Java DB and Java Mission Control) that are not included in Fedora packages.
* [http://openjdk.java.net/projects/jdk8/features OpenJDK 8 Features]
* [http://openjdk.java.net/projects/jdk8/features OpenJDK 8 Features]
* [http://openjdk.java.net/projects/jdk8/ Deveopment timeline]
* [http://openjdk.java.net/projects/jdk8/ Deveopment timeline]
Line 143: Line 150:
-->
-->


[[Category:ChangePageIncomplete]]
* [http://www.oracle.com/technetwork/java/javase/8train-relnotes-latest-2153846.html Java 8 Release notes]
* User customizations made to java-1.7.0-openjdk (specifically, to files under <code>/usr/lib/jvm/java-1.7.0*/*</code>) will not be carried across to java-1.8.0-openjdk.
 
[[Category:ChangeAcceptedF21]]
<!-- When your change proposal page is completed and ready for review and announcement -->
<!-- When your change proposal page is completed and ready for review and announcement -->
<!-- remove Category:ChangePageIncomplete and change it to Category:ChangeReadyForWrangler -->
<!-- remove Category:ChangePageIncomplete and change it to Category:ChangeReadyForWrangler -->
Line 149: Line 159:
<!-- After review, the Wrangler will move your page to Category:ChangeReadyForFesco... if it still needs more work it will move back to Category:ChangePageIncomplete-->
<!-- After review, the Wrangler will move your page to Category:ChangeReadyForFesco... if it still needs more work it will move back to Category:ChangePageIncomplete-->


<!-- Select proper category, default is Self Contained Change -->
[[Category:SystemWideChange]]
[[Category:SelfContainedChange]]
<!-- [[Category:SystemWideChange]] -->

Latest revision as of 13:51, 26 June 2014

Java 8

Summary

Make Java 8 (provided by OpenJDK 8 which is java-1.8.0-openjdk) the default Java runtime. The current default Java runtime (Java 7, provided by OpenJDK 7, java-1.7.0-openjdk) will be obsoleted and removed.

This is essentially an upgrade to the latest Java and OpenJDK version.

Owner

  • Name: Omair Majid
  • Email: omajid@redhat.com
  • Release notes owner:

Current status

Detailed Description

The current default Java 7 runtime in Fedora is OpenJDK 7. The latest version of OpenJDK, 8, was released on 18 March 2014. Given that Fedora 21 will not be released before October 2014, it makes sense to include the latest version of OpenJDK in Fedora 21.

OpenJDK 8 is a significant update to Java. It brings in significant new features to the Java language, including lambdas, a new javascript engine and lots of new library features. A complete list of features is available.

OpenJDK 8 is a backwards compatible update. Theoretically everything that worked against OpenJDK 7 should continue working against OpenJDK 8. There are a few exceptions:

  • OpenJDK8 is much more strict when it comes to building javadocs. Many -javadoc package in Fedora fail to build. Those that are built should continue working just fine.
  • Packages that rely on non-public OpenJDK API may fail to build/run.

A complete list of incompatibilities is available.

Scratch and side-builds will be done (against OpenJDK 8) for most Java packages to spot any source incompatibilities earlier.

Benefit to Fedora

Shipping the latest version of OpenJDK works towards the Fedora goal of "First". OpenJDK 8 brings significant new features to the Java language and libraries and platform. Soon, programmers will want to use these Java features and Fedora should provide them. Sooner or later, upstream projects will start to require Java 8.

Fedora 21 will probably End-of-life around early 2016 (around when F23 is released). OpenJDK 7 will publicly End-of-life in April 2015. Security patches may not be backported to OpenJDK 7 (or if they are, they will be significantly delayed). If Fedora 21 ships with OpenJDK 7, this will leave users vulnerable to exploits.

Scope

  • Proposal owners:
    • Deprecate/Obsolete java-1.7.0-openjdk (Done)
    • Promote java-1.8.0-openjdk to a full java runtime status (Done)
    • In case of a mass rebuild, supply/apply patches to fix build against OpenJDK 8 (Done)
  • Other developers:
    • icedtea-web maintainers will need to update icedtea-web to run against OpenJDK 8 (Done)
    • Other java packagers will need to apply patches to their java package to ensure they can build against OpenJDK 8 (WIP)
    • Everyone will need to test packages to verify that they work against OpenJDK 8 (WIP)
  • Release engineering:
    • Remove java-1.7.0-openjdk from kickstarts, comps and so on (Done)
  • Policies and guidelines:
    • N/A

Upgrade/compatibility impact

Upgrades from previous Fedora versions should be seamless. java-1.8.0-openjdk will replace (Obsoletes and Provides) java-1.7.0-openjdk.

OpenJDK 8 is a backwards compatible update. Code that worked against OpenJDK 7 should continue to run against OpenJDK 8. Code compiled against OpenJDK 8 will not run against OpenJDK 7 by default (separate compiler flags are needed to generate OpenJDK 7-compatible bytecode).

Customizations of OpenJDK 7 will be lost with an update to OpenJDK 8.

How To Test

This is a software only change. The results should be consistent across all architectures (i686, x86_64, armv7, aarch64) and hardware.

0. What special hardware / data / etc. is needed (if any)? Answer: None

1. How do I prepare my system to test this change? What packages need to be installed, config files edited, etc.? Answer: Install any Java package (ant,maven, eclipse are good candidates).

2. What specific actions do I perform to check that the change is working like it's supposed to? Answer: Run the java package you installed in step 1.

3. What are the expected results of those actions? Answer: java-1.8.0-openjdk (or java-1.8.0-openjdk-headless) should be installed as a dependency. The Java application you installed should work like it does normally.

User Experience

This change to the Java runtime should be mostly invisible to a user.

Java developers will notice that a newer version of Java is packaged. Java applications will run on top of the latest Java runtime.

Dependencies

The OpenJDK packages will need to be updated/removed:

  • java-1.7.0-openjdk
  • java-1.8.0-openjdk

OpenJDK 8 depends on various system libraries, but no new changes are required to other packages. In fact, a non-default version of java-1.8.0-openjdk is available on older Fedora releases too.

Contingency Plan

  • Contingency mechanism:
    • Leave OpenJDK 7 as the default Java SDK and runtime.
    • Ship OpenJDK 8 as a leaf package.
    • For packages that were rebuilt against OpenJDK 8, rebuild them against OpenJDK 7
  • Contingency deadline: 2014-08-01
  • Blocks release? No
  • Blocks product? TODO

Documentation

Release Notes

  • Java 8 Release notes
  • User customizations made to java-1.7.0-openjdk (specifically, to files under /usr/lib/jvm/java-1.7.0*/*) will not be carried across to java-1.8.0-openjdk.