JEP 382 et JEP 391, les apports du JDK 17 pour macOS

Contexte

Le JDK évolue pour suivre les évolutions de la plateforme macOS.

avertissementPour 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.

jdk17 release build

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 :

avertissement 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