Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

InfoQ Homepage News Java 1.0 Turns 25

Java 1.0 Turns 25

This item in japanese

Lire ce contenu en français

On January 23rd, 1996, Sun Microsystems published a press release announcing the availability of Java 1.0:

Palo Alto, CA - January 23, 1996 - JavaSoft, the newly-formed operating company of Sun Microsystems, Inc., today announced that the Java™ 1.0 programming environment is now available for download at 

"Java's write-once-run-everywhere capability along with its easy accessibility have propelled the software and Internet communities to embrace it as the de facto standard for writing applications for complex networks," said Alan Baratz, JavaSoft's newly appointed president. "We're delighted to invite developers to download Java 1.0 immediately and start building the next killer application."

"Improving Java to create this strong 1.0 general release has been a great achievement for our team," said Ruth Hennigar, general manager of Java language and applications, JavaSoft. "Since our first alpha release to the web in March we have received a lot of developer feedback and have improved functionality and reliability. This release incorporates the components that software developers have told us they need -- the Java Applet Viewer for running and testing applets; the Java Compiler; a prototype debugger and the Java Virtual Machine to run Java-based programs. We've also included class libraries for graphics, audio, animation and networking."

Sun had released alpha versions of Java through 1995, including having its technology available in Netscape Navigator and Mosaic, but the release of the 1.0 version (followed by 1.0.1 and 1.0.2 shortly thereafter) marked the start of a journey which continues to this day. Oracle celebrated Java's 25th birthday of its alpha release last year.

The initial success and widespread availability of the up-and-coming internet helped bring Java to the masses, and the fact that the compiler and libraries were available for free was a big change from the availability of tools at that time. Open-source projects like gcc predated it by a decade, but most operating systems only had commercially available tools for building interactive graphical software. The fact that applets could be written, published to the internet, and then made available to run on a variety of different operating systems was unique at the time.

In the initial press release, Sun Microsystems said that Java 1.0 was available for Solaris, Windows 95 and Windows NT, and a release for macOS was promised by the end of the following year. When Apple and NeXT merged to create macOS, Java was a default install for the operating system, and the Objective-C runtime was bridged to Java to have JavaWebObjects, a Java-ised port of the Objective-C WebObjects stack. (The legacy of the Java WebObjects stack can still be seen today in some WebObjectApplications, or .woa extensions, on some of Apple's sites.) IBM promised to provide ports for OS/2 and Windows 3.1, and has been a Java licensee ever since.

Although Java has evolved over the years, the core of the JVM has maintained stability – to the point where applications compiled with Java 1.0 can still be run on modern JVMs, albeit much faster. The bytecode format has (largely) remained unchanged; instead, the evolution has introduced few bytecodes (e.g. invokedynamic) and additional attribute types (module-info) as time has progressed. Some, like generics, were introduced in a backwards compatible fashion in Java 1.2 requiring no changes, so that they could continue to run on older JVMs.

Sadly, JVMs were often used as a vector for security vulnerabilities and frequent updates to the JVMs in browsers were required to stay safe. As the popularity of other in-browser plugin types (like Flash, which we said goodbye to earlier this month), Java was relegated from the browser to the server, where it grew in popularity with the J2EE platform (now JakartaEE). In-browser technologies continue to be a vector for malware, except this time the JIT that is being targeted is the one executing JavaScript, whose name owes its existence to Java's early release into browsers but is otherwise unrelated.

Java has rarely been out of the top of the programming tables over the intervening period, trading places with C for the top two spots, and with Android's release using the Java source code (if not the name) for powering its Dalvik VM applications, looks set to stay with us for another decade. The continuation of C-like syntax and its adamant following of semi-colon-at-the-end-of-the-line may look dated, but at the time gave C developers an easy transition into the language. Unlike C programs compiled in 1996, Java applications still run -- and significantly faster, thanks to the evolution of 32-bit and then 64-bit JVMs and advanced garbage collectors like Shenandoah and ZGC.

Java's success in the embedded space -- which after all, was originally designed as a set-top-box programming language -- isn't nearly so visible. Although Java is present on Blu-Ray and the JavaCard specification in SIMs and PIN chips, it perhaps didn't set a revolution off in the IoT world. However, embedded Java is lucrative and one of the reasons for the Oracle purchase of Sun Microsystems, who continues to steward the language and the runtime in an open environment to this day, including the release of OpenJDK which brought GPL to the codebase (although Java was freely available, it wasn't open-source until after the acquisition).

Perhaps Java's lasting legacy is not just bringing object-orientation to internet-enabled browsers, but the JVM itself. As both Java (and for that matter, JavaScript) have shown, if you have a language where the runtime is processor agnostic (JVM bytecode, JavaScript source code, WASM) then an execution or translation engine can then execute that code regardless of platform. This, more than anything else, has allowed the hardware to evolve – from 32-bit to 64-bit, from PowerPC to ARM to RISC-V – and still not require any compiled code changes from the original author.

The JVM is no longer used by Java alone, but by other languages built on top of it such as Java-inspired derivatives like Kotlin and Scala, to non-Java languages like JRuby and Jython. Oracle's Truffle and GraalVM projects show how you can build a JVM on top of Java and optimise languages that wouldn't otherwise be able to take advantage of those run-time optimisations. And as Java the language evolves, introducing lightweight threads and records, those changes will move the JVM forward to support more exotic runtimes in the future.

Java and the JVM may be approaching middle-age, but they've got decades of use and improvements still to come.

What was the first version of Java that you used? Let us know in the comments below.

Rate this Article