r/java • • Sep 14 '21

Java 17 available now!

410 Upvotes

83 comments sorted by

18

u/nlisker Sep 14 '21

Sealed classes along with supporting class types in switch is a really great combo to eliminate all those instanceof checks, plus the compiler can guarantee completeness for you.

1

u/Euphoric-Pop Sep 15 '21

Do you have a code example for this?

3

u/[deleted] Sep 15 '21

check https://openjdk.java.net/jeps/409 under the title

Sealed classes and pattern matching

12

u/bourne2program Sep 15 '21

I know I'm late for pointing this out, but why was
Collections.shuffle(List<?>, Random)
not changed to:
Collections.shuffle(List<?>, RandomGenerator)

Since Random now implements RandomGenerator. Was it missed or decided?

5

u/joppux Sep 15 '21

It's binary incompatible, so probably not worth it to recompile libraries using it for such a minor advantage.

3

u/bourne2program Sep 15 '21 edited Sep 16 '21

That's too bad, hate to see API disconnect in a highly used utility like Collections. Maybe it can be overloaded with one calling the other.

1

u/gnahraf Sep 17 '21

I don't get why.. Collections.shuffle(..) could be overloaded and still be binary-compatible, no?

1

u/bourne2program Oct 13 '21

Same situation with BigInteger constructors and static method.

11

u/meamZ Sep 15 '21

Also the "LTS" versions will now be every two years instead of every 3 years which means that even developers who only are allowed to use "LTS" versions will be able to get stuff like Loom (hopefully even out of preview by then) in Java 21.

51

u/jvjupiter Sep 14 '21

I thought Oracle JDK is free only for development, testing and prototyping but not for production.

Java 17 LTS is the latest long-term support release for the Java SE platform. JDK 17 binaries are free to use in production and free to redistribute, at no cost, under the Oracle No-Fee Terms and Conditions License.

71

u/kaperni Sep 14 '21 edited Sep 14 '21

Oracle JDK is now (as per Java 17) free for commercial and production use.

https://blogs.oracle.com/java/post/free-java-license

24

u/jvjupiter Sep 14 '21

Yeah. I just watched here. Beginning Java 17, it’s free.

https://m.youtube.com/watch?v=KVXbWCwOLg4

3

u/walen Sep 14 '21

According to this comment in another thread, only if your own product is also free https://www.reddit.com/r/java/comments/po3y1z/introducing_the_free_java_license/hcua07m/

6

u/kaperni Sep 14 '21 edited Sep 14 '21

It talks about reselling the JDK not your product.

6

u/walen Sep 14 '21

Not so sure about that. It clearly says:

products that include or are bundled with a copy of the Program or for services that involve the use of the distributed Program

So, any product that includes the JDK (which is the type of product they asked you to pay a license for, previously) must be also free.

19

u/VerwirkteExistenz Sep 14 '21

Check out Nicolai's video on Youtube if you want to learn more about the two different jdk versions:

https://www.youtube.com/watch?v=KVXbWCwOLg4

16

u/jvjupiter Sep 14 '21

This news that Oracle JDK beginning 17 is free even for production and redistribution is totally awesome!

30

u/[deleted] Sep 14 '21 edited Sep 14 '21

Consequence: it can be wget'd or curl'd from Oracle, with stable URLs not behind a registration wall. Yay !

11

u/krzyk Sep 14 '21

Why don't people download openjdk directly? It is easier and was alway free. http://jdk.java.net/17/

1

u/jvjupiter Sep 14 '21

The support is 6 months only.

2

u/krzyk Sep 15 '21

Yeah, you need to move to the next version every 6 months. I do that.

1

u/jvjupiter Sep 15 '21

Same here.

1

u/[deleted] Sep 14 '21

Source?

1

u/sigzero Sep 15 '21

2

u/[deleted] Sep 15 '21

Thanks, but on that page Java 17 is marked as LTS just as Java 11 was.

1

u/sigzero Sep 15 '21

On that page...they talk about 6-month release cycles for the other versions.

1

u/[deleted] Sep 15 '21

Yes, but the subject of this thread is Java 17.

1

u/jvjupiter Sep 15 '21

Cant find exact article but here is the tweet from one of the Developer Advocates at Oracle. You can find similar tweets from different people.

https://twitter.com/nipafx/status/1060216796358328320?s=21

1

u/[deleted] Sep 15 '21

Thanks, but doesn't that just refer to non-LTS releases?

1

u/jvjupiter Sep 15 '21

Oracle’s LTS is paid thus their LTS is exclusive to Oracle JDK. If Oracle OpenJDK has LTS, it’s no more free.

1

u/[deleted] Sep 15 '21

OpenJDK 17 is stated to be LTS and is free (as in speech and as in beer).

https://openjdk.java.net/projects/jdk/17/

→ More replies (0)

13

u/cogman10 Sep 14 '21

This may be confusing, but there are different builds of the JDK with different licenses.

Oracle has a commercial build which has LTS support. That's what you have to pay for.

The regular OpenJDK build on java.net is built by oracle but has no LTS support. It is free to use (even commercially) but is only supported until the next version.

Then there are a bunch of other OpenJDK builds (Like AdoptOpenJDK) with different terms for support.

24

u/pron98 Sep 14 '21

That's what you have to pay for.

Had to pay for. No more, as of today :)

20

u/Hangman4358 Sep 14 '21

404 error from the link.

I know you do a lot of good work for the community pron98, but man, this licensing stuff has become so confusing to try to explain to managers and non technical folks.

"We can use the Oracle OpenJDK builds or the OpenJDK builds from others like Adoptum which is now whatever the Eclipse foundation is calling them but we can't use the OracleJDK builds unless we want to pay for support, but only up to 17, because 17 OracleJDK is now free for commercial. And also LTS doesn't really mean LTS and we should be updating to every version."

At least for us, we are now finally at a point where we could theoretically start updating to the latest every release but the constant changes to naming, licensing and the confusing LTS labels is making management and legal weary that we will need someone with a PhD in Java releases to keep it all strait.

9

u/pron98 Sep 14 '21 edited Sep 14 '21

At least for us, we are now finally at a point where we could theoretically start updating to the latest every release

That should make everything very simple.

I don't know if the terms for the various support services from the various vendors are as simple as they can be, but that's not my area. You have enough choices so that you can choose what to do when your application's maintenance slows down and you want to settle down with long-term support. Until then, using the current version, if you can, is the cheapest, safest, simplest approach.

1

u/Muoniurn Sep 15 '21

It is basically the same as with (fedora) Linux and RedHat linux.

You can use linux (openjdk) however you want, but bug fixes will mostly happen on latest release (with comparatively few backpatches happening to older releases. Like you wouldn’t really use linux 2.3, would you?). As soon as the next one is out, it will get the focus.

If you want to have support for the product for more time (eg. you can’t upgrade your JVM each 6 month), you can choose one of the vendors, for example Oracle, that promises support for their LTS releases until the next LTS lands + 1 year. More than that is paid afaik. The recent change was that it not used to be free for commercial use, only personal and development. This is sort of analogue to Red Hat Linux, except that that is not free if I’m correct.

3

u/joschi83 Sep 14 '21

u/pron98, is there a list of versioned URLs for Oracle JDK 17+ downloads?

https://oracle.com/java/technologies/downloads/ lists the dynamic "latest" URLs and https://oracle.com/java/technologies/jdk-script-friendly-urls/ only explains the URL schema but doesn't link to all files.

Or maybe there's even an API like Adoptium (formerly AdoptOpenJDK) and Azul are offering for their OpenJDK distributions?

2

u/cogman10 Sep 14 '21

Neat. this is pretty nice.

10

u/snoob2015 Sep 15 '21

Now, only wait for Gradle to support Java 17 ...

1

u/nlisker Sep 16 '21

If you use Gradle toolchain you don't need to care about that.

11

u/deadron Sep 14 '21 edited Sep 14 '21

Weird. OpenJDK is still in the RC phase. Edit: After I posted this open jdk dropped their release https://jdk.java.net/17/

11

u/shadow131990 Sep 14 '21

Schedule

2021/06/10 Rampdown Phase One (fork from main line)

2021/07/15 Rampdown Phase Two

2021/08/05 Initial Release Candidate

2021/08/19 Final Release Candidate

2021/09/14 General Availability

10

u/kaperni Sep 14 '21

Java 17 has not been officially released yet. The Oracle binaries have just been uploaded ahead of the actual release.

5

u/apentlander Sep 14 '21

I'm pretty sure I saw someone said that the latest RC had no changes or fixes so it's effectively the final release.

5

u/__konrad Sep 14 '21

RC (build 35) and final release are identical (same sha256 checksum). That means OpenJDK 17 released today is already 1 month old! ;)

2

u/magnoliophytina Sep 22 '21

It has been a tradition with several new releases now.

2

u/LackOfHonor Sep 14 '21

Yea, or well lets see when we have a weblogic server that can run this… cry cry

1

u/munukutla Sep 14 '21

Mixed signals there.

3

u/Tyluur Sep 14 '21

Love to hear it =].

2

u/Vezqi Sep 14 '21 edited Sep 14 '21

I love Rust's pattern matching syntax. Python recently adopted a similar implementation. Really liking what I'm seeing in these release notes!

2

u/cryptos6 Sep 15 '21

Don't exect too much. Pattern matching in Java is very basic at the moment (at least if you don't use preview features), but more will come in the next releases. At the moment it is basically only instanceof.

1

u/Ok_Sentence725 Sep 15 '21

What's the difference and benefits

1

u/GoBucks4928 Sep 15 '21

About time!!!

-6

u/phantomdrake0788 Sep 15 '21

Same crap repackaged

0

u/[deleted] Sep 14 '21

[deleted]

8

u/Worth_Trust_3825 Sep 14 '21

You're going to be fine if you have atleast some integration tests. Some frameworks are notorious for doing weird shit with reflection, so if you use any of them you will either have to wait for upgrade or drop them.

0

u/[deleted] Sep 14 '21

[deleted]

2

u/bowbahdoe Sep 14 '21

Out of curiosity what framework? 20 years stable is stable

1

u/AVGunner Sep 14 '21

Honestly it most likely won't unless if you're avid using new features until they get open bug testing

76

u/[deleted] Sep 14 '21

[removed] — view removed comment

6

u/daleksandrov Sep 14 '21

AWESOME!!!

9

u/[deleted] Sep 14 '21

Soon in the Arch repos

9

u/0b0101011001001011 Sep 15 '21
#!/bin/bash
while true
do
   sudo pacman -Syu --nocofirm
done

pleasedon't

2

u/[deleted] Sep 15 '21

that's bad practice

7

u/0b0101011001001011 Sep 15 '21

Yes I said please don't. I hope this is just a joke, not even any kind of practice.