1996 – 2026
Java Versions
Every public release of Java — Java 1.0 in January 1996 through Java 26 in March 2026 — with LTS status, Oracle and third-party end-of-life dates, and the major changes per version. Plus the Sun launch, the JCP, the Oracle acquisition, the API lawsuit, the OpenJDK split, the six-month cadence shift, GraalVM, and virtual threads.
The 1995 launch and Sun Microsystems
Java started as the Green Project inside Sun Microsystems in December 1990, led by James Gosling, Mike Sheridan, and Patrick Naughton. The brief: design a programming environment for next-generation consumer electronics — set-top boxes, interactive television, smart appliances — that would survive the multi-decade life of consumer hardware. Gosling's first cut was a language called Oak, named after a tree outside his office window.
The set-top box market never materialized. By 1994 the team had repurposed the runtime for the emerging World Wide Web, betting that small bytecode-compiled "applets" embedded in HTML pages would be Java's killer app. The HotJava browser, released in May 1995, demonstrated the idea. Java 1.0 went GA on January 23, 1996, and Netscape Navigator 2.0 — the first mass-market browser to run Java applets — shipped final on February 5, 1996. Navigator's dates collapse easily, and three of them are separate events: Netscape introduced the browser on September 18, 1995, but that day's press release puts the download in the future — a public beta "will be available next week." The betas that carried Java came later still, on October 10, 1995, and then only as the b1J build for Windows 95, Solaris and IRIX — the Windows 3.1, Macintosh and other UNIX betas were posted without Java. The final release is what put a Java runtime on ordinary desktops, and it is the moment Java became real to the industry.
"Write once, run anywhere" became Sun's tagline and a generational positioning bet against Microsoft's Win32. The intermediate Java bytecode abstraction, JIT compilation, and a managed memory model were the mechanisms; the real product was platform independence at a moment when "your Mac couldn't run your dad's PC software" was a structural fact. Java's ascent paralleled Linux's, and not by accident — both bet on platform-independence in the era when Microsoft's Win32 lock-in looked permanent.
The Java Community Process
The Java Community Process (JCP) was established by Sun in December 1998 as the formal mechanism for evolving the Java specification. Specifications became JSRs (Java Specification Requests); each JSR went through community review with a designated Expert Group. Sun retained final authority through the spec lead role on every Java SE JSR.
Notable JSRs over the years: JSR 14 (Generics, eventually shipped in Java 5), JSR 175 (Annotations), JSR 220 (EJB 3.0), JSR 310 (the new date/time API in Java 8), JSR 335 (Lambdas in Java 8), JSR 376 (Modules in Java 9). After Oracle's acquisition, Java SE moved most of its evolution into JEPs (JDK Enhancement Proposals) on OpenJDK, with the JCP continuing to formally bless the Java SE specification post-fact. Java EE evolution moved out of the JCP entirely with the Eclipse Foundation handoff in 2017 (see "Jakarta EE" below).
Sun v. Microsoft (1997–2001)
Microsoft licensed Java from Sun in March 1996 and shipped its own Java implementation in Windows. The licensed implementation diverged: Microsoft added Windows-specific extensions (J/Direct, RNI) and omitted parts of the Java spec required for portability. Sun sued in October 1997, alleging breach of the license agreement and unfair business practices. After a preliminary injunction in November 1998 and several years of litigation, the case settled in January 2001; Microsoft agreed to pay $20 million and stopped distributing its Java implementation in Windows. A separate antitrust settlement in 2004 had Microsoft pay an additional $1.6 billion.
The episode is the reason Microsoft pivoted to creating its own competing platform — .NET, announced in mid-2000 and shipping as 1.0 in February 2002 — rather than continuing to license Java. The C# language explicitly took inspiration from Java while diverging on generics (reified instead of erased), value types, properties, and other features Anders Hejlsberg had been advocating for at Borland. (Cross-link: .NET Versions.)
The Oracle acquisition (April 2009 / January 2010)
Oracle announced its acquisition of Sun Microsystems for $7.4 billion on April 20, 2009. The deal closed January 27, 2010 after EU competition review. Oracle inherited Java, Solaris, ZFS, MySQL (Sun had bought MySQL AB the year before), and Sun's hardware business. For Java specifically, the acquisition consolidated a runtime that had been quietly funded by Sun for fifteen years under a much more aggressive owner.
The early years were rocky. Java 7 had been Sun's planned 2008 release; it didn't ship until July 2011, eighteen months after Oracle closed. James Gosling left Oracle in April 2010, two and a half months after the close. The high-profile Oracle v. Google Java API copyright suit was filed August 12, 2010 (see below). Several members of the original Sun Java team left for Google, Twitter, and elsewhere. The community read the early period as Oracle squeezing every monetization angle — rebrandings, support-contract pushes, the 2018 commercial-license pivot.
From Java 9 (2017) onward the picture stabilized. Mark Reinhold's six-month cadence, the open development of OpenJDK on GitHub, the 2021 NFTC license that returned a free Oracle JDK for production use, the funding of Project Loom and Panama, and the multi-vendor OpenJDK ecosystem (Adoptium, Corretto, Microsoft, Red Hat) collectively produced the most active period of Java language and platform evolution since the J2SE 1.2 / 5 era.
Oracle v. Google — the Java API lawsuit (2010–2021)
Oracle America, Inc. v. Google LLC was filed on August 12, 2010, eight months after Oracle's acquisition of Sun closed. Oracle alleged that Android — which had reimplemented 37 Java SE API packages without a license — infringed Oracle's copyrights and patents in the Java APIs. The patent claims faded early; the copyright fight became one of the longest-running and most consequential intellectual-property cases in software history.
Eleven years, two trials, two Federal Circuit appeals, and a global pandemic later, the U.S. Supreme Court ruled 6–2 on April 5, 2021 that Google's reimplementation of the API declarations qualified as fair use. The Court's opinion deliberately sidestepped whether APIs are copyrightable in the first place — a question the industry had been desperate to settle — and ruled narrowly on the fair-use question.
The ruling validated a generation of clean-room API reimplementations (Wine, ReactOS, the entire Linux ABI compatibility story) and removed an existential cloud over open-source software. For Java specifically, it closed an eleven-year overhang on the entire platform's first decade. The Java-to-Kotlin shift on the Android side — Google announced first-class Kotlin support at I/O 2017, and shipped that support in Android Studio 3.0 — started years before the ruling. Cross-link to the Android version page’s Oracle v. Google section for the parallel platform-side narrative.
OpenJDK — the open-source pivot
Sun promised at JavaOne in May 2006 that Java would become open source and delivered the first installment on November 13, 2006, releasing the HotSpot VM and the javac compiler under GPL v2. The class libraries followed on May 8, 2007, under GPL v2 with the Classpath Exception that makes the runtime safe to embed in proprietary applications. The reference implementation became OpenJDK; Sun's commercial JDK and OpenJDK were essentially the same code from Java 7 onward. The decision was driven partly by Linux distributions: Red Hat, Debian, and Ubuntu had been unable to ship Sun JDK for years because of its proprietary license, and the gap had given GNU Classpath (a clean-room reimplementation, started in 1998) momentum it shouldn't have needed.
The 2018 dust-up around "Oracle JDK is now paid" was a licensing change to the Oracle-branded JDK distribution, not to OpenJDK itself; OpenJDK has remained GPL+CE throughout. Oracle reversed the production-charging posture in 2021 with the No-Fee Terms and Conditions (NFTC) license, first applied to Java 17, returning the Oracle JDK to free for production use. The reversal is narrower than it first reads: Oracle keeps only the newest LTS on NFTC terms and moves each older LTS's update releases to the paid Java SE OTN license about a year after its successor ships. Java 17 updates made that move in October 2024; Java 21 updates follow with the October 2026 Critical Patch Update, and Oracle has dated Java 25's own move to after September 2028 — leaving Java 25 the free Oracle line until then. That rolling deadline is the reason most cloud and enterprise deployments standardize on a non-Oracle distribution — Adoptium Temurin, Amazon Corretto, Azul Zulu, Microsoft Build of OpenJDK — whose GPL+CE builds carry no equivalent cutoff.
The six-month cadence (September 2017–)
Java 9 shipped in September 2017, three years late from the original 2014 plan. The delay was driven by Project Jigsaw — the JDK module system — which was contentious enough in the community to delay the entire release while it was reworked. Mark Reinhold, the chief architect of the Java Platform Group, used the post-mortem to make a structural change: time-boxed releases every six months instead of feature-driven multi-year cycles, with one release every three years designated LTS for enterprise customers who couldn't or wouldn't upgrade twice a year. Oracle shortened that LTS interval to two years in 2021, which is why Java 11 to 17 is a three-year gap and every gap since is two.
The cadence shipped its first release with Java 10 in March 2018 and has held since. It has been the single most consequential structural change to Java since the platform launched. The benefits: features that are ready ship when they're ready, instead of waiting on a release-blocker; previews and incubators let the community try features at scale before they're set in stone; the JDK can deprecate and remove old code on a predictable schedule. The downsides: enterprise customers who pin to LTS are perpetually two to four years behind the cutting edge, and the "what JDK should I use?" question has become substantially more nuanced.
LTS releases under the cadence: Java 11 (September 2018), Java 17 (September 2021), Java 21 (September 2023), Java 25 (September 2025), and Java 29 (planned September 2027). Each LTS gets five years of Oracle Premier support, then paid Extended Support — three further years on the recent lines (Java 17 to September 2029, 21 to September 2031, 25 to September 2033), and considerably longer on the older lines, where Oracle has stretched Java 8's Extended window to December 2030 and Java 11's to January 2032. Vendor distributions typically extend free public updates further on each LTS — Corretto and Temurin have the longest published roadmaps.
GraalVM
GraalVM began as a research project at Oracle Labs around 2011. The 1.0 line never reached a final build — it ran as release candidates into April 2019 — and the first production-ready release shipped as GraalVM 19.0 on May 9, 2019, when the project moved to calendar-style version numbers. Two pieces matter: the Graal JIT compiler (an alternative HotSpot JIT written in Java) and native-image (an ahead-of-time compiler that produces standalone executables with sub-100ms cold-start times). The native-image story is the Java answer to Go and Rust on serverless and microservice deployment ergonomics — small binaries, fast startup, low memory footprint — while preserving the Java language and BCL developer experience. Spring Boot, Quarkus, Helidon, and Micronaut all support native-image as a first-class deployment path. Licensing splits by edition: GraalVM Community Edition ships under GPL v2 with the Classpath Exception, the same terms as Oracle's OpenJDK builds, while Oracle GraalVM ships under the GraalVM Free Terms and Conditions (GFTC), introduced in 2023 with the GraalVM for JDK 17 and 21 builds — free for commercial and production use, but permitting redistribution only when it is not for a fee.
Project Loom — virtual threads
Project Loom, started by Ron Pressler at Oracle in 2017, set out to fix a structural problem in Java's concurrency model: thread-per-request code was easy to write but expensive to run, while async/reactive code was efficient but hard to read, debug, and instrument. Loom's answer was virtual threads — user-mode threads scheduled by the JVM on a small pool of OS carrier threads — that preserve the synchronous, thread-per-request programming model without the resource costs.
Virtual threads entered preview in Java 19 (September 2022) and graduated to stable in Java 21 LTS (September 2023). The release that Java engineers had been waiting on for a decade. The associated work — structured concurrency, scoped values — continued to mature through Java 22 to 26: scoped values reached stable in Java 25, while structured concurrency was still previewing in Java 26 (JEP 525, sixth preview). openjdk.org/projects/loom remains the project hub. Kotlin coroutines (stable in Kotlin 1.3, October 2018) and Swift’s async/await + actors (Swift 5.5, September 2021) are the two most influential contemporary takes on the same problem — the three languages converged on similar ergonomics from different starting points.
Project Panama — foreign function & memory
Project Panama, started in 2014, set out to replace JNI — the 1996-era C bridge that had stewed in its own complexity for two decades — with a modern, safe, performant native interop story. The deliverables are the Foreign Function & Memory API (call native code, manage off-heap memory) and the Vector API (SIMD intrinsics from Java code). The Foreign Function & Memory API graduated in Java 22 (March 2024); the Vector API has remained in incubator longer than any feature in Java history while the Valhalla value-type story catches up. openjdk.org/projects/panama.
Project Valhalla — value types
Project Valhalla, started by Brian Goetz around 2014, is the long-running effort to add value types (immutable, identity-less, flat-laid-out structs) to Java. The goal is the same as records but at the runtime level: avoid the boxed-object overhead for things that should be plain data. The project's complexity is largely about generics — making List<Point> store flat Point values rather than boxed Point references requires extending the type system in compatible ways. Twelve years in, the first shippable increment finally has a release attached: JEP 401, Value Objects, was targeted at JDK 28 on July 30, 2026 and is integrated in the main line, arriving as a preview language and VM feature when JDK 28 ships in March 2027; the companion JEP 539 (strict field initialization in the JVM) previews alongside it. A value class gives up object identity, so == compares field values and the JVM is free to lay instances out flat inside fields and arrays instead of chasing references. Earlier pieces of the project shipped as ordinary features along the way — records, sealed classes, and the identity-vs-value groundwork. openjdk.org/projects/valhalla.
Java EE → Jakarta EE
Java's enterprise edition — Java 2 Enterprise Edition (J2EE) in 1999, Java EE from 2006 — was always a distinct product from Java SE: a set of additional specifications (Servlet, JSP, EJB, JMS, JPA, CDI, JAX-RS, etc.) implemented by application servers like JBoss, WebSphere, WebLogic, GlassFish, and Payara. In September 2017, Oracle announced it would hand Java EE off to the Eclipse Foundation. The renamed project became Jakarta EE in 2018 (Oracle retained the "Java" trademark for the SE side). The javax.* package namespace was renamed to jakarta.* in Jakarta EE 9 (December 2020) — a once-in-a-platform breaking change that took most of the ecosystem several years to absorb. Jakarta EE 11 landed in stages — Core Profile in December 2024, Web Profile in March 2025, and the full Platform in June 2025, aligned to Java 21 — and introduced the Jakarta Data specification; Jakarta EE 12 is in progress. The jakarta.ee roadmap continues independent of Java SE's release cadence.
People who actually shaped Java
Sun era: James Gosling (Oak / Java's primary designer; left Oracle April 2010), Patrick Naughton and Mike Sheridan (co-founders of the Green Project), Bill Joy (Sun co-founder; long-time advocate inside Sun for a portable runtime), Guy Steele (JLS co-author, language design), Arthur van Hoff (HotJava browser, applets era), Joshua Bloch (Collections framework, Effective Java, BigInteger; later left Sun for Google), Doug Lea (java.util.concurrent; SUNY Oswego professor; wrote the concurrency library Sun adopted into the JDK in Java 5).
Modern OpenJDK team: Mark Reinhold (chief architect of the Java Platform Group; Mr. JEP), Brian Goetz (Java Language Architect; Java Concurrency in Practice; lead of Project Valhalla), Ron Pressler (Project Loom lead), John Rose (Project Panama lead; invokedynamic and the JVM's dynamic-language plumbing), Maurizio Cimadamore (architect of the Foreign Function & Memory API), Aleksey Shipilëv (long-time JVM and GC engineer; Shenandoah lineage; now widely-cited industry benchmarker), Stuart Marks (collections, JEP author).
Distribution / community: Stephen Colebourne (Joda-Time, java.time / JSR-310), Martijn Verburg (London Java Community, Adoptium founding contributor), Tim Ellison (IBM J9 / Eclipse OpenJ9 lineage), Gil Tene (Azul co-founder; advocate for low-pause GC), Andrew Haley (Red Hat OpenJDK lead). Public face: Venkat Subramaniam, Trisha Gee, Nicolai Parlog, Mala Gupta, and the JavaOne / Devoxx speaker rotation.