From Fedora Project Wiki
m (→‎Release Notes: fix markup)
(mark as ready for wrangler)
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 which is <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 obsoleted and 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 to the latest version.
This is essentially an upgrade to the latest Java and OpenJDK version.


== Owner ==
== Owner ==
Line 84: Line 82:
<!-- 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).


Customizations of OpenJDK 7 will be lost with an update to OpenJDK 8.
Customizations of OpenJDK 7 will be lost with an update to OpenJDK 8.
Line 152: Line 150:
* 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.
* 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:ChangePageIncomplete]]
[[Category:ChangeReadyForWrangler]]
<!-- 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 -->

Revision as of 22:06, 19 March 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

  • Targeted release: Fedora 21
  • Last updated: 2014-03-19
  • Tracker bug: <will be assigned by the Wrangler>

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 August, 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 avilable. The incompatibilities are source and behavioural only.

It may be a good idea to mass rebuild Java packages against OpenJDK 8 to spot any source compatiblities earlier. This is not required.

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.

If what happended with OpenJDK 6 is going to repeat, then development of OpenJDK 7 will stop before (or just around the time) Fedora 21 is End-of-Life'ed and 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
    • Promote java-1.8.0-openjdk to a full java runtime status (fix provides in package)
    • In case of a mass rebuild, supply/apply patches to fix build against OpenJDK 8
  • Other developers:
    • icedtea-web maintainers will need to update icedtea-web to run against OpenJDK 8
    • Other java packagers will need to apply patches to their java package to ensure they can build against OpenJDK 8
    • Everyone will need to test packages to verify that they work against OpenJDK 8
  • Release engineering:
    • Remove java-1.7.0-openjdk
    • Possibly mass-rebuild (?) all Java packages. This is not strictly required to make OpenJDK 8 the default Java runtime.

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

Contingency Plan

  • Contingency mechanism:
    • Leave OpenJDK 7 as the default Java SDK and runtime.
    • Ship OpenJDK 8 as a leaf package.
    • *If* a mass rebuild was done, rebuild Java packages 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.