Wine 11 réécrit au niveau du noyau la manière dont Linux exécute les jeux Windows et obtient d’énormes gains de performances
(xda-developers.com)- Refonte complète au niveau du noyau de l’architecture d’exécution des jeux Windows sur Linux, supprimant le goulot d’étranglement de synchronisation lié à
wineserver - Le nouveau pilote NTSYNC traite directement dans le noyau les objets de synchronisation NT, avec des gains de FPS pouvant dépasser x8
- Avec WoW64 désormais achevé, les applications Windows 32 bits peuvent s’exécuter sur un Linux 64 bits sans bibliothèques séparées
- Renforcement du pilote Wayland, prise en charge de Vulkan 1.4, améliorations Bluetooth et force feedback, etc. : la compatibilité progresse sur l’ensemble de la pile graphique et des entrées/sorties
- Les gains en performances et en stabilité se diffusent à tout l’écosystème fondé sur Wine, notamment Proton, SteamOS et Lutris
Principaux changements de Wine 11
-
Wine 11 n’est pas une simple mise à jour annuelle,
mais une refonte majeure qui réécrit au niveau du noyau la façon dont Linux exécute les jeux Windows- En plus des corrections de bugs et optimisations accumulées au fil des années, cette version introduit des changements structurels comme la prise en charge de NTSYNC, l’achèvement de WoW64 et le renforcement du pilote Wayland
- Les gains de performances s’étendent à l’ensemble des projets basés sur Wine, comme Proton et SteamOS
Limites historiques et solutions de contournement
- Jusqu’ici, Wine ne parvenait pas à implémenter parfaitement sur Linux les primitives de synchronisation NT de Windows (
mutex,semaphore,event, etc.)- Pour synchroniser les threads, il fallait effectuer à chaque fois des appels RPC vers wineserver, parfois des milliers de fois par seconde, provoquant des retards d’image et un timing irrégulier
- Esync réduisait les appels à wineserver grâce à
eventfd, mais se heurtait aux limites sur le nombre de descripteurs de fichiers - Fsync, basé sur
futex, est plus rapide, mais nécessite des patches externes au noyau, ce qui le rend difficile à utiliser sur les distributions standard- Le
futex_waitvde Linux 5.16 diffère du prototype de Fsync et ne constitue pas un remplacement complet
- Le
- Les deux approches restaient des solutions provisoires, incapables d’implémenter fidèlement certaines API NT, comme
NtPulseEventou le mode wait-for-all deNtWaitForMultipleObjects
NTSYNC — refonte de la synchronisation au niveau du noyau
- NTSYNC ajoute au noyau Linux un nouveau pilote de périphérique
/dev/ntsyncqui modélise directement les objets de synchronisation Windows NT- La synchronisation n’est plus gérée dans l’espace utilisateur mais directement dans le noyau, supprimant les allers-retours avec wineserver
- La gestion des files, la sémantique des événements et les opérations atomiques sont toutes prises en charge par le noyau
- Cette évolution a été développée par Elizabeth Figura, déjà à l’origine d’Esync et Fsync, présentée à la Linux Plumbers Conference 2023 puis intégrée à Linux 6.14
-
Chiffres des gains de performances
- Dirt 3 : 110.6 → 860.7 FPS (gain de 678 %)
- Resident Evil 2 : 26 → 77 FPS
- Call of Juarez : 99.8 → 224.1 FPS
- Tiny Tina’s Wonderlands : 130 → 360 FPS
- Call of Duty: Black Ops I devient entièrement jouable
-
Différences par rapport à fsync
- Pour les utilisateurs de fsync, les gains restent limités, mais les jeux affectés par des goulots d’étranglement multithread bénéficient d’améliorations spectaculaires
- Comme NTSYNC est intégré au noyau principal, aucun patch séparé n’est nécessaire, et il est immédiatement utilisable sur des distributions récentes comme Fedora 42 et Ubuntu 25.04
- Il est activé par défaut dans la bêta de SteamOS 3.7.20 et également pris en charge par Proton GE
- NTSYNC constitue le premier cas dans l’histoire de Wine d’une implémentation correcte de la synchronisation au niveau du noyau
WoW64 achevé — unification de la compatibilité 32 bits
- L’implémentation de l’architecture WoW64 (Windows 32-bit on Windows 64-bit) est achevée dans Wine 11
- Sur un système Linux 64 bits, il n’est plus nécessaire d’installer des bibliothèques 32 bits séparées pour exécuter des applications Windows 32 bits
- Un binaire unique détecte automatiquement l’architecture de l’exécutable et la gère en conséquence
- Cela inclut le mappage mémoire OpenGL, le passthrough SCSI et même la prise en charge des applications 16 bits
- Des logiciels Windows anciens des années 1990 peuvent ainsi être exécutés
- Auparavant, les différences de configuration
multilibselon les distributions compliquaient l’exécution ; désormais, Wine le gère en interne
Wayland et autres améliorations majeures
-
Pilote Wayland
- La copie bidirectionnelle via le presse-papiers, la prise en charge du glisser-déposer et le redimensionnement par le compositeur lors des changements de résolution améliorent la compatibilité des jeux plus anciens
- La plupart des problèmes de compatibilité de Wine lors du passage de X11 à Wayland sont désormais résolus
-
Graphismes et médias
- Sous X11, EGL devient le backend OpenGL par défaut, remplaçant GLX
- Prise en charge de Vulkan 1.4 et ajout du décodage matériel H.264 via Vulkan Video
-
Entrées/sorties et périphériques
- Les améliorations du force feedback renforcent la prise en charge des volants de course et des joysticks de simulation
-
Prise en charge des services Bluetooth BLE et de l’appairage, amélioration du traitement des soundfonts MIDI
- Ajout de la compression Zip64, de Unicode 17.0.0, de la numérisation TWAIN 2.0 (64 bits) et de la fonction ping IPv6
-
Performances et extension de plateforme
- Amélioration de la gestion des priorités de threads sur Linux et macOS, avec de meilleures performances multithread
- Prise en charge de la simulation d’une taille de page de 4K sur ARM64, améliorant la compatibilité avec les appareils Linux basés sur ARM
Compatibilité des jeux et corrections de bugs
- La compatibilité s’améliore pour des titres majeurs comme Nioh 2, StarCraft 2, The Witcher 2, Call of Duty: Black Ops II, Final Fantasy XI et Battle.net
- Des centaines de corrections de bugs sont incluses, améliorant globalement la stabilité et les performances
Évaluation d’ensemble
- Avec la combinaison de NTSYNC, de l’achèvement de WoW64, des améliorations de Wayland et d’un grand nombre de corrections de bugs, Wine 11 est la sortie la plus importante depuis Proton
- Les performances et la compatibilité progressent dans tous les projets basés sur Wine, comme Proton, Lutris et Bottles
- Pour les utilisateurs qui jouent sous Linux, Wine 11 est une version qui mérite absolument d’être essayée
2 commentaires
En conclusion, ça va encore se traduire par des années de vieux jeux avec une rétrocompatibilité cassée..
C’est un échange équivalent, en fait.
Avis sur Hacker News
J’ai un respect presque infini pour le projet Wine
Reproduire pendant 30 ans le comportement documenté et non documenté de Windows semble être un travail ingrat et monotone, mais c’est grâce à cela que Wine est devenu un produit réellement utilisable
Surtout quand on voit que d’anciens jeux tournent mieux que sous Windows, on mesure l’attention au détail et la tolérance à la souffrance que cela demande
J’essayais parfois de lancer un petit jeu simple et je me disais « tiens, ça marche ? », mais je ne pensais pas que c’était fiable
Maintenant, j’admets que ce jugement était totalement faux
Il paraît qu’Excel 2010 est la dernière version à avoir obtenu la note Platinum
C’est intéressant de se demander pourquoi ces applications sont plus difficiles à prendre en charge que les jeux
En regardant la page des résultats de tests, on voit que cette validation systématique est au cœur de sa forte compatibilité
Une grande partie des connaissances acquises dans ce projet a alimenté le développement de Wine
À l’époque, j’aurais aimé créer quelque chose comme Wine moi-même, mais je n’en avais pas les connaissances
Aujourd’hui, je n’utilise Linux que pour les serveurs, et j’ai entendu dire qu’il existe aussi Wine sur Mac, mais je n’ai pas vraiment d’application Windows que j’aie envie d’exécuter
J’ai été stupéfait de voir à quel point le nombre d’images par seconde a grimpé grâce à Proton
Voir Dirt 3 passer de 110 FPS à 860 FPS, et Resident Evil 2 de 26 FPS à 77 FPS, c’est difficile à croire
Je pense que c’est grâce à tout l’argent que Valve a investi là-dedans
Comparé à Wine avec fsync, le gain n’est que de quelques pourcents
Cela reste malgré tout une amélioration nette
D’après la documentation ntsync, il s’agit d’un pilote noyau destiné à implémenter plus fidèlement sous Linux les mécanismes de synchronisation de Windows
Certains disent qu’il ne faut pas trop s’emballer sur les gains de performance de ntsync
Dans la plupart des cas, les gains restent de l’ordre de quelques pourcents, et certains jeux peuvent même devenir légèrement plus lents
Quand je lis ce genre de discussion sur des technologies aussi bas niveau, j’ai presque honte de ne faire que des applications CRUD
J’ai déjà entendu l’histoire d’un développeur génial épuisé par des délais extrêmes, qui avait fini par passer à un poste de CRUD simple en VB en disant que c’était « comme des vacances payées »
J’ai testé Rails, Phoenix et Django, mais je n’ai pas trouvé ça simple
Récemment, j’ai quand même un peu progressé avec l’aide de Claude
Les exigences des entreprises sont complexes, et l’architecture peut s’effondrer très facilement
Je suis content de savoir que les milliers de dollars que j’ai dépensés chez Valve ont finalement servi à améliorer Wine
Je me demande combien de développeurs et de prestataires Valve a engagés pour cela
Autrement dit, la majeure partie du financement passe par eux
Wine pourrait, paradoxalement, être autodestructeur
Si les jeux tournent bien sous Linux, les développeurs pourraient finir par faire directement des portages Linux, et Wine ne serait alors plus nécessaire
Même quand il existe un portage natif, faire tourner la version Windows via Proton est souvent plus fiable
L’API Windows est familière et ne change pas, donc les développeurs continuent à s’en servir comme référence
Comme l’ABI Windows reste plus stable, il est plus efficace de ne maintenir qu’un build Windows tant que l’écart de performances reste minime
Quelqu’un a demandé s’il ne serait pas possible d’implémenter ntsync en espace utilisateur avec de la mémoire partagée
Claude a expliqué que, comme pour 95 % des jeux une approche simple suffisait, il n’y avait pas vraiment de motivation pour implémenter une logique complexe de mémoire partagée, et qu’une fois la précision devenue importante, il était naturel de passer au noyau
ntsync n’est pas un simple wrapper d’API, mais un adaptateur au niveau du noyau qui reproduit le comportement de synchronisation du noyau NT
En regardant le code source, on voit que cela est étroitement intégré à l’ordonnanceur du noyau
Lien vers la documentation
C’est impressionnant de voir Linux réimplémenter Windows tout en faisant parfois mieux
Alors que Microsoft rend progressivement son propre logiciel de plus en plus pénible à utiliser, ce genre d’accomplissement est remarquable
Beaucoup d’anciens jeux reposent sur du 16 bits, et même parmi les jeux 32 bits, il arrive souvent que le programme d’installation soit en 16 bits
Si un développeur de Wine lit ceci, j’aimerais qu’il fasse une présentation sur le sujet à la Carolina Code Conference 2026
L’appel à propositions est ouvert jusqu’au 31 mars
Si vous voulez la même chose sur macOS, vous pouvez contribuer à ce dépôt
J’ai bien quelques souvenirs de parties de Bolo sur les Mac de l’école, mais on doit être loin d’atteindre 1 % du nombre de jeux Windows