64

I saw that Java 1.2 is also known as Java 2. Do "Java 1.x" and "Java x" (for example "Java 1.6" and "Java 6") refer to the same version of Java?

And if yes, why the need for this duality?

gnat
  • 21,442
  • 29
  • 112
  • 288
Federico Zancan
  • 1,403
  • 2
  • 14
  • 19
  • 7
    Marketing reasons? –  Nov 08 '12 at 09:46
  • 14
    Still better than Mozilla Firefox. 10+ major versions in less than two years. – Andrzej Bobak Nov 08 '12 at 09:53
  • 2
    Yes, marketing reasons. [This SO question](http://stackoverflow.com/questions/2053061/is-java-1-6-the-same-as-jdk-6) is about the same topic. – Joachim Sauer Nov 08 '12 at 09:57
  • 2
    One could phrase it differently: Why did Sun (and now Oracle) release major updates (Java 5, 6, 7 and soon 8) as point releases (1.5, 1.6, 1.7 and soon 1.8)? – Joachim Sauer Nov 08 '12 at 10:00
  • Java version numbers are just a crazy mess (and I hear Solaris/SunOS is even worse). Just ignore them except as a total oredring of feature bundles. – Michael Borgwardt Nov 08 '12 at 10:59
  • 2
    @MichaelBorgwardt: to be fair, since Java 5 they've been consistent: Java 5, Java 6, Java 7 and Java 8 are the upcomming numbers. And the internal numbers are 1.5, 1.6, 1.7 and 1.8. So while it's not ideal, they at least stopped switching the numbering scheme with each release. – Joachim Sauer Nov 08 '12 at 11:09
  • Those who have been in the Linux community for some time might remember what happened to Slackware version numbers in 1999. Inside of half a year we saw 3.9, 4.0 and - drumroll please - **7.0**. [Wikipedia](http://en.wikipedia.org/wiki/Slackware#Releases) – user Nov 08 '12 at 13:29
  • 3
    @AndrzejBobak Google Chrome is worse, it's approaching 20 versions in 2 years – Izkata Nov 08 '12 at 13:58
  • The dot removal was partially influenced by various tech companies trying to pose their releases as more mature. There was a perception that a "*Product* 5" was more mature than "*Product* 1.5" This shift started predominantly in the late 90's and early '00s (for example Solaris 2.6 to 7 in '98). Windows 2000 rather than NT 5.0 (and windows 7 rather than NT 6.1). Companies that already had version numbers in the 5 or 6 range didn't change (Irix 5 and Irix 6, Mac OS 7, 8, 9). –  Nov 08 '12 at 14:44
  • 2
    @Izkata, Google Chrome's model is what Firefox is emulating because there was a sudden realization that there's no such thing as a minor version. All versions are different, and affect code differently. It's not like they're going to run out of numbers. – zzzzBov Nov 08 '12 at 15:19
  • 1
    @Izkata and zzzzBox : yes, but the major difference is that at least Chrome was rather consistent with this from the get-go. They did up the rate at which they issue releases, but the numbering as pretty much remained the same. Whereas FF took almost 10 years to go from 1 to 3, and then suddenly rocketed through the next version numbers. It's a bit weird when a product changes that system but doesn't go through a name-change to reboot itself. I think that was more the point of AndrzejBobak's mockery. – haylem Nov 08 '12 at 16:12
  • 1
    @haylem - "your speed of incrementing version numbers is too fast or too inconsistent" is arguably bad. "I don't know which version you mean when you say version 2" is definitely bad. – Nathan Long Nov 08 '12 at 16:25
  • @NathanLong: I have absolutely no clue what you are saying or asking me, sorry. I didn't say any of that, or maybe I just need to grab some coffee. – haylem Nov 08 '12 at 16:29
  • 1
    @NathanLong: after a few re-reads - quotes misled me a lot, maybe really needed coffee after all - I think I got it. I agree with you, but I think that I can know which version it is when you tell me version 2.1 or 2.2, as an advanced user. The Java way is to use major version when they are really significant changes. I'd understand if my browser was changing major versions when something major changes (like very prominent UI things, security features...). The rest, basic users don't care about. – haylem Nov 08 '12 at 16:35

4 Answers4

69

Sun Microsystems had back then a bad habit of going through numerous naming changes for its products, and to use confusing name to start with in the first place.

What's in a Name, or what does "Java" Mean?

Originally the term "Java" was being used to describe indiscriminately:

  • the language,
  • the platform,
  • and some others happened to refer to the JVM and the Java Class Lib as just Java as well.

Internal and External Number

With regard to version numbers, as others pointed out it was partly because of marketing, and partly because they simply felt like Java had done such progress a major version upgrade was better suited (for Java 1.2 / Java 2, and when Java 1.5 / Java 5).

So, what we call Java 2 was actually Java 1.2 to 1.4. Java 3 and Java 4 never existed, and we skipped directly to Java 5, as they tried to explain here (from this page on naming and versioning).

I was also probably a little as well to not mess with their internal numbering used in their tracking and development systems. I tend to think of it as 1.x = language version and X = language and product version. It makes sense, as normal users do not need to worry about minor increments and updates, as they encourage automatic updates, and these shouldn't introduce any changes to the language or the bytecode.

Note also that it gets weirder when you look at minor versions and update numbers. For instance, we had a Java 1.3.1 and later Java 1.4.1 and 1.4.2.

Updates

However, there were no 1.x.y ever since, it's always been 1.x.0_UPDATE:

Note also that you will also see updates refered to with either of these naming conventions:

  • like 1.5.0_22 or 1.7.0_04 (note the padding 0s on the update version, aligning on 2 digits),
  • but also 1.5.0u22 or 1.7.0u4 (note the padding 0s are gone, yay!).

And for extra confusion and to keep up with Sun Microsystems' tradition, Oracle now drops announcements like this.

Product Names

Note also that not only did they get into the habit of changing the numbering, but also the names of the product offerings. So, Java 2 have J2SE (Java 2 Standard Edition), J2EE (Java 2 Enterprise Edition) and J2ME (Java 2 Mobile Edition). Since the introduction of Java 5, these conventions and acronyms have been dropped (though some have an incredibly long resilience, mostly thanks for dumb recruitment agencies who have no clue what they are talking about) in favor of Java SE, Java EE and Java ME, which are sometimes abbreviated - but shouldn't officially - to JSE, JEE (fairly common) and JME.

Your read this page for more information about the current versioning system used by Sun Microsystems and now Oracle since Java 1.3.1.

(For bonus points, try to lookup the history of NetBeans now to see that it was also renamed a few times).

They Don't Know Themselves

They're also struggling to decide whether they should back-update existing references or not. For instance, this page about older releases uses the old numbering system for old releases, but the newer product names (Java SE 1.1, 1.2, 1.3 and 1.4 were not released with this naming convention).

Maybe they're just screwing with us for fun. Who knows?

What About the JVMS and JLS?

They had fun with naming and numbering there too, of course.

The Java Language Specification used to be released with a book "edition" versioning syste,, following product numbers. So:

  • Java 1 had its "Java Language Specification",
  • Java 2 had its "Java Language Specification, 2nd edition".

So far, so good.

Except the "Java Language Specification" was later only re-edited when language changes were introduced in Java 5 (which kind of make sense, you won't publish new book editions just for fun). As this was the 3rd time they were editing it, they called it (tada!) "Java Langauge Specification, 3rd edition".

But obviously, people then started to wonder why 1.3 and 1.4 didn't have a language spec, or why Java 5 was matched with a 3rd edition of the language spec.

So, Java 7 is now just calling it the "Java Language Specification, Java SE 7 Edition", though we often refer to this one as JLS7 for shorthand and to avoid RSI.


They're Not the Only Ones...

For additional fun, look at Microsoft Windows RT's naming fail, or Apple's naming and numbering madness with iPhones, iPads or even iPods.

haylem
  • 28,856
  • 10
  • 103
  • 119
6

The short answer: Marketing.

A longer answer: The short form (e.g. Java 6) is the so-called "product version" and is how Java is marketed to users and in press releases, etc.

The longer form (e.g. Java 1.6.0) is the "developer version". It is used internally, and will also be encountered by Java developers (e.g. The java.version system property uses the long form).

See these pages for more information:

GenericJon
  • 541
  • 3
  • 7
2

Because book with title "Learn Shiny New Java 3" will be sold out earlier than book with title "What's new in Java 1.3".

So yes, it is mainly marketing reasons. On the other hand, I don't see a severe crime here. After all, in some products, like Mozilla or Chrome, major build number is constantly get incremented, and others stick to incrementing minor build number, though, sometimes, there are big changes coming up with each new release.

Some, like Apple, don't want to leave us, users, with dull names like "Mac OS 10.6".

And Sun used to be OK with N alias instead of introducing "Java Green Diplodocus" release.

shabunc
  • 2,424
  • 2
  • 20
  • 27
  • 4
    Sidenote: there never was a Java 3, it was Java 2 SE 1.3 (or J2SE 1.3). Only with Java 1.5/5.0/5 did they get rid of the "1.x" numbers in marketing. Yes, even 'though Java 1.2 (and 1.3 and 1.4!) were called "Java 2" ... marketing, yay! – Joachim Sauer Nov 08 '12 at 10:10
2

TheServerSide explains change from "Java 1.x" to "Java x" as follows:

Sun has cut off the "1." to change J2SE 1.5.0 to J2SE 5.0. The reason for the change? Sun claims that "this is the most significant upgrade to the Java platform and programming language since its initial release nearly one decade ago", and that this version is worthy.

Apparently there were talks to rename to "J5SE", but there was thought that the J2EE brand means too much to change.

Aren't version numbers fun?

Read the press release: Sun introduces most significant and advanced Java platform release in 5 years

Note link in above quote is killed by Oracle. As far as I can tell, it is available at prnewswire:

Sun Microsystems, Inc. (Nasdaq: SUNW), the creator
and leading advocate of Java(TM) technology, today introduced Java 2 Platform
Standard Edition (J2SE(TM)) 5.0, the most significant upgrade to the Java
platform and programming language since its initial release nearly one decade
ago. Known as Project Tiger, this updated Java platform offers dramatic ease
of development, new application monitoring and management features, a
dedicated focus on rich client support for the PC desktop and record-breaking
performance...


For the sake of completeness note that 1.X version style hasn't been completely dropped.

"Version 1.5.0" Used by Developers

J2SE also keeps the version number 1.5.0 (or 1.5) in some places that are visible only to developers, or where the version number is parsed by programs. As mentioned, 1.5.0 refers to exactly the same platform and products numbered 5.0...

Also note that as pointed in comments term "J2SE" used above has been later changed to "Java SE".

gnat
  • 21,442
  • 29
  • 112
  • 288
  • 5
    Luckily they dropped the "J2SE" (and later "J2EE") names in favor of "Java SE" and "Java EE". "J2SE 5.0" was just being silly. – Joachim Sauer Nov 08 '12 at 10:09