JEP 382 et JEP 391, les apports du JDK 17 pour macOS
Contexte
Le JDK évolue pour suivre les évolutions de la plateforme macOS.
Pour ceux qui me connaissent, je suis un fan de Linux et notamment de Debian. Mais c’est intéressant de voir comment la plateforme Java s’adapte aux évolutions du marché.
Donc, pour les fans d’Apple, nous allons commencé dans l’ordre inverse de la numérotation.
JEP 391 macOS / AArch64 Port
Historique
Tim Cook a annoncé le 22 juin 2020, lors de conférence Apple pour les développeurs, la création et l’utilisation de ses propres processeurs Apple Silicon basés sur l’architecture ARM64. Il a aussi précisé qu’il y aura une phase de de transition de deux ans.
Côté Java
L’architecture ARM64 correspond aussi à ce que l’on appelle AArch64. Je vous parlais déjà de cette architecture dans mon billet en début d’année AArch64 Découvrir le projet de portage
Je vous annonçais que le portage sur macOS/AArch64 était prêt et aller bientôt arriver. Donc ça y est, c’est fait. Le portage est disponible pour le JDK 17.
Possesseur d’Apple Silicon, à vous de profiter du JDK en natif, sans le système Rosetta 2.
Complément
Il est intéressant de noter une spécificité de la plateforme macOS/AArch64. Elle n’autorise pas les segments mémoires où il est possible d’écrire et d’exécuter à la fois. Cela est réalisé pour des raisons de sécurité car il s’agit d’une attaque courante dans l’exploitation de faille logicielle. Plus d’informations sur l' Article Wikipedia W^X
Pourquoi en parler ? parce que la JVM HotSpot crée et modifie du code executable. C’est à dire elle fait exactement ce qu’interdit la fonctionnalité W^X évoquée ci-dessus. Cette JEP permet tenir compte de cette contrainte (mais uniquement pour cette plateforme).
JEP 382 new macOS Rendering Pipeline
Historique
Cela fait parti d’une annonce d’Apple de septembre 2018 lors de la sortie de macOS 10.14. Apple sort le cadriciel Metal comme remplaçant de OpenGL. Ce dernier est déprécié.
Côté Java
En août 2019, le projet Lanai est mis en place. Le but est de prendre en charge le rendu avec l’API Apple Metal.
L’objectif est de :
-
Reprendre toutes les fonctionnalités de l’API Java 2D
-
Mettre en place la coexistence avec l’implémentation OpenGL
-
Etre prêt quand Apple supprimera OpenGL
-
Etre transparent pour les utilisateurs
-
Fournir les mêmes performances (voir meilleure)
Cette JEP permet justement de finaliser le projet. C’est à dire d’intégrer l’implémentation dans le JDK.
La transparence est assurée par le fait que cela concerne l’implémentation interne du JDK.
En revanche, il est intéressant de noter que l’implémentation par défaut est OpenGL. Donc, si vous souhaitez utiliser la nouvelle implémentation est faudra ajouter la propriété suivante :
-Dsun.java2d.metal=true
C’est bizarre au début mais logique après réflexion.
En effet, OpenGL est déprécié mais il n’est pas supprimé. Donc c’est normalement de pouvoir continuer à l’utiliser. A ce titre, les utilisateurs classiques n’auront aucun impact.
En revanche, cela permettra aux utilisateurs de tester leurs applications et les différentes situations avec la nouvelle implémentation et faire des retours à l’équipe.
Vous voulez être de la partie, n’hésitez pas ! Pour les retours, vous avez les listes suivantes :
Il est à noter que les builds du JDK 17 (en pré-version) du n°19 au n°23 avaient l’implémentation avec Metal actif par défaut. Il était néanmoins possible de réactiver OpenGL
Références
Moteur de recherche
"Eduquer, ce n'est pas remplir des vases mais c'est d'allumer des feux." - Michel Montaigne
Billets récents
- Eclipse plante systématiquement sous Debian (et autres distribution Linux)
- JEP 463, Implicitly Declared Classes and Instance Main Methods (Second Preview)
- Debian - Montée de version de Debian 11 (Bullseye) à Debian 12 (Bookworm)
- JEP 451, Prepare to Disallow the Dynamic Loading of Agents
- JEP 444, Virtual Threads