C'est le développeur Hector Martin qui le pointe sur Mastodon : les puces M1 et M2 contiennent des fonctions qu'Asahi Linux peut utiliser… et que macOS ne supporte pas, ce qui peut sembler étonnant.
Des fonctions liées à la virtualisation
Le premier point dans sa liste est le « Virtual GIC Interrupt Controller », présent dès les puces M1 mais inutilisé. GIC signifie Generic Interrupt Controller et c'est une fonction liée à la virtualisation dans les CPU ARM. Très schématiquement, une interruption est un signal émis par le matériel qui va autoriser l'arrêt du programme en cours pour exécuter une tâche importante. Le vGIC permet de transférer les interruptions directement vers la machine virtuelle pour de meilleures performances, mais les API d'Apple n'en profitent pas et passent par un traitement logiciel, plus long. Hector donne probablement une des raisons dans les réponses à son thread : la fonction a des bugs, qui sont pris en compte par GNU/Linux.
Le second point est la Nested Virtualization, virtualisation imbriquée en français. Elle a été ajoutée dans les puces M2 et — comme son nom l'indique — elle autorise l'exécution d'une machine virtuelle dans une machine virtuelle. Elle a peu d'intérêt pour un usage grand public, mais est attractive dans le monde professionnel.
Le troisième point n'est pas lié à la virtualisation, mais à une faille connue : Spectre v2. Les puces M2 contiennent en effet un mécanisme pour éviter les attaques reliées à la Branch Target Injection (BTI). Essayons de faire simple, même si ça ne l'est pas : les processeurs modernes sont dits « OoO », c'est-à-dire Out-of-Order. De façon très basique, ils n'exécutent pas les instructions dans l'ordre d'arrivée, mais tentent de les placer dans le meilleur ordre possible et (surtout) s'efforcent de prédire les instructions suivantes pour améliorer le rendement.
Cette prédiction de branchement est efficace dans une grande partie des cas : le processeur prédit les bonnes instructions et peut les exécuter rapidement. Mais sans entrer dans les détails, certaines des prédictions ratées permettent à un programme malicieux de lire des données qui ne lui sont pas destinées en utilisant des défauts de ce mécanisme et les failles Spectre se basent sur ce point.
Avec les M2, Apple a intégré une correction matérielle qui empêche l'exploitation de ce type de faille, mais le noyau de macOS n'en profite pas encore, contrairement à Fedora Asahi. Hector Martin pointe aussi le fait que le moteur JavaScriptCore d'Apple ne gère pas la fonction, alors même qu'il s'agit d'un type d'application extrêmement sensible à ce type de problèmes. Hector explique d'ailleurs que l'utilisation du BTI avec JavaScriptCore pose des soucis avec Fedora Asahi précisément à cause de l'absence de prise en charge.
Apple garde parfois certaines fonctions pour plus tard
Les exemples donnés sont intéressants, parce qu'ils sont variés. Dans le premier cas, l'absence est vraisemblablement liée aux bugs de la fonction1. Pour le troisième, le développement des puces et ceux des logiciels qui pourraient en profiter ne sont pas nécessairement synchronisés.
Dans la pratique, les développements liés au matériel n'ont pas les mêmes contraintes que ceux attachés aux OS et les calendriers des sorties matérielles ne sont pas les mêmes que ceux des sorties logicielles. Nous pouvons supposer que la virtualisation imbriquée sera peut-être mise en avant avec le futur Mac Pro ARM. Accessoirement, certaines fonctions liées à la virtualisation font probablement partie du jeu d'instruction lui-même, ce qui oblige Apple à les gérer pour des raisons contractuelles.
Enfin, il faut rappeler qu'Apple a parfois tendance à garder des fonctionnalités en réserve pour le futur. L'exemple le plus récent est celui du HomePod mini : le capteur de température et d'humidité existe depuis le lancement (2020) mais n'a été activé que cette année.
Le HomePod mini mesure l'humidité et la température avec la version 16.3 de son logiciel
-
Les CPU peuvent avoir des bugs, qui sont soit corrigés logiciellement avec ce qu'on appelle du microcode, soit avec une nouvelle révision de la puce. ↩︎