A Brief History of Java Licensing 

(Last updated November, 2021)

In 2017, Oracle announced that it would slow the cadence of maintenance of OpenJDK, the open source version of Java’s standard edition (Java SE). This change in policy represented a watershed moment in the technology landscape. Java is on almost every desktop and server used today. What is it, and how has its zigzag licensing history affected the business world?

Java Development

Today’s computing involves so much standardization that, for many of us, Java’s original and audacious premise can be hard to fully appreciate. Java is a programming language platform, designed to enable software engineers to build applications that they can “write once, run anywhere” (WORA).

Before, applications written in most languages needed to be re-compiled (or even re-written) before they were deployed on a new platform. WORA made a single Java program work across various platforms. WORA was made possible by the Java “virtual machine” (JVM) – a processing layer interposed between the operating system and the Java application. Instead of recompiling the application for each platform, one merely needed to install the VM for that platform, and run the application. WORA made Java one of the most popular programming languages of all time. Today, much software developed is accomplished using language platforms, including Java.

The Java programming language was developed in 1991 by a team of software engineers at Sun Microsystems. In 1995, Sun made the first version of Java publicly available free of charge. Quickly, Java was widely adopted. Sun was a vendor of high-end computer workstations, so from a business viewpoint, Java was a sweetener to ensure that Sun workstations could run applications written for other, cheaper operating systems with broader adoption. Like UNIX before it, Java was a freely available byproduct that gave the value of the business that created it a run for its money.

By the end of 1995, Java was incorporated into both the Netscape Navigator and Internet Explorer internet browsers, as they started vying for the spot of internet’s top browser in the First Browser War. Today, Java is one of the most widespread languages used for business applications.

Open Source Release

In the beginning of the 21st century, intensifying peer competition, coupled with the rise of open source software, started to chip away at Sun’s server market share. Meanwhile, the ubiquity of Java caused open source software advocates to call for an open source release of Java. After all, Java was already free of charge under a limited license, but it was not yet “free software.” 

In 1998, the Free Software Foundation began a project to reimplement the Java standard libraries under an open source license. This project was called “Classpath” and was released under a variation of the GNU General Public License (GPL) called the Classpath Exception (GPLv2+CPE). In 2007, in response to pressure from outside and within Sun, Sun released the Open Java Development Kit (OpenJDK) under an open source license. Because it would have been unclear whether integrating GPL-licensed Java standard libraries with proprietary applications would violate GPL, the Java platform became available under GPL2+CPE. The Classpath Exception allows developers to build programs using OpenJDK under non-GPL licenses, including proprietary licenses. In parallel with OpenJDK, Sun continued to offer SUN JDK, Java’s proprietary version of the Java platform. The Classpath project was orphaned following its last release in 2012, given that OpenJDK had been released. But the name of the GPL exception survives to this day, even though the exception is now applied almost exclusively to OpenJDK.

The Oracle Acquisition

In 2009, Oracle Corporation acquired Sun Microsystems, and with it, the rights to Java technology. In the years that followed, Oracle released Java under two builds: (1) OpenJDK (offered under GPLv2+CPE) and (2) OracleJDK (offered under the Oracle Binary Code License or BCL). Meanwhile, Oracle offered to grant alternative commercial licenses to Java, negotiated on a case-by-case basis. Although Java under either license was free of charge, the BCL did not allow modifications, underscoring Oracle’s concern that Java’s various editions,and particularly their interfaces, remain consistent. 

Phasing out Support of Free Java

In 2018, Oracle began a phased initiative to separate OpenJDK from its OracleJDK subscription business. Until that time, OpenJDK and OracleJDK were considered identical, or at least nearly so–in fact, the differences between them were the subject of much speculation. Also, during that time, many businesses struggled to separate their use of OpenJDK and OracleJDK, and the Oracle salesforce often leveraged developer missteps to sell licenses to OracleJDK.

Starting with Java 11, Oracle replaced the BCL with a new commercial license called Oracle Technology Network License Agreement for Oracle Java SE (OTN License). The OTN distinguished between personal and commercial users. For personal users, the OTN license allowed “personal use, development, testing, prototyping, demonstrating and some other uses” free of charge. However, developers (also called the “Oracle Technology Network”) wanting to use Oracle JDK for other, non-personal uses would be required to subscribe to a paid version of Oracle Java SE. 

Oracle also announced that January 2019 would be the last month for public updates for JavaSE 8 for non-Oracle commercial users (i.e. Open JDK). Meanwhile, for personal users of JavaSE 8, the deadline for public updates was December 2020. Besides updating its support roadmap, Oracle also changed its release cadence. For example, while Oracle JDK would be updated and supported continuously, OpenJDK builds would only get support for six months after release.

Accordingly, free public updates to Oracle JDK for commercial users of Java 8 have stopped. All the subsequent updates, including the April 16, 2019 update of Java 8, were released under the new OTN license. 

Security and OpenJDK

Because Java is so widely used, security concerns about its use are intense. Lack of patch releases for OpenJDK began to cause widespread concern, due to the increased security risk for its customers using the newly unsupported Java 8. In response, vendors such as IBM, Red Hat, AdoptOpenJDK, AWS, and Azul stepped in to offer maintenance free of charge, operating under the OpenJDK open source license. Those users of OracleJDK unwilling to pay Oracle for a commercial subscription had an option to switch from Java 8 to an open source version of Java SE 11, which has long-term support

Meanwhile, Oracle cleared up some of the confusion about the differences between OpenJDK and OracleJDK, stating that starting with Java 11, the OracleJDK and OpenJDK builds will be the same, barring “some cosmetic and packaging differences.”

New Freeware OracleJDK License Terms

After Oracle began offering OracleJDK under the OTN License, users started to move away from OracleJDK. Many developers had built their products with Java, relying on the  previous freeware terms, and they needed to pivot to address Oracle’s new licensing policies. This in turn led to a rise in popularity of community-supported versions of OpenJDK, discussed below. 

In November 2021, Oracle expanded the available rights for its free product, under its new No-Fee License Terms and Conditions. The license now allows internal use, including for developing and testing applications, and distribution “provided that You do not charge Your licensees any fees associated with such distribution or use of the Program, including, without limitation, fees for products that include or are bundled with a copy of the Program or for services that involve the use of the distributed Program.”

These expanded rights still do not enable free distribution of Java with proprietary applications, so developers are still turning to community-supported versions of OpenJDK, or electing to take licenses from Oracle, and factoring that cost into their product prices.

Community Stewardship

After Oracle announced limited support for OpenJDK, Red Hat undertook offering support of OpenJDK 6 and 7, and later OpenJDK 8 and OpenJDK 11–at least until 2024. This support included bug fixes and security patches.

Recent binary versions of OpenJDK are available from Eclipse Foundation under the Eclipse Temurin project,and commercial support of Temurin is available from Azul Systems, among others. Binary releases of Temurin that are community-supported are available from the Eclipse Foundation at https://adoptium.net/

 What this means for your business

Anyone using Java–which is just about every business–should ensure that it is using a maintained version of Java, and abiding by the license terms for the version being used. Large companies should audit their usage. It is very common for copies of OracleJDK to be downloaded in violation of company processes, or used outside the scope of the rights granted under Oracle’s freeware licenses. Companies that need to distribute Java with their products should assess whether they want to use community-supported OpenJDK or commercial OracleJDK, as the free license terms for OracleJDK do not allow distribution in commercial applications.

A detailed note on Java versioning and history:

Java versioning and branding is complicated. As of today, there is only one current Java platform: Java SE, which includes desktop and the Java virtual machine (JVM). Java ME is no longer used, and Java EE is now Jakarta EE, stewarded by the Eclipse Foundation. Originally, SE meant Standard Edition (such as for desktops), ME meant Mobile Edition (for mobile devices), and EE meant Enterprise Edition, but was actually a set of specifications. The numbering of Java versioning is counterintuitive, particularly the historical jump from 1.4 to 5.0.

Java is a language standard as well as a software package. The Java SE platform consists of various specifications created by Java Specification Requests (JSRs), and managed by the Java Community Process (JCP), which organizations can join by signing the Java Specification Participant Agreement (JSPA). Java innovation was once led in the JCP, but today, development is mostly done via OpenJDK, which is still developed by Oracle. 

The JSPA allows members to make and sell official implementations of JSRs, once they have been fully tested for compliance with the specification. There are a few implementations. Oracle provides the OracleJDK, and there are several other providers of official Java SE platforms and JVMs including Azul Platform Prime (Zing JVM) and IBM Semeru (Eclipse OpenJ9 JVM). Each JSR must provide a specification, a reference implementation (RI), and a technology compatibility kit (TCK). In order to certify compliance with the Java specification, one must license the Java SE TCK from Oracle and pass all of its tests. The TCK license agreement has significant obligations, and governs who can use the Java brand to call their implementation an official one. 

OpenJDK provides open source implementations of Java SE. Organizations that want to brand an OpenJDK-based implementation as Java can get access to the TCKs for free by signing the OpenJDK Community TCK License Agreement (OCTLA). OpenJDK Is a source-code only community. Building and testing Java runtime binaries from OpenJDK source code requires significant effort, and creates a high technical barrier to entry to the Java ecosystem. The intent of the Adoptium working group at the Eclipse Foundation is to share the burden of building and testing high-quality Java runtimes from OpenJDK source code. Adoptium also makes its build scripts and quality test suite available under the APACHE-2.0 license. 

Glossary:

  • JVM–Java Virtual Machine, the software that runs on a specific platform and allows that platform to execute Java programs.
  • Java SE (Standard Edition)–this is what most people refer to as Java.
  • OpenJDK–the open source code for Java SE.
  • OracleJDK–Oracle’s freeware and commercial licensed version of Java SE.
  • TCK–Oracle’s compatibility test kit for Java SE.
  • Java Community Process–the process by which companies participate in the setting of Java standards.
  • Jakarta EE–specifications extending Java SE with enterprise features such as distributed computing and web services.
  • OTN License–a license for OracleJDK that grants limited rights.
  • Temurin–the Eclipse Foundation’s JavaSE project, distributed by Azul.
  • Javascript–has nothing to do with Java!