Organizing the current state of Java and considering the future

1.First of all

When I wrote the previous article, I saw a lot of opinions about the fact that the Oracle JDK was paid. The Java neighborhood is shaken by a tremor, it can not be used for free anymore, Oracle's possession of Java itself is a risk, and in such a situation, what do you care about, such as "good feeling"? Are you saying, etc ...

I'm not familiar with anything other than pure programming knowledge about Java, so I thought I shouldn't touch it too much. However, I thought that it would be better to think about it before writing "good feeling", so I decided to do a little research and write this article (I would appreciate it if you could point out the wrong part).

Then, what is the subject? ** I got the impression that there are many criticisms of the charge for Oracle JDK and opinions on trends in the Java area that have a slightly different direction **. .. At the very least, I think the language specification and the charge for the Oracle JDK can be considered separately to some extent. In order not to confuse this area, I would like to summarize the current situation and then describe future trends.

2. Reconfirm the current "Java"

Who owns Java?

For now, I would like to emphasize that ** Java is not for Oracle, but for the community **.

Not long ago, there was an article on the Oracle website claiming that, and I think it will remain the same (the reason is included in the explanation below). ["Does Java belong to Oracle?", "No, it still belongs to the Java community!"](Https://www.oracle.com/technetwork/jp/database/articles/pickup/index-1838236-ja. html)

Java specifications are decided by the community

The Java specifications are not determined by Oracle, but by the JCP (Java Community Process). "JCP" is quoted from IT Glossary as it is.

JCP is the name of an international organization that publishes the process of developing Java-related technologies and standardizing specifications. Founded in 1998 by Sun Microsystems.

The JCP is made up of corporate and individual members. Individual members are given the right to evaluate Java-related technologies before they are released and request revisions to their specifications. The target technologies are language specifications, platforms, application programming interfaces, and so on.

JCP members have individual licenses and can implement independent specifications based on the TCK (Technology Compatibility Kit) as long as compatibility in Java is guaranteed. General corporate members can become members for a fee, but individuals, educational organizations, non-profit organizations, etc. can access JSR's TCK for free.

The JCP seems to have been jeopardized when Oracle acquired Sun, but that's a shame. I think it will continue in the future.

The final decision on the Java specification is made by voting by JCP members who have voting rights, whereas Oracle does not have any special voting rights (certainly).

For more information about JCP, please refer to the following.

Relationship between JCP and Oracle

The Oracle website mentioned above has the following explanation.

So what is Oracle's position on Java? Oracle is the PMO (Program Management Office) of the JCP, so to speak, the administrator of Java and JCP. For example, when deciding something in the JCP, the process will not go smoothly unless someone moderates the process. As a Java administrator, Oracle helps keep those processes running smoothly.

Personally, I don't think it's possible for Oracle to upset its current position and monopolize all of Java's specification decisions. If we monopolize what has developed so far with the power of the community, we will inevitably lose the image of both companies and Java.

What is a "Java product"?

Products that have passed the TCK (Technology Compatiblility Kit) are certified as "Java" products. The Oracle JDK, which is a hot topic these days, is one of the "Java products" and only one of them. Any "Java product" that has passed TCK should behave the same on the surface, no matter which distribution you use. So, even if you decide to use something else from the Oracle JDK in the future, you basically don't have to worry about which distribution to use for programming unless you use the product's unique features.

OpenJDK and Oracle

OpenJDK is an open source product that has undergone various transitions since the days of Sun, and it seems that the Java products currently on the market are more or less based on OpenJDK. Oracle has made a significant contribution to OpenJDK development and has stated that it will continue to do so.

Reference: What are JDK, Oracle JDK, OpenJDK, Java SE? Reference: [Oracle Code One 2018] A solid step accelerates the evolution of Java

Renewal of release model

In response to criticism that the release interval is long and the language itself is slow to progress, the release model after Java 9 has been reviewed, and major version upgrades have been made once every six months. However, the main change is that the release cycle has been accelerated, and it seems that the number of specification changes and additions has not increased dramatically. Therefore, I think that you don't have to worry about the backward compatibility being significantly reduced for now. In fact, I've heard that Java 9 and later updates seem to work pretty well (I'll talk about Java 9 issues later).

Reference: Beyond Java 9-JavaOne Conference 2017 Report Reference: Future Java adopting the new release model, acquisition method and support period will change like this

Oracle Contribution

Regardless of likes and dislikes, it is doubtful that Oracle has made significant contributions to Java, including community development that inherited Sun's will, long-term free provision of Java products including binaries, and OpenJDK development. Isn't it a fact that can't be helped? Therefore, I think it's a little different to blame Oracle for paying only for the Oracle JDK.

Also, considering that the funds obtained from the fee will be invested in interesting attempts such as GraalVM, it is a disadvantage as a general developer. I think it's just a story.

However, Oracle has avoided making explicit statements about LTS (Long-term Support) for OpenJDK, and it seems that it will not be realized at least for Java 11. If LTS was guaranteed early, I think it wouldn't have been a big deal in the first place, but this is a difficult place. We will discuss this later.

3. What is the intention of paying for Oracle JDK?

It's hard to read what LTS avoids while clearly stating OpenJDK support, but I'll consider it for myself.

Who is the target of the paid Oracle JDK?

There are definitely people out there who prefer paid, well-known companies-supported products to free open source products. I suspect that Oracle is trying to pay for these people and companies in the name of its own brand and the track record of the Oracle JDK.

About support for OpenJDK

Although the Oracle JDK will be charged, it seems that support for OpenJDK should not be stopped because a large number of Java users and the open community they support need to be retained. However, if I declare LTS for OpenJDK, I think that I am avoiding it because I may not be able to differentiate from OrcleJDK and it may be buried. I think this is the cause of confusion in places where it is difficult to adjust.

Expectations for OpenJDK's LTS support by third parties

In fact, while I was writing this article, quite shocking news came in. [Breaking news] Amazon Corretto, an OpenJDK that can be used on multiple platforms, has been announced!

However, I feel that Oracle has been waiting for this trend. I think that it does not overlap with the target layer of Oracle explained above, and that it will not develop into a pie competition with the Oracle JDK and others.

In addition, it can be expected that this will prevent Java users from leaving and will lead to the maintenance of the community. Furthermore, if the number of non-Oracle supporters for OpenJDK increases, I think it will be a good flow with few disadvantages for Oracle.

4. Points to watch for future trends

Java is unlikely to split

The division of the Java community that has developed so far has too many disadvantages, so it seems that it will move in the direction of avoiding it. So, for example, I don't think Java itself will fork and create another project to compete for users (isn't it feasible in the first place?).

Power balance between OpenJDK and Oracle JDK

Is it a balance between how long Oracle's contribution to OpenJDK will continue and whether OpenJDK will take the share of Oracle JDK?

Personally, as I explained above, I don't expect OpenJDK to take the share of the paid Oracle JDK, but I'm wondering how Oracle will work if this isn't the case.

Which distribution to use

If you want to continue using Java for free, it's about which distribution to use. For now, Amazon Corretto seems to be the most powerful, but I think it is necessary to keep an eye on it until the situation settles down (or whether it settles down in the first place).

5. What the actual site should work on in the future

With that in mind, here are some thoughts on what Java users should do in the future.

Overcoming the Java 9 barrier

Basically, Java has high backward compatibility even if it is a major version upgrade, but you need to be careful only when upgrading from Java 8 to Java 9 or later. With the introduction of the modular system, it looks like it doesn't change much on the surface, but it has drastic changes internally. Even if the compilation passes, there is a good chance that the app will not start or will not work during operation. Therefore, it is better to overcome the Java 9 barrier as soon as possible (although it feels more like this now).

Reference: Beyond Java 9-JavaOne Conference 2017 Report

Introduce a test automation mechanism

I think that a test automation mechanism should be adopted even when LTS for OpenJDK is no longer available and it becomes necessary to update frequently. Also, even during LTS, if a serious security vulnerability is found, version upgrade work will occur, so I wonder which way should be introduced.

Previous article As mentioned in the article, some test frameworks are substantial, and if you can use it well, version upgrade work You can keep costs down.

6. Conclusion

A little bit of concern at the end.

What about version upgrade work other than Java?

When I wrote the previous article, there were some opinions that were concerned about the cost of upgrading to Java. Of course, version issues may exist in other languages as well.

Java itself is highly backward compatible, and because it is a compilation language, I think that version upgrade work is in a fairly easy category. Depending on the language, compatibility may not be maintained even with minor version upgrades, but how do you handle that?

In addition, in the case of switching from Java to another language or framework due to concerns about version upgrade work costs, when selecting that language or framework, security aspects, upgrade work ease, and enhancement of test framework I'm very worried about whether the degree is taken into consideration.

How well do you know the current situation?

To be honest, there is nothing to say if it is a criticism of the current state of Java mentioned in this article and a departure from Java. If you've learned a lot for the first time, why not take this opportunity to research and rethink Java?

Even if the views in this article are off the mark, I hope it will give you an opportunity to reaffirm the current situation and consider future trends.

Thank you for staying with us until the end.

Recommended Posts

Organizing the current state of Java and considering the future
[Android] [Java] Manage the state of CheckBox of ListView
[Java] The confusing part of String and StringBuilder
I compared the characteristics of Java and .NET
[Java / Kotlin] Resize considering the orientation of the image
Please note the division (division) of java kotlin Int and Int
The comparison of enums is ==, and equals is good [Java]
Java language from the perspective of Kotlin and C #
Monitor the internal state of Java programs with Kubernetes
I summarized the types and basics of Java exceptions
Advantages and disadvantages of Java
[Note] Java Output of the sum of odd and even elements
I didn't understand the behavior of Java Scanner and .nextLine ().
Command to check the number and status of Java threads
Java beginners briefly summarized the behavior of Array and ArrayList
[Java] I thought about the merits and uses of "interface"
[Java] Delete the elements of List
[Java] Get the dates of the past Monday and Sunday in order
[Java version] The story of serialization
About the current development environment (Java 8)
This and that of the JDK
Read the first 4 bytes of the Java class file and output CAFEBABE
[Java] Judgment of identity and equivalence
From fledgling Java (3 years) to Node.js (4 years). And the impression of returning to Java
I tried to summarize the methods of Java String and StringBuilder
The origin of Java lambda expressions
A collection of phrases that impresses the "different feeling" of Java and JavaScript
The story of forgetting to close a file in Java and failing
About the classification and concept of Immutable / Mutable / Const / Variable of Java and Kotlin.
Be aware of the internal state (invariance) of objects and the side effects of methods
[Java] How to get the current date and time and specify the display format
Parse and objectize JSON using the @JsonProperty annotation of the Java library Jackson
This and that of the implementation of date judgment within the period in Java
[Java improvement case] How to reach the limit of self-study and beyond
Find the maximum and minimum of the five numbers you entered in Java
I translated the grammar of R and Java [Updated from time to time]
Display Japanese calendar and days of the week using java8 standard class
Get the result of POST in Java
Check the contents of the Java certificate store
Examine the memory usage of Java elements
[Java] Get the day of the specific day of the week
Memo: [Java] Check the contents of the directory
Folding and unfolding the contents of the Recyclerview
About the operation of next () and nextLine ()
[Java] Inheritance and structure of HttpServlet class
Compare the elements of an array (Java)
[Java] How to get the current directory
[day: 5] I summarized the basics of Java
What are the updated features of java 13
Easily measure the size of Java Objects
[Java / Swift] Comparison of Java Interface and Swift Protocol
Looking back on the basics of Java
[Java 7] Divide the Java list and execute the process
Output of the book "Introduction to Java"
About the number of threads of Completable Future
The story of writing Java in Emacs
About the mechanism of the Web and HTTP
I studied the State pattern and the Strategy pattern
[Java8] Search the directory and get the file
[Java] Check the number of occurrences of characters
Summary of Java Math.random and import (Calendar)