↩ Accueil

Vue normale

Reçu aujourd’hui — 21 novembre 2025 4.1 🐧 Linux

Nouvelles de Haiku - Automne 2025

21 novembre 2025 à 08:33

Haiku est un système d’exploitation pensé pour les ordinateurs de bureau. Il est basé sur BeOS mais propose aujourd’hui une implémentation modernisée, performante, et qui conserve les idées qui rendaient BeOS intéressant: une interface intuitive mais permettant une utilisation avancée, une API unifiée et cohérente, et une priorisation de l’interface graphique par rapport à la ligne de commande pour l’administration du système.

Le projet est actuellement (depuis 2021) en phase de beta test. La plupart des fonctionnalités sont implémentées et l’attention des développeurs se porte sur la correction de bugs, l’amélioration de la stabilité et des performances, et plus généralement, les finitions et petits détails. Une autre part du travail est le suivi de l’évolution de l’environnement technologique: nouveaux pilotes de périphériques, suivi des derniers standards du web, etc.

Ce trimestre, les changements se concentrent sur l'amélioration des performances, l'amélioration des outils internes de debug, et, du côté de l'interface graphique, la poursuite du travail sur le mode sombre et le nettoyage du code du Tracker.

Sommaire

Optimisation des performances de git status

Depuis longtemps, l'exécution de git status est beaucoup plus lente sous Haiku que sous Linux, ce qui est particulièrement visible (et ennuyant) lorsqu'on travaille avec de gros dépôts git. Les raisons de cette lenteur sont nombreuses, mais la plus importante était la "lock contention" dans les cache disques.

Waddlesplash a refactorisé la gestion du cache d'entrées de répertoires et du cache de blocs de disque dans le noyau, afin d'utiliser des opérations atomiques à la place de verrous dans les cas les plus fréquents: la lecture d'un bloc qui est déjà dans le cache, et l'insertion d'un élément dans le cache d'entrées. Ces changements sont complexes à développer et encore plus difficiles à tester: il y a bien sur des risque de "race conditions", qui disparaissent dès qu'on essaie d'ajouter des traces ou d'exécuter le code pas à pas, puisque cela modifie le timing de l'exécution. La seule façon de s'en sortir est d'être rigoureux lors de l'écriture puis de la relecture du code.

Ces efforts ont été payants: sur un test en condition réelles, l'exécution de git status sur le dépôt buildtools de Haiku (qui contient tout le code source de gcc et des binutils, soit plus de 160 000 fichiers) passe de 33 secondes à 20 secondes si le cache disque est à froid, et de 15 à 2.5 secondes si le cache est pré-rempli.

C'est encore loin des performances de Linux (seulement 0.3 secondes pour un test avec le même dépôt git). Les mesures pour Haiku sont faites avec un noyau compilé en mode KDEBUG, c'est à dire avec des vérifications d'intégrité supplémentaires, mais cela ne justifie tout de même pas des performances 10 fois plus mauvaises. On peut voir le verre à moitié plein et se dire que Haiku est 6 fois plus rapide qu'avant, ce qui est déjà très bien.

Nouveau "tas gardé" (guarded heap) pour le noyau

Le tas est la structure de données dans laquelle sont gérées toutes les allocations mémoires dynamiques. Certains utilisateurs de Haiku sont probablement familiers du "tas gardé" pour l'espace utilisateur, que l'on demande d'activer pour investiguer des plantages logiciels, avec une commande ressemblant à LD_PRELOAD=libroot_debug.so MALLOC_DEBUG=g programme. Le principe de fonctionnement est que chaque allocation (avec la fonction malloc par exemple) est placée dans sa propre page mémoire, et alignée à la fin de la page. Ainsi, tout accès hors des limites de la page peut être détecté immédiatement lorsqu'il survient, et, si on désactive en plus la réutilisation de la mémoire libérée, cela permet de détecter également l'accès à de la mémoire libérée et la double libération (double free) de mémoire. Bien sûr, cette approche est très inefficace en termes de consommation mémoire, mais elle a l'avantage de pouvoir être utilisée sans avoir besoin de recompiler le logiciel défectueux.

Le changement ce mois-ci ne porte pas sur le tas gardé pour l'espace utilisateur, mais sur celui du noyau. À l'origine, le principe de fonctionnement du tas gardé du noyau était similaire à celui de l'espace utilisateur. Cependant, la gestion de la mémoire dans le noyau s'avère plus complexe, puisque le noyau utilise sa propre mémoire pour le suivi des allocations de zones mémoire (areas) et toute sorte de choses importantes au fonctionnement du système. En conséquence, lors d'un appel à malloc par du code s'exécutant dans le noyau, il n'est pas toujours possible d'allouer de la mémoire sur le moment, parce que le code se trouve lui-même dans une section critique dédiée à la gestion de la mémoire. Cela provoquerait une récursion ou un deadlock. L'implémentation de malloc doit dans ce cas utiliser de la mémoire réservée par avance à cet effet. Mais l'allocateur mémoire du noyau a par contre un gros avantage sur celui de l'espace utilisateur: il dispose d'un accès direct au code et aux données de gestion de la mémoire virtuelle et des tables de pages, sans avoir besoin de passer par l'abstraction fournie par les appels systèmes pour l'espace utilisateur.

L'ancienne implémentation du tas gardé pour le noyau ne tirait pas parti de cette possibilité, et en plus, elle n'avait pas été synchronisée avec des évolutions faites dans son pendant en espace utilisateur. Par exemple, la version en espace utilisateur utilise MAP_NORESERVE pour indiquer des réservations d'espace d'adressage sans allocation de mémoire (overcommit), ainsi que l'utilisation de madvise pour libérer les pages mémoires qui ne sont plus utiles. Cela permet d'utiliser le tas gardé en mode "désactiver la réutilisation d'espace d'adresses" pendant assez longtemps, même avec beaucoup d'allocations/déallocations, surtout sur les machines avec un espace d'adressage 64-bit où il y a beaucoup de place. Le tas gardé du noyau est demeuré incapable de faire ce genre de chose, ce qui fait que, même sur un système 64-bit, il consommait assez rapidement tout l'espace d'adressage disponible. Pour couronner le tout, cette implémentation avait besoin de code spécifique dans les modules de gestion de la mémoire virutelle et des tables de pages, qui n'étaient pas implémentés sur les architectures non-x86.

Waddlesplash a donc pratiquement réécrit le tas gardé à partir de zéro, en reprenant l'ancien code seulement là où c'était pertinent et avec une nouvelle structure de suivi des allocations. La nouvelle implémentation s'interface directement avec les autres composants du noyau sans avoir besoin de points d'entrée spécifiques. Elle est capable de libérer la mémoire physique qui n'est plus utile, ce qui permet d'utiliser Haiku pendant quelques temps même avec le mode "désactiver la réutilisation de l'espace d'adressage" (il est maintenant possible dans ce mode de démarrer le bureau puis de lancer quelques compilations). Enfin, si le tas détecte un problème, le kernel panic qui se déclenche affiche maintenant des informations de diagnostic supplémentaires, le rendant aussi pratique que la version pour l'espace utilisateur: affichage de l'adresse de la zone mémoire concernée, mais aussi des informations sur le code qui l'a allouée et éventuellement libérée.

Contrairement à la version pour l'espace utilisateur, il est nécessaire de recompiler le noyau pour activer ce tas gardé. Ce n'est pas activé par défaut, mais il sera possible de fournir des builds spécifiques de Haiku à certains utilisateurs afin de voir s'ils détectent de nouveaux bugs, ou si cela peut aider à investiguer certains bugs déjà identifiés mais non expliqués (quelques rapports de bugs récents ont d'ailleurs motivé tout ce travail).

Applications

Tracker

Tracker est le navigateur de fichiers de Haiku. Il s'agit d'une des parties du code de BeOS qui avait été publié en logiciel libre lors de l'abandon de BeOS par Be inc. Ce code n'est pas aux standards de qualité actuels, le travail de Be datant en grande partie d'avant la standardisation du C++98, et il s'est passé beaucoup de choses depuis.

Jscipione continue d'améliorer le Tracker, à la fois en nettoyant le code, en corrigeant des bugs, et en ajoutant de nouvelles fonctionnalités. Chaque modification entraîne immanquablement son lot de régressions, qu'il faut ensuite corriger.

Ce trimestre, on trouve:
- la correction d'un crash dans les panneaux d'ouverture et d'enregistrement de fichiers,
- une amélioration du code de remplissage du menu des add-ons pour éviter de le regénérer à chaque clic de souris,
- l'affichage du menu "disques" dans le menu "rayon X" (menu permettant de naviguer rapidement dans les sous-dossiers) du bureau si l'option "montrer les disques" est activée,
- ajout des options "modifier la requête" et "fermer toutes les fenêtres du workspace" dans la fenêtre de requêtes,
- correction de raccourcis clavier qui ne fonctionnaient pas dans les fenêtres pour ouvrir et enregistrer des fichiers,
- correction d'une régression sur la détection d'intersection entre le curseur de la souris et les icônes.

Waddlesplash a corrigé les couleurs de fond des titres de colonnes dans la fenêtre principale et dans la fenêtre "Informations sur le fichier".

Madmax a également contribué une correction d'un crash lorsque des commandes de scripting (envoyées au Tracker par une autre application) sont utilisées en combinaison avec le type-ahead filtering (filtrage des fichiers visibles dans une fenêtre du Tracker en tapant une partie du nom au clavier).

Remote desktop

Haiku dispose d'un "bureau à distance" permettant de se connecter à une machine Haiku depuis un autre système. Il existe deux clients: l'un fonctionnant sur une autre machine Haiku, et l'autre sous forme d'une application web HTML5 affichant le bureau dans un canvas javascript. Cette dernière a été publiée à l'origine sous forme d'un poisson d'avril, mais les technologies web font que c'est finalement une solution tout à fait utilisable.

Anarchos a corrigé l'initialisation du curseur lors de l'ouverture d'une session de bureau à distance. Le curseur initial n'était pas celui de la machine distante, et cela se corrigeait uniquement lors du prochain changement de curseur au gré des déplacements de la souris.

AboutSystem

L'application AboutSystem affiche les noms de tous les développeurs participant au projet, les licenses de certains composants logiciels, ainsi que des informations sur la machine sur laquelle Haiku s'exécute (mémoire disponible, CPUdétecté, uptime, version du système).

Nipos a amélioré le calcul de la largeur minimale du panneau d'information dans AboutSystem, afin que le texte s'affiche sans retours à la ligne disgracieux quelles que soient la police de caractères choisie et sa taille.

MediaPlayer

MediaPlayer permet de lire les fichiers audio et vidéo.

Nipos a rectifié le choix de couleurs dans la liste de lecture pour qu'elle fonctionne mieux en mode sombre.

Icon-O-Matic

Icon-O-Matic permet d'éditer les icônes au format HVIF, un format compact qui permet de stocker des images complexes dans le peu d'espace disponible dans les inodes du système de fichiers. Ceci permet un affichage très rapide des icônes, même sur un support de stockage lent.

Nipos a désactivé le menu "supprimer" lorsqu'il n'y a aucune sélection à supprimer.

magnetProgramming a ajouté un message d'avertissement lors de l'export en SVG, si l'icône exporté utilise des dégradés de couleurs qui ne peuvent pas être représentés dans un fichier SVG.

WebPositive

WebPositive est le navigateur web de Haiku. Il est basé sur le moteur WebKit, qui est co-développé principalement par Apple, Igalia et Sony.

Correction d'un crash pouvant survenir au démarrage de l'application (PulkoMandy).

Devices

L'application Devices affiche les différents composants matériels présents sur la machine.

Affichage du nom complet des périphériques ACPI à la place de leur identifiant à 4 lettres, losqu'ils en ont un (PulkoMandy).

Terminal

Le terminal permet d'accéder à toutes les applications en ligne de commande.

Plusieurs améliorations par korli:

  • Ajout du texte "surligné" (avec une ligne au-dessus du texte)
  • Ajout de la commande DECRQM permettant aux applications de connaître l'état du terminal
  • Correction d'un bug dans la commande CSI REP qui permet de répéter plusieurs fois un caractère (utilisé par exemple pour tracer rapidement une ligne horizontale)

Nipos a amélioré la synchronisation entre le presse-papier interne du terminal et le presse papier système lors de l'ouverture de nouveaux onglets (le terminal implémente un presse-papier de sélection similaire à celui de X11).

TextSearch

TextSearch est un outil de recherche de texte, une version graphique de la commande grep.

humdinger a corrigé le fonctionnement des actions "Montrer dans le Tracker" et "Réduire à la sélection", et aussi ajouté un menu pop-up proposant les différentes actions possibles sur un résultat de recherche.

AutoRaise

AutoRaise permet de faire passer en avant-plan automatiquement une fenêtre qui devient active, après un délai, dans le cas du focus-follows-mouse.

L'icône d'AutoRaise dans la DeskBar se met à l'échelle en fonction de la taille de police d'affichage (nipos).

ShowImage

ShowImage est la visionneuse d'image de Haiku.

Correction de problèmes pour retourner à la première image d'un slideshow lorsqu'on atteint la fin, et inversement si on veut revenir en arière. Amélioration des messages d'erreurs lorsqu'une image ne peut pas être affichée (nipos).

Préférences d'horloge

Ce panneau de préférence permet de régler l'heure, la date, le fuseau horaire et de configurer la synchronisation NTP.

Correction d'un problème d'affichage du point central de l'horloge en mode sombre (PulkoMandy et nipos).

DriveSetup

DriveSetup est le gestionnaire de partitions disques.

Conversion de la fenêtre principale pour utiliser un "layout" dynamique afin de faciliter de futures modifications (PulkoMandy).

DiskProbe

DiskProbe est un éditeur hexadécimal.

Utilisation de "layout" dynamique pour les panneaux de l'éditeur, et correction de la couleur du texte en mode sombre à plusieurs endroits (nipos).

DeskCalc

DeskCalc est une calculatrice, utilisable dans une fenêtre ou bien sous forme d'un "replicant" attaché sur le bureau.

DeskCalc enregistre sa couleur seulement si ce n'est pas celle par défaut. Cette fonctionnalité permet de recolorer la calculatrice, mais de la garder de la même couleur que les autres applications si on a pas demandé une couleur spécifique (nipos).

ActivityMonitor

ActivityMonitor permet d'afficher des graphiques à partir de toutes sortes d'informations sur le système.

Affichage de la température du système récupérée via le pilote acpi_thermal s'il est disponible (PulkoMandy).

Installer

Cette application permet d'installer Haiku en effectuant un clonage d'un système existant vers une nouvelle partition.

Dans certains cas, le bouton "Quitter" à la fin de l'installation était incorrectement appelé "Commencer" (nipos).

Playground

Playground est une application de démonstration permettant d'expérimenter la plupart des contrôles de l'interface de Haiku (boutons, cases à cocher, …).

Amélioration du calcul de la taille des barres de défilement (nipos).

Outils en ligne de commande

La commande iroster, permettant d'activer et désactiver les périphériques d'entrée, a maintenant une option --help affichant un petit mode d'emploi (OscarL).

Le service cddb_lookup, permettant de récupérer les titres des pistes sur les CD audio, ne fait plus sa requête DNS pour localiser le serveur CDDB dès le démarrage du système. Il attend maintenant qu'un CD audio soit inséré avant de le faire, ce qui réduit une possibilité d'identifier le système par son traffic réseau (nipos).

Dans le gestionnaire de paquets pkgman, ajout d'une option --show pour sélectionner certains champs à afficher (par exemple: pkgman coreutils --show provides), ce qui peut être utilisé dans des scripts d'analyse des dépôts de paquets - la commande package disposait déjà de certaines fonctions, mais n'est utilisable qu'avec les paquets disponibles localement sur la machine (OscarL et PulkoMandy).

Dans la commande sysinfo, ajout des foncionnalités des processeurs remontées dans la "leaf 7" de l'instruction CPUID, comme, par exemple, la disponibilité des jeux d'instructions AVX2 et AVX512.

Kits

Les "kits" sont les composants de la bibliothèque standard de Haiku. Ils regroupent chacun un ensemble de classes C++ (et quelques fonctions C) qui sont fonctionnellement proches.

Application Kit

L'application kit implémente les bases des applications Haiku: boucles d'évènements, envoi et réception de messages.

Meilleure gestion du débordement des numéros de token pour les BHandler. BHandler est la classe qui permet de recevoir et de traiter des messages (via la fonction MessageReceived). Chaque instance se voit attribuer un numéro identifiant sur 31 bits (un entier signé 32 bits, dont les valeurs négatives servent à indiquer des erreurs). Si, au cours de l'exécution du système, plus de 2 milliards d'instances sont crées, la valeur de l'identifiant déborde et devient négative (X512).

Interface Kit

L'interface kit regroupe toutes les APIs pour l'affichage de fenêtres à l'écran.

Optimisation de BView::Invalidate(). Cette fonction permet de demander au serveur graphique de déclencher le ré-affichage d'une partie d'une vue. Cette opération est relativement coûteuse puisque elle nécessite une communication entre l'application et le serveur graphique. L'optimisation consiste à détecter dans le code s'exécutant dans l'application, avant toute communication avec le serveur, si la zone à réafficher est visible à l'écran, ou si, par exemple, la fenêtre est cachée, ou la zone concernée n'est pas visible parce qu'une barre de défilement l'a déplacée hors de l'écran. Dans ce cas, il n'est pas nécessaire de déclencher une communication avec le serveur graphique. Ces optimisations avaient d'abord été réalisées dans la classe BColumnListView mais elles peuvent être généralisées à toutes les vues (waddlesplash).

Amélioration du choix de couleur pour BSlider (contrôle permettant de sélectionner une valeur en déplaçant un bouton sur une ligne horizontale ou verticale), pour donner de meilleurs résultats en mode sombre ou avec des thèmes de couleur très personnalisés (jscipione). Nephele a effectué des changements similaires dans du code plus générique (au niveau de la classe BControlLook qui définit l'apparence globale de Haiku et permet d'implémenter des thèmes différents allant au-delà d'un simple changement de couleurs). Toujours dans la catégorie de l'amélioration du mode sombre, nipos a sélectionné une meilleure couleur pour le texte "<empty>" s'affichant lorsqu'on ouvre un menu ne comportant aucun élément.

Changement du format de stockage des régions (une liste de rectangles décrivant une zone arbitraire de l'écran ou d'un autre espace de coordonnées) dans BPicture (une classe permettant d'enregistrer des opérations de dessin pour les reproduire ailleurs ou plus tard). Le format utilisé était incompatible avec celui de BeOS, ce qui pose des problèmes à certaines applications qui utilisent des "pictures" pré-enregistrées. Et en plus, il était moins performant, donc il n'y avait pas de raison de le conserver (X512).

Ajout d'un effet de surbrillance (discret) lorsqu'un BMenuField (liste déroulante) est survolé par la souris, comme c'était déjà le cas pour les boutons (nipos).

Dans BColumnListView, rectification de la position des barres de défilement après la suppression de lignes. Le bug était particulièrement visible dans l'application HaikuDepot (apl).

X512 a entrepris de nettoyer le code permettant l'interfaçage entre l'Interface Kit et app_server:
- regroupement des méthodes dans un ordre plus logique dans le fichier source,
- optimisation de l'envoi de BRegion,
- correction d'un problème dans l'envoi de BAffineTransform qui envoyait tout l'objet C++ (avec sa vtable) au lieu de seulement envoyer la matrice de transformation,
- ajout d'identifiant d'écran là où c'est nécessaire pour un véritable support de l'affichage sur plusieurs écrans,
- retravail de la gestion de mémoire partagée entre le serveur graphique et les applications, afin de garder un comptage de références et une map de ces zones de mémoire gérée entièrement par le serveur graphique (sans risque de fuite de la mémoire si une application plante, par exemple). Cela améliore également les performances en réduisant la communication nécessaire entre les applications et le serveur.

Synchronisation de FlatControlLook (un thème d'apparence "plat", avec moins de dégradés que le thème par défaut) avec le code de BeControlLook (ledit thème par défaut) suite aux modifications effectuées précédement pour simplifier et uniformiser les calculs de couleurs du thème (waddlesplash).

Correction d'une confusion dans la gestion des raccourcis claviers pour les menus. Historiquement, les menus ont forcément un raccourci qui implique la touche "CMD" (Alt) du clavier ou bien un autre modifieur. Une extension de l'API permet de définir des raccourcis n'utilisant aucun modifieur (par exemple, F2 tout seul pour renommer un fichier, F1 pour afficher de l'aide, …). Le code permettant de traiter ce cas n'était pas tout à fait correct, ce qui déclenchait un certain nombre de comportement étranges ou parfois même de plantages en particulier dans Tracker (waddlesplash).

Waddlesplash et X512 ont également corrigé un problème dans le cas de l'envoi d'une BRegion vide ne comportant aucun rectangle , ce qui n'était pas traité correctement et causait entre autre des problèmes d'affichage dans l'application de dessin Wonderbrush.

Nipos a corrigé des artefacts graphique qui pouvaient apparaître lors du redimensionnement d'un contrôle "barber pole" (barre de progression sans fin).

Locale Kit

Le Locale kit implémente tout ce qui est nécessaire à la localisation et l'internationalisation du système.

humdinger a modifié de BDate::LongDayName() pour afficher le nom complet des jours et pas une abbréviation sur 3 lettres (le bug était simplement causé par une erreur d'interfaçage avec ICU).

Pilotes matériels

Intel_extreme (composants graphiques Intel)

Ajout des composants graphiques pour les porcesseurs Intel de génération "Apollo Lake" (Habbie).

usb_disk (stockage de masse USB)

Deux améliorations de la part de waddlesplash:

  • Correction de l'ordre de verrouillage: acquisition de la mémoire I/O avant de verrouiller le lock correspondant afin d'éviter un problème d'inversion de verrous.
  • Utilisation de l'ordonnanceur d'entrées-sorties générique, qui permet de réordonner et de regrouper les demandes d'accès disque et de mieux gérer les opérations asynchrones. Cela corrige au moins un KDL (kernel panic) et améliore la fluidité du système lorsqu'il fonctionne sur un disque USB lent (par exemple en mode live USB, souvent utilisé pour avoir une première impression de Haiku).

XHCI (USB3) et EHCI (USB2)

Lorsque c'est possible (en fonction des contraintes du contrôleur DMA), utilisation directe des zones de mémoire fournies par les pilotes de périphériques USB au lieu de passer par un "bounce buffer". Ce changement combiné avec les modifications du pilote usb_disk devrait réduire le nombre de copies intermédiaires de données pour les accès disque en permettant au pilote USB de transférer les données directement vers et depuis le cache disque (waddlesplash). Cependant, il manque encore une pièce du puzzle pour vraiment tirer partie de cette optimisation: dans cette configuration, l'ordonnanceur d'entrées-sorties n'est pas informé des contraintes réelles du contrôleur DMA. Il ne peut donc pas organiser ses requêtes de façon à ce qu'elles puissent systématiquement utiliser ce chemin d'exécution plus rapide. C'est pénalisant en particulier pour EHCI, dont le contrôleur DMA est plus limité.

Couche de compatibilité FreeBSD et OpenBSD

Haiku réutilise les pilotes réseau de FreeBSD et OpenBSD via une couche de compatibilité.

Waddlesplash a amélioré la compatibilité avec les pilotes USB de FreeBSD dans le but de remplacer certains pilotes USB développés spécifiquement pour Haiku par les équivalents venant de FreeBSD. Pour l'instant, les nouveaux pilotes ne fonctionnent pas ou bien il n'y a personne en mesure de les tester, puisque les anciens fonctionnent très bien, ce n'est pas la priorité des utilisateurs.

Dans la couche de compatibilité OpenBSD, rectification du comptage des paquets réseaux envoyés, qui ne fonctionnait pas (waddlesplash).

Refonte de l'interfaçage du bus réseau MII avec les pilotes réseau, ce qui ouvre la voie à l'utilisation des pilotes OpenBSd et FreeBSD pour des périphériques déclarés dans un device tree FDT, plutôt que découverts via les bus PCI ou USB (waddlesplash).

TTY (ports série et terminaux virtuels)

Correction de la notification de déconnexion via select() lorsqu'un TTY est fermé. Cela corrige un problème lorsqu'on tue un Terminal, où les programmes lancés à l'intérieur ne s'arrêtaient pas et restaient bloqués (waddlesplash).

C-States (économie d'énergie du CPU)

Le pilote C-State affiche un message d'erreur lorsqu'il ne peut pas s'exécuter en indiquant pour quelle raison (par exemple s'il n'a pas trouvé de processeur compatible). Cela permet d'identifier les machines qui pourraient avoir besoin d'un autre pilote pour l'économie d'énergie, ou de compléter le pilote C-States si nécessaire.

ACPI C-States

Waddleplash a mis à jour le module CPU idle "ACPI C-States" qui était à l'abandon au moins depuis 2013 pour s'interfacer avec les versions actuelles des modules ACPI et CPU. Cela a demandé un gros travail non seulement pour la mise à jour mais aussi pour le déboguage de ce module, qui ne fonctionne toujours pas correctement sur le matériel qui a pu être testé. Il reste donc pour l'instant désactivé.

Contrairement au module C-States ci-dessus, celui-ci n'accède pas directement au matériel mais passe par ACPI. Cela lui permet en principe de fonctionner sur des machines anciennes ne disposant pas d'une interface matériel standardisée pour le contrôle des C-States et de la mise en veille du processeur.

USB-RNDIS

Ce pilote permet l'utilisation du "tethering" USB (partage de connection réseau via USB) avec la plupart des téléphones Android. Amélioration des messages de log et de la gestion des erreurs, dans le cadre d'investigations en cours pour comprendre pourquoi le pilote ne fonctionne plus après avoir débranché puis rebranché le câble USB (PulkoMandy).

NVMe (SSD)

Support d'adresses de blocs logiques sur 64 bits, permettant d'utiliser des disques de plus de 2 To (korli).

SDHCI (lecteurs de cartes SD)

Correction de la gestion des interruptions en utilisant une ConditionVariable en remplacement de sémaphores et correction de divers autres problèmes (PulkoMandy).

Détection des contrôleurs SDHCI ACPI en utilisant le CID standard "PNP0D40" au lieu d'une liste de HID spécifiques (SED4906).

acpi_termal (sondes de température)

Implémentation de B_GET_DEVICE_NAME pour récupérer le nom de la zone thermique dont la température est reportée (PulkoMandy).

Systèmes de fichiers

FAT

FAT est un système de fichier développé par Microsoft, souvent utilisé aujourd'hui pour les support amovibles (clés USB, cartes SD) en raison de sa simplicité et de son support dans à peu près tous les systèmes.

Jim906 a ajouté le support des disques avec des secteurs logiques de plus de 512 octets dans le pilote FAT. Cela reste quelque peu hypothétique car la plupart des périphériques de stockage continuent à fonctionner avec des secteurs de 512 octets, bien qu'ils utilisent en interne des zones beaucoup plus larges.

ext2/3/4

Les systèmes de fichiers ext2, 3 et 4 sont utilisés par défaut sous Linux. La structure des données sur le disque est très simialire entre les 3 versions, ce qui permet de supporter ces trois versions avec un seul pilote.

Korli a retiré la gestion des listes d'orphelins dans le pilote ext2/3/4. Cette fonctionnalité permet en principe de stocker des fichiers qui ont été unlink (plus présents dans auncun dossier du disque) mais pas encore supprimés (par exemple parce qu'ils sont encore ouverts par une application). Cette fonctionnalité semble obsolète: le pilote de FreeBSD ne l'implémente pas non plus, et ces fichiers peuvent très bien être gérés sans une structure de données spécifique stockée sur le disque. Dans ce même pilote, korli a également rectifié le décomptagee des blocs libres et utilisés lorsqu'un noeud est élargi ou rétréci.

NFS

NFS est un système de fichier en réseau, permettant donc à un serveur de rendre accessible ses fichiers à plusieurs autres machines. Haiku implémente actuellement uniquement la partie client, pour monter et accéder aux fichiers d'une autre machine.

Jim906 continue à améliorer le pilote NFS4:

  • Ajout d'informations de debug et de diagnostic (à activer lors de la compilation),
  • Améliorations du traitement des "délégations" de fichiers, qui provoquaient auparavant un kernel panic ou de très nombreuses erreurs dans les logs.
  • Ajout d'un verrou pour empêcher la destruction d'une ConditionVariable pendant son utilisation par un autre thread.

ramfs

Ramfs est un système de fichier qui stocke les fichiers directement dans la mémoire RAM. Contrairement à un "RAM disk", il n'a pas besoin de simuler un "block device" et peut allouer et libérer de la mémoire dynamiquement en fonction des besoins. Cela le rend peu gourmand et très rapide. Il est donc utilisé pour stocker des fichiers temporaires.

Nettoyage et correction de bugs dans la gestion de l'index des attributs étendus de ramfs. Le résultat est un système de fichier plus fiable, légèrement plus rapide, ainsi que l'ajout d'assertions pour détecter d'autres problèmes du même type s'ils devaient survenir (waddlesplash).

Retrait de vérifications inutiles de pré-conditions déjà garanties par le VFS, déplacement de vérifications du système de fichier dans le VFS afin que tous les systèmes de fichiers puissent en bénéficier, et au passage, harmonisation des codes de retour de différents systèmes de fichiers pour certaines erreurs (waddlesplash).

VFS

Le VFS (virtual filesystem) est le composant de Haiku qui permet l'accès à tous les systèmes de fichiers sous forme d'une unique hiérarchie de répertoires. Il regroupe tout le code commun à tous les systèmes de fichiers afin de réduire la complexité de ces derniers, et de s'assurer que le comportement des fichiers est similaire, même si le stockage peut être très différent.

Correction d'une incohérence sur la gestion de la racine de chaque système de fichier monté. Le VFS (le code qui gère les systèmes de fichiers) repose sur le principe du comptage de références pour savoir quels fichiers et dossiers doivent être maintenus en mémoire. Une supposition dans ce code est que chaque système de fichier maintient une référence sur son dossier racine, mais il n'y avait aucune vérification que c'était bien le cas, et la plupart des systèmes de fichiers ne le faisaient pas. Le problème a d'abord été identifié par korli dans le pilote ext2/3/4. Waddlesplash a ensuite ajouté des vérifications supplémentaires dans le VFS pour détecter ce cas ainsi que d'autres problèmes de comptage de références. Enfin, waddlesplash, jmairboeck, OscarL et Jim906 ont corrigé tous les autres systèmes de fichiers qui présentaient le même problème.

Ajout dans le VFS d'implémentation "de secours" pour certaines opérations: si le système de fichier ne les implémente pas directement, le VFS fournit une implémentation par défaut moins performante. Cela simplifie l'écriture du système de fichier, en particulier pour ramfs où il n'y a pas d'implémentation plus rapide possible (waddlesplash).

Autres

Ajout d'un périphérique /dev/full, qui répond qu'il est plein lorsqu'on essaie d'écrire dedans. Linux et FreeBSD disposent d'un tel périphérique et il est utile pour certains tests. L'implémentation a été l'occasion de fusionner le code des pilotes /dev/null et /dev/zero avec ce troisième périphérique, car ils sont tous les trois très simples et très similaires (korli).

Ajout de vérification d'erreurs dans les systèmes de fichiers "overlay" (attribute_overlay, log_overlay et write_overlay). Ces systèmes de fichiers permettent de rajouter des fonctionnalités à un autre système de fichier: respectivement la gestion des attributs étendus, un log de toutes les opérations effectuées, et le support de l'écriture. Deux d'entre eux sont notamment utilisés dans certaines configuration de démarrage sur un live CD (le système de fichier ISO9660 étant en lecture seule et sans gestion des attributs étendus). Les erreurs qui n'étaient pas traitées pouvaient déclencher un kernel panic, alors que ce sera désormais un simple message d'erreur dans les logs.

libroot

La libroot regroupe les fonctions C standard, les fonctions POSIX, et quelques extensions spécifiques à BeOS et Haiku. Elle est l'équivalent des libc, libm, et libpthread sous Linux.

Ajout de macros dans sys/time.h pour les conversions entre les structures timeval et timespec, compatibles avec les macros proposées par Linux et FreeBSD (Habbie).

Correction de la définition des macros CPU_* dans le fichier sched.h. D'une part, elles n'étaient pas tout à fait indentiques à celle de la glibc, et d'autre part, elles n'étaient pas compatibles avec les anciennes versions du standard C, ce qui posait un problème pour porter certains logiciels (korli).

Mise en conformité avec POSIX 1-2024

La spécification POSIX a reçu une nouvelle version, et Haiku implémente petit à petit toutes les nouvelles fonctionnalités et changements apparus dans cette nouvelle version.

  • Ajout de WCOREDUMP dans sys/wait.h (jmairboeck).
  • Ajout de l'option IPV6_ONLY pour les sockets (korli).
  • Mise à jour de la famille de fonctions strftime() à partir de la version de la librairie C musl (korli).
  • Ajout de macros supplémentaires dans complex.h (korli).

Correction d'un double-free dans un cas particulier dans l'implémentation de select() (waddlesplash).

Correction d'une fuite de référence à un groupe de processus lors du traitement des signaux, et ajout de vérifications de l'état de la "team" (processus) dans setpgid() (korli).

Noyau

Nettoyage de code pour la configuration des timers APIC et la détection de fonctionnalités de certains vieux processeurs AMD (waddlesplash).

Utilisation des instructions MWAITX (pour les processeurs AMD) ou TPAUSE (processeurs Intel) dans la boucle d'attente du debugger noyau. Dans ce cas particulier, les interruptions sont désactivées, donc les mécanismes habituels pour attendre (comme l'instruction HLT) ne peuvent pas être utilisés. Sur une machine équipée d'un Ryzen 3700X, la réduction de consommation électrique est d'environ 35 Watts, à comparer à une réduction de 54 Watts par la gestion d'énergie classique de Haiku lorsque le noyau fonctionne normalement. Ce n'est pas aussi bon que ce qu'arrive à faire Windows sur cette même machine, sans surprise puisque la gestion d'énergie dans Haiku est loin d'être complètement prise en charge (waddlesplash).

Au passage, waddlesplash a également optimisée la boucle d'attente spin(), utilisée dans le noyau pour implémenter un court délai lorsque les interruptions sont désactivées. Une instruction de sosustraction a pu être déplacée hors de la boucle principale de cette fonction.

Modification de l'implémentation de l'allocateur mémoire interne du kernel pour mieux détecter certaines erreurs en particulier lorsque KDEBUG est activé (c'est le cas pour les nightly builds de Haiku). L'allocateur recycle les blocs libéré pour de nouvelles allocations lorsque c'est possible, mais en mode KDEBUG, il essaie de conserver les blocs le plus longtemps possible dans la liste des blocs libérés, et réutilise d'abord les plus anciens. Cela augmente la probabilité de détecter si un bloc est encore utilisé après sa libération (et avant son recyclage pour une nouvelle allocation). Cela a déjà permis d'identifier au moins un nouveau bug (waddlesplash).

Correction de crashs dans certaines utilisations inhabituelles de recvmsg et sendmsg, et ajout de programmes de test pour reproduire facilement ces cas de figure (waddlesplash).

Correction d'une petite erreur dans l'implémentation de ConditionVariable qui pouvait dans certains cas très particuliers, réveiller incorrectement trop de threads attendant une notification. La conséquence du bug était seulement une dégradation des performances (PulkoMandy).

Amélioration d'une assertion pour détecter l'accès à de la mémoire libérée dans l'allocateur "slab" du noyau (waddlesplash).

Ajout d'un "return" manquant dans un cas d'erreur dans la gestion des sockets, qui pourrait être la cause de plusieurs kernel panics remontés récemment par des utilisateurs (waddlesplash).

Ajout d'un nouveau mécanisme de découverte de l'adresse du point d'entrée SMBIOS, en utilisant les EFI boot services. Ce changement ajoute également la possibilité de transmettre des informations arbitraires entre le bootloader et le noyau, de façon à pouvoir démarrer un ancien noyau avec un bootloader récent, ou inversement, lorsque de nouveaux paramètres sont ajoutés (korli).

Amélioration de la commande rwlock du debugger noyau pour afficher les threads ayant verrouillé le lock en lecture. Ceci est possible seulement si l'option KDEBUG_RW_LOCK_DEBUG est activée, ce qui n'est pas le cas par défaut car l'option a un trop gros coût en performances (waddlesplash).

Ajout également d'assertions liées aux verrous dans la gestion de la mémoire virtuelle et dans le VFS. Ces modifications ont ensuite permis de trouver et de corriger un double verrouillage en lecture (waddlesplash).

Ajout d'assertions pour s'assurer que l'allocation de zones de mémoire "early boot" n'échoue jamais. Ce changement a été initié suite au travail sur le tas gardé, pour lequel il aurait été bien utile. Mais il a aussi permi de détecter un gros problème dans la version ARM64 de Haiku, qui pourrait expliquer que cette version plante très tôt pendant le démarrage suite à un changement dans la carte mémoire du bootloader (waddlesplash).

Correction d'une libération de mémoire mal assortie (allocation avec un mécanisme, mais libération avec un autre) dans le VFS, qui déclenchait une assertion et donc un KDL (waddlesplash).

Retravail de la fonction de découpage de zones mémoire (cut_area) pour mieux traiter des cas particuliers avec des zones qui étaient partagées entre plusieurs processus, mais ne le sont plus suite au découpage (waddlesplash).

Système de compilation

smrobtzz a modifié la compilation de unzip pour ajouter l'option -std=c99, en effet, les sources utilisées sont anciennes et ne compilent pas avec les dernières versions du standard C, en particulier celle utilisée par défaut dans GCC 15.

X512 a retiré les permissions +x sur certains fichiers du dépôt git qui n'en avaient pas besoin.

PulkoMandy a fait du nettoyage dans les règles de compilations pour retirer certaines dépendances optionnelles qui ne sont en fait jamais utilisées.

jscipione a corrigé la compilation croisée depuis les dernières versions de macOS.

waddlesplash a corrigé plusieurs problèmes de compatibilité avec clang (le code de Haiku est habituellement compilé avec GCC).

Documentation

PulkoMandy a corrigé plusieurs problèmes de syntaxe Doxygen dans la documentation de l'API, et ajouté un nouveau chapitre documentant la classe ConditionVariable et son utilisation dans le noyau.

Commentaires : voir le flux Atom ouvrir dans le navigateur

Canonical Gets Flutter Up And Running On RISC-V For Ubuntu

20 novembre 2025 à 22:04
Canonical has been bullish on RISC-V with Ubuntu being one of the most common Linux distributions endorsed by RISC-V board vendors. Canonical also has been bullish on the Flutter toolkit for crafting their desktop installer UI and other modern UI/app interfaces. But these two together haven't panned out with Flutter not currently supporting RISC-V. Canonical has submitted pull requests now for enabling RISC-V support with Flutter...
Reçu hier — 20 novembre 2025 4.1 🐧 Linux

Voyager 26.04-alpha2

20 novembre 2025 à 19:05
Voyager Live is an Xubuntu-based distribution and live DVD showcasing the Xfce desktop environment. Its features include the Avant Window Navigator or AWN (a dock-like navigation bar), Conky (a program which displays useful information on the desktop), and over 300 photographs and animations that can be used as desktop backgrounds. The project also develops several other editions of Voyager Live - a "GE" edition with GNOME Shell, a "GS" variant for Gamers, and a separately-maintained flavour based on Debian's "stable" branch.

Updated Steam Runtime Switches To Debian 13 Libraries, SDL2 Using Compatibility Layer

20 novembre 2025 à 18:34
An updated version of the Steam Linux Runtime 4 branch was rolled out that has now shifted from Debian 11 to Debian 13 libraries for some significant upgrades. In the process more libraries have gone x86_64 only in foregoing the i386 builds. In addition, the SDL 2 library support for the Steam Runtime is now provided by sdl2-compat as the compatibility layer for SDL2 atop SDL3...

Linux 6.19 Slated To Land "mm/cid" Rewrite That Has Very Positive Performance Potential

20 novembre 2025 à 16:44
A set of Linux kernel patches posted back in October for rewriting the kernel's memory-mapped concurrency ID code for some nice performance wins looks like it will land for Linux 6.19. This is the code that prominent Intel engineer Thomas Gleixner found to yield up to an 18% improvement for the PostgreSQL database. My testing of this "mm/cid" code has also shown some nice performance wins too...
❌