Sommaire
Ce rapport est basĂ© sur les rapports mensuels dâactivitĂ© dâaoĂ»t, septembre et octobre publiĂ©s sur le site de Haiku. Il couvre les changements de code survenus entre hrev57901 et hrev58291 de Haiku.
Certains des changements mentionnĂ©s dans ce rapport font partie des derniers dĂ©veloppements du mois d'aoĂ»t, et Ă©taient dĂ©jĂ prĂ©sents dans la version R1 bĂȘta 5 qui a Ă©tĂ© publiĂ©e dĂ©but septembre 2024.
Les corrections de bugs sont appliquĂ©es sur la branche bĂȘta 5 si elle est concernĂ©e, mais les nouveaux dĂ©veloppements sont mis dans la branche principale et seront disponibles uniquement dans les « nighlty builds » (constructions journaliĂšres) puis dans la prochaine version, qui sera probablement Ă©tiquetĂ©e R1 bĂȘta 6.
La version R1 est trĂšs attendue, mais la feuille de route comporte toujours environ 600 bugs et demandes dâamĂ©lioration. JusquâĂ ce quâils soient tous traitĂ©s (corrigĂ©s, devenus obsolĂštes ou dĂ©placĂ©s vers une version plus tardive), Haiku continue de publier des versions bĂȘta.
Applications
Amélioration et corrections de textes de messages dans diverses applications (humdinger).
Lâapplication Switcher â permettant de naviguer rapidement entre les diffĂ©rentes fenĂȘtres et applications Ă lâaide dâun menu qui apparaĂźt lorsque la souris se trouve sur les bords de lâĂ©cran â peut Ă nouveau ĂȘtre compilĂ©e. Cette application nâest pas terminĂ©e et non intĂ©grĂ©e dans Haiku par dĂ©faut pour lâinstant (nephele).
Dans les préférences de disposition clavier, des icÎnes avaient disparu de certains menus suite à un problÚme dans une modification précédente. Ces icÎnes sont maintenant de retour (jscipione).
Les rĂ©glages de polices de caractĂšres de WebPositive peuvent faire des retours Ă la ligne dans le texte dâexemple utilisĂ© pour visualiser la police choisie (correction rĂ©cupĂ©rĂ©e depuis la fenĂȘtre de rĂ©glage des polices du systĂšme, qui utilise une variante du mĂȘme code). (nipos).
Le raccourci clavier «âŻmuetâŻÂ» permet dâalterner entre lâactivation et la dĂ©sactivation du son, au lieu de toujours passer en mode muet (korli).
Plusieurs applications pouvaient ouvrir leurs fenĂȘtres en dehors de lâĂ©cran si leur derniĂšre position enregistrĂ©e nâĂ©tait pas bonne (aprĂšs un changement de rĂ©solution dâĂ©cran par exemple). Lâappel de la fonction MoveOnScreen()
aprĂšs la crĂ©ation dâune fenĂȘtre permet de rĂ©gler ce problĂšme (korli, pinaraf, waddlesplash).
Icon-O-Matic ouvre ses dialogues de sĂ©lection de fichiers dans le dossier oĂč se trouve lâicĂŽne en cours dâĂ©dition (nipos).
Il est possible de sélectionner une famille de polices directement dans FontDemo (nipos).
Améliorations du mode sombre
Modifications faites par nipos et nephele.
Depuis la version bĂȘta 5 de Haiku, il est beaucoup plus simple de configurer un thĂšme de couleurs dans Haiku (avec seulement 3 couleurs Ă sĂ©lectionner, les autres Ă©tant calculĂ©es automatiquement).
Cependant, toutes les applications et contrĂŽles graphiques ne se comportent pas forcĂ©ment trĂšs bien, en particulier si on choisit une couleur de fond de fenĂȘtres sombre. Ce trimestre, on trouve donc des amĂ©liorations sur ColumnListView (contrĂŽle permettant lâaffichage de donnĂ©es en listes, en arbre et en colonnes), et dans les applications Debugger, Mail (en particulier les marqueurs de portions de message citĂ©es), WebPositive, ResEdit, FontDemo, Cortex, Sudoku et Tracker (les fenĂȘtres de configuration des permissions de fichiers et de statut de copie de fichiers), ainsi que dans les prĂ©fĂ©rences de disposition clavier (couleur des touches de clavier affichĂ©es), et de configuration des Ă©crans et des Ă©crans de veille. Ces applications utilisaient encore quelques couleurs codĂ©es « en dur » qui ne sâadaptaient pas automatiquement au thĂšme choisi.
En outre, les formules de calcul utilisées pour générer le thÚme de couleurs ont été améliorées pour donner de meilleurs résultats dans le cas de couleurs sombres, assurant de conserver un bon contraste entre tous les éléments graphiques et une meilleure cohérence des couleurs.
AboutSystem
Lâapplication AboutSystem donne quelques informations sur la machine (RAM, CPU), et surtout affiche les noms des dĂ©veloppeurs et les messages de copyright et clauses de licences obligatoires de logiciels libres qui sont embarquĂ©s dans Haiku.
Correction dâun crash Ă cause dâune information de copyright mal enregistrĂ©e (madmax).
Mise Ă jour des crĂ©dits Ă lâoccasion de la version Beta 5 : ajout des nouveaux membres de lâĂ©quipe, et passage dans la catĂ©gorie «âŻanciens dĂ©veloppeursâŻÂ» de certaines personnes qui ne participent plus pour lâinstant. (waddlesplash).
DĂ©bogueur
Haiku est fourni avec un dĂ©bogueur graphique permettant dâinvestiguer facilement les problĂšmes dans les applications.
Waddlesplash a amĂ©liorĂ© le dĂ©sassembleur pour mieux dĂ©coder les adresses mĂ©moire calculĂ©es Ă partir de la valeur dâun registre CPU. La correction a Ă©tĂ© remontĂ©e dans la bibliothĂšque tierce Zydis, utilisĂ©e pour le dĂ©sassemblage.
Il a Ă©galement modifiĂ© le code du Debugger pour ne pas essayer de tĂ©lĂ©charger des informations de debug lorsque lâoutil est lancĂ© en mode non-interactif (dans le cas dâune test suite automatisĂ©e par exemple). Plusieurs autres problĂšmes qui pouvaient causer un plantage du debugger ou un blocage dans un Ă©tat invalide (avec lâapplication qui ne sâarrĂȘte jamais) ont Ă©tĂ© Ă©galement traitĂ©s.
DriveSetup
Lâoutil DriveSetup permet de modifier la table de partitions et de formater les partitions avec diffĂ©rents systĂšmes de fichiers.
Pour les partitions de type «âŻIntelâŻÂ» (MBR), lorsquâon crĂ©e une premiĂšre partition, par dĂ©faut elle est marquĂ©e automatiquement comme partition active. Auparavant il fallait cocher une case pour cela, et de nombreux utilisateurs oubliaient de le faire, ce qui pouvait rendre le systĂšme impossible Ă dĂ©marrer (korli).
Dans certains messages, le nom des partitions nâĂ©tait pas mis entre guillemets, ce qui pouvait prĂȘter Ă confusion avec des noms de partitions choisis maladroitement (ou judicieusement, selon de quel point de vue on se place). Maintenant le nom de la partition est clairement identifiable dans le message (humdinger).
HaikuDepot
HaikuDepot est le frontal graphique du gestionnaire de paquets de Haiku. Lâapplication est maintenue par apl et se compose dâune interface graphique native dĂ©veloppĂ©e en C++ et dâun webservice dĂ©veloppĂ© en Java qui permet de stocker des mĂ©tadonnĂ©es supplĂ©mentaires sur les paquets : captures dâĂ©crans, notes et revues des utilisateurs, liste des paquets Ă mettre en avant.
-
Refactoring du « language model », de la gestion des chemins, de la rĂ©cupĂ©ration des donnĂ©es des paquets, de lâaffichage des auteurs de paquets, de la gestion des notes donnĂ©es par les utilisateurs. (apl)
- FenĂȘtre des conditions dâutilisation: correction de la couleur du texte, correction dâun crash si on clique dans la fenĂȘtre avant que le texte soit chargĂ©. (apl et jscipione)
- Le bouton «âŻOuvrirâŻÂ» permettant de lancer une application installĂ©e ne fonctionnait pas toujours (apl).
- AmĂ©lioration de la sĂ©lection dâun icĂŽne par dĂ©faut pour les paquets qui nâont pas dâicĂŽne inclus (apl).
La liste de paquets mis en avant a Ă©tĂ© revue, un nouveau mainteneur (Michel) se charge de la tenir Ă jour avec des rĂšgles mieux dĂ©finies : une sĂ©lection dâapplications populaires (sur suggestion de participants aux forums de discussion) ainsi que des applications mises Ă jour rĂ©cemment. Si vous utilisez Haiku, nâhĂ©sitez pas Ă passer un peu de temps Ă Ă©valuer et noter les applications, peu de personnes le font et il est difficile dâexploiter les donnĂ©es de façon pertinente si beaucoup dâapplications nâont reçu quâun seul vote.
Horloge
Lâapplication horloge permet dâafficher lâheure (sans surprise). Elle propose diverses apparences de cadrans, peut ĂȘtre redimensionnĂ©e, et incrustĂ©e dans le bureau sous forme dâun replicant.
Un bug dans lâapplication conduisait Ă afficher une heure alĂ©atoire (non initialisĂ©e) pendant quelques centiĂšmes de secondes au dĂ©marrage avant de commencer Ă afficher lâheure courante (OscarL)
Les aiguilles de lâhorloge Ă©taient dĂ©calĂ©es de quelques pixels et ne pointaient pas prĂ©cisĂ©ment lĂ ou elles devraient (dovsienko).
Tracker
Tracker est le gestionnaire de fichiers de Haiku. Il affiche le bureau et toutes les fenĂȘtres de navigation et de recherche de fichiers. Il se distingue par son utilisation de la navigation dite « spatiale », oĂč chaque dossier sâouvre dans une fenĂȘtre sĂ©parĂ©e dont la taille et la position Ă lâĂ©cran sont mĂ©morisĂ©es.
jscipione continue son travail dâamĂ©lioration du Tracker (cela comporte de nombreux changements qui sont encore en gestation). Ce trimestre, les changements intĂ©grĂ©s permettent :
- la dĂ©sactivation dâentrĂ©es du menu «âŻNouveauâŻÂ» lorsque les opĂ©rations ne sont pas disponibles,
- la mise à jour dynamique de certains menus en fonction des opérations disponibles,
- la prĂ©servation de la sĂ©lection aprĂšs une opĂ©ration de copie oĂč de dĂ©placement (avec quelques problĂšmes dâaffichage corrigĂ©s au passage),
- des corrections de bug sur le choix de couleurs utilisĂ©es dans la fenĂȘtre «âŻOuvrir avecâŻÂ»,
- la possibilitĂ© de crĂ©er un lien symbolique lorsquâon fait un drag and drop depuis un dossier virtuel,
- utilisation de la police de caractĂšres «âŻmenuâŻÂ» de façon cohĂ©rente dans tous les menus.
Il a Ă©galement travaillĂ© sur des tĂąches de fond, sans changements visibles pour lâinstant. Le code du Tracker provient de BeOS et est un peu vieillissant. Il est souvent nĂ©cessaire de faire beaucoup de nettoyage avant de pouvoir dĂ©velopper de nouvelles fonctionnalitĂ©s sans casser autre chose. Cette fois-ci, on trouve entre autres une refonte de la gestion des raccourcis claviers, la fermeture automatique des fenĂȘtres en double lors du passage en mode «âŻnavigation spatialeâŻÂ», et divers crashs liĂ©s Ă la gestion des menus popup.
humdinger a également travaillé sur le Tracker pour améliorer certains messages concernant la copie et la création de fichiers, pour les rendre plus faciles à traduire.
humdinger a Ă©galement travaillĂ© sur lâorganisation du menu «âŻtemplatesâŻÂ» (affichĂ© quand on fait un clic droit -> nouveau⊠et permettant de crĂ©er diffĂ©rents types de fichiers Ă partir de fichiers de rĂ©fĂ©rence). Ce menu peut maintenant ĂȘtre organisĂ© en plusieurs sous-menus Ă lâaide dâune nouvelle option «âŻNew template folderâŻÂ», pour les personnes qui utilisent cette fonctionnalitĂ© avec de nombreux fichiers de rĂ©fĂ©rence au point dâavoir besoin de les organiser.
La fenĂȘtre de requĂȘtes (recherche de fichiers en fonction de leurs attributs Ă©tendus indexĂ©s dans le systĂšme de fichiers) permet maintenant dâafficher en temps rĂ©el les rĂ©sultats lorsquâon Ă©dite une requĂȘte. En outre, il est possible de filtrer les rĂ©sultats pour afficher uniquement les fichiers contenus dans un rĂ©pertoire donnĂ© (auparavant, on pouvait au mieux restreindre par volume disque). Ces changements ont Ă©tĂ© rĂ©alisĂ©s dans le cadre du Google Summer of Code par CalistoMathias, avec Ă©galement une participation de jscipione, humdinger et waddleplash pour finaliser le travail.
Correction dâun crash du Tracker lors de changements de rĂ©solution dâĂ©cran (OscarL).
Terminal
Le Terminal permet dâexĂ©cuter des applications en ligne de commande.
Lors du changement de la taille de texte du Terminal, ce dernier ajuste le nombre de lignes et colonnes de texte visibles, au lieu de redimensionner sa fenĂȘtre (nipos).
Prise en compte de la sĂ©quence dâĂ©chappement ANSI pour effacer lâhistorique de dĂ©filement (CodeForEvolution).
PowerStatus
Lâapplication PowerStatus affiche des informations sur les batteries pour les ordinateurs portables.
sen a effectué plusieurs améliorations pour les systÚmes avec plusieurs batteries:
- Gestion de plusieurs emplacements pour batteries qui ne sont pas forcément tous utilisés,
- Meilleur calcul des alertes de batterie faible,
- Prise en compte de la déconnexion de batteries pendant le fonctionnement du systÚme.
Outils en ligne de commande
La commande profile
(qui permet dâanalyser les performances dâautres applications et du systĂšme) peut maintenant afficher le nombre dâĂ©vĂšnements qui nâont pas pu ĂȘtre enregistrĂ©s par lâanalyseur systĂšme (waddlesplash).
La commande package_repo update
(utilisée pour mettre à jour un dépÎt de paquets avec de nouveaux logiciels) peut maintenant fonctionner sans avoir accÚs au contenu complet des fichiers packages à inclure dans le dépÎt (seuls les noms des paquets et quelques autres métadonnées sont réellement nécessaires).
La commande package_repo list
dispose dâune option -f
pour afficher le nom de fichiers correspondant aux paquets contenus dans un dĂ©pĂŽt de paquets. Les fichiers peuvent ainsi ĂȘtre tĂ©lĂ©chargĂ©s facilement par un outil tiers. (waddlesplash)
Ces deux modifications sont utiles en particulier pour la ferme de build de HaikuPorts, qui souhaite hĂ©berger les fichiers dans des buckets S3 afin de simplifier lâinfrastructure et de rĂ©duire les coĂ»ts de fonctionnement.
Amélioration du format de sortie de la commande launch_roster
pour indiquer le statut des services et pas simplement leur nom (kallisti5 + waddlesplash).
Ajout dans strace
du décodage des drapeaux de configurations de mutex (par exemple MUTEX_SHARED
) (waddlesplash).
Serveurs
Les serveurs sont des applications fonctionnant en tùche de fond et qui implémentent une grande partie des fonctionnalités du systÚme.
app_server
app_server
est le serveur graphique qui se charge de lâaffichage du bureau et des fenĂȘtres.
madmax a travaillĂ© sur la gestion des polices de caractĂšres: correction de problĂšmes de verrouillage pour Ă©viter des accĂšs concurrents au gestionnaire de polices par plusieurs fils dâexĂ©cution, amĂ©lioration du traitement de lâajout et du retrait de polices, et une optimisation pour Ă©viter de scanner deux fois de suite les dossiers de polices au dĂ©marrage.
waddlesplash a complĂ©tĂ© ce changement en dĂ©plaçant une partie du code de gestion des polices pour Ă©viter que dâautres parties de lâexĂ©cution soient bloquĂ©es par lâinitialisation des polices, qui peut prendre beaucoup de temps (quelques secondes) au dĂ©marrage du systĂšme.
waddlesplash a corrigĂ© un problĂšme de calcul de dĂ©lai dâexpiration (probablement sans consĂ©quence, dĂ©couvert par hasard en investiguant un autre problĂšme).
jscipione a corrigĂ© un problĂšme de rafraĂźchissement de lâaffichage lorsque des fenĂȘtres sont empilĂ©es, qui pouvait conduire Ă ne pas bien effacer la barre de titre dans certains cas.
Un clic simple sur le coin bas-droite de la fenĂȘtre (coin de redimensionnement) dĂ©clenchait par erreur une minimisation de la fenĂȘtre concernĂ©e (madmax).
media_server
Le media_server
prend en charge les flux audio et vidĂ©o et permet de router ces flux entre diffĂ©rentes applications ainsi que depuis et vers le matĂ©riel (cartes son, cartes dâacquisition vidĂ©o, webcamsâŠ).
Travaux effectués par waddlesplash:
Correction de problĂšmes de calculs de temps dans le mixeur audio (problĂšmes dĂ©couverts suite Ă lâamĂ©lioration de la dĂ©tection dâerreurs dans BTimeSource, mentionnĂ© plus haut), et ajout de contrĂŽles dâintĂ©gritĂ© supplĂ©mentaires lors du dĂ©marrage du mixeur.
Cela corrige plusieurs bugs qui faisaient que le systĂšme nâavait pas de son au dĂ©marrage pendant un certain temps, avant que soudainement ça se mette Ă fonctionner.
Dâautre part, des amĂ©liorations de performance sur la programmation des Ă©vĂšnements, et des corrections de crash sur la connexion et dĂ©connexion des nĆuds mĂ©dia vers la sortie audio, et sur le nĆud multi-audio avec certaines cartes sons qui exposent des types de contrĂŽles invalides.
Dâautres changements sont en cours pour pouvoir changer la sortie audio sans avoir besoin de redĂ©marrer le serveur mĂ©dia, mais ça ne fonctionne pas encore.
registrar
Le registrar surveille quelles sont les applications déjà lancées et fournit divers services de communication entre applications, en particulier pour le presse-papier.
Ajout de vĂ©rification dâerreurs si un message de rĂ©cupĂ©ration du contenu du presse-papier Ă©choue. Cela peut arriver si on a mis beaucoup de donnĂ©es dans le presse-papier et quâil nây a plus assez de mĂ©moire disponible.
Des corrections du cĂŽtĂ© de la libbe permettent maintenant de gĂ©rer ces erreurs et de ne pas faire planter lâapplication concernĂ©e.
input_server
Lâinput_server` se charge des pĂ©riphĂ©riques dâentrĂ©e (clavier, sourisâŠ)
AmĂ©liorations la validation des donnĂ©es des fichiers de configuration de souris, qui dans certains cas pouvaient empĂȘcher la souris de fonctionner. Refonte de la gestion des accĂšs concurrents Ă la liste des pĂ©riphĂ©riques, pour supprimer des verrous inutiles et permettre les accĂšs Ă la liste mĂȘme si un thread de gestion dâun pĂ©riphĂ©rique est bloquĂ©. (madmax)
Les codes de touches pour la touche power
et la touche \_
des claviers japonais sâĂ©taient retrouvĂ©s assignĂ©es Ă des valeurs identiques (cela semble provenir tout droit de changements datant de BeOS, car ces touches non prĂ©sentes sur un clavier de PC amĂ©ricain classiques sont assez mal documentĂ©es). La documentation a Ă©tĂ© mise Ă jour pour mieux expliquer quels sont les codes utilisĂ©s, et les diffĂ©rents pilotes (PS2, USB) ont Ă©tĂ© harmonisĂ©s pour utiliser les mĂȘmes codes (x512 et PulkoMandy).
Le code power
pourra Ă©galement ĂȘtre utilisĂ© par un pilote GPIO sur les machines oĂč câest nĂ©cessaire (souvent non compatibles PC).
net_server
Le net_server
se charge de toutes les opérations liées au réseau.
mmlr a corrigé un problÚme dans le client DHCP, qui utilisait certaines variables sans les initialiser.
package_daemon
Le package_daemon
vĂ©rifie la cohĂ©rence des paquets installĂ©s avec leurs dĂ©pendances, crĂ©e les dossiers de transactions et de sauvegarde de lâĂ©tat passĂ© du systĂšme, et se charge de lancer les scripts dâactivation et de dĂ©sactivation de paquets. LâaccĂšs au contenu des paquets est en revanche traitĂ© dans le noyau par le systĂšme de fichier packagefs
.
Changement des couleurs des fenĂȘtres «âŻproblĂšmesâŻÂ» et «âŻrĂ©sultatsâŻÂ» qui apparaissent quand il y a des conflits ou dâautres problĂšmes de rĂ©solution de dĂ©pendances lors de lâactivation des paquets (jscipione).
Kits
Les «âŻkitsâŻÂ» sont les composants de la bibliothĂšque standard de Haiku. Il sâagit principalement dâune convention de documentation et dâorganisation de code source pour regrouper des fonctionnalitĂ©s liĂ©es entre elles.
Interface
Lâinterface kit` permet lâouverture de fenĂȘtre et lâajout de contrĂŽles dâinterface graphiques Ă lâintĂ©rieur de ces derniĂšres.
Les objets BBitmap (permettant de stocker une image «âŻrasterâŻÂ») avec le flag ACCEPT_VIEWS (permettant dâattacher une «âŻvue" pour dessiner dans le bitmap ne sont plus automatiquement effacĂ©s. Cela permet de crĂ©er un bitmap Ă partir de donnĂ©es existantes, puis de dessiner autre chose par-dessus. Ce changement corrige un problĂšme de compatibilitĂ© avec BeOS, et permet aussi dâutiliser cette mĂ©thode dans lâimplĂ©mentation de WebKit pour Haiku (ZardShard).
Un changement prĂ©cĂ©dent avait causĂ© un problĂšme de compatibilitĂ© dâAPI avec BeOS, qui dĂ©clenchait dans certains cas une rĂ©cursion infinie et un crash lorsquâon essayait de faire dĂ©filer une BListView par glisser-dĂ©placer (par exemple dans lâapplication Wonderbrush). Waddlesplash a corrigĂ© ce problĂšme, et jscipione a Ă©galement ajoutĂ© quelques amĂ©liorations sur la mise Ă jour des items sĂ©lectionnĂ©s lorsquâon effectue cette opĂ©ration.
Il est maintenant possible dâafficher des «âŻcheckmarksâŻÂ» (coche indiquant une option activĂ©e) sur les items de menus disposĂ©s en «âŻmatriceâŻÂ». Habituellement les menus sont soit disposĂ©s sur une ligne, soit sur une colonne avec les items les un au-dessous des autres. Le mode «âŻmatriceâŻÂ» permet de sâaffranchir de ces restrictions pour disposer les items librement avec du code applicatif.
Mise Ă jour en direct des couleurs dans les contrĂŽles BSpinner
, refonte de lâhĂ©ritage des couleurs de la vue parente, et changement de la couleur de fond des boutons en mode sombre (jscipione).
Centrage vertical des dates dans BCalendarView (permettant dâafficher un calendrier) (nipos).
Factorisation de code dans BView pour lâenvoi des donnĂ©es BShape vers app_server (x512).
La méthode de debug BPoint::PrintToStream affiche maintenant les coordonnées avec des décimales, permettant de détecter les points qui ne sont pas alignés avec la grille de pixels (ayu-ch).
Les boĂźtes de texte marquĂ©es comme «âŻinvalidesâŻÂ» ont maintenant un fond rouge. La bordure rouge utilisĂ©e prĂ©cĂ©demment nâĂ©tait pas assez visible (nephele).
Media
Le media kit permet aux applications de sâinterfacer avec le media server, et fournit en plus une interface standardisĂ©e pour les codecs audio et vidĂ©o.
Ajout dâassertions dans la classe BTimeSource
pour empĂȘcher les applications dâenvoyer des temps avec un «âŻdriftâŻÂ» infĂ©rieur ou Ă©gal Ă 0. Le «âŻdrift" est utilisĂ© comme multiplicateur et diviseur dans les calculs dâhorloge, donc les valeurs infĂ©rieures ou Ă©gales Ă 0 causent des problĂšmes. Ceci a Ă©tĂ© mis en Ă©vidence par des corrections au niveau du noyau (voir plus loin dans la dĂ©pĂȘche) et a ensuite permis de trouver encore dâautres problĂšmes en particulier dans les add-ons media (waddlesplash).
Locale
Le « locale » kit permet la traduction des applications, le formatage des nombres en fonction des prĂ©fĂ©rences de chaque pays, la gestion des fuseaux horaires, et toutes les autres problĂ©matiques liĂ©es Ă lâinternationalisation. Il sâagit principalement dâun enrobage de la bibliothĂšque ICU pour faciliter son utilisation avec les types natifs de Haiku.
Meilleure gestion des erreurs si la bibliothĂšque ICU ne peut pas ĂȘtre initialisĂ©e (waddlesplash).
Support
Le support kit contient diverses méthodes et classes utilitaires et génériques.
ContrĂŽle dâintĂ©gritĂ© des donnĂ©es lors de la dĂ©serialisation de BMessage (waddlesplash).
Correction dâincohĂ©rence de nommage de paramĂštres de fonction entre les fichiers .cpp et .h dĂ©tectĂ©s par cppcheck (mt).
Pilotes de périphériques
Les pilotes sont indispensables pour assurer le fonctionnement de Haiku sur une grande variĂ©tĂ© de matĂ©riel. Certains sont dĂ©veloppĂ©s Ă partir des spĂ©cifications du matĂ©riel spĂ©cifiquement pour Haiku, et dâautres ont Ă©tĂ© adaptĂ©s de travaux rĂ©alisĂ©s pour dâautres systĂšmes dâexploitation.
Le niveau de logging par défaut a été abaissé dans certains pilotes afin de ne pas trop polluer le journal systÚme, en particulier:
- Suppression de messages indiquant quâaucun matĂ©riel compatible avec le pilote nâa Ă©tĂ© dĂ©tectĂ©,
- Suppression de certains logs de debug dans les pilotes audio HDA et usb_audio.
Processeurs et Ă©conomie dâĂ©nergie
Renommage du pilote intel_cstates
en x86_cstates
puisque les processeurs récents de chez AMD sont également pris en charge par ce pilote.
Appel Ă ce pilote Ă plus dâendroits dans le noyau pour mettre les processeurs en veille ou au ralenti quand ils ne sont pas utilisĂ©s.
RĂ©seau
virtio_net
Le pilote virtio_net
(carte rĂ©seau utilisĂ©e dans les machines virtuelles) implĂ©mente maintenant le «âŻchecksum offloadingâŻÂ» pour les protocoles IP, TCP et UDP. En effet, dans le cas de ce pilote, les vĂ©rifications et calculs de sommes dâintĂ©gritĂ© doivent ĂȘtre faits de toutes façons du cĂŽtĂ© de la machine hĂŽte, il est donc inutile de les refaire dans la machine virtuelle.
Au passage, correction de quelques erreurs dans ce driver, et en particulier de problÚmes de calcul de taille de buffers en mémoire.
broadcom750x
Utilisation des interruptions par messages (MSI) lorsque câest nĂ©cessaire pour certaines versions du matĂ©riel (waddlesplash).
vmxnet
Nouveau pilote portĂ© depuis FreeBSD qui permet dâutiliser lâinterface rĂ©seau paravirtualisĂ©e de VMWare (CodeForEvolution).
Couches de compatibilité BSD
Haiku utilise des pilotes réseau venus de FreeBSD et OpenBSD, cela permet de mutualiser les ressources et de ne pas perdre du temps à réinventer la roue. Une couche de compatibilité permet de réutiliser les pilotes avec trÚs peu de modification dans leur code et une simple recompilation.
Cette approche est Ă©galement utilisĂ©e par dâautres systĂšmes dâexploitation comme RTEMS.
La couche de compatibilitĂ© a reçu des corrections de problĂšmes sur lâallocation de mĂ©moire dĂ©diĂ©e aux transferts DMA, ainsi quâun problĂšme sur le calcul de la taille dâun buffer de rĂ©ception, qui empĂȘchait les pilotes de fonctionner sur certains matĂ©riels.
TCP
Waddlesplash a travaillĂ© sur lâamĂ©lioration de lâimplĂ©mentation de TCP :
- Refonte de la gestion des ACK reçus dans le désordre,
- Amélioration du code de débogage pour investiguer des crashs du noyau remontés par quelques utilisateurs,
- Modification du code de mise Ă jour de la taille de fenĂȘtre TCP pour Ă©viter dâenvoyer inutilement des changements de taille,
- Correction de calcul du temps dâaller-retour,
- ImplĂ©mentation du redimensionnement dynamique de la fenĂȘtre de rĂ©ception (auparavant, elle Ă©tait de taille fixe),
- Ajout dâassertions Ă divers endroits dans la pile rĂ©seau pour dĂ©tecter les problĂšmes Ă la source.
Ces amĂ©liorations permettent au trafic TCP dâĂȘtre au moins 10 fois plus rapide, selon le type de connexion utilisĂ©, et rĂšgle un problĂšme de lenteur des tĂ©lĂ©chargements depuis Haiku qui Ă©tait prĂ©sent depuis assez longtemps.
Ethernet
Du cĂŽtĂ© dâEthernet, quelques amĂ©liorations et nettoyages sur le calcul de la MTU (taille maximale dâun paquet qui peut ĂȘtre envoyĂ©). Pour lâinstant, la dĂ©couverte du «âŻpath MTUâŻÂ», la MTU du chemin complet entre deux machines, nâest pas encore disponible. Haiku ne sâautorise donc pas Ă envoyer du trafic plus large quâune trame Ethernet standard, mĂȘme si cela pourrait ĂȘtre possible pour le rĂ©seau local. Il reste donc une amĂ©lioration potentielle des performances rĂ©seau dans certains cas.
UNIX domain sockets
Les sockets UNIX sont une mĂ©thode de communication entre processus standardisĂ©e par POSIX, utilisĂ©e surtout par des logiciels portĂ©s depuis dâautres systĂšmes (les applications natives pour Haiku utiliseront plus volontiers des BMessage
s ou des port
s).
AmĂ©lioration et nettoyage du code autour de la gestion des donnĂ©es annexes dans les sockets UNIX. Correction de petites fuites de mĂ©moire et dâun kernel panic qui pouvait se produire lors de la fermeture dâun socket (waddlesplash).
USB
ImplĂ©mentation de lâUSB «âŻSuper Speed PlusâŻÂ», qui permet des connexions USB avec un dĂ©bit pouvant atteindre 10 gigabits par seconde (korli).
Refonte et consolidation du comptage de rĂ©fĂ©rences dans la pile USB, ce qui met en Ă©vidence sous forme de kernel panic des cas oĂč les choses ne sont pas bien faites. Ce nâest pas agrĂ©able, mais câest tout de mĂȘme mieux quâune corruption mĂ©moire difficile Ă investiguer (waddleplash).
DĂ©codage des descripteurs USB Audio v2 dans la commande listusb
, mais pas encore dans le pilote usb_audio
qui implĂ©mente pour lâinstant seulement la version 1 (gscrain).
PCI
Correction de problĂšmes dâaccĂšs au bus PCI sur les machines Ă©quipĂ©es de ACPI. Suite Ă une modification prĂ©cĂ©dente, les accĂšs sur 8 ou 16 bits Ă©taient convertis en accĂšs sur 32 bits, mais ce nâest pas le comportement attendu. En particulier, certains registres effacent automatiquement leur contenu lorsquâils sont lus, ou bien les donnĂ©es accessibles en lecture et en Ă©criture ne sont pas les mĂȘmes. (PulkoMandy)
Il nâest donc pas possible de lire une valeur sur 32 bits, remplacer 8 bits, et rĂ©Ă©crire 32 bits pour simuler une Ă©criture sur 8 bits dans un registre.
Les accĂšs sont Ă nouveau traitĂ©s correctement, ce qui permet Ă Haiku de fonctionner Ă nouveau normalement sur les machines concernĂ©es par ce type dâaccĂšs au bus PCI (cela dĂ©pend du matĂ©riel et des pilotes).
Périphériques de stockage
Petites améliorations de performances dans le pilote NVMe (waddlesplash).
Modification du pilote AHCI/SATA (waddlesplash) :
- Suppression de code dupliquĂ© pour utiliser Ă la place des fonctions communes partagĂ©es avec dâautres pilotes,
- Correction dâune confusion entre adresses 32 et 64 bits qui empĂȘchait de dĂ©marrer la version 32
bits de Haiku sur certains systĂšmes avec plus de 4Gio de RAM.
La pile SCSI prend mieux en compte les restrictions sur les adresses DMA. Chaque pilote de pĂ©riphĂ©rique qui implĂ©mente SCSI peut indiquer ce quâil est capable de faire, et la pile SCSI fait en sorte que les demandes de transferts DMA respectent ces contraintes, ce qui Ă©vite aux pilotes de devoir dĂ©couper par eux-mĂȘmes les transferts en unitĂ©s quâils sont capables de traiter (waddlesplash).
ACPI
ACPI est une interface standardisĂ©e avec le matĂ©riel. Elle permet la gestion dâĂ©nergie (extinction de la machine par exemple), ainsi que lâaccĂšs Ă du matĂ©riel annexe tels que les boutons on/off, la dĂ©tection de rabat de lâĂ©cran sur un PC portable, le contrĂŽle des LEDs indicatrices ; ainsi que la dĂ©couverte de matĂ©riel non connectĂ© sur le bus PCI (comme certains modules eMMC dans des tablettes et ordinateurs Ă bas coĂ»t).
La spĂ©cification Ă©tant assez complexe, la bibliothĂšque ACPICA est utilisĂ©e pour implĂ©menter les bases de ACPI. Ensuite, des pilotes dĂ©diĂ©s permettent dâexposer chaque pĂ©riphĂ©rique ACPI.
Mise à jour de ACPICA avec la derniÚre version publiée par Intel (publiée en mars), et un peu de nettoyage afin de pouvoir intégrer quelques patchs dans la version upstream de ACPICA (PulkoMandy).
Ajustement du pilote ACPI pour mapper sa mĂ©moire physique en «âŻwrite backâŻÂ» au lieu de dĂ©sactiver complĂštement le cache. Câest nĂ©cessaire sur ARM64, car le cache permet dâintercepter les accĂšs mĂ©moire non alignĂ©s. Correction de problĂšmes liĂ©s au fait que la mĂȘme zone de mĂ©moire physique pouvait ĂȘtre mappĂ©e plusieurs fois avec des configurations diffĂ©rentes, ce qui est impossible (dĂ©clenche une «âŻmachine check exceptionâŻÂ») (oanderso).
Graphiques
AvancĂ©es sur la prise en charge des cartes graphiques Intel de gĂ©nĂ©rations Tiger Lake, Ice Lake et Gemini Lake (ttmfx, ilzu, PulkoMandy). Lâutilisation de ces cartes graphiques reste assez limitĂ©, sans accĂ©lĂ©ration matĂ©rielle et sans possibilitĂ© dâutiliser plusieurs Ă©crans pour lâinstant.
virtio
Les pilotes virtio permettent lâutilisation de matĂ©riel virtuel dĂ©fini pour tirer le meilleur parti des machines virtuelles. PlutĂŽt que de copier le fonctionnement dâun matĂ©riel existant, lâinterface peut ĂȘtre conçue pour rendre le travail plus simple aussi bien pour lâhĂŽte que pour le systĂšme virtualisĂ©.
Correction de problĂšmes dans lâallocation des files de messages virtio et amĂ©lioration de la gestion des erreurs (mmlr).
VĂ©rification de lâĂ©tat du pĂ©riphĂ©rique aprĂšs une rĂ©initialisation, et correction dâun accĂšs mĂ©moire hors limite dans le pilote virtio_pci
(korli).
PS/2
Les ports PS/2 ont disparu de la plupart des machines depuis de nombreuses annĂ©es, mais le protocole est encore utilisĂ© pour les claviers des ordinateurs portables ainsi que pour certains touchpads. Ces derniers utilisent de nombreuses extensions peu standardisĂ©es et mal documentĂ©es pour offrir des fonctions avancĂ©es qui nâexistaient pas Ă lâĂ©poque des souris Ă deux boutons.
Le driver reçoit ce trimestre une refonte de la gestion des verrous entre ses différents composants, pour essayer de régler quelques problÚmes de synchronisation (waddlesplash).
SystĂšmes de fichiers
ram_disk et ramfs
ram_disk est un pĂ©riphĂ©rique bloc (block device) qui stocke ses donnĂ©es en RAM (non persistante au redĂ©marrage). Il peut ĂȘtre formatĂ© avec nâimporte quel systĂšme de fichier.
ramfs est un systĂšme de fichiers qui stocke ses donnĂ©es en RAM, sans passer par un block device. Cela permet de meilleures performances (pas besoin de journalisation par exemple), une meilleure intĂ©gration avec le cache de fichiers (la mĂ©moire peut ĂȘtre partagĂ©e directement entre ramfs et le cache), et de sâaffranchir des limites habituelles des pĂ©riphĂ©riques de bloc (par exemple: une taille fixe connue lors de la crĂ©ation du systĂšme de fichiers).
Un utilisateur a remontĂ© un problĂšme de compatibilitĂ© avec POSIX. Si on utilise mmap() sur un fichier stockĂ© dans un ramfs, et que la taille du fichier nâest pas un multiple de la taille des pages de mĂ©moire, la fin de la derniĂšre page pouvait contenir des donnĂ©es alĂ©atoires. Selon la spĂ©cification POSIX, il faut que cette zone soit remplie avec des 0, et le compilateur clang dĂ©pend de ce comportement pour implĂ©menter une lecture rapide des fichiers sources compilĂ©s.
Le problÚme a été corrigé, avec au passage une commonalisation de code entre ramfs et ram_disk, de petits ajustements de performances, et un peu de nettoyage.
Enfin, la prioritĂ© des allocations mĂ©moires de ces deux pilotes a Ă©tĂ© abaissĂ©e, ce qui permet dâĂ©viter un gel du systĂšme sâil nây a plus de mĂ©moire disponible.
Le pilote ramfs continue dâĂȘtre stabilisĂ©, quelques problĂšmes qui pouvaient encore causer des kernel panic ont Ă©tĂ© corrigĂ©s.
packagefs
packagefs est un systĂšme de fichier virtuel qui expose le contenu de fichiers de packages au format hpkg. Des paquets peuvent ĂȘtre ajoutĂ©s et supprimĂ©s pendant le fonctionnement du systĂšme, et il nâest pas nĂ©cessaire dâextraire leurs donnĂ©es sur disque.
Plusieurs améliorations faites par waddlesplash :
- Ajout de vĂ©rifications de la bonne utilisation de verrous entre diffĂ©rents threads et corrections de problĂšmes mineurs quâelles ont mis en Ă©vidence,
- AmĂ©lioration du message dâerreur si on essaie dâactiver deux paquets qui entrent en conflit.
Un reproche qui est souvent fait au packagefs est dâavoir augmentĂ© les besoins en RAM de Haiku, en effet, depuis la version Beta 1 de Haiku, la configuration mĂ©moire minimum recommandĂ©e est de 384Mio de RAM, alors que les versions prĂ©cĂ©dentes se contentaient de 128Mio.
- Utilisation dâobject_cache` (un allocateur mĂ©moire pour des objets qui font tous la mĂȘme taille) dans diffĂ©rents endroits de packagefs pour rĂ©duire sa consommation de mĂ©moire,
- Utilisation de listes chaĂźnĂ©es simples au lieu de listes chaĂźnĂ©es doubles lĂ oĂč ça ne pose pas de problĂšme de performances,
- Suppression de champs constants dans certaines classes,
- «âŻinliningâŻÂ» des compteurs de rĂ©fĂ©rences pour rendre les structures de donnĂ©es plus compactes,
- Réorganisation des structures pour réduire le padding,
- Retrait des «âŻdĂ©pĂŽts dâobjetsâŻÂ» dans les arĂšnes d'allocation,
- DĂ©coupage des allocations en plusieurs zones distinctes,
- Utilisation de verrous moins fins (par exemple, avoir un seul verrou pour tout un dossier au lieu de un par fichier),
- Utilisation dâun «âŻbump allocatorâŻÂ» pour les objets Ă courte durĂ©e de vie.
La rĂ©duction de consommation mĂ©moire avec ces changements est de prĂšs de 20%, soit environ 15Mio sur une installation de rĂ©fĂ©rence. En effet, un gain de quelques octets sur le stockage dâinformations sur un fichier est multipliĂ© par plusieurs milliers de fichiers prĂ©sents sur le disque, ce qui fait que chaque petite optimisation est intĂ©ressante. Cependant, les investigations ont aussi permis de dĂ©couvrir dâautres problĂšmes encore plus importants qui nâĂ©taient pas directement liĂ©s au packagefs, on en reparle un peu plus loin.
Un autre changement a Ă©tĂ© fait par waddlesplash, non seulement pour packagefs mais aussi pour dâautres endroits oĂč le mĂȘme code Ă©tait utilisĂ© : La fonction pour calculer un hash de chaĂźne de caractĂšres utilisait un algorithme obsolĂšte. Elle a Ă©tĂ© remplacĂ©e par hashdjb2 qui gĂ©nĂšre moins de collisions.
FAT
FAT est un systÚme de fichier développé par Microsoft. Il est utilisé en particulier sur les cartes SD et les clés USB, ainsi que pour les partitions systÚmes EFI. Bien que sa conception soit quelque peu obsolÚte, il reste donc indispensable.
Le pilote FAT de Haiku, qui provenait tout droit dâun code source publiĂ© par Be, a Ă©tĂ© remplacĂ© dans la version beta 5 par une nouvelle version basĂ©e sur le code de FreeBSD. Ce nouveau pilote reçoit depuis des amĂ©liorations rĂ©guliĂšres par Jim906, le dĂ©veloppeur qui sâest chargĂ© du portage du code de FreeBSD.
Ce trimestre, le pilote reçoit des corrections sur lâinitialisation des «âŻmedia bytesâŻÂ» dans lâen-tĂȘte des partitions, des amĂ©liorations de performances pour rĂ©duire le temps nĂ©cessaire au montage dâune partition FAT, ainsi quâune meilleure gestion des erreurs dans le traitement des noms de volumes. Il est Ă©galement possible de monter les volumes FAT de taille supĂ©rieure Ă 2TiO.
BFS
BFS est le systĂšme de fichier hĂ©ritĂ© de BeOS et utilisĂ© pour les partitions natives de Haiku. Il propose une trĂšs bonne implĂ©mentation des attributs Ă©tendus (sans limite de taille, et typĂ©s) et permet en plus dâexĂ©cuter des requĂȘtes sur ces attributs pour localiser trĂšs rapidement les fichiers rĂ©pondant Ă certains critĂšres.
LâimplĂ©mentation du systĂšme de fichier BFS est assez mĂ»re et reçoit habituellement peu dâĂ©volutions. Cependant, il reste toujours des possibilitĂ©s dâamĂ©liorer les performances.
Câest le cas de la fonction de recherche de blocs libres. Les blocs sont chacun reprĂ©sentĂ©s par un bit dans une structure indiquant sâils sont disponibles ou pas. La recherche de blocs libres se faisait bit Ă bit, mais il est possible de gagner beaucoup de temps en testant 64 bits dâun coup pour savoir tout de suite quâils reprĂ©sentent tous des blocs occupĂ©s, et passer directement aux 64 bits suivants. Cela amĂ©liore les performances de la crĂ©ation et du redimensionnement de fichier, en particulier sur les architectures RISC-V (waddlesplash).
Query parser
Plusieurs systĂšmes de fichiers conçus pour BeOS ou Haiku (bfs, ramfs, et packagefs) permettent lâutilisation dâattributs indexĂ©s par le systĂšme de fichiers qui permettent dâeffectuer des requĂȘtes pour localiser des fichiers comme dans une base de donnĂ©es.
Depuis la version beta 5 de Haiku, ces 3 systĂšmes de fichiers partagent le code utilisĂ© pour parser une requĂȘte (envoyĂ©e sous forme de texte) et la convertir en une opĂ©ration de recherche exĂ©cutable.
Ce parser pouvait dans certains cas (requĂȘtes trop complexes) dĂ©clencher volontairement un kernel panic. Celui-ci a Ă©tĂ© remplacĂ© par une «âŻsimpleâŻÂ» erreur, remontĂ©e Ă lâapplication qui a dĂ©clenchĂ© la requĂȘte. Lâapplication aura la charge de remonter cette erreur Ă lâutilisateur, et de lâinviter Ă simplifier sa demande.
block_cache
Le cache de blocs, comme son nom lâindique, stocke en mĂ©moire RAM une copie de certains blocs des systĂšmes de fichiers. Cela permet dâaccĂ©lĂ©rer les opĂ©rations bas niveau sur le systĂšme de fichier, en particulier pour mettre en cache des structures internes du disque. Il complĂšte le file_cache
, qui lui se trouve Ă un niveau plus haut, et met en cache uniquement le contenu des fichiers lus et Ă©crits par les applications.
Le seul changement notable sur le block_cache est le retrait de paramÚtres inutilisés dans certaines fonctions, afin de simplifier le code (waddlesplash).
kernel
Une correction de bug sur le blocage des threads avec timeout (par exemple, lâattente dâun mutex ou dâun sĂ©maphore avec un dĂ©lai maximum): dans certains cas, une fonction pouvait retourner B_TIMED_OUT pour dâautres raisons que lâexpiration du timer. Ce nâĂ©tait pas traitĂ© correctement, et le noyau supposait que le timeout avait expirĂ©, alors quâil sâagissait dâautre chose. Des vĂ©rifications supplĂ©mentaires permettent de traiter ce cas correctement.
Correction de problĂšme sur la programmation des timeouts «âŻabsolus temps-rĂ©elâŻÂ». Comme leur nom lâindique, ils rĂ©fĂ©rencent lâhorloge «âŻreal timeâŻÂ» (qui essaie de suivre lâheure et la date «âŻrĂ©elleâŻÂ», par opposition Ă lâhorloge systĂšme qui est basĂ©e sur lâuptime de la machine, mais garantit de ne jamais faire de saut ou revenir en arriĂšre). Ces timers ne fonctionnaient pas du tout (ou alors, seulement sur un coup de chance), et restaient probablement bloquĂ©s pendant une durĂ©e beaucoup plus longue que demandĂ©. Au passage, nettoyage du code de gestion des timers.
Dans le code de gestion des interruptions: ajout dâassertions pour investiguer un bug dans les addons vmware ou virtualbox.
Correction dâun bug dans lâimplĂ©mentation de kqueue
qui produisait un blocage au démarrage de la libevent (qui utilise maintenant kqueue pour Haiku).
Des petites amĂ©liorations de performances: sur lâallocateur mĂ©moire du noyau, sur lâutilisation de verrous dans la gestion de la mĂ©moire virtuelle, des fuites de mĂ©moire dans lâallocation de page, des amĂ©liorations sur la dĂ©tection de rĂ©fĂ©rences devenues invalides (jpelczar + waddlesplash).
Le script de link du noyau refuse maintenant les sections inconnues avec un message dâerreur, au lieu de simplement les ignorer (korli).
Correction du dĂ©compte du temps CPU utilisĂ© par le thread en cours dâexĂ©cution, pour donner des rĂ©sultats plus fiables dans les applications qui affichent lâutilisation CPU (waddlesplash).
Refactorisation du dĂ©compte du temps dâexĂ©cution des appels systĂšmes. Seul le temps passĂ© dans lâexĂ©cution du syscall est prise en compte, sans mesurer la mise en place dâun appel systĂšme et du retour vers lâespace utilisateur (qui ne peuvent de toutes façons pas ĂȘtre mesurĂ©es de façon fiable depuis le noyau). Cela rend lâaffichage des durĂ©es dâexĂ©cution dans strace plus facile Ă interprĂ©ter (waddlesplash).
Réduction de la taille maximale des tampons mémoire pour stocker des dirent
Ă 8Kio. La plupart des applications nâutilisent pas un tampon aussi large, et les quelques-unes qui le faisaient ont Ă©tĂ© modifiĂ©es pour rĂ©duire la taille. Cette rĂ©duction permet dâutiliser un allocateur spĂ©cialisĂ© beaucoup plus rapide, ce qui devrait compenser les rares cas oĂč le tampon est trop petit pour rĂ©cupĂ©rer tout le contenu dâun dossier en une seule fois (waddlesplash).
Correction de plusieurs problĂšmes dans le systĂšme de gestion des ressources faibles (qui essaie de libĂ©rer de la mĂ©moire quand il nây en a plus assez de disponible). Dans certains cas, le systĂšme finit par geler ou dĂ©clencher un kernel panic, alors quâil devrait toujours ĂȘtre possible de refuser des demandes dâallocation mĂ©moire venant de lâespace utilisateur, et de conserver suffisamment de mĂ©moire libre pour au moins afficher proprement une erreur.
Amélioration de la gestion des mutex (exclusions mutuelles entre threads):
- Ajout dâassertions pour dĂ©tecter des cas de rĂ©veil dâun thread qui ne devrait pas lâĂȘtre.
- Correction dâun problĂšme introduit rĂ©cemment et investiguĂ© Ă lâaide de ces nouvelles assertions.
- LâABI des locks est identiques entre les builds du kernel en version debug ou release, ce qui permet de ne pas avoir besoin de recompiler tous les pilotes dans le mĂȘme mode que le kernel. Les pilotes compilĂ©s en mode release vont dĂ©clencher une erreur de symbole manquant si on essaie de les utiliser avec un noyau en mode debug, dans lâautre sens, il nây a pas de problĂšme. Auparavant, dans les deux cas on obtenait des crashes ou un gel complet du systĂšme, difficile Ă investiguer et faisant perdre du temps.
- Ajout dâassertions dans plusieurs cas pour dĂ©tecter les utilisations incorrectes des rw-locks. Certaines activĂ©es par dĂ©faut, et dâautres uniquement sur demande Ă la compilation du noyau en raison de coĂ»t de vĂ©rification trop importants.
- Correction de mauvaises utilisations des rwlocks ainsi détectées.
GĂ©nĂ©ralisation de lâutilisation de fonctions utilitaires partagĂ©es pour la conversion des timespec en durĂ©es en microsecondes. Cela permet aux fonctions concernĂ©es (entre autres kqueue
) de bénéficier de contrÎles de validité supplémentaires (waddlesplash).
Ajout dâinformations de debug supplĂ©mentaires dans la sortie de la commande slab_object
du debugger du noyau.
RĂ©activation de la calibration du TSC Ă partir dâinformations du CPUID lorsque Haiku sâexĂ©cute dans un hyperviseur, comme câĂ©tait dĂ©jĂ le cas lorsquâil sâexĂ©cute directement sur une machine physique. Le TSC est un timer interne du CPU qui permet des mesures de temps trĂšs rapides (une seule instruction CPU) mais dans une Ă©chelle de temps arbitraire quâil faut corrĂ©ler avec le «âŻvraiâŻÂ» temps. Cela peut ĂȘtre fait soit Ă lâaide dâune mesure empirique (mĂ©thode historique), soit Ă lâaide dâinformations sur cette horloge disponibles dans les informations retournĂ©es par lâinstruction CPUID.
Affichage de plus de fonctionnalités du CPU reconnues dans les logs de debug pour les processeurs x86 (korli).
Ajout dâun raccourci clavier (Control+D) pour quitter le debugger noyau et reprendre lâexĂ©cution normale si possible (Ă©quivalent Ă la commande continue
ou co
) (mmlr).
Le chargement des pilotes de pĂ©riphĂ©riques se fait en prioritĂ© depuis les dossiers non-packaged avant de rechercher les fichiers dans les paquets logiciels, ce qui permet de tester facilement une version modifiĂ©e dâun pilote - sauf si les dossiers non-packaged sont dĂ©sactivĂ©s dans la configuration du noyau (korli).
VFS
Le VFS (virtual file system) est le composant de Haiku qui gĂšre lâaccĂšs aux fichiers. Il fait lâintermĂ©diaire entre les appels systĂšmes liĂ©s aux fichiers (open, read, writeâŠ) et les systĂšmes de fichiers eux-mĂȘmes. Il implĂ©mente autant que possible ce qui peut ĂȘtre mis en commun entre tous les systĂšmes de fichiers: rĂ©solution de chemins relatifs, vĂ©rification de permissionsâŠ
Cela rend plus facile lâĂ©criture dâun nouveau systĂšme de fichiers, qui peut alors se concentrer sur les aspects bas niveau et la gestion de ses structures de donnĂ©es.
Ajout de vĂ©rifications dâintĂ©gritĂ©s supplĂ©mentaires dans le VFS pour dĂ©tecter des bugs dans les systĂšmes de fichiers le plus rapidement possible, au lieu dâobtenir un crash du noyau difficile Ă investiguer un peu plus tard.
Retrait dâun scan du bus SCSI et des pilotes associĂ©s par le device manager pour rĂ©duire un peu le temps de dĂ©marrage.
Correction dâun gros problĂšme dans lâAPI du noyau IORequest
qui aboutissait Ă une confusion entre la taille totale dâune requĂȘte et lâoffset de la derniĂšre donnĂ©e transfĂ©rĂ©e (les transferts ne commençant pas forcĂ©ment Ă lâoffset 0). La consĂ©quence Ă©tait lâĂ©crasement de donnĂ©es dans le cache de fichiers, dĂ©clenchant des crashes du noyau avec des messages dâerreur incomprĂ©hensibles Ă propos des structures de pages. Correction dâun problĂšme de calcul dâoffset qui faisait que certaines opĂ©rations Ă©taient considĂ©rĂ©es comme rĂ©ussies, alors quâil y avait en fait une erreur.
Correction de problĂšmes de dĂ©comptage de rĂ©fĂ©rences et de gestion du cache Ă lâinterface entre ramfs et VFS, mis en Ă©vidence lors du travail de portage de Firefox.
Ajout dâune acquisition de rĂ©fĂ©rence sur un vnode qui manquait dans le cache de fichiers (waddlesplash).
Améliorations du cache d'entrées, dont en particulier la mise en cache du hash des noms de fichiers, pour éviter des comparaisons de chaßnes de caractÚres inutiles.
Gestion de la mémoire
La gestion de la mĂ©moire virtuelle est une des tĂąches essentielles dâun systĂšme dâexploitation. Elle garantit lâisolation entre les diffĂ©rents processus, permet dâutiliser la mĂ©moire physique le mieux possible (Ă©ventuellement en dĂ©plaçant certaines allocations peu utilisĂ©es vers un espace dâĂ©change sur disque), et permet aussi aux diffĂ©rents processus de se partager des donnĂ©es.
Il sâagit Ă©galement dâun composant trĂšs sollicitĂ©, et dont les performances impactent beaucoup le comportement du systĂšme. Une mauvaise gestion de la mĂ©moire peut fortement ralentir le systĂšme ou le rendre instable.
Ajout dâassertions dans le code gĂ©rant les pages de mĂ©moire, pour essayer dâintercepter ce type de correction plus rapidement si elles se reproduisent.
Dans lâarbre des areas
globales : ajout dâassertions pour dĂ©tecter les identifiants dâareas dupliquĂ©s (chaque area doit bien sĂ»r avoir un identifiant unique).
ImplĂ©mentation de PAT (Page Attribute Table) pour les processeurs x86. Les PAT permettent de configurer des zones de mĂ©moires qui peuvent ou ne peuvent pas ĂȘtre mises en cache (complĂštement ou en write-through). Elles remplacent les MTRR en permettant un contrĂŽle plus fin et plus flexible. Au passage, nettoyage de lâimplĂ©mentation des MTRR (prĂ©servĂ©e pour les processeurs plus anciens incompatibles avec PAT), ajout de nouvelles commandes dans le debugger noyau. Renommage des constantes B_MTR_*
pour indiquer précisément leur rÎle indépendamment des dénominations utilisées dans les registres MTRR qui ne sont pas trÚs claires (mmlr).
Lorsque le systĂšme utilise PAT, ajout dâassertions pour dĂ©tecter les tentatives dâaccĂ©der Ă la mĂȘme zone de mĂ©moire physique avec des configurations de cache diffĂ©rentes. Elles ne sont pas activĂ©es lorqu'on utilise les MTRR, car ces derniĂšres ne permettent pas une configuration aussi fine (waddlesplash).
Ajout dâinformations supplĂ©mentaire dans le message de kernel panic indiquant quâune page devrait ĂȘtre libre mais quâelle ne lâest pas. Modification de la commande page
du debugger noyau pour rĂ©cupĂ©rer la liste des espaces dâadressage depuis les structures du kernel plutĂŽt que dâitĂ©rer sur tout lâespace dâadressage (ce qui pouvait fonctionner sur un espace 32 bit, mais pas en 64 bit).
Correction du code de «âŻguarded heapâŻÂ» du noyau qui ne compilait plus. Il sâagit dâun allocateur mĂ©moire plus lent mais avec de nombreuses vĂ©rifications dâintĂ©gritĂ© pour dĂ©tecter les dĂ©bordements de tampons, double free, et autres problĂšmes de gestion de la mĂ©moire dans le noyau (kallisti5).
Le fichier swap est automatiquement supprimĂ©, et lâespace disque libĂ©rĂ©, lors de la dĂ©sactivation de la swap. Auparavant, un redĂ©marrage Ă©tait nĂ©cessaire (waddlesplash).
Correction dâun problĂšme dans lâallocation de mĂ©moire «âŻearly bootâŻÂ» (avant que lâallocation normale soit mise en place), qui empĂȘchait le dĂ©marrage sur les systĂšmes pouvant gĂ©rer de grandes quantitĂ©s de mĂ©moire (plusieurs centaines de Gio) (waddlesplash).
libroot
La libroot regroupe tous les composants de la librairie standard C (parfois dĂ©coupĂ©e en libc, libm et libpthread pour dâautres systĂšmes). Elle contient en plus un certain nombre dâextensions spĂ©cifiques Ă Haiku et Ă BeOS.
Changements effectués par waddlesplash, sauf mentions spécifiques:
Nettoyage de code dans la classe WeakReferenceable
, une classe de comptage de références intrusive qui autorise les références "faibles".
Correction de problĂšmes dans le code dâinterfaçage avec ICU pour la conversion de dates (nipos et waddlesplash).
libnetwork
Nettoyage de code de compatibilitĂ© avec BeOS dans la libnetwork, pour faire en sorte quâil ne soit plus du tout compilĂ© sur les architectures nâoffrant pas de compatibilitĂ© avec BeOS.
Compatibilité POSIX
Implémentation minimale de mknod
et mknodat
dans le seul cas spécifié par POSIX, qui permet de réaliser une opération équivalente à mkfifo
. La gestion des devices dans Haiku est trĂšs diffĂ©rente de celle utilisĂ©e traditionellement par UNIX, et ne se prĂȘte pas Ă lâimplĂ©mentation des autres utilisations de ces fonctions.
Rectification de lâimplĂ©mentation des fonctions *at (par exemple linkat
) qui permettent de rĂ©aliser une opĂ©ration Ă partir dâun descripteur de fichier au lieu dâun path. Dans la libroot, ces fonctions envoyaient la valeur -1 aux appels systĂšmes pour implĂ©menter AT_FDCWD
. La valeur de AT_FDCWD
a Ă©tĂ© modifiĂ©e pour choisir autre chose que -1 (qui est souvent utilisĂ© pour indiquer une erreur dans le code de retour dâautres fonctions). Les appels systĂšmes acceptent pour lâinstant les valeurs -1 et AT_FDCWD
, mais rejettent maintenant toutes les autres valeurs négatives.
Remplacement dâune partie du code de gestion des flux dâentrĂ©e-sortie par la version de la glibc. La bibliothĂšque libroot est un patchwork dâimplĂ©mentations provenant de la glibc, de musl, et de divers BSD, un objectif Ă terme est dâessayer de se rapprocher dâune de ces implĂ©mentations, mais on ne sait pas encore trop de laquelle. En tout cas, le code des I/O provient majoritairement de la glibc afin dâĂȘtre trĂšs compatible avec ce qui Ă©tait utilisĂ© dans BeOS.
La fonction gmtime retourne une struct tm avec le champ tm_zone contenant la chaĂźne "GMT" (waddlesplash).
Correction de la conversion des "surrogate pairs" dans la fonction mbrtowc.
Mise en conformitĂ© de lâimplĂ©mentation des threads avec POSIX :
- Ajustement de code dâerreurs retournĂ©s par les fonctions
- Suppression de la possibilité de retourner EINTR depuis un rwlock
- Correction de deadlocks dans les barriers
- Correction de plusieurs problĂšmes dans lâimplĂ©mentation des sĂ©maphores anonymes.
Mise en place systĂ©matique de lâutilisation de _DEFAULT_SOURCE
pour protĂ©ger les extensions Ă la norme POSIX, ce qui permet de les activer automatiquement via lâinclusion de features.h
lorsque câest possible.
Nettoyage de quelques fichiers dâen-tĂȘte, dont en particulier <sys/select.h>
, pour Ă©viter de polluer lâespace global avec des macros et des dĂ©finitions en double (waddlesplash).
Prise en compte correcte du drapeau O_NONBLOCK
lors de lâouverture dâun FIFO (korli).
runtime_loader
Le runtime_loader est le composant responsable du chargement en mĂ©moire des exĂ©cutables et du lancement de nouveaux processus. Il rĂ©alise la rĂ©solution des dĂ©pendances et la recherche des bibliothĂšques partagĂ©es nĂ©cessaires pour lâexĂ©cution dâun programme.
Il reçoit des Ă©volutions suite au portage dâapplications complexes venues de Linux, qui nĂ©cessitent souvent plusieurs dizaines de bibliothĂšques partagĂ©es.
Correction de problÚmes détectés en testant un portage expérimental et instable de Firefox: crash du runtime_loader
dans certains cas si on charge une bibliothÚque (via dlopen ou load_add_on) dont il manque des dépendances.
Retrait de lâoption -fno-builtin
dans les drapeaux de compilation du runtime_loader, comme cela avait déjà été fait pour la majorité de la libroot. Cela permet à gcc de remplacer des appels à des fonctions standardisées par une implémentation inline plus performante (waddlesplash).
Outils de debug
DĂ©veloppement dâoutils pour enregistrer ce quâil se passe pendant le dĂ©marrage du systĂšme et dĂ©tecter dâĂ©ventuels problĂšmes de latence, de 'lock contention', etc. Au passage, correction de divers problĂšmes liĂ©s Ă ces outils : les barres de dĂ©filement de DebugAnalyzer, les permissions noyau dans transfer_area
, etc.
Amélioration de la remontée des valeurs de retour des appels systÚmes vers strace
sur les plateformes x86 32-bit.
Pour terminer, un changement rĂ©alisĂ© par mmlr : amĂ©lioration de lâallocateur mĂ©moire "guarded heap" pour le rendre utilisable plus facilement, y compris comme allocateur pour tout le systĂšme. Cet allocateur permet de dĂ©tecter les accĂšs au-delĂ de la fin dâune zone mĂ©moire allouĂ©e avec malloc(), ainsi que les accĂšs Ă de la mĂ©moire dĂ©jĂ libĂ©rĂ©e, mais au prix dâune consommation mĂ©moire nettement plus Ă©levĂ©e quâun allocateur classique. La disponibilitĂ© dâun espace dâadressage de 64 bits permet de limiter les cas oĂč une adresse mĂ©moire est initialement utilisĂ©e pour une allocation, puis libĂ©rĂ©e et allouĂ©e Ă nouveau pour autre chose.
Un problĂšme de gestion dâerreur dans lâinterfaçage entre le Debugger et le noyau pouvait conduire Ă un gel complet du systĂšme dans certains cas de plantage du debug_server, en particulier sâil nây a plus assez de mĂ©moire RAM disponible.
Bootloader
Ajout dâune vĂ©rification manquante pour prendre en compte lâoption «âŻBlockedEntriesâŻÂ» dans le bootloader. Cette option sâappelait prĂ©cĂ©demment «âŻEntriesBlacklistâŻÂ» mais a Ă©tĂ© renommĂ©e pour utiliser un terme non entachĂ© de racisme. Lâancien nom continue de fonctionner pour ne pas casser les installations existantes, mais nâest plus documentĂ©.
Augmentation de la taille maximum autorisĂ©e pour les allocations «âŻstandardâŻÂ» sur la pile. Lâallocateur mĂ©moire du bootloader traite sĂ©parĂ©ment les allocations de grande taille, mais ces allocations ne sont pas correctement libĂ©rĂ©es lors du transfert de contrĂŽle vers le noyau, en particulier sur les machines utilisant un BIOS non EFI. Pour lâinstant, une correction complĂšte du problĂšme semble compliquĂ©e Ă mettre en place, mais la modification permet de libĂ©rer de la mĂ©moire allouĂ©e pour lâaccĂšs au packagefs (le bootloader a besoin dây accĂ©der pour trouver le noyau, qui est stockĂ© dans un paquet). Ce changement permet de libĂ©rer plusieurs dizaines de Mio de mĂ©moire, et complĂšte les changements mentionnĂ©s plus haut sur la gestion des paquets aprĂšs dĂ©marrage. Il est possible de configurer Haiku pour fonctionner avec moins de 100Mio de mĂ©moire (waddlesplash).
RĂ©paration de la rĂ©-initialisation des ports sĂ©rie sur le bootloader EFI. Le port sĂ©rie est utilisĂ© Ă des fins de debug, mais il peut ĂȘtre accĂ©dĂ© de plusieurs façons diffĂ©rentes (en adressant directement le matĂ©riel, ou bien via des services EFI dĂ©diĂ©s). Le bootloader doit passer dâune mĂ©thode Ă lâautre Ă diffĂ©rentes Ă©tapes du dĂ©marrage: accĂšs direct au port physique dans les premiĂšres Ă©tapes (en dĂ©tectant sâil est bien prĂ©sent Ă une adresse standard), accĂšs via les services EFI une fois ceux-ci initialisĂ©s, puis Ă nouveau accĂšs direct au matĂ©riel aprĂšs lâarrĂȘt des services EFI pour la derniĂšre Ă©tape de passage de contrĂŽle au noyau (cette fois-ci Ă une adresse qui peut ĂȘtre configurĂ©e dans les options du bootloader et du noyau). Ce fonctionnement ne sâinsĂšre pas forcĂ©ment trĂšs bien dans la logique du bootloader, qui nâavait Ă lâorigine pas Ă©tĂ© conçu pour une gestion aussi complexe des entrĂ©es-sorties (VoloDroid).
Réduction de la quantité de logs liés à la mise en place de SMP (gestion de plusieurs processeurs) dans le bootloader pour BIOS (waddlesplash).
Le menu de dĂ©marrage affiche la version (numĂ©ro 'hrev') du paquet systĂšme correspondant Ă chaque point de restauration disponible, ce qui facilite lâidentification des Ă©tats qui correspondent Ă un changement de version du systĂšme, et pas une simple installation, dĂ©sinstallation ou mise Ă jour de paquets logiciels (waddlesplash).
Documentation
Haiku Book
Le «âŻHaiku BookâŻÂ» est un projet de documentation des APIs publiques de Haiku. Il doit Ă terme remplacer le «âŻBe BookâŻÂ», qui documente les APIs de BeOS, mais ne peut pas ĂȘtre mis Ă jour Ă cause de se license CC BY-NC-ND. Actuellement, il faut jongler entre ces deux documentations.
La documentation de B_INFINITE_TIMEOUT (constante permettant dâindiquer Ă certaines fonctions quâon veut les exĂ©cuter sans timeout, et attendre indĂ©finiment) a Ă©tĂ© mise Ă jour pour indiquer explicitement que sa valeur numĂ©rique est INT64_MAX (waddlesplash).
Correction de fautes de frappe dans la documentation des API liées aux entrées clavier (drea233).
Haiku Interface Guidelines
Ce document prĂ©sente les bonnes pratiques et conventions pour la conception dâinterfaces graphiques fonctionnant avec Haiku.
Ajout dâune section sur la gestion des fichiers rĂ©cemment utilisĂ©s et la façon dont ils peuvent ĂȘtre exposĂ©s aux utilisateurs.
Wiki et documentation interne
Le wiki contient des informations utiles aux développeurs de Haiku.
La documentation «âŻinterne" documente le fonctionnement de Haiku en sâadressant principalement aux contributeurs du systĂšme, par opposition aux personnes qui souhaitent seulement dĂ©velopper ou porter des applications.
Mise Ă jour de la page «âŻrelease cookbookâŻÂ» indiquant toutes les Ă©tapes Ă suivre lors de la publication dâune version de Haiku.
Notes dâadministration systĂšme : mise Ă jour des instructions pour instancier des machines Google Cloud Platform (kallisti5).
SystĂšme de build, environnement de compilation
La compilation dâun systĂšme dâexploitation complet nâest pas chose facile. Dâautant plus pour Haiku, qui prĂ©sente les particularitĂ©s suivantes:
- Utilisation de deux versions de gcc (gcc 2.95.3 et gcc 13) pour la version 32 bit de Haiku, afin dâassurer la compatibilitĂ© binaire avec BeOS,
- PossibilitĂ© de compilation croisĂ©e depuis Linux, Mac OS et dâautres systĂšmes, ou depuis un hĂŽte Haiku,
- Compilation dâoutils pour la machine hĂŽte de la compilation croisĂ©e, avec si nĂ©cessaire une couche de compatibilitĂ© permettant dâĂ©crire ces outils en utilisant des API et fonctionnalitĂ©s spĂ©cifiques Ă Haiku,
- Possibilité de compiler des applications pour un systÚme hÎte existant (une autre version de Haiku) à des fins de test,
- Compilation dâun systĂšme complet (noyau, bibliothĂšques, applications, image disque) en une seule opĂ©ration.
Pour ces raisons, lâutilisation dâun systĂšme de build haut niveau (CMake, MesonâŠ) sâavĂšre plutĂŽt complexe. Lâutilisation de make ou de ninja directement serait de trop bas niveau. Le choix de Haiku est donc dâutiliser lâoutil jam, qui est malheureusement assez peu populaire et tombĂ© Ă lâabandon dans sa version originale. Haiku maintient un fork de jam qui est concurrent de ceux maintenus par Boost et par Freetype.
Reformatage des fichiers Jamfile
pour lister une seule cible par ligne au lieu de les rassembler, cela facilite les rebase et résolutions de conflits (x512).
Mise à jour de paquets en préparation pour la version beta 5: OpenSSL 3, Python 3.10, et autres mises à jour diverses (PulkoMandy, waddlesplash, kallisti5).
Ajout de lâinclusion de <features.h>
dans <sched.h>
. Le fichier dâen-tĂȘte features.h
configure la visibilitĂ© des extensions GNU et BSD aux fichiers dâinclude standards C et POSIX, en fonction dâoptions de ligne de commande du compilateur. Lâinclusion de ce fichier permet dâutiliser facilement et par dĂ©faut ces extensions (PulkoMandy).
Mise à jour des marque-pages fournis par défaut avec le navigateur WebPositive (waddlesplash).
Ajout des en-tĂȘtes de la bibliothĂšque linprog dans le paquet haiku_devel. Ces en-tĂȘtes sont nĂ©cessaires pour les applications associĂ©es au systĂšme de layout dâinterfaces graphiques ALM (korli).
Correction de fautes de frappe dans des commentaires (jmairboeck) et dâun problĂšme de compatibilitĂ© C89 dans un en-tĂȘte systĂšme (waddlesplash).
La taille des images «âŻnightly buildâŻÂ» de Haiku est maintenant de 650 Mo, ce qui laisse un peu plus de place disponible pour les utiliser et crĂ©er quelques fichiers (jscipione).
Diverses corrections pour une nouvelle fois essayer de faire fonctionner la compilation de Haiku avec Clang (waddlesplash, oanderso). Les choses en sont toujours au mĂȘme point depuis plusieurs annĂ©es, avec des corrections de temps en temps mais quelques parties du systĂšme qui ne fonctionnent toujours pas correctement.
La compilation du profil «âŻnightlyâŻÂ» nâa plus besoin de gĂ©nĂ©rer le paquet haiku_source contenant le code source de Haiku. Ce paquet est inclus uniquement dans les images de releases (pour faciliter le respect strict de la licence GPL de certains composants de Haiku), mais, pour des raisons de dĂ©pendances entre cibles dans le systĂšme de build, il Ă©tait tout de mĂȘme gĂ©nĂ©rĂ© pour les autres profils, ralentissant la compilation (waddlesplash).
Améliorations du script ./configure
(jessicah, OscarL et waddlesplash):
- Le script vérifie que les options passées fournies sont valides, et rejette immédiatement les configurations incohérentes plutÎt que de laisser la compilation échouer bien plus loin.
- Validation que lâinterprĂ©teur Python sĂ©lectionnĂ© existe bien, et uniformisation de la syntaxe utilisĂ©e pour choisir un interprĂ©teur avec la façon dont câest fait pour dâautres outils.
- DĂ©tection des options disponibles pour demander Ă wget de rĂ©-essayer un tĂ©lĂ©chargement en cas dâĂ©chec, ce qui permet dâassurer la compatibilitĂ© avec wget2.
- Utilisation automatique dâune version moderne de GCC pour compiler les outils «âŻhĂŽtesâŻÂ» lors de la compilation Ă partir dâune machine hĂŽte fonctionnant sous Haiku en version 32 bit, en ignorant le compilateur par dĂ©faut qui est gcc 2 pour des raisons de compatibilitĂ© avec BeOS.
RĂ©organisation du code source de libroot pour dĂ©placer les implĂ©mentations de malloc dans des sous-dossiers sĂ©parĂ©s, et faciliter lâexpĂ©rimentation avec dâautres implĂ©mentations de malloc. Lâallocateur hoard2 utilisĂ© actuellement nâest pas adaptĂ© aux architectures 64 bits, une tentative a Ă©tĂ© faite il y a quelques annĂ©es avec rpmalloc, mais ce dernier pose des problĂšmes sur les
architectures 32 bits. Des investigations sont en cours avec lâimplĂ©mentation de malloc dâOpenBSD.
Lâoutil de dessin Wonderbrush est maintenant disponible sur toutes les architectures. Historiquement, le code de Wonderbrush nâĂ©tait pas libre, mais une version gratuite Ă©tait offerte aux utilisateurs de Haiku. Le dĂ©veloppeur principal de Wonderbrush nâest plus trĂšs actif sur le projet et a dĂ©cidĂ© de publier les sources, ce qui a permis de recompiler le programme en version 64 bits et plus tard sur les autres architectures non x86. Mais ces nouvelles versions nâavaient jamais Ă©tĂ© incluses dans Haiku (PulkoMandy).
Nettoyage et centralisation des dĂ©finitions prĂ©processeur pour la compatibilitĂ© avec BeOS. DĂ©sactivation de la compatibilitĂ© avec BeOS dans le noyau, la compatibilitĂ© avec les pilotes et modules noyau de BeOS nâĂ©tant plus assurĂ©e depuis quelque temps dans Haiku.
Suppression de définitions de rÚgles obsolÚtes et inutilisées dans le Jamfile permettant de construire le fichier package_repo
(CodeforEvolution).
Remise en service du test DiskDeviceManagerTest qui ne compilait plus (waddlesplash).
ARM & PowerPC
Actuellement, Haiku est disponible officiellement pour les architectures x86 32 et 64 bits. Une version RISC-V 64 bits expĂ©rimentale est Ă©galement disponible mais pas encore totalement intĂ©grĂ©e dans le dĂ©pĂŽt de code principal, des discussions sont en cours sur la bonne façon de faire certains changements nĂ©cessaires. Les versions ARM (32 et 64 bits) et PowerPC sont les prochaines cibles sur la liste. La premiĂšre, car câest une architecture trĂšs populaire, la deuxiĂšme plutĂŽt pour des raisons historiques : câest lâune des architectures sur lesquelles fonctionne BeOS.
Renommage de structures qui Ă©taient initialement spĂ©cifiques Ă lâarchitecture x86, mais qui sont finalement utilisĂ©es Ă©galement sur dâautres CPU sans nĂ©cessiter de changements (waddlesplash).
RĂ©paration de la console de texte du chargeur de dĂ©marrage OpenFirmware qui Ă©tait cassĂ©e depuis lâadaptation pour OpenBOOT sur les machines SPARC (zeldakatze).
Sur ARM, utilisation de la bonne instruction CPU pour mettre le processeur en veille quand il nây a rien Ă faire (archeYR).
oanderso continue le travail sur le portage ARM64:
- Correction de plusieurs problÚmes liés à la gestion du cache et de la MMU dans le bootloader, ce qui permet de démarrer le noyau dans une machine virtuelle sur un hÎte Apple M1.
- Correction de lâimplĂ©mentation des timers dans le kernel qui ne fonctionnait pas dans les environnements virtualisĂ©s.
- Quelques avancées sur la gestion de la MMU : Implémentation de la table de translation de la mémoire virtuelle, du traitement des exceptions matérielles (défauts de page), des TLBs.
- Synchronisation du cache dâinstructions.
- Correction de problĂšmes de double lock.
Ajout de messages sur le port sĂ©rie traçant lâexĂ©cution de mĂ©thodes spĂ©cifiques Ă une architecture qui ne sont pas encore implĂ©mentĂ©es. Ceci permet de dĂ©tecter facilement quelle est la prochaine fonction Ă implĂ©menter (waddlesplash).
Nettoyage et documentation du fichier ArchitectureRules pour simplifier la configuration des options en ligne de commande du compilateur (qui doit savoir traiter deux versions de gcc et clang) (waddlesplash).