Découvrir le projet OpenJDK pour AArch64

Contexte

Dans le prochain JDK, nous avons la JEP 388 qui annonce la disponibilité d’un nouveau portage sur l’architecture Windows / AArch64. Nous avions déjà un portage sur Linux sur AArch64. Mais concrêtement, c’est quoi cette architecture, cela permet de faire tourner quoi ?.

Architecture AArch64, c’est quoi ?

Nous sommes familiers avec les signes des architectures Intel : x86 ou amd64.

Actuellement, les architectures ARM se développent fortement. Ceux sont des systèmes sur une puce (SoC en anglais pour "System on a Chip"). Ils sont notamment très utilisés dans le monde de l’embarqué (comme les Raspberry Pi par exemple) ou la téléphonie. Il offre l’avantage d’avoir une faible consommation d’énergie. C’est qui est très important dans ce monde là, par exemple, l’autonomie du téléphone en sera rallongée.

220px Raspberry Pi A+

(Raspberry Pi modèle A+, source Wikipedia Commons)

La particularité technique principale est que l’architecture est de type RISC. L’objectif est d’avoir un jeu d’instructions simple et réduit. A l’inverse, les processeurs Intel sont de type CISC avec un jeu d’instructions complexes.

Le seconde particularité est que la société ARM ne fabrique pas ces processeurs. Elle vend des licences à d’autres sociétés qui fabriquent les processeurs. Par conséquent, plusieurs sociétés concurrentes exploitent les processeurs ARM dans leur système (SoC). Dans le monde du mobile, nous retrouvons Qualcomm par exemple.

Dans le temps, il y a eu plusieurs versions, celle qui nous intéressent à ce jour c’est ARMv8 qui est une architecture 64 bits. Ce qui correspond à notre fameux AArch64. En effet, les précédentes versions sont des architectures 32bits.

avertissement Il est à noter qu’à ce jour, les processeurs équipant les Raspberry PI sont uniquement des processeurs 32bits.

Coté centre de calcul, ce type d’architecture intéresse aussi les fournisseurs de services et les hébergeurs afin de réduire leurs factures d’électricités. Dans ce sens, AWS a annoncé fin 2019 qu’il allait miser sur l’architecture ARM 64bits avec leurs processeurs Graviton 2. Ils sont déclinés dans les instances M6g, C6g et R6g.

AWS configuration

(Liste de instances AWS en choississant le processeur AWS Graviton)

Plus récemment, en juin 2020, Apple annonce la transition des processeurs Intel vers Apple silicon avec la puce M1 pour les mac. C’est une puce conçue par Apple en utilisant l’architecture ARM. Cela leur permet de se passer des processeurs Intel. Ils ont déjà de l’expérience sur ce sujet car ils conçoivent les puces pour leurs iPhone, iPad, Apple Watch. En revanche, la fabrication reste sous-traitée à des prestataires.

astuce Ce changement d’architecture va permettre aux utilisateurs de Mac Big Sur d’exécuter des applications iPadOS et iOS.

Portage Linux / AArch64

La version binaire pour les plateformes Linux sous Architectures AArch64 est disponible par le projet OpenJDK depuis la version 15 du JDK.

jdk15 liste builds

Cependant, l’aventure a commencé bien plus tôt en 2011. Je vous conseille ce billet How Red Hat ported OpenJDK to 64-bit Arm: A community history

Pour en faire la synthèse, la particularité au début était qu’il n’existait pas de processeur physique. Ils ont été obligé de développer d’abord un simulateur pour faire tourner le portage de la JVM.

En 2014, Red Hat commence à fournir des premières versions à des partenaires.

En 2015, le portage AArch64 fait partie intégrant du projet OpenJDK. Oracle encourage l’initiative et les aides pour le processus d’intégration.

En parallèle, Oracle avait son propre portage des architectures ARM 32 bits et 64 bits.

En 2019, La JEP 340: One AArch64 Port, Not Two est mise en oeuvre afin d’avoir une et une seule implémentation pour les architectures 64 bits. L’objectif est d’éviter la duplication de code et de recentrer les efforts sur un portage unique. Cela est a été réalisé dans le JDK 12.

En 2020, Oracle annonce dans ce billet le support des architectures ARM 64 bits pour OpenJDK et Oracle JDK.

Ce qui permet d’expliquer pourquoi les binaires sont disponibles depuis le JDK 15.

D’autres JEPs ont été consacrées à l’amélioration des performance sous AArch64, comme par exemple la JEP 315 : Improve Aarch64 Intrinsics qui a été inclus dans le JDK 11. Le but était d’améliorer les performances des fonctions sin, cos et log de la classe java.lang.Math en prenant en compte les spécificités de cette architecture.

Portage Windows / AArch64

De son côté, Microsoft propose une version de Windows 10 fonctionnant sous de tel processeur. Le travail de l’équipe Java de Microsoft a été de porté le JDK Windows sous cette architecture. Le travail a été piloté par Monica Beckwith avec son équipe et des partenaires.

En juin 2020, Monica annonce sur la liste de diffusion hotspot-runtime-dev, les avancés de son équipe sur l’extension du support de AArch64 à Windows.

Comme l’indique la fiche JDK-8248238 Implementation: JEP 388: Windows AArch64 Support, leur travail a été intégré dans le build 19 du JDK 16.

JDK 8248238

De son coté, Bruno Borges réalise un billet pour annoncer l’arrivée du support OpenJDK sur Windows / ARM.

Portage macOS / AArch64

Comme nous l’avons évoqué dans la section Architecture AArch64. Apple commence à développer ces propres processeurs pour Mac. Pour en savoir plus, je vous conseille cet article de 01net.com

Le défi de la transition vers une nouvelle architecture est effectivement d’avoir un ensemble de logiciels disponible. Au début, le catalogue est forcément réduit par rapport à l’ancienne architecture.

La JEP 391: macOS/AArch64 Port est ouverte dans ce sens. A ce jour, il n’a pas de version du JDK cible.

Bientôt disponible au sein du projet OpenJDK. Cela reste à une histoire à suivre!

avertissement Maj 04/03/2021, Bien que la JEP 391 n’a pas de version cible, le portage macOS serait bientôt disponible. En effet, suite au retour d’un membre de l’équipe, le travail principal a été fait et il resterait seulement des détails.

astuce En attendant, des éditeurs comme Azul Systems proposer d’ores et déjà des JDK pour ce type de cible macOS / AArch64.

azul zulu macOS AArch64

(Voici leur page de téléchargement pour Zulu.)