Organiser l'état actuel de Java et envisager l'avenir

1.Tout d'abord

Quand j'ai écrit article précédent, j'ai vu beaucoup d'opinions sur Oracle JDK payant. Le quartier de Java est secoué par un tremblement, il ne peut plus être utilisé gratuitement, la possession d'Oracle de Java lui-même est un risque, et dans une telle situation, de quoi vous souciez-vous, comme le «bon sentiment»? Dites-vous, etc ...

Je ne connais rien d'autre que des connaissances en programmation pure sur Java, alors j'ai pensé que je ne devrais pas trop y toucher. Cependant, avant d'écrire "good feeling", j'ai pensé qu'il valait mieux y réfléchir, alors j'ai décidé de faire un peu de recherche et d'écrire cet article (j'apprécierais que vous puissiez indiquer la mauvaise partie).

Alors, quel est le sujet? ** J'ai eu l'impression qu'il y avait de nombreuses critiques sur la charge d'Oracle JDK et des avis sur les tendances dans la zone Java qui ont une direction légèrement différente **. .. À tout le moins, je pense que la spécification du langage et les frais pour Oracle JDK peuvent être considérés séparément dans une certaine mesure. Afin de ne pas confondre ce domaine, je voudrais résumer la situation actuelle et ensuite décrire les tendances futures.

2. Reconfirmez le "Java" actuel

À qui appartient Java?

Pour le moment, je voudrais souligner que ** Java n'est pas pour Oracle, mais pour la communauté **.

Il n'y a pas si longtemps, il y avait un article sur le site Web d'Oracle affirmant cela, et je pense que cela restera le même (la raison est incluse dans l'explication ci-dessous). ["Java appartient-il à Oracle?", "Non, il appartient toujours à la communauté Java!"](Https://www.oracle.com/technetwork/jp/database/articles/pickup/index-1838236-ja. html)

Les spécifications Java sont décidées par la communauté

Les spécifications Java ne sont pas déterminées par Oracle, mais par JCP (Java Community Process). À propos de "JCP", je vais le citer dans IT Glossary tel quel.

JCP est le nom d'une organisation internationale qui publie le processus de développement des technologies liées à Java et de normalisation des spécifications. Fondé en 1998 par Sun Microsystems.

JCP est composé de membres corporatifs et individuels. Les membres individuels ont le droit d'évaluer la technologie Java avant sa sortie et de demander des révisions de ses spécifications. Les technologies cibles sont les spécifications de langage, les plates-formes, les interfaces de programmation d'application, etc.

Les membres JCP ont des licences individuelles et peuvent implémenter des spécifications indépendantes basées sur le TCK (Technology Compatibility Kit) tant que la compatibilité en Java est garantie. Les membres corporatifs généraux peuvent devenir membres moyennant des frais, mais les individus, les groupes éducatifs, les organisations à but non lucratif, etc. peuvent accéder gratuitement au TCK de JSR.

JCP semble avoir été mis en péril lorsque Oracle a acquis Sun, mais c'est dommage. Je pense que cela continuera à l'avenir.

La décision finale sur la spécification Java est prise en votant par les membres JCP qui ont le droit de vote, alors qu'Oracle n'a pas (certainement) de droit de vote spécial.

Pour plus d'informations sur JCP, veuillez consulter ce qui suit.

Relation entre JCP et Oracle

Le site Web d'Oracle mentionné ci-dessus contient l'explication suivante.

Alors, quelle est la position d'Oracle sur Java? Oracle est le PMO (Program Management Office) de JCP, pour ainsi dire, l'administrateur de Java et JCP. Par exemple, lorsque vous décidez de quelque chose dans JCP, le processus ne se déroulera pas sans heurts à moins que quelqu'un ne modère le processus. En tant qu'administrateur Java, Oracle contribue à assurer le bon fonctionnement de ces processus.

Personnellement, je ne pense pas qu'il soit possible pour Oracle de bouleverser sa position actuelle et de monopoliser toutes les décisions de spécification Java. Si nous monopolisons ce qui s'est développé jusqu'à présent avec le pouvoir de la communauté, nous perdrons inévitablement l'image de l'entreprise et de Java.

Qu'est-ce qu'un "produit Java"?

Les produits qui ont passé le TCK (Technology Compatiblility Kit) sont certifiés comme produits "Java". Le JDK Oracle, qui est un sujet brûlant ces jours-ci, est l'un des "produits Java" et un seul d'entre eux. Tout "produit Java" qui a passé TCK doit se comporter de la même manière en surface, quelle que soit la distribution que vous utilisez. Par conséquent, même si vous décidez d'en utiliser un autre à partir du JDK Oracle à l'avenir, vous n'avez fondamentalement pas à vous soucier de la distribution à utiliser pour la programmation, sauf si vous utilisez les fonctionnalités uniques du produit.

OpenJDK et Oracle

OpenJDK est un produit open source né de diverses transitions depuis l'époque de Sun, et il semble que les produits Java actuellement sur le marché soient plus ou moins basés sur OpenJDK. Oracle a apporté une contribution significative au développement d'OpenJDK et a déclaré qu'il continuerait à le faire.

Référence: Que sont JDK, Oracle JDK, OpenJDK, Java SE? Référence: [Oracle Code One 2018] Une étape solide accélère l'évolution de Java

Renouvellement du modèle de version

En réponse aux critiques selon lesquelles l'intervalle de publication est long et la progression du langage lui-même est lente, le modèle de publication après Java 9 a été examiné et des mises à niveau majeures de version ont été effectuées une fois tous les six mois. Cependant, le principal changement est que le cycle de publication a été accéléré et il semble que le nombre de modifications et d'ajouts de spécifications n'ait pas augmenté de façon spectaculaire. Par conséquent, je ne pense pas que nous devrions nous inquiéter de la diminution significative de la compatibilité descendante pour le moment. En fait, j'ai entendu dire que Java 9 et les mises à jour ultérieures semblent fonctionner plutôt bien (je discuterai des problèmes de Java 9 plus tard).

Référence: Beyond Java 9-JavaOne Conference 2017 Report Référence: Le futur Java qui a adopté le nouveau modèle de version, la méthode d'acquisition et la période de support changera comme ceci

Contribution d'Oracle

Indépendamment des goûts et des dégoûts, il est peu probable qu'Oracle ait apporté des contributions significatives à Java, y compris le développement de la communauté qui a hérité des intentions de Sun, la fourniture gratuite à long terme de produits Java, y compris les binaires, et le développement d'OpenJDK. N'est-ce pas un fait terrible? Par conséquent, je pense que c'est un peu différent de blâmer Oracle de ne payer que pour Oracle JDK.

De plus, étant donné que les fonds obtenus à partir des frais seront investis dans des tentatives intéressantes telles que GraalVM, c'est un inconvénient en tant que développeur général. Je pense que c'est juste une histoire.

Cependant, Oracle a évité de faire des déclarations explicites sur LTS (Long-term Support) pour OpenJDK, et il semble que cela ne sera pas réalisé au moins pour Java 11. Si LTS avait été garanti tôt, je pense que cela n'aurait pas été un gros problème en premier lieu, mais c'est un endroit difficile. Nous en discuterons plus tard.

3. Quelle est l'intention de payer pour Oracle JDK?

Il est difficile de lire où LTS est évité tout en indiquant clairement le support d'OpenJDK, mais je vais le considérer par moi-même.

Qui est la cible du JDK Oracle payant?

Il y a certainement des gens qui préfèrent les produits payants et bien connus soutenus par l'entreprise aux produits open source gratuits. Oracle pense qu'il peut payer pour ces personnes et entreprises au nom de sa propre marque et des antécédents d'Oracle JDK.

Prise en charge d'OpenJDK

Bien que le JDK Oracle soit facturé, il semble que nous ne devrions pas arrêter de prendre en charge l'Open JDK car nous devons conserver un grand nombre d'utilisateurs Java et la communauté ouverte qu'ils prennent en charge. Cependant, si je déclare le LTS pour OpenJDK, je pense que je l'évite car il y a un risque qu'il soit enterré car il ne peut pas être différencié d'OrcleJDK. Je pense que c'est la cause de la confusion dans les endroits où il est difficile de s'adapter.

Attentes concernant la prise en charge d'OpenJDK LTS par des tiers

En fait, pendant que j'écrivais cet article, des nouvelles assez choquantes sont arrivées. [Breaking News] Amazon Corretto, un OpenJDK qui peut être utilisé sur plusieurs plates-formes, a été annoncé!

Cependant, j'ai le sentiment qu'Oracle attendait un tel flux. Je pense qu'il ne chevauche pas la couche cible Oracle expliquée ci-dessus, et qu'il ne se développera pas en une concurrence à tarte avec le JDK Oracle et d'autres.

De plus, on peut s'attendre à ce que cela empêchera les utilisateurs de Java de partir et conduira à la maintenance de la communauté. De plus, si le nombre de supporteurs non-Oracle pour OpenJDK augmente, je pense que ce sera un bon flux avec peu d'inconvénients pour Oracle.

4. Points à surveiller pour les tendances futures

Il est peu probable que Java se divise

La division de la communauté Java qui s'est développée jusqu'à présent a trop d'inconvénients, il semble donc qu'elle ira dans le sens de l'éviter. Ainsi, par exemple, je ne pense pas que Java lui-même créera un autre projet pour concurrencer les utilisateurs (n'est-ce pas faisable en premier lieu?).

Équilibre de puissance entre Open JDK et Oracle JDK

Est-ce un équilibre entre combien de temps la contribution d'Oracle à OpenJDK se poursuivra et si OpenJDK prendra la part d'Oracle JDK?

Personnellement, comme je l'ai expliqué ci-dessus, je ne m'attends pas à ce que l'Open JDK prenne la part du JDK Oracle payé, mais je me demande comment Oracle fonctionnera si ce n'est pas le cas.

Quelle distribution utiliser

Si vous souhaitez continuer à utiliser Java gratuitement, il s'agit de la distribution à utiliser. Pour l'instant, Amazon Corretto semble être le plus puissant, mais je pense que nous devons garder un œil dessus jusqu'à ce que la situation se stabilise (ou si elle s'installe en premier lieu).

5. Ce sur quoi le site actuel devrait travailler à l'avenir

Sur la base de ce que j'ai dit jusqu'à présent, je voudrais vous donner quelques réflexions sur ce que les utilisateurs de Java devraient faire à l'avenir.

Surmonter la barrière Java 9

Fondamentalement, Java a une compatibilité ascendante élevée même s'il s'agit d'une mise à niveau de version majeure, mais vous devez être prudent uniquement lors de la mise à niveau de Java 8 vers Java 9 ou version ultérieure. Avec l'introduction du système modulaire, il semble que cela ne change pas beaucoup en surface, mais il a subi des changements radicaux en interne. Même si elle se compile, il y a de fortes chances que l'application ne démarre pas en premier lieu ou ne fonctionne pas pendant le fonctionnement. Par conséquent, il est préférable de surmonter la barrière Java 9 dès que possible (bien que cela ressemble plus à ça maintenant).

Référence: Beyond Java 9-JavaOne Conference 2017 Report

Introduire un mécanisme d'automatisation des tests

Je pense qu'un mécanisme d'automatisation de test devrait être adopté même lorsque LTS pour OpenJDK n'est pas disponible et qu'il est nécessaire de mettre à jour fréquemment. De plus, même pendant LTS, si une faille de sécurité sérieuse est trouvée, un travail de mise à niveau de la version se produira, donc je me demande de quelle manière il faut introduire.

Comme mentionné dans l'article Article précédent, il y en a qui ont un cadre de test riche, et si vous pouvez bien l'utiliser, vous pouvez le mettre à jour. Vous pouvez réduire les coûts.

6. Conclusion

Un peu d'inquiétude à la fin.

Qu'en est-il des travaux de mise à niveau de version autres que Java?

Lorsque j'ai écrit article précédent, certaines opinions étaient préoccupées par le coût de la mise à niveau vers Java. Bien sûr, des problèmes de version peuvent également exister dans d'autres langues.

Java lui-même est hautement rétrocompatible, et comme il s'agit d'un langage de compilation, je pense que le travail de mise à niveau est une catégorie assez facile. Selon la langue, la compatibilité peut ne pas être maintenue même avec des mises à niveau de version mineures, mais comment gérez-vous cela?

De plus, dans le cas du passage de Java à un autre langage ou framework en raison de préoccupations concernant les coûts de mise à niveau, lors de la sélection de ce langage ou framework, la sécurité, la facilité de travail de mise à niveau et l'amélioration du framework de test Je suis très inquiet de savoir si le diplôme est pris en considération.

Connaissez-vous bien la situation actuelle?

Pour être honnête, il n'y a rien à dire si vous critiquez l'état actuel de Java mentionné dans cet article et quittez Java. Si vous avez beaucoup appris pour la première fois, pourquoi ne pas profiter de cette occasion pour rechercher et repenser Java?

Même si les opinions de cet article sont erronées, j'espère que cela vous donnera l'occasion de réaffirmer la situation actuelle et d'envisager les tendances futures.

Merci de rester avec nous jusqu'à la fin.

Recommended Posts

Organiser l'état actuel de Java et envisager l'avenir
[Android] [Java] Gérer l'état de CheckBox de ListView
[Java] La partie déroutante de String et StringBuilder
J'ai comparé les caractéristiques de Java et .NET
[Java / Kotlin] Redimensionner en tenant compte de l'orientation de l'image
Veuillez noter la division (division) de java kotlin Int et Int
La comparaison d'énumération est ==, et equals est bonne [Java]
Langage Java du point de vue de Kotlin et C #
Surveillez l'état interne des programmes Java avec Kubernetes
J'ai résumé les types et les bases des exceptions Java
Avantages et inconvénients de Java
[Note] Sortie Java de la somme des éléments pairs et impairs
Je n'ai pas vraiment compris le comportement de Java Scanner et .nextLine ()
Commande pour vérifier le nombre et l'état des threads Java
Les débutants en Java ont brièvement résumé le comportement de Array et ArrayList
[Java] J'ai réfléchi aux mérites et aux utilisations de "interface"
[Java] Supprimer les éléments de la liste
[Java] Obtenez les dates des derniers lundi et dimanche dans l'ordre
[Édition Java] Histoire de la sérialisation
À propos de l'environnement de développement actuel (Java 8)
Ceci et cela de JDK
Lire les 4 premiers octets du fichier de classe Java et générer CAFEBABE
De Java naissant (3 ans) à Node.js (4 ans). Et l'impression de retourner à Java
J'ai essayé de résumer les méthodes de Java String et StringBuilder
L'origine des expressions Java lambda
Une collection de phrases qui impressionne le "sentiment différent" de Java et de JavaScript
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
À propos de la classification et du concept de Immutable / Mutable / Const / Variable de Java et Kotlin.
Être conscient de l'état interne (immuabilité) des objets et des effets secondaires des méthodes
Analyser et objectiver JSON à l'aide de l'annotation @JsonProperty de la bibliothèque Java Jackson
Ceci et cela de la mise en œuvre du jugement en temps réel des dates en Java
[Cas d'amélioration Java] Comment atteindre la limite de l'auto-apprentissage et au-delà
Trouvez le maximum et le minimum des cinq nombres saisis en Java
J'ai essayé de traduire la grammaire de R et Java [Mis à jour de temps en temps]
Afficher le calendrier et le jour japonais en utilisant la classe standard java8
Obtenez le résultat de POST en Java
Vérifiez le contenu du magasin de certificats Java
Examiner l'utilisation de la mémoire des éléments Java
[Java] Obtenez le jour d'un jour spécifique
Mémo: [Java] Vérifiez le contenu du répertoire
Pliage et dépliage du contenu de la vue Recycleur
À propos du fonctionnement de next () et nextLine ()
Comparer les éléments d'un tableau (Java)
[Java] Comment obtenir le répertoire actuel
[jour: 5] J'ai résumé les bases de Java
Quelles sont les fonctionnalités mises à jour de Java 13
Mesurez facilement la taille des objets Java
[Java / Swift] Comparaison de l'interface Java et du protocole Swift
Retour sur les bases de Java
[Java 7] Divisez la liste Java et exécutez le processus
Sortie du livre "Introduction à Java"
À propos du nombre de threads de Completable Future
L'histoire de l'écriture de Java dans Emacs
J'ai étudié le modèle d'état et le modèle de stratégie
[Java8] Recherchez le répertoire et récupérez le fichier
[Java] Vérifiez le nombre d'occurrences de caractères
Résumé de Java Math.random et import (calendrier)