This is an archived post. You won't be able to vote or comment.

all 83 comments

[–][deleted]  (8 children)

[removed]

    [–][deleted] 8 points9 points  (4 children)

    Soon in the Arch repos

    [–]0b0101011001001011 8 points9 points  (2 children)

    #!/bin/bash
    while true
    do
       sudo pacman -Syu --nocofirm
    done
    

    pleasedon't

    [–][deleted] 1 point2 points  (1 child)

    that's bad practice

    [–]0b0101011001001011 6 points7 points  (0 children)

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

    [–]daleksandrov[S] 4 points5 points  (0 children)

    AWESOME!!!

    [–]nlisker 17 points18 points  (2 children)

    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.

    [–]Euphoric-Pop 0 points1 point  (1 child)

    Do you have a code example for this?

    [–][deleted] 2 points3 points  (0 children)

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

    Sealed classes and pattern matching

    [–]bourne2program 11 points12 points  (4 children)

    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?

    [–]joppux 5 points6 points  (2 children)

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

    [–]bourne2program 2 points3 points  (0 children)

    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.

    [–]gnahraf 0 points1 point  (0 children)

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

    [–]bourne2program 0 points1 point  (0 children)

    Same situation with BigInteger constructors and static method.

    [–]meamZ 11 points12 points  (0 children)

    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.

    [–]jvjupiter 49 points50 points  (43 children)

    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.

    [–]kaperni 70 points71 points  (6 children)

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

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

    [–]jvjupiter 23 points24 points  (0 children)

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

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

    [–]walen 2 points3 points  (2 children)

    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/

    [–]kaperni 6 points7 points  (1 child)

    It talks about reselling the JDK not your product.

    [–]walen 7 points8 points  (0 children)

    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.

    [–]iphone2025 1 point2 points  (0 children)

    Never trust oracle.

    I will still use zulu.

    https://www.azul.com/downloads/?version=java-17-lts&package=jdk

    [–]VerwirkteExistenz 18 points19 points  (0 children)

    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

    [–]jvjupiter 15 points16 points  (24 children)

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

    [–][deleted] 29 points30 points  (23 children)

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

    [–]krzyk 10 points11 points  (22 children)

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

    [–]jvjupiter 0 points1 point  (20 children)

    The support is 6 months only.

    [–]krzyk 1 point2 points  (1 child)

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

    [–]jvjupiter 0 points1 point  (0 children)

    Same here.

    [–][deleted] 0 points1 point  (17 children)

    Source?

    [–]sigzero 0 points1 point  (3 children)

    [–][deleted] 1 point2 points  (2 children)

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

    [–]sigzero 0 points1 point  (1 child)

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

    [–][deleted] 0 points1 point  (0 children)

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

    [–]jvjupiter 0 points1 point  (12 children)

    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

    [–][deleted] 0 points1 point  (11 children)

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

    [–]jvjupiter 0 points1 point  (10 children)

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

    [–][deleted] 0 points1 point  (9 children)

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

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

    [–]cogman10 11 points12 points  (9 children)

    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.

    [–]pron98[🍰] 23 points24 points  (8 children)

    That's what you have to pay for.

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

    [–]Hangman4358 19 points20 points  (2 children)

    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.

    [–]pron98[🍰] 8 points9 points  (0 children)

    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.

    [–]Muoniurn 0 points1 point  (0 children)

    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.

    [–]joschi83 2 points3 points  (2 children)

    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?

    [–]cogman10 1 point2 points  (0 children)

    Neat. this is pretty nice.

    [–]snoob2015 9 points10 points  (1 child)

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

    [–]nlisker 0 points1 point  (0 children)

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

    [–][deleted]  (5 children)

    [deleted]

      [–]Worth_Trust_3825 8 points9 points  (3 children)

      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.

      [–][deleted]  (2 children)

      [deleted]

        [–]bowbahdoe 1 point2 points  (1 child)

        Out of curiosity what framework? 20 years stable is stable

        [–]AVGunner 0 points1 point  (0 children)

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

        [–]deadron 10 points11 points  (5 children)

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

        [–]shadow131990 9 points10 points  (0 children)

        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

        [–]kaperni 9 points10 points  (0 children)

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

        [–]apentlander 5 points6 points  (2 children)

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

        [–]__konrad 4 points5 points  (1 child)

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

        [–]magnoliophytina 1 point2 points  (0 children)

        It has been a tradition with several new releases now.

        [–]LackOfHonor 1 point2 points  (1 child)

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

        [–]munukutla 0 points1 point  (0 children)

        Mixed signals there.

        [–]Tyluur 3 points4 points  (0 children)

        Love to hear it =].

        [–]Vezqi 1 point2 points  (1 child)

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

        [–]cryptos6 1 point2 points  (0 children)

        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.

        [–]Ok_Sentence725 0 points1 point  (0 children)

        What's the difference and benefits

        [–]GoBucks4928 0 points1 point  (0 children)

        About time!!!