Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

InfoQ Homepage News Java Turns 20

Java Turns 20

This item in japanese

Twenty years ago today, the first alpha release of the Java language was released for Solaris operating systems, bringing a fresh language and a virtual machine that promised to allow code to be write once, run anywhere. Although Java didn't hit 1.0 until the following year in 1996 the release on May 23 started off a significant change in the programming language landscape, and quickly rose to the top of the TIOBE rankings where it has been (along with C/C++) ever since.

Java originally started off in 1991 as a dialect of C++ and later a new language called Oak as part of the Green project, targeting an abstract virtual machine that ran on embedded hardware in set-top boxes. Although set-top boxes didn't become a significant strategy for Sun Microsystems at the time, Java would return to embedded hardware later in its life. Its inclusion as an OS for PDAs as early as 1992 showed promise, but its real leap to fame came when it was ported as a general programming language for computers. Oak became Java in 1994 in order to satisfy trademark requirements, initiating a bevy of coffee-related puns in the Java ecosystem, including the 0xCAFEBABE magic value used by the class file format.

By 1995 Java was released as an alpha for Solaris initially, followed by Windows a month later. These would ordinarily have gone unnoticed except for a key fact; in the Sun World conference in May 1995 the HotJava browser was released (including Applet support); and Marc Andreessen announced that Netscape had licensed Java and would provide an embedded download as part of Netscape Navigator 2.0, which was released in September 1995. Early alpha versions of the JDK were available for testing and building cross-platform applets that could be hosted on the early internet websites, which at the time was not possible. LiveScript, created in a matter of days for interactive pages (called Dynamic HTML or DHTML at the time). To fit in with the Java bandwagon, LiveScript was renamed JavaScript and the name has stuck ever since.

Java 1.0 was released officially in January 1996, and although initially buggy the Java 1.0.2 release went on to become a significant milestone in Java's history. Java 1.1 came shortly afterwards in February 1997 introducing database connectivity through JDBC which together with the increasing scope of the internet and Java's ease of use via Applets cemented Java as an enterprise language for time to come. Importantly the Java 1.1 release introduced a Just-in-Time compiler for faster execution, although it would be some time later before developers stopped referring to Java as an 'interpreted language'.

Java 1.2 came out in December 1998 and introduced the first of a significant set of changes to the language, with inner classes. It also introduced Java's fractured versioning, introducing the Java 2 moniker which subsequently led to J2EE (and retroactively J2SE). Java 1.2 also introduced Swing as a core component; it had been made available for Java 1.1 under a com.sun.swing name as an optional download, but for Java 1.2 the new javax package namespace was created (to distinguish it from the 'core' Java libraries). Swing was created as a partnership between Netscape and Sun and originally known as Java Foundation Classes (or JFC). Java 1.2 also begat J2ME which was used as a cross-platform programming environment for low-powered devices and (dumb)phones in the days of limited LCD screens and physical keypads. Java's adoption on mobile phones was successful but lack of updates to the programming environment coupled with lack of integration with the phone's features (contacts, infra-red ports etc.) meant that J2ME applications tended to provide simple games rather than extensive utilities. (When Java did take off on mobile phones some years later, it was under the Android variant and not the JVM.)

Java continued to advance with improved JVM support with Hotspot for Java 1.3 (released May 2000) and JavaWebStart in Java 1.4 (released February 2002). However, it wasn't until Java 1.5 (released September 2004) that significant changes to the language occurred with the introduction of generics. These allowed container classes such as List and Map to specify what kind of objects they contained, though to maintain backward compatibility with prior versions the type information was erased at compile time and thus not available at runtime. Later languages such as C# learnt from this mistake and kept the type information available at runtime as well.

Java 1.6 (released in December 2006, now known as Java 6) didn't add significant new features to the language, but did mark a turning point for the worse. After Java 1.6 was released there was a significant delay in new versions due to Sun Microsystem's elongated financial woes and ultimately sale to Oracle in 2010. External work all but stopped during this time, with only security patches released in the intervening times.

Java 7 (released July 2011) proved that Oracle was able to keep its promise in revitalising Java, introducing new language features for only the third significant time in Java's language. Simple syntax features such as allowing underscores in numbers and empty diamond operators alleviated some of the minor niggles in writing Java programs, whilst others like strings-in-switches and try-with-resources allowed small but useful enhancements to reduce code verbosity. Java 7 also introduced the first new bytecode operator invokedynamic since bytecode was created, although it was largely unused by the Java language.

Java 8 (released March 2014) brought significant new features, including lambda support, significantly more powerful date and time API, and performance improvements with garbage collection and the removal of the permgen area.

With Java's upcoming release 9 (scheduled for September 2016) bringing even more significant changes to the runtime for performance and size enhancements, and with Java still leading the TIOBE index, it's clear that Java still has many productive years ahead.

As for the embedded hardware goals which Java originally set its sights on, although the set-top-box and PDAs didn't take off at the time, the JVM and the Java language live on in every mobile SIM card, which runs JavaCard that has been deployed in over 9 billion devices. Java also runs in every Blu-Ray player widening the net even further. 

Oracle have created a history of Java timeline site and a Java 20th anniversary page to celebrate.

Rate this Article