Recommended resources
The freely available resources this lesson will direct you to.
Hello! Last lesson, you separated Java’s portability promise into class-file compatibility, API linkage, and actual application behavior. That distinction raises a historical question: who decides what a compatible Java platform is, and how can it change without leaving existing programs behind?
This final lesson of the module builds a milestone timeline from Oak to the six-month release model. The dates matter, but the more useful story is how Java’s technical design, governance, and release process responded to different pressures. You can study it in three roughly 15-minute sessions, pausing after the JCP and OpenJDK chapters.
From a device project to a public platform
Java did not begin as a plan to improve enterprise programming. The project that produced Oak began around 1991 with software for varied electronic devices in mind. Those devices posed the hardware-dependence problem we examined earlier; the language and runtime were designed together to make deployment across unlike machines more practical.
Watch the opening of The Java Story, from CultRepo, for the change in destination. The participants describe an early interactive-television effort that failed, followed by the recognition that browsers offered another place for portable, downloadable software.
The Java Story | The Official Documentary
Watch the opening of The Java Story to hear the original problem and the subsequent pivot described by people involved.
In Oak's origins, focus on the intended devices and the unsuccessful television effort. Continue with the web pivot, particularly the HotJava demonstration and why distribution through an established browser mattered.
The distinction is between invention and adoption. Hardware independence was valuable for the first project, but the emerging web supplied a compelling distribution channel: a developer could deliver code to machines whose operating systems were not known in advance. Oak was renamed Java; its public debut came in 1995, and Java 1.0 followed in January 1996. The early browser application, or applet, made the portability argument visible, even though applets would not remain Java’s principal use.
Oracle’s JDK Releases page is a useful date ledger, not a narrative to read from top to bottom. Its older entries also help untangle names you will encounter in historical documentation.
Use Oracle's JDK Releases as a date check for the early timeline and a guide to historical product names.
In the chronological release table, use the page's search function to locate the January 1996 1.0 row within the earliest entries. Then find the 1.2.0 row dated December 1998 and the 5.0 row dated September 2004; do not read the intervening update releases. In "Java Release Naming and Numbering," read the naming overview immediately before the version-numbering table. Notice the Java 2 branding and the later return to JDK naming.
A version number and a product name are not themselves a change in execution model. “Java 2” accompanied the 1.2 era, while Java 5 was also seen as version 1.5 in developer-facing contexts. When explaining a historical decision, give the year and the platform change rather than relying on branding alone.
Compatibility needs governance: the JCP
Once multiple organizations build runtimes, libraries, and applications against a platform, publishing code is not enough. They need to agree on the contract an implementation must satisfy. This is where last lesson’s compatibility questions become governance questions: if a vendor omits a required API or adds a tempting vendor-only one, an application can work locally while losing portability.
The Java Community Process, or JCP, was introduced in December 1998 to formalize participation in developing and revising Java specifications. Read its stated goals before considering what it achieved in practice.
The Java Community Process(SM) Program - communityprocess - background.html
Read the JCP's own background account for its founding date and intended safeguards, rather than treating governance as merely a change of ownership.
On the "Background" page, begin with the introduction. Continue through "Java Community Process Program Goals," ending with the participation and testing goals. Focus on who could take part and why a specification needed both an implementation and conformance tests.
The documentary adds the surrounding tension. Its speakers discuss the need for industry participation while also acknowledging that Java was still controlled by its creator. Treat their judgments about particular organizations as participants’ perspectives; the portable-platform issue is the durable point.
The Java Story | The Official Documentary
Return to The Java Story for its account of why a formal process was established alongside the growing platform.
Watch JCP governance. Listen for the tension between broad participation and centralized control, rather than interpreting the JCP as proof that every participant had equal influence.
A Java Specification Request (JSR) is a vehicle for standardizing a Java technology. For a Java SE platform release, the contract encompasses the language, JVM, and standard APIs you distinguished earlier. A reference implementation shows that the specification can be implemented; a compatibility test suite checks an implementation against it. Neither document ownership nor source-code availability alone answers whether two runtimes conform.
This produces the first governance milestone in the timeline: 1998 changed how the platform’s rules could be developed and checked, not how the JVM executes a particular instruction. It also helps explain why Java could expand beyond the original browser setting while preserving a common platform contract.
OpenJDK changes who can build the platform
A published specification permits independent implementations, but that differs from having an open-source implementation that contributors can inspect, modify, and build together. Sun announced an open-source direction in 2006, and OpenJDK emerged in 2007. The documentary captures why people disagreed about the word open: some prioritized interoperable specifications; others wanted the rights and practical ability to change the implementation itself.
The Java Story | The Official Documentary
Watch The Java Story on the shift from access to specifications and viewable code toward a shared open-source JDK implementation.
Watch two meanings of openness, then skip to OpenJDK's emergence. The material between those ranges discusses other ecosystem projects; here, focus on the concerns about fragmentation and the work required to open the JDK codebase.
OpenJDK was not simply “the next Java version.” Java SE is a specified platform; OpenJDK is a project and codebase used to implement it; a JDK is a distribution developers can install. Those categories can overlap without becoming synonyms. In particular, a vendor’s distribution and its update policy are separate questions from whether its implementation conforms to a Java SE release.
The OpenJDK 6 genealogy image makes the distinction unusually concrete:

Notice the OpenJDK 6 branch appearing alongside ongoing JDK 6 updates and OpenJDK 7 development. The platform number 6 tells you the target release; it does not tell you that every JDK 6 build came from the same development branch. That is a useful distinction when discussing a security fix, a backport, or why two distributions bearing the same Java SE version may have different build histories.
Oracle stewardship and a different release clock
Oracle announced its acquisition of Sun in 2009; the acquisition was completed in 2010. That changed corporate stewardship, but it did not erase either the Java SE specification process or the OpenJDK codebase. Subsequent releases included Java 7 in 2011, Java 8 in 2014, and Java 9 in 2017. Java 8’s lambdas and streams are a reminder that maintaining compatibility did not mean freezing the language; later modules will examine how such features work.
Listen to the documentary’s account of the transition, then its explanation of the release-process change. The latter is more important to this timeline than attributing a feature to a company: it identifies a constraint on when completed work could reach users.
The Java Story | The Official Documentary
Use The Java Story to distinguish the change in steward from the later change in release strategy.
In the acquisition and the roadmap, note the participants' initial concerns and their account of subsequent planning. Then watch release cadence: concentrate on the cost of missing an old, infrequent release and why a fixed interval changes that incentive.
Under the older, content-driven approach, a large planned feature could put pressure on the release date: delay the release or defer the feature for years. With JDK 10 in 2018, the feature-release model became time-driven, with releases scheduled every six months. A feature that is not ready can miss one train without making the entire platform wait for it. Time-driven does not mean unfinished features must ship, nor does it mean applications must move to every new feature release.
Use the release ledger again, this time for its explanation of release types and the relationship between JSRs and JDK Enhancement Proposals (JEPs).
Read Oracle's explanation of what changed in the release model and how platform specifications are still standardized.
In "Java Release Types," read the "Feature Release" definition in the current-types table and the former Major Release entry in the table of release types no longer produced. In "Java Release Dates," read the scheduling overview; distinguish feature releases from security and maintenance updates. In "Java SE Platform," read the JSR components and, near the end, the JEP transition. A JEP describes and tracks a JDK enhancement; it does not replace the platform JSR that standardizes a Java SE release.
For your Java 21 environment, LTS is a further distinction. Java 21 is designated a long-term-support release in Oracle’s release ledger, but LTS describes an update-and-support commitment, not a different kind of JVM instruction or a guarantee that all vendors offer identical support terms. Feature releases, quarterly security updates to supported release families, and a vendor’s support policy operate on different clocks.
The milestone timeline, with its causal thread
Here is the compact timeline to retain. The third column is what makes it an explanation rather than a list of dates.
| When | Milestone | Pressure addressed or change made |
|---|---|---|
| Around 1991 | Oak project begins | Software for varied devices motivates a portable language and runtime. |
| 1995–1996 | Java debuts; Java 1.0 ships | The web offers a distribution setting for portable, downloadable code. |
| 1998 | Java 1.2/Java 2 era; JCP introduced | A growing platform needs coordinated specifications and conformance checks. |
| 2004 | Java 5 | A major language release shows that a mature platform still needs room to evolve. |
| 2006–2007 | Open-source announcement; OpenJDK emerges | Shared implementation work becomes possible alongside platform specification. |
| 2009–2010 | Oracle acquisition announced, then completed | Corporate stewardship changes while specification and open-source work continue. |
| 2011–2017 | Java 7, 8, and 9 | Substantial releases extend the platform; long gaps make missed release windows costly. |
| 2018 | JDK 10 begins the six-month feature cadence; JDK 11 follows | Predictable dates reduce pressure to hold a release for one unfinished feature. |
| 2023 | Java 21 LTS | A modern feature release also serves as a longer-term update target under applicable support policies. |
The timeline contains three different kinds of milestone: releases change what developers can use; governance establishes how the platform contract is agreed and tested; open-source development and stewardship affect who builds and maintains implementations. Mixing them together leads to misleading statements such as “OpenJDK replaced the JCP” or “LTS releases use a different Java language.” Neither follows from the history.
Closing perspective
Java’s journey is not a straight march from one feature to the next. Oak supplied a response to heterogeneous devices; Java 1.0 found a distribution opportunity; the JCP addressed a growing platform’s need for a common contract; OpenJDK opened implementation work; and the six-month model changed the cost of waiting for a feature. The recurring constraint is the one you saw last lesson: evolve the platform without casually breaking the programs and implementations that depend on it.
That completes the origins and architecture module. Next, we move inside the class file itself, beginning with the constant pool, methods, attributes, and version metadata visible through javap -verbose.