What version of Java should I use with Cassandra 2.0? - java

Cassandra 2.0.12 and Datastax Enterprise 4.6 both recommend using Oracle Java SE 7. However, public updates of Java SE 7 will cease in April 2015 meaning security updates and bug fixes will not be available without a support contract with Oracle.
My preferred option would be OpenJDK to avoid legal hassles with Oracle's click-through license (technically I can avoid the problem, but legally I cannot). However, it seems that OpenJDK is not recommended for 'reasons'. I can only see minor reasons why it doesn't work (using the string 'icedtea' in the version string) and no recent discussions, so I'm assuming it is not being tested and should be avoided.
Should I be doing new deployments with Oracle Java SE 8, OpenJDK 7, OpenJDK 8, or some other variant?

I would recommend using the version DataStax recommends if you can. While other JDK variants and versions will likely work, it would make sense to use what QA is actively testing with and others in the community are using. Cassandra even goes so far to warn you if you are using OpenJDK or a non-Oracle JVM (code).
You should be able to get away with using OpenJDK 7, but just beware that you may encounter various problems with heap, load, kernel errors, etc. With regards to Java8, Cassandra 2.0 won't compile on Java 8 (CASSANDRA-7028), but you should be able to run with it.

Related

Can I run a java program built using Java 8 (.192) using JRE 17, or does everything (JRE, JVM, JDK) have to be on the correct Java 8 version first?

I have a program for work that I'm told will only use Java version 8 update 192 to run correctly. When I downloaded eclipse, it's suggesting that I use JRE 17.0.2 but I recalled my coworker saying I need Java 8 update 192 otherwise it won't work. Does the JRE version matter? Is it irrelevant?
Perhaps I need to download JRE 8.192? I'm not sure. Any help would be appreciated.
I have a program for work that I'm told will only use Java version 8 update 192 to run correctly.
I would doubt the accuracy of that statement. I would say that someone is making a statement without evidence ... if that is what they actually said.
Maybe a more accurate statement is that the program is only known to run on that particular version ...
Anyway, it will probably run on a later version of Java 8, or Java 11. Java 17 is less certain because of the issue of package sealing / blocking of access to internal packages that occurred in Java 16. (Some of the sealing / blocking started in Java 9 ... but there are easy workarounds ...)
Q: Do you need a JRE?
A: No. A JDK will work just as well. (A JDK distro includes a JRE.) But unless there are strong counter-indications, you need the latest version of Java 8, 11 or 17. Java 8 u192 is years out of date.
The only way to be sure that the application will work on a particular version of Java is to try it. In general, there are no shortcuts.
Java 8 is still available, as the first Long-Term Support (LTS) version. The current release is Update 331. I would suggest starting with the latest update of Java 8.
Be aware that Java 8 is not receiving regular updates for the public except for critical security patches. You may want to consider paying for a support contract from any number of vendors such as Azul Systems or Oracle to get support including possible additional updates releases through the rest of this decade.
Generally Java apps will run on later versions of Java without any modifications needed. The Java team at Oracle and the OpenJDK community place a very high priority on preserving that compatibility.
However, there are exceptions to the compatibility policy. In particular: Java 9 introduced the Java Platform Module System which caused some problems in some apps. And in later versions of Java some libraries that were previously bundled are now removed. Some of those removed libraries were transferred to the Jakarta EE project at the Eclipse Foundation. Some were abandoned for lack of interest such as CORBA.
Some few parts of Java that were for years marked as “deprecated for eventual removal” have now been removed.
If you consider moving beyond Java 8, I suggest your first step be sitting down to read through the Release Notes for every release of Java. They are quite well-written. They should alert you to any issues that may affect your app.
FYI, Java 17 is the latest LTS version. Java 18 is current.
As in the other answers, an application built for Java 8 will probably work fine in Java 17, with some caveats, but if you absolutely need the final product to run under Java 8, go get a real Java 8 runtime and set it up in your IDE. Building a Java application for any specific Java version is best done by having an actual copy of that runtime present, preferably a JDK. By having an exact version of its standard library to compile against, you can avoid accidentally referring to packages, classes, and methods added to, or removed from, later versions. You can get an OpenJDK build of Java 8 from https://adoptium.net/?variant=openjdk8 . Be sure to ask your co-worker why they're mentioning an outdated patch version.
Additionally, keep in mind that Eclipse is itself a large Java application. Running it requires Java, and a growing number of downloads include a Java runtime for that simple reason, even the ones that do not include Java development tools. You don't have to compile your code against that version of Java, though--you probably don't even want to since JDK downloads will include JavaDoc for the standard library, among other useful extras.

How to update sources of a library to a modern java version while still being compatible with java 8?

We are maintaining a java library and the majority of our customers is still using java 8. Since java 8 is getting a bit rusty, we would like to be able to use new language features of newer java versions, say java 17, at compile time, without shutting older customers down. Is there any possibility to achieve this?
To be precise: I only want to use new language features like var, not new APIs.
How do library-owners usually deal with this?
One solution is to release a new major version of your library for JDK 17, and keep the current major version for clients using JDK 8. You would then have to maintain both versions for a while, until your most important customers have migrated to JDK 17 themselves.
When you want to release new features, you would then use a new minor version for each of the two major versions.

Which free version of Java can I use for production environments and or commercial purposes?

While I was in a dockerization project in my current job, I got this doubt: Which Java can I use?
This doubt is due to :
So after some researches I got these conclusions:
Since the Java 8 update at April 16, 2019 8u221, all versions and updates for (Java 8, 9, 10, 11 and 13) has no cost just for personal use and development purposes. Any other use, needs a Commercial License
Legacy versions prior to 7, does not have and will not have any update. Maybe a sales contact could be a solution if an update in these versions are required for Legacy Systems Support.
If I want to use Java 8 oracle version for commercials purposes and FREE, I need to use a previous version of April 16, 2019 8u221 update
Questions
According to my conclusions:
If my development strictly needs or was developed with JDK 8, Can I only use Oracle Java SE 8 JDK 8u202 and earlier versions for FREE and commercial purposes accepting issues and security problems?
If I can change my development and I want still FREE, and I want to have improvements and security updates, I must use one of these java open implementations?
References
End of Public Updates for Oracle JDK 8
The Oracle JDK License has changed for releases starting April 16, 2019.
Official List of updates and release versions
Java official supported versions
Oracle Java 8 download alert
Oracle Java 8 unsupported but free version
Java 4 legacy official download page
Java 5 legacy official download page
Java 6 legacy official download page
Java 7 legacy official download page
Update 2021-09
For versions 8 through 16, Oracle required a fee if their own Oracle JDK product was used in production, but not for dev, test, and training usages.
For Java 17, the Oracle JDK product is available under a new
No-Fee Terms and Conditions license, discussed on the Oracle
company blog.
On my first reading, it appears this new license makes production use free-of-cost (along with dev, test, and training usages), except for products sold for a fee while bundling the Oracle JDK product. But I am not an attorney, so read the terms yourself and consult legal advice as needed.
Keep in mind that many other vendors continue to provide implementations of the Java specs, as shown in the flowchart below. Some of these vendors sell support plans, either optionally or as a requirement for use of their product. Never assume, always read the detailed requirements for any distribution you obtain.
Another 2021 update: Add Microsoft to the list of vendors seen below.
Several vendors offer a choice of Java implementations
The Answer by Speakjava is correct and informative.
In addition, here is a flowchart I made to guide you in choosing a vendor for a Java implementation.
Or another way to view this: Your particular motivations or situation.
Oracle made a number of significant changes to how the Java platform is developed, distributed and updated at the same time as the launch of JDK 9.
The key facts to answer your questions are these:
Oracle was using the Oracle Binary Code License (OBCL) for Java. This had field of use restrictions (you needed a commercial license for embedded use) but granted free use of the Oracle JDK for general purpose development and deployment.
As of JDK 11, the license changed to the Oracle Technology Network License Agreement (OTNLA), which requires you to purchase a Java SE Subscription for use in commercial production. This license has also been applied to updates of JDK 8 since April (update 211/212).
As of JDK 11, Oracle eliminated all functional differences between the Oracle JDK and a binary built purely from the OpenJDK source code. The important things no longer in the Oracle JDK 11 are the browser plugin, Java Web Start and JavaFX.
You can continue to use any public Oracle binaries of JDK 7 (and earlier) in production without the need for a Java SE subscription, as the license is still the OBCL (it has not been changed retrospectively). You can also, as you say, use JDK 8 up to update 202 under the OBCL without cost.
There are several options for continuing to use JDK 8 with updates for free. One of those is Zulu Community from Azul (who I work for). This is a free, TCK-tested binary with a couple of additional backported features (TLS 1.3 and Java Flight Recorder). Since this passes the TCK, from a functional perspective, it is identical to the Oracle JDK. Unless you are using Applets or Web Start your applications will work in the same way as with the Oracle JDK.
If you want to move to JDK 11 (the current long-term support release, as defined by Oracle but followed by all other JDK providers), then you will need to choose one of the free distributions (like Zulu Community).
It is highly recommended to ensure your JDK is up to date and contains all relevant security patches. Continuing to use an older version could expose you to significant security exploits.
Summary
If you need to have java in your production servers for free, your have two options
#1 OpenJdk
The OpenJDK is the open source reference implementation of the Java SE Specification, but it is only the source code https://github.com/openjdk
Binary distributions are provided by different vendors for a number of supported platforms.
One of them is https://jdk.java.net/java-se-ri/19 which is maintained by Oracle:
Source: https://whichjdk.com
#2 Customized by Third Parties
Amazon Corretto
https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html
Zulu
https://www.azul.com/downloads/zulu-community/?architecture=x86-64-bit&package=jdk
Licences OTN vs BCL
Oracle JDK 8 (aka 1.8) no longer uses BCL (Binary Code License). From April 16, 2019, Oracle JDK 8 uses the OTN (Oracle Technology Network) license, which requires you to create an Oracle account to download JDK 8 and payment!!
BCL = Oracle Binary Code License
You can use it, but you can't modify it
You agree not to sue Oracle if anything goes wrong
You can redistribute/publish it (so that you can sell products with Java embedded), but if you do, you agree to indemnify Oracle; so if someone sues you, you can't drag Oracle into it.
It's really just there to protect Oracle's intellectual property and to shield them from being sued when bugs are found.
source: https://www.quora.com/In-short-what-does-the-Oracle-Binary-Code-License-Agreement-for-Java-SE-actually-say-or-prohibit/answer/Jon-Harley
As a summary: FREE with risks and without any fault of Oracle
OTN = Oracle Technology Network License
As a summary: Opposite to BCL and FREE just for development in your laptop. For enterprises, you must PAY
OpenJDK and Oracle JDK
Both OpenJDK and Oracle JDK are created and maintained currently by Oracle only.
OpenJDK and Oracle JDK are implementations of the same Java specification passed the TCK (Java Technology Certification Kit).
Most of the vendors of JDK are written on top of OpenJDK by doing a few tweaks to [mostly to replace licensed proprietary parts / replace with more high-performance items that only work on specific OS] components without breaking the TCK compatibility.
Source: Differences between Oracle JDK and OpenJDK
Free official options
Here I will list and keep updated the official links, ready to download the most used java versions
Openjdk 19
https://jdk.java.net/java-se-ri/19
Openjdk 17
https://jdk.java.net/java-se-ri/17
Openjdk 11
https://jdk.java.net/java-se-ri/11
apt-get update
apt-get install openjdk-11-jdk
Oracle Java 8 update 202
Just Java SE 8 JDK 8u202 and earlier versions are free for development and production deployment. You can download it from:
https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
Openjdk 8 (Deprecated)
OpenJDK is a ORACLE initiative. More details here: https://adoptopenjdk.net/
compressed mode
You can download the latest v8 release from here. Latest version:
https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_x64_windows_8u292b10.zip
https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_x64_linux_8u292b10.tar.gz
I can't find the version for osx :(
Follow this to download using curl
install mode
apt-get install openjdk-8-jre (just run apps)
apt-get install openjdk-8-jdk (develop and run)
From https://openjdk.java.net/install/
Oracle Java 1.4, 5, 6 and 7 (Deprecated)
Oracle does not show any message related to license changes for Java 1.4, 5, 6 and 7 downloads. So we can use them for development and production deployment, accepting issues and security problems because these versions are so ancient!!
Oracle downloads:
https://www.oracle.com/java/technologies/java-archive-javase-v14-downloads.html
https://www.oracle.com/java/technologies/java-archive-javase5-downloads.html
https://www.oracle.com/java/technologies/javase-java-archive-javase6-downloads.html
https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html
Legacy versions prior to 7, does not have and will not have any update. Maybe a sales contact could be a solution if your have a Legacy Systems running over this java old versions.
Free From Trusted Third Parties
Zulu Community (Java 6,7,8,11,13,14,15)
https://www.azul.com/downloads/zulu-community/?architecture=x86-64-bit&package=jdk
Amazon Corretto (Java 11)
https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html
Eclipse OpenJ9
https://www.eclipse.org/openj9/
More third parties
The following implementations, listed in alphabetical order, are open source and free to use:
AdoptOpenJDK
Azul Zulu
Bck2Brwsr
CACAO
Codename One
DoppioJVM
GraalVM CE
HaikuVM
HotSpot
Jamiga
JamVM
Jelatine JVM
Jikes RVM (Jikes Research Virtual Machine)
JVM.go
leJOS
Maxine
Multi-OS Engine
RopeVM
uJVM
NON-FREE options
You should pay for these versions but in return you will have a lot of features suported by Oracle or another third parties
Oracle Java
https://www.oracle.com/java/technologies/downloads/
Java 19
https://www.oracle.com/java/technologies/downloads/#java19
Java 17
https://www.oracle.com/java/technologies/downloads/#java17
Java 11
https://www.oracle.com/java/technologies/downloads/#java11
Oracle Java 8 update 221
Since the java 8 update at April 16, 2019 8u221, all versions and updates for (java 8,9,10,11,14) has no cost just for personal use and development purposes. Any other use, needs a Commercial License.
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html latest update 251
https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html previous updates (241,231,221,212,211)
Source: https://www.baeldung.com/oracle-jdk-vs-openjdk
Proprietary Implementations
There are also other private or commercial implementations:
Azul Zing JVM
CEE-J
Excelsior JET (Discontinued)
GraalVM EE
Imsys AB
JamaicaVM (aicas)
JBlend (Aplix)
MicroJvm (IS2T – Industrial Smart Software Technology)
OJVM
PTC Perc
SAP JVM
Waratek CloudVM for Java
Source: https://www.baeldung.com/oracle-jdk-vs-openjdk
Notes
Oracle Java 9 and 10 has reached end of support.
https://stackoverflow.com/a/50333498/3957754
More References
Differences between Oracle JDK and OpenJDK
https://whichjdk.com/
https://www.openlogic.com/blog/java-experts-openjdk-vs-oracle-jdk
https://www.oracle.com/technetwork/java/javase/overview/faqs-jsp-136696.html
https://www.oracle.com/downloads/licenses/javase-license1.html
https://openjdk.java.net/projects/jdk8/
https://www.oracle.com/java/technologies/javase/8u-relnotes.html
https://gist.github.com/jrichardsz/83db09163ca9a0db4c9cd4f91cbf0598/
https://jdk.java.net/archive
Starting JDK 17 (September 2021)
Oracle JDK 17 and later are provided under a free-to-use license that lasts until one year after the subsequent LTS release. After that time, the Oracle JDK becomes under OTN license.
Here's a related FAQs page that explains more, but here's a summary extracted from that page:
Oracle OpenJDK releases are under GNU GPL v2 with the Classpath Exception (permits free production use).
Oracle JDK 17 and later is available under the Oracle No-Fee Terms and Conditions License which permits free use for all users.
Previous Oracle JDK releases remain under the OTN License Agreement for Java SE.
"Oracle will use the NTFC for JDK 17 and later releases. LTS releases, such as JDK 17, will receive updates under this license for one year after the release of the subsequent LTS. After the free use license period, Oracle intends to use the OTN License, the same currently used for Java 8 and 11 LTS releases, for subsequent updates. Non-LTS releases such JDK 18 will be available for their entire planned six months support life under the NFTC."
Sources:
https://blogs.oracle.com/java/post/free-java-license
https://www.oracle.com/uk/java/technologies/javase/jdk-faqs.html
Now,You can use JDK/Java 17, in JDK/java7 download page(https://www.oracle.com/java/technologies/downloads/) ,you can get this comment:
Java 17 LTS is the latest long-term support release for the Java SE platform. JDK 17 binaries are free to use in production and free to redistribute, at no cost, under the Oracle No-Fee Terms and Conditions License.
JDK 17 will receive updates under these terms, until at least September 2024.

What is the reason to use OpenJDK?

I somehow understand the differences between Oracle JDK and Open JDK.
But I can't find reasons to use Open JDK.
Because Oracle JDK already has everything one would need and sometimes faster than Open JDK.
In which cases should someone use Open JDK?
Is it just for legality issues?
If yes, then what are issues?
That because I have been still develop all my projects using Oracle JDK
Other Answers are correct. Here is some other information as well, including vital changes as of early 2021.
Source-code versus Binaries/installers
understand the differences between Oracle JDK and Open JDK.
To sum it up: source-code versus binaries/installers.
OpenJDK is an open-source project, implementing the Java Specifications, JSRs, and JEPs that define the Java platform. This project publishes only source-code, not binaries or installers to get Java running on your computer (except for some early-access builds). Oracle is the principal participant in the OpenJDK project, alongside IBM & Red Hat, Apple, SAP, Azul Systems, Microsoft, and others.
Many companies provide distributions of OpenJDK for installation, as binaries or installers. Oracle is one such company.
Oracle actually provides two such products:
Oracle JDKA commercial product, with paid support plans. (Free-of-cost only for development & testing, not deployment. Read their terms.)
jdk.java.netA build of the OpenJDK source-code, freely available, unsupported.
Oracle has declared their intention to keep their commercial product Oracle JDK at feature-parity with OpenJDK. Oracle even went so far as to open-source and make available at no cost their formerly commercial tools Mission Control and Flight Recorder, both now a part of OpenJDK. So there is nearly no practical difference. One significant difference is that the Oracle company reserves the right to rapidly supply their paid support customer base with urgent patches not currently found in OpenJDK. Ditto for other vendors selling support.
[And for the record, Oracle offers a third implementation of Java, GraalVM, which is a very specialized product.]
Here is a flowchart graphic I made to help guide you in selecting a provider of a Java implementation.
And here is a list of motivations you might consider in choosing a distribution.
November 2017: At the time this question was asked, the reasons for choosing between OpenJDK and Oracle JDK include:
Availability of builds / installers for specific platforms. For example, last time I checked there were no Oracle JDK distros in ".deb" format for Debian / Ubuntu. And no OpenJDK builds for Windows.
Oracle JDK has some commercial features that can be enabled by people who have paid. They are not present on OpenJDK.
Oracle JDK has an annoying click-through license. This is a pain if you are trying to automate deployment; e.g. to cloud VMs. By contrast, OpenJDK on Linux (at least) can be installed and updated using the platform's package manager.
There may be issues if you wanted commercial support for OpenJDK.
There were no substantive license differences between Oracle JDK and OpenJDK if you just plan to use the software. (There are some constraints on binary redistribution for Oracle JDK, but they are about shipping non-standard or stripped-down versions of the Java platform.)
In the future, some of these differences will go away, according to this blog page:
Faster and Easier Use and Redistribution of Java SE
Update in December 2018:
As of January 2019, Oracle JDK Java 8 will be EOL for commercial uses. (But free support will continue until January 2020 for personal use.)
1
Java 9 and Java 10 are EOL.
Commercial uses of Oracle JDK Java 11 and later require a support contract or a subscription from Oracle. OpenJDK Java builds do not have this requirement.
Oracle do not provide support for OpenJDK Java builds, but support is available from 3rd parties. Third parties will also port Oracle security fixes to OpenJDK builds.
Further reading:
Java Is Still Free
OpenJDK Life Cycle and Support Policy (RedHat)
The future of Java and OpenJDK updates without Oracle support
What has changed in Java Release and Update Availability? (Azul Systems)
AdoptOpenJDK Support
1
EOL stands for end-of-life.
An end-of-life (EOL) product is a product that does not receive continuing support, either because existing marketing, support and other processes are terminated, or it is at the end of its useful life.
OpenJDK comes tightly integrated with the distribution update process. For example, on Fedora, this means that you simply can run
dnf update
without activating third-party repositories, and you will get the latest OpenJDK version with all relevant fixes.
OpenJDK is tested by the distribution vendor on this particular distribution. Oracle has different reference platforms for testing of OpenJDK. In the case of Fedora, software written in Java is tested with the OpenJDK version provided by the distribution, while the combination of that software with Oracle JDK receives much less testing.
Oracle also bundles their Java downloads with additional software such as browser toolbars, performance measurement and monitoring tools.
For those, who read this in 2019.
Java SE 8 is the last Java SE release targeting Desktop deployment (eg, Java Web Start and a stand-alone system JRE). Java SE 8 will be end of public updates in January 2019, after which commercial users need to either transition to other technologies, or purchase a Java SE Subscription.
So, another reason to use OpenJDK (in addition to what Stephen C said): it's free of charge for all purposes.

Oracle JDK and OpenJDK in production environment

Is it possible to change from Oracle JDK to OpenJDK in production environment specially for JAVA EE applications?
Theoretically Yes. However in practice, There are many projects that work fine on Oracle JDK but not on OpenJDK and vice versa.
Since even a simple patch update of your JDK may lead to problems in your system, you have to thoroughly test the compatibility in a test environment first before moving in production.

Categories