Nouvelles de Haiku - Hiver 2024-25
Haiku est un systĂšme dâexploitation pour les ordinateurs personnels. Il sâagit Ă lâorigine dâune rĂ©Ă©criture de BeOS. Le projet a dĂ©marrĂ© en 2001 et est actuellement en phase de beta-test pour une premiĂšre version stable avec support Ă long terme. Depuis 2024, lâactivitĂ© du projet Haiku sâaccĂ©lĂšre grĂące entre autres Ă lâembauche dâun dĂ©veloppeur Ă plein temps. Les dĂ©pĂȘches sur Haiku sont donc dĂ©sormais publiĂ©es tous les 3 mois au lieu de tous les ans pour leur conserver une longueur digeste.
La complĂšte liste des changements survenus pendant ces 3 mois comporte prĂšs de 300 commits. La dĂ©pĂȘche ne rentre pas dans les dĂ©tails de chaque changement et met en valeur les plus importants.
Les grosses évolutions sont un nouveau port de Iceweasel (Firefox), et des grosses améliorations sur la gestion de la mémoire.
Comme on est en dĂ©but dâannĂ©e, câest aussi le moment du bilan financier.
- lien nᔠ1 : Rapport d'activité de novembre 2024
- lien nᔠ2 : Repport d'activté de décembre 2024
- lien nᔠ3 : Rapport d'activité de janvier 2025
Sommaire
- Rapport financier 2024
- Applications
- Kits
- Servers
- Drivers
- SystĂšmes de fichiers
- libroot
- Kernel
- Chargeur de démarrage
- Outils de compilation
- Documentation
- Traductions de Haiku
Rapport financier 2024
Recettes
Lâassociation Haiku inc (association de type 501(c)3 aux USA) publie chaque annĂ©e un rapport financier. Le rĂŽle de lâassociation est de rĂ©colter les dons et de les redistribuer pour aider au dĂ©veloppement de Haiku. Elle ne prend pas part aux dĂ©cisions techniques sur lâorientation du projet, et habituellement les dĂ©penses sont faites en rĂ©ponse aux demandes des dĂ©veloppeurs du projet.
Lâobjectif en dĂ©but dâannĂ©e 2024 Ă©tait de rĂ©colter 20âŻ000$ de dons. Cet objectif a Ă©tĂ© largement atteint, il a dĂ» ĂȘtre mis Ă jour 2 fois en cours dâannĂ©e et finalement ce sont plus de 31âŻ000$ qui ont Ă©tĂ© reçus ! Cela en particulier grace Ă un assez gros don de 7âŻ500$.
Les dons sont rĂ©coltĂ©s via diffĂ©rentes plateformes: Github Sponsors (intĂ©ressant, car il nây a aucun frais de traitement), PayPal, Liberapay, Benevity (une plateforme de «âŻcorporate matchingâŻÂ»), ainsi que des paiements par chĂšque, virements bancaires, et en espĂšce lors de la tenue de stands dans des confĂ©rences de logiciels libres. La vente de T-Shirts et autre merchandising via la boutique Freewear reste anecdotique (une centaine de dollars cette annĂ©e).
Il faut ajouter Ă ces dons une contribution de 4âŻ400$ de la part de Google en compensation du temps passĂ© Ă lâencadrement des participants au Google Summer of Code.
Il faut également ajouter des dons en crypto-monnaies, principalement en bitcoins. Le rapport financier présente les chiffres en détail en tenant une compatibilité séparée en dollars, en euros, et en crypto-monnaies, avant de convertir le total en dollars pour dresser un bilan complet.
Une mauvaise nouvelle tout de mĂȘme: le service de microdons Flattr a fermĂ© ses portes. Lâentreprise propose maintenant un service de bloqueur de publicitĂ©s payant, qui reverse de lâargent aux sites dont les publicitĂ©s sont bloquĂ©es.
Le compte Flattr de Haiku avait Ă©tĂ© crĂ©Ă© pour recevoir des dons sur la plateforme, mais nâavait jamais Ă©tĂ© configurĂ© pour transfĂ©rer ces dons vers le compte en banque de lâassociation. MalgrĂ© un certain temps passĂ© Ă discuter avec le service client de Flattr et Ă leur fournir tous les documents demandĂ©s, il nâa pas Ă©tĂ© possible de trouver une solution pour rĂ©cupĂ©rer cet argent. Ce sont donc 800$ qui ne reviendront finalement pas au projet Haiku.
Au final, les recettes sont de 36âŻ479 dollars, de loin la plus grosse somme reçue par le projet en un an.
DĂ©penses
La dĂ©pense principale est le paiement de Waddlesplash, le dĂ©veloppeur actuellement employĂ© par Haiku inc pour accĂ©lĂ©rer le dĂ©veloppement du systĂšme (les autres dĂ©veloppeurs participent uniquement sur leur temps libre, en fonction de leurs autres activitĂ©s). Cela reprĂ©sente 25âŻ500$, un coĂ»t assez faible par rapport au travail rĂ©alisĂ©.
Le deuxiĂšme poste de dĂ©penses est lâinfrastructure, câest-Ă dire le paiement pour lâhĂ©bergement de serveurs, les noms de domaines, et quelques services «âŻcloudâŻÂ» en particulier pour le stockage des dĂ©pĂŽts de paquets.
Le reste des dépenses consiste en frais divers (commission PayPal par exemple), remboursement de déplacements pour la participation à des conférences, ainsi que le renouvellement de la marque déposée sur le logo Haiku.
Le total des dĂ©penses sâĂ©lĂšve Ă 31âŻ467$. Câest moins que les recettes, et lâassociation continue donc de mettre de lâargent de cĂŽtĂ©. LâannĂ©e 2022 a Ă©tĂ© la seule Ă ĂȘtre dĂ©ficitaire, suite au dĂ©marrage du contrat de Waddlesplash. Ce contrat est Ă prĂ©sent couvert par les donations reçues.
RĂ©serves
Lâassociation dispose de plus de 100âŻ000$ rĂ©partis sur son compte en banque, un compte PayPal (qui permet de conserver des fonds en euros pour les paiements en euros et ainsi dâĂ©viter des frais de change), et un compte Payoneer (utilisĂ© pour recevoir les paiements de Google).
Elle dispose Ă©galement de prĂšs de 350âŻ000$ en crypto-monnaies dont la valeur continue dâaugmenter. Cependant, actuellement ces fonds ne sont pas accessibles directement, en raison de problĂšmes administratifs avec Coinbase, lâentreprise qui gĂšre ce portefeuille de crypto-monnaies. Le compte nâest pas configurĂ© correctement comme appartenant Ă une association Ă but non lucratif et cela pose des problĂšmes de dĂ©claration de taxes lorsque on souhaite vendre des crypto-monnaies contre du vrai argent. Cette situation persiste depuis plusieurs annĂ©es, mais lâassociation nâa pour lâinstant pas besoin de rĂ©cupĂ©rer cet argent, les rĂ©serves dans le compte en banque principal Ă©tant suffisantes.
Applications
Iceweasel
Le navigateur web Iceweasel est disponible dans les dĂ©pĂŽts de paquets (seulement pour la version 64 bits pour lâinstant). Il sâagit dâun portage de Firefox utilisant la couche de compatibilitĂ© Wayland. Le nom Firefox ne peut pas ĂȘtre utilisĂ© puisquâil ne sâagit pas dâun produit officiel de Mozilla.
En plus du travail de portage pour rĂ©ussir Ă faire fonctionner le navigateur, cela a nĂ©cessitĂ© un gros travail dâamĂ©lioration au niveau de la gestion de la mĂ©moire, une partie du systĂšme qui est fortement mise Ă contribution par ce navigateur. On en reparle plus loin dans la dĂ©pĂȘche.
Le navigateur est encore considĂ©rĂ© comme expĂ©rimental: plusieurs fonctions sont manquantes et il peut y avoir des plantages. WebPositive (le navigateur natif basĂ© sur WebKit) reste donc le navigateur installĂ© par dĂ©faut avec Haiku, mais les deux sont complĂ©mentaires. Par exemple, Iceweasel permet dâafficher les vidĂ©os Youtube avec des performances acceptables.
Tracker
Tracker est le gestionnaire de fichiers de Haiku. Il implĂ©mente une interface «âŻspatialeâŻÂ», câest-Ă -dire que chaque dossier sâouvre dans une fenĂȘtre sĂ©parĂ©e et enregistre sa position Ă lâĂ©cran.
Le code du Tracker fait partie des composants qui ont pu ĂȘtre rĂ©cupĂ©rĂ©s de BeOS. Cela signifie que certaines parties du code ont Ă©tĂ© dĂ©veloppĂ©es il y a prĂšs de 30 ans, dans un contexte oĂč lâĂ©lĂ©gance du code nâĂ©tait pas la prioritĂ© (il fallait pour les dĂ©veloppeurs de BeOS, dâune part livrer un systĂšme fonctionnel dans un temps raisonable, et dâautre part, fonctionner sur les machines relativement peu performantes de lâĂ©poque).
Les Ă©volutions sur le Tracker nĂ©cessitent donc souvent du nettoyage dans de nombreuses parties du code, et provoquent souvent des rĂ©gressions sur dâautres fonctionnalitĂ©s. Toutefois, les choses sâamĂ©liorent petit Ă petit.
Ce trimestre, on a vu par exemple arriver la correction dâun problĂšme avec lâutilisation de la touche «âŻechapâŻÂ». Cette touche peut servir Ă plusieurs choses:
- Fermer une fenĂȘtre de chargement ou dâenregistrement de fichier,
- Annuler le renommage dâun fichier,
- Annuler une recherche rapide «âŻtype aheadâŻÂ» qui consiste Ă taper quelques lettres et voir immĂ©diatement la liste de fichiers du dossier courant se rĂ©duire Ă ceux qui contiennent cette chaĂźne de caractĂšres.
Ces diffĂ©rentes utilisations peuvent entrer en conflit. Plus prĂ©cisĂ©ment, lorsquâon utilise le filtrage «âŻtype aheadâŻÂ», puis quâon change dâavis et quâon appuie sur la touche «âŻechapâŻÂ», il ne faut pas que cela ferme la fenĂȘtre en mĂȘme temps.
Un autre changement concerne plutĂŽt la validation des donnĂ©es: Tracker interdit lâinsertion de caractĂšres de contrĂŽle ASCII dans le nom de fichiers. Ce nâest pas strictement interdit (ni par Haiku, ni par ses systĂšmes de fichiers, ni par POSIX) en dehors de deux caractĂšres spĂ©ciaux: le '/' et le 0 qui termine une chaĂźne de caractĂšres. Mais, câest trĂšs probablement une mauvaise idĂ©e dâavoir un retour Ă la ligne ou un autre caractĂšre de contrĂŽle enregistrĂ© dans un nom de fichier. Le Tracker interdit donc dĂ©sormais de le faire et si vous ĂȘtes vraiment rĂ©solu Ă y parvenir, il faudra passer par le terminal.
Enfin, une nouvelle fonctionnalitĂ© dans le Tracker est la mise Ă jour en temps rĂ©el des menus pop-up. Cela peut se produire pour plusieurs raisons, par exemple, lâappui sur la touche «âŻcommandâŻÂ» modifie le comportement de certains menus. Avant ce changement, il fallait rĂ©-ouvrir le menu (command + clic droit) pour voir ces options modifiĂ©es. Maintenant, on peut dâabord ouvrir le menu, puis maintenir la touche command enfoncĂ©e pour voir les options modifiĂ©es.
Cela a nĂ©cessitĂ© une refonte complĂšte de la gestion de ces menus (qui proposent de nombreuses autres choses comme la navigation «âŻrayons XâŻÂ»). Au passage, certaines options qui Ă©taient uniquement disponibles au travers de raccourcis claviers ou de la barre de menu des fenĂȘtres du Tracker sont maintenant aussi affichĂ©es dans le menu pop-up.
TeamMonitor
TeamMonitor est le gestionnaire dâapplications affichĂ© quand on utilise la combinaison de touches Ctrl+Alt+Suppr. Il permet de stopper des programmes, de redĂ©marrer la machine, et autres manipulations dâurgence si le systĂšme ne fonctionne pas comme il faut.
Les processus lancĂ©s par une mĂȘme application sont maintenant regroupĂ©s et peuvent ĂȘtre tous arrĂȘtĂ©s dâun seul coup. Ce changement est nĂ©cessaire suite Ă lâapparition de IceWeasel, qui crĂ©e beaucoup de processus en tĂąche de fond pour une seule instance du navigateur web.
HaikuDepot
HaikuDepot est lâinterface graphique pour le systĂšme de paquets de Haiku. Il se prĂ©sente comme un magasin dâapplications, permettant non seulement dâinstaller et de dĂ©sinstaller des logiciels, mais aussi de les Ă©valuer avec une note et un commentaire.
- Ajout dâun marqueur sur les icĂŽnes des paquets qui sont dĂ©jĂ installĂ©s, et remplacement du marqueur utilisĂ© pour indiquer les applications «âŻnativesâŻÂ» (utilisant le toolkit graphique de Haiku, par opposition Ă Qt et GTK par exemple).
- Affichage plus rapide de lâĂ©tat «âŻen attente dâinstallationâŻÂ» lorsquâon demande lâinstallation dâun paquet.
- Lâinterface pour noter un paquet est masquĂ©e si lâattribution de notes nâest pas possible.
Préférences
Diverses amĂ©liorations dans les fenĂȘtres de prĂ©fĂ©rences:
- Correction dâun crash dans les prĂ©fĂ©rences dâaffichage (korli).
- Les prĂ©fĂ©rences de fond dâĂ©cran nâacceptent plus le glisser-dĂ©poser dâune couleur sur un contrĂŽle de choix de couleur dĂ©sactivĂ©. La modification de la position X et Y de lâimage de fond se met Ă jour en temps rĂ©el quand on Ă©dite la valeur des contrĂŽles correspondants.
- Ajout de rĂ©glages supplĂ©mentaires (vitesse, accĂ©lĂ©ration, dĂ©filement) dans les prĂ©fĂ©rences des pavĂ©s tactiles. Ces options Ă©taient dĂ©jĂ implĂ©mentĂ©es dans lâinput_server, mais configurable uniquement pour les souris.
- Suppression de code mort et amĂ©lioration de la gestion des polices de caractĂšres dans les prĂ©fĂ©rences dâapparence.
Plusieurs améliorations sur les préférences de sons de notifications:
- La fenĂȘtre de sĂ©lection de fichiers retient le dernier dossier utilisĂ©,
- Elle permet Ă©galement dâĂ©couter un son avant de le sĂ©lectionner,
- Les menus de sélection rapide de sons affichent uniquement les fichiers et pas les dossiers,
- Certains sons ont été renommés.
La plupart des sons ne sont cependant toujours pas utilisés par le systÚme.
Expander
Expander est un outil permettant dâextraire plusieurs types de fichiers archivĂ©s.
Peu de changement sur cet outil qui est assez simple et fonctionnel. La seule amĂ©lioration ce mois-ci concerne un changement des proportions de la fenĂȘtre pour Ă©viter un espace vide disgracieux.
Cortex
Cortex est une application permettant de visualiser et de manipuler les nĆuds de traitement de donnĂ©es du Media Kit.
Le composant «âŻlogging consumerâŻÂ» qui reçoit des donnĂ©es dâun autre noeud et les enregistre dans un fichier de log pour analyse a Ă©tĂ© amĂ©liorĂ© pour enregistrer un peu plus dâinformations.
Icon-O-Matic
LâĂ©diteur dâicĂŽnes vectoriels Icon-O-Matic Ă©volue peu, aprĂšs un projet Google Summer of Code qui a ajoutĂ© la plupart des fonctionnalitĂ©s manquantes. Ce trimestre, un seul changement: lâajout dâune entrĂ©e menu pour supprimer un «âŻtransformeurâŻÂ».
PowerStatus
Lâapplication PowerStatus affiche lâĂ©tat de la batterie. Cela peut se prĂ©senter comme une icĂŽne dans la barre des tĂąches. LâicĂŽne est de taille rĂ©duite, et les diffĂ©rents Ă©tats nâĂ©taient pas forcĂ©ment bien visibles. Ce problĂšme a Ă©tĂ© corrigĂ© avec des nouveaux marqueurs pour lâĂ©tat de la batterie (en charge ou inactive).
StyledEdit
StyledEdit est un Ă©diteur de texte simple, permettant tout de mĂȘme de formater le texte (un peu comme WordPad pour Windows).
Lâapplication reçoit une nouvelle option pour Ă©crire du texte barrĂ©. Le code nĂ©cessaire a Ă©galement Ă©tĂ© ajoutĂ© dans app_server, puisque cette possibilitĂ© Ă©tait prĂ©vue, mais non implĂ©mentĂ©e.
WebPositive
Le navigateur WebPositive reçoit peu dâĂ©volutions en ce moment, en dehors de la maintenance du moteur WebKit. On peut tout de mĂȘme mentionner lâajout dâun menu contextuel sur les marque-pages, permettant de les renommer et de les supprimer. Ce dĂ©veloppement est issu dâun vieux patch rĂ©alisĂ© par un candidat au Google Summer of Code, qui ne fonctionnait pas et nâavait jamais Ă©tĂ© finalisĂ©.
Mode sombre et configuration des couleurs
Depuis la version Beta 5, Haiku dispose dâun nouveau systĂšme de configuration des couleurs, permettant dâobtenir facilement un affichage en «âŻmode sombreâŻÂ». Cependant, cet affichage est loin dâĂȘtre parfait, et de petits ajustements sont Ă faire petit Ă petit dans toutes les applications qui nâavaient pas Ă©tĂ© pensĂ©es pour cela. En particulier, le changement de couleurs se fait en direct lorsquâon change les rĂ©glages. On trouve ces trois derniers mois des changements dans DeskBar, Tracker, HaikuDepot, lâhorloge, ainsi que la classe BTextView.
Outils en ligne de commande
pkgman
peut rechercher les paquets installĂ©s et qui nâont aucun autre paquet dĂ©pendant dâeux. Cela permet de trouver des paquets inutiles qui peuvent ĂȘtre dĂ©sinstallĂ©s (il manque encore la possibilitĂ© de marquer un paquet comme Ă©tant «âŻinstallĂ© manuellementâŻÂ» avant de pouvoir automatiser le nettoyage).
La commande route
accepte la syntaxe utilisĂ©e par openvpn pour la configuration dâune route par dĂ©faut, ce qui facilite lâutilisation de VPN avec Haiku.
Correction dâun problĂšme dans le compilateur de ressources: la commande rc -d
ne savait pas décompiler la structure app_version
des applications Haiku, uniquement le format plus ancien utilisé par BeOS.
La commande screenmode
permet maintenant de récupérer la valeur actuelle du réglage du rétro-éclairage (en plus de permettre de changer cette valeur).
Kits
La bibliothĂšque de fonctions de Haiku est dĂ©coupĂ©e en «âŻkitsâŻÂ» qui regroupent un ensemble de classes et de fonctionnalitĂ©s liĂ©es.
Application kit
LâApplication Kit permet, comme son nom lâindique, de lancer des applications. Il offre Ă©galement toutes les fonctionnalitĂ©s de boucles dâĂ©vĂšnements, et dâenvoi de messages entre applications et entre composants dâune application.
Correction dâun problĂšme de suppression dâun port
dans la classe BApplication.
Debug kit
Le Debug Kit fournit les services nĂ©cessaires au Debugger pour dĂ©bugger une application. Cela consiste dâune part en un accĂšs privilĂ©gie Ă lâespace mĂ©moire dâune application, et dâautre part en outils pour analyser les fichiers ELF des exĂ©cutables et bibliothĂšques.
Le Debug Kit reçoit ce trimestre plusieurs Ă©volutions et corrections permettant le dĂ©codage des stack traces dans les programmes compilĂ©s avec clang et lld. Par exemple, les fichiers ELF gĂ©nĂ©rĂ©s par ces outils sont dĂ©coupĂ©s en plusieurs segments, alors que ce nâest pas le cas pour gcc.
Device Kit
Le Device Kit regroupe tout ce qui concerne lâaccĂšs direct au matĂ©riel et aux entrĂ©es-sorties depuis lâespace utilisateur: ports sĂ©rie, accĂšs direct aux pĂ©riphĂ©riques USB, accĂšs aux joysticks et manettes de jeu.
Les ports sĂ©rie RS232 peuvent ĂȘtre configurĂ©s avec des valeurs en baud personnalisĂ©es (pour lâinstant uniquement pour les adaptateurs sĂ©rie USB).
Interface kit
LâInterface Kit regroupe tout ce qui concerne lâaffichage de fenĂȘtres et de vues Ă lâĂ©cran et les interactions avec ces fenĂȘtres.
- Ajout de constructeur «âŻmoveâŻÂ» et dâopĂ©rateur dâassignation pour
BRegion
etBShape
pour amĂ©liorer les performances en Ă©vitant les copie dâobjet immĂ©diatement suivies de suppression. - Ajout dâun constructeur pour
BRect
avec deux arguments (largeur et hauteur) pour les rectangles alignĂ©s en haut Ă gauche ou dont la position nâa pas dâimportance. - Remise en place dâun cas particulier dans
BBitmap::SetBits
pour la gestion du canal alpha afin dâavoir un comportement plus proche de celui de BeOS. - BColorControl rĂ©agit correctement et dĂ©clenche les Ă©vĂšnements nĂ©cessaires lorsquâon modifie sa couleur par glisser-dĂ©poser.
Media Kit
Correction dâune assertion vĂ©rifiant la mauvaise condition dans BTimeSource
.
RĂ©Ă©criture de la classe BTimedEventQueue
pour amĂ©liorer ses performances en Ă©vitant dâallouer de la mĂ©moire dynamique.
AmĂ©lioration de lâaffichage des «âŻmedia controlsâŻÂ» (sliders de contrĂŽle de volume par exemple) en mode sombre.
libshared
La «âŻlibsharedâŻÂ» contient plusieurs classes expĂ©rimentales, en cours de dĂ©veloppement, mais dĂ©jĂ utilisĂ©es par plusieurs applications. Il sâagit dâune bibliothĂšque statique, ce qui permet de changer facilement son contenu sans casser lâABI des applications existantes.
Ajout de la classe ColorPreview qui existait en plusieurs exemplaires dans le code de Haiku (prĂ©fĂ©rences dâapparence et Terminal). Cette classe permet dâafficher une couleur dans un petit rectangle. Elle est utilisĂ©e Ă plusieurs endroits dans des contrĂŽles de choix de couleur plus complexes, tels que des listes ou des menus.
Servers
Les servers sont des processus systÚmes implémentant différentes fonctionnalités de Haiku. Le concept est similaire à celui des daemons dans UNIX, ou des services dans Windows NT et systemd.
app_server
Lâapp_server sâoccupe de lâaffichage des applications Ă lâĂ©cran.
Suppression de code inutilisĂ© depuis longtemps permettant lâaccĂ©lĂ©ration matĂ©rielle dâopĂ©rations de dessin en 2D (blit, tracĂ© de lignes, remplissage de rectanglesâŠ).
Sur les cartes graphiques PCI, ces opĂ©rations Ă©taient souvent rĂ©alisĂ©es plus rapidement par le CPU qui tourne Ă une frĂ©quence bien plus rapide que la carte. Sur les cartes AGP, lâaccĂšs en lecture Ă la mĂ©moire vidĂ©o par le CPU est trĂšs lent, et il Ă©tait donc plus intĂ©ressant de faire ces opĂ©rations en RAM centrale avant dâenvoyer un buffer prĂȘt Ă afficher Ă la carte graphique. Enfin sur les cartes PCI express modernes, ces fonctions dâaccĂ©lĂ©ration ont disparu ou en tout cas nâont pas du tout une interface compatible avec les besoins de Haiku. Il est donc temps de jeter ce code.
Modification de la façon dont les applications rĂ©cupĂšrent la palette de couleurs en mode graphique 256 couleurs: elle utilise maintenant une mĂ©moire partagĂ©e, et il nâest plus nĂ©cessaire que chaque application demandent au serveur graphique dâen obtenir une copie.
input_server
Lâinput_server se charge des entrĂ©es souris et clavier. Cela comprend les mĂ©thodes dâentrĂ©e de texte (par exemple pour le Japonais) ainsi que des filtres permettant de manipuler et dâintercepter ces Ă©vĂšnements dâentrĂ©e avant leur distribution dans les applications.
AmĂ©liorations du filtre PadBlocker pour bloquer le touchpad quand le clavier est en cours dâutilisation sur les PC portables: gestion des rĂ©pĂ©titions de touches, blocage uniquement du touchpad et pas des autres pĂ©riphĂ©riques de pointage.
net_server
Le net_server se charge de la configuration des interfaces réseau.
ArrĂȘt du client dâautoconfiguration (DHCP par exemple) lors de la perte du lien sur un port Ethernet, pour ne pas essayer dâenvoyer des paquets alors que le cĂąble est dĂ©branchĂ©.
notification_server
notification_server se charge de lâaffichage de panneaux de notification pour divers Ă©vĂšnements tels que la connexion et dĂ©connexion dâinterfaces rĂ©seau, un niveau dangereusement bas de la batterie, la fin dâun tĂ©lĂ©chargementâŠ
La fenĂȘtre de notification a Ă©tĂ© retravaillĂ©e pour mieux sâadapter Ă la taille de police dâaffichage choisie par lâutilisateur.
mail_daemon
mail_daemon permet dâenvoyer et de recevoir des e-mails. Les messages sont stockĂ©s sous forme de fichiers avec des attributs Ă©tendus pour les mĂ©tadonnĂ©es (sujet, expĂ©diteurâŠ). Plusieurs applications clientes permettent de rĂ©diger ou de lire ces fichiers. Ainsi chaque application nâa pas besoin de rĂ©implĂ©menter les protocoles IMAP ou SMTP.
AmĂ©lioration de la fenĂȘtre de logs pour la compatibilitĂ© avec le mode sombre.
runtime_loader
Le runtime_loader est lâoutil qui permet de dĂ©marrer un exĂ©cutable. Il se charge de trouver toutes les bibliothĂšques partagĂ©es nĂ©cessaires et de les placer dans la mĂ©moire.
Ajout du flag PF_EXECUTE qui rend exĂ©cutable uniquement les sections ELF qui le nĂ©cessitent (auparavant, toutes les sections qui nâĂ©taient pas accessibles en Ă©criture Ă©taient exĂ©cutables). Cela est utilisĂ© en particulier par clang, qui sĂ©pare une zone en lecture seule (pour les constantes) et une autre en lecture et exĂ©cution (pour le code). Avec gcc, les deux sont habituellement regroupĂ©es dans la mĂȘme section.
Drivers
Périphériques de stockage
Correction de bugs dans la couche SCSI (utilisĂ©e Ă©galement pour dâautres pĂ©riphĂ©riques de stockage qui encapsulent des commandes SCSI). Des drapeaux dâĂ©tat nâĂ©taient pas remis Ă 0 au bon moment, ce qui causait des kernel panic avec le message «âŻno such range!âŻÂ».
Cela a Ă©tĂ© lâoccasion de faire du mĂ©nage : suppression de champs inutilisĂ©s dans des structures de donnĂ©es, et suppression du module dâallocation mĂ©moire locked_pool
qui nâĂ©tait utilisĂ© que par la pile SCSI. Ă la place, utilisation des fonctions dâallocation mĂ©moire standard du noyau, qui sont amplement suffisantes pour rĂ©pondre aux besoins de ce module (waddlesplash).
Cartes son
Correction dâerreurs dans le code de gestion mĂ©moire des pilotes es1370 et auvia. Ces drivers utilisaient deux copies dâun code dâallocation identique, mais avaient divergĂ© lâun de lâautre. Ils ont Ă©tĂ© rĂ©unifiĂ©s mais cela a provoquĂ© quelques rĂ©gressions, avec des difficultĂ©s pour trouver des machines permettant de tester chacune des cartes son concernĂ©es. Haiku peut heureusement compter sur des utilisateurs «âŻavancĂ©sâŻÂ» qui testent rĂ©guliĂšrement les nightly builds pour dĂ©tecter ce type de rĂ©gression (korli).
RĂ©seau
Correction dâune fuite mĂ©moire lors de lâutilisation de sockets «âŻrawâŻÂ» permettant dâenvoyer et de recevoir directement des paquets ethernet (en contournant la couche IP).
Pilotes FreeBSD
Une grande partie des pilotes de carte rĂ©seau de Haiku sont en fait ceux de FreeBSD ou dâOpenBSD. Une couche de compatibilitĂ© permet de rĂ©utiliser ces pilotes avec trĂšs peu de changement dans leur code source. Ainsi, les Ă©volutions et corrections peuvent ĂȘtre partagĂ©es avec lâun ou lâautre de ces systĂšmes. La collaboration avec les *BSD pour les pilotes rĂ©seau se passe de mieux en mieux : suite au dĂ©veloppement dâune couche de compatibilitĂ© permettant dâutiliser les pilotes OpenBSD dans Haiku, les dĂ©veloppeurs de FreeBSD Ă©tudient la possibilitĂ© de rĂ©utiliser Ă©galement ces pilotes. De plus, les dĂ©veloppeurs de Haiku et dâOpenBSD sont en contact pour coordonner les mises Ă jour et les tests.
Génération de statistiques plus fiables sur les paquets réseaux dans la couche de compatibilité FreeBSD et remontée des statistiques générées par les pilotes associés.
Synchronisation du pilote realtekwifi avec la version de FreeBSD et reconnaissance dâun identifiant de pĂ©riphĂ©rique USB supplĂ©mentaire dans ce pilote.
Amélioration de la couche de compatibilité pour se comporter plus précisément comme FreeBSD, et suppression de patchs correspondants dans les pilotes qui sont devenus superflus.
AmĂ©lioration des performances de la couche de compatibilitĂ©: retrait de comparaisons de chaĂźnes de caractĂšres et dâallocations inutiles.
Pilotes spécifiques à Haiku
AmĂ©lioration du comportement du pilote USB RNDIS (partage de connexion sur USB de certains tĂ©lĂ©phones Android) lorsque le cĂąble USB est dĂ©connectĂ©. Le pilote incluait du code pour tenter de restaurer la connexion existante si le mĂȘme appareil est reconnectĂ©, mais les pĂ©riphĂ©riques RNDIS utilisent des adresses MAC alĂ©atoires qui changent Ă chaque connexion, donc cela ne pouvait pas fonctionner. De plus, certains transferts USB nâĂ©taient pas correctement annulĂ©s pour laisser la pile USB dans un Ă©tat propre aprĂšs la dĂ©connexion du pĂ©riphĂ©rique.
USB
Ajout dâune annulation de transferts de donnĂ©es en attente dans le pilote pour les pĂ©riphĂ©riques de stockage USB, ce qui corrige un kernel panic lors de lâutilisation de lecteurs de disquettes USB. ArrĂȘt immĂ©diat des opĂ©rations (au lieu de rĂ©-essayer pendant quelques secondes) si le pĂ©riphĂ©rique indique «âŻno media presentâŻÂ» (CD ou disquette Ă©jectĂ©e de son lecteur par exemple).
Ajout dâune vĂ©rification de pointeur NULL et de libĂ©ration de mĂ©moire manquantes dans la pile USB, ce qui corrige des fuites de mĂ©moires (qui Ă©taient lĂ depuis longtemps) et une assertion qui se dĂ©clenchait (introduite plus rĂ©cemment).
Le pilote de webcam UVC est mis Ă jour pour utiliser des constantes (identifiants de types de descripteursâŠ) partagĂ©es avec le reste du systĂšme au lieu de toutes les redĂ©finir une deuxiĂšme fois. Lâaffichage des descripteurs dans listusb est Ă©galement complĂ©tĂ© pour dĂ©coder toutes les informations disponibles. Le pilote nâest toujours pas complĂštement fonctionnel: lâĂ©tablissement des transferts au niveau USB fonctionne, mais pour lâinstant le pilote ne parvient pas Ă dĂ©coder les donnĂ©es vidĂ©o reçues correctement.
Le pilote HID sait reconnaĂźtre les «âŻfeature reportsâŻÂ», qui permettent de configurer un pĂ©riphĂ©rique. Par exemple, cela peut permettre de configurer un touchpad en mode multi-point (dans lequel le systĂšme doit effectuer lui-mĂȘme le suivi de chaque doigt sur la surface tactile pour convertir cela en mouvements de pointeur de souris) ou en mode Ă©mulation de souris (oĂč on ne peut utiliser quâun doigt Ă la fois, mais avec un pilote beaucoup plus simple).
Le pilote pour les tablettes Wacom reconnaĂźt la tablette CTH-470.
PS/2
Les ports PS/2 ont disparu de la plupart des machines ces derniĂšres annĂ©es, mais le protocole reste utilisĂ© pour le clavier des ordinateurs portables, ainsi que pour certains touchpads. Malheureusement, le protocole est seulement Ă©mulĂ© au niveau de lâ«âŻembedded controllerâŻÂ» (le microprocesseur qui se charge de lâinterfaçage de divers composants annexes). Le rĂ©sultat est que lâimplĂ©mentation du protocole et des registres dâinterface peut sâĂ©loigner considĂ©rablement des documents officiels.
AmĂ©lioration de la dĂ©tection des contrĂŽleurs PS/2 supportant le protocole «âŻactive multiplexingâŻÂ» permettant de connecter Ă la fois une souris et un touchpad. La procĂ©dure de dĂ©tection officielle peut gĂ©nĂ©rer des faux positifs: certains contrĂŽleurs rĂ©pondent bien Ă cette commande, mais nâimplĂ©mentent en fait pas du tout le protocole. Cela provoquait un long dĂ©lai au dĂ©marrage alors que le pilote tente dâĂ©numĂ©rer des pĂ©riphĂ©riques de pointage qui nâexistent pas. Une vĂ©rification supplĂ©mentaire aprĂšs lâactivation du mode multiplexĂ© permet de dĂ©tecter ce cas.
virtio_pci
virtio est un standard matĂ©riel pour les machines virtuelles. PlutĂŽt que dâĂ©muler un vrai matĂ©riel (carte rĂ©seau, carte graphiqueâŠ), une machine virtuelle peut Ă©muler un matĂ©riel qui nâa jamais Ă©tĂ© fabriquĂ©, mais dont la programmation est beaucoup plus simple. Cela permet Ă©galement des opĂ©rations inimaginables sur du matĂ©riel rĂ©el, comme la possibilitĂ© de changer la taille de la RAM en cours dâexĂ©cution pour mieux partager la mĂ©moire de lâhĂŽte entre diffĂ©rentes machines virtuelles.
Le pilote virtio_pci est Ă la racine du systĂšme virtio. Il dĂ©tecte la «âŻcarte PCIâŻÂ» virtio et implĂ©mente les primitives de base dâenvoi et de rĂ©ception de messages entre lâhĂŽte et la machine virtualisĂ©e (du cĂŽtĂ© virtualisĂ©, pour le cĂŽtĂ© hĂŽte, câest le virtualisateur, par exemple QEMU, qui sâen charge).
Correction de plusieurs problÚmes avec les numéros de files virtio qui rendaient les pilotes instables.
ACPI
ACPI est un cadriciel pour la gestion de lâĂ©nergie et lâaccĂšs au matĂ©riel. Le fabricant du matĂ©riel fournit (dans la ROM du BIOS) un ensemble de «âŻtablesâŻÂ» contenant une description du matĂ©riel disponible, ainsi que des mĂ©thodes compilĂ©es en bytecode pour piloter ce matĂ©riel. Le systĂšme dâexploitation doit fournir un interprĂ©teur pour ce bytecode, puis rĂ©aliser les entrĂ©es-sorties vers le matĂ©riel demandĂ© lors de lâexĂ©cution.
Haiku utilise actuellement ACPICA, une bibliothÚque ACPI développée principalement par Intel.
Correction dâun problĂšme dâaccĂšs Ă de la mĂ©moire non cachĂ©e. Une modification faite pour les machines ARM a dĂ©clenchĂ© un problĂšme sur les machines x86.
Sondes de température
Ajout dâun nouveau pilote amd_thermal, ajout de ce dernier ainsi que des pilotes pch_thermal et acpi_thermal dans lâimage disque par dĂ©faut. Ces pilotes devraient permettre de rĂ©cupĂ©rer la tempĂ©rature du processeur sur la plupart des machines. Il reste maintenant Ă intĂ©grer cela dans les outils en espace utilisateur pour faire un bon usage de ces informations.
Pilotes graphiques
Ajout de deux nouvelles générations de cartes graphiques dans le pilote intel_extreme.
Le pilote VESA est capable de patcher le BIOS de certaines cartes graphiques Ă la volĂ©e pour y injecter des modes graphiques supplĂ©mentaires (la spĂ©cification VESA permettant Ă lâOS uniquement de choisir un mode parmi une liste fournie par la carte graphique, liste souvent assez peu fournie). Ce mode est dĂ©sormais activĂ© par dĂ©faut sur les cartes graphiques oĂč il a pu ĂȘtre testĂ© avec succĂšs.
SystĂšmes de fichiers
FAT
FAT est un systÚme de fichier développé par Microsoft et qui remonte aux premiers jours de MS-DOS. Il est encore utilisé sur certaines clés USB et cartes SD, bien que exFAT tend à le remplacer petit à petit. Il est également utilisé pour les partitions systÚmes EFI.
Le pilote de Haiku a Ă©tĂ© rĂ©cemment rĂ©Ă©crit Ă partir de celui de FreeBSD. LâamĂ©lioration de ce nouveau pilote se poursuit, avec ce mois-ci :
- Les noms de volumes FAT sont convertis en minuscules comme le faisait lâancien pilote FAT,
- Le cache de blocs implĂ©mente maintenant un mĂ©canisme de prefetch pour rĂ©cupĂ©rer plusieurs blocs disque dâun coup, et le pilote FAT utilise cette nouvelle possibilitĂ© pour amĂ©liorer en particulier le temps de montage,
- Correction de problĂšmes dans le cache de fichiers si deux applications accĂšdent au mĂȘme fichier mais avec des noms diffĂ©rents par la casse (le systĂšme de fichier ignorant ces diffĂ©rences).
BFS
BFS est le systĂšme de fichier principal de BeOS et de Haiku. Il se distingue des autres systĂšmes de fichiers par une gestion poussĂ©e des attributs Ă©tendus, avec en particulier la possibilitĂ© de les indexer et dâeffectuer des requĂȘtes pour trouver les fichiers correspondants Ă certains critĂšres.
Clarification de la description des options disponibles lors de lâinitialisation dâun volume BFS.
Correction des fonctions dâentrĂ©es/sorties asynchrones pour rĂ©fĂ©rencer correctement les inodes, ce qui corrige un trĂšs ancien rapport de bug. Des corrections similaires ont Ă©tĂ© faites Ă©galement dans les pilotes FAT et EXFAT.
Correction des requĂȘtes sur lâattribut «âŻderniĂšre modificationâŻÂ», et amĂ©lioration de la gestion du type «âŻtimeâŻÂ» pour Ă©viter les conversions inutiles (ce type dâattribut est historiquement stockĂ© en 32 bits mais migrĂ© en 64 bits lorsque câest possible pour Ă©viter le bug de lâan 2038, aussi le code doit ĂȘtre capable de traiter ces 2 formats de stockage).
packagefs
Le systĂšme de fichier packagefs est au centre de la gestion des paquets logiciels dans Haiku. Les paquets ne sont pas extraits sur le disque, mais montĂ©s dans un systĂšme de fichier spĂ©cifique (qui implĂ©mente une version tout-en-un de ce qui pourrait ĂȘtre rĂ©alisĂ© sous Linux avec squashfs et overlayfs).
Ce systĂšme de fichier se trouve donc sur le chemin critique en termes de performances, ce qui fait que mĂȘme de petites optimisations peuvent dĂ©boucher sur de gros gains de performance.
Optimisation de la gestion de la mĂ©moire: utilisation dâun allocateur dĂ©diĂ© pour allouer et dĂ©sallouer trĂšs rapidement de la mĂ©moire de travail avec une durĂ©e de vie courte.
Ajout dâune vĂ©rification manquante sur la prĂ©sence du dossier parent, qui pouvait dĂ©clencher un kernel panic.
NFS4
Le pilote NFS4 permet de monter des partages réseau NFS. Cependant, le pilote ne fonctionne pas toujours, et certains utilisateurs doivent se rabattre sur le pilote NFS v2 (ancienne version du protocole de moins en moins utilisée), ou encore sur des systÚmes de fichiers FUSE comme SMB ou sshfs.
Le pilote NFS4 peut maintenant ĂȘtre compilĂ© avec userlandfs (Ă©quivalent de FUSE pour Haiku) pour sâexĂ©cuter en espace utilisateur. Cela facilitera le dĂ©boguage.
ramfs et ram_disk
ram_disk est un pĂ©riphĂ©rique de stockage qui stocke les donnĂ©es en RAM, il a une taille fixe et doit ĂȘtre formatĂ© avec un systĂšme de fichiers avant de pouvoir ĂȘtre utilisĂ©.
ramfs est un systÚme de fichier stockant les données directement en RAM sans passer par un périphérique de stockage de type bloc. Sa taille est dynamique en fonction des fichiers qui sont stockés dedans.
Ces deux pilotes ont reçu divers nettoyages et corrections, suite à des problÚmes mis en évidence par des assertions ajoutées précédemment dans le code.
Dans le ramfs, nettoyage de code dupliquĂ©, rĂ©duction de la contention sur les verrous, amĂ©lioration de la fonction readdir pour retourner plusieurs entrĂ©es dâun coup au lieu de les Ă©grĂ©ner une par une.
Ajout de la gestion des fichiers «âŻspĂ©ciauxâŻÂ» (FIFOs nommĂ©s, sockets UNIX) dans ramfs.
Autres
Refonte de lâalgorithme de «âŻscoringâŻÂ» des requĂȘtes sur les systĂšmes de fichiers. Cet algorithme permet dâestimer quels sont les termes de la requĂȘte les moins coĂ»teux Ă Ă©valuer, afin de rĂ©duire rapidement le nombre de fichiers rĂ©pondant aux critĂšres, et dâeffectuer les opĂ©rations complexes seulement sur un petit nombre de fichiers restants. Les requĂȘtes sâexĂ©cutent ainsi encore plus rapidement (waddlesplash).
RĂ©Ă©criture du code pour identifier les partitions dans mount_server
. Ce code permet de re-monter les mĂȘmes partitions aprĂšs un redĂ©marrage de la machine, mais lâancien algorithme pouvait trouver de faux positifs et monter des partitions supplĂ©mentaires (OscarL et waddlesplash).
Correction dâune option de debug pour intercepter les accĂšs aux adresses non initialisĂ©es (0xcccccccc) ou dĂ©jĂ libĂ©rĂ©es (0xdeadbeef). Cela permet de dĂ©tecter certains accĂšs Ă des pointeurs invalides. Cette option ne fonctionnait correctement que sur les systĂšmes 32 bit, maintenant, lâadresse correspondante pour les machines 64 bit est Ă©galement protĂ©gĂ©e.
libroot
La libroot est la librairie C de base de Haiku. Elle regroupe les fonctions parfois implĂ©mentĂ©es dans les libc, libm, libpthread, librt et libdl pour dâautres systĂšmes. Haiku choisit une approche tout-en-un, car il est excessivement rare quâune application nâait pas besoin de toutes ces bibliothĂšques.
Du fait de la grande diversité des services rendus par cette bibliothÚque, il est difficile de présenter les changements de façon cohérente et organisée.
Correction de quelques cas particuliers dans le traitement des tableaux de descripteurs de fichiers pour select()
et dĂ©placement dâune partie des dĂ©finitions de sys/select.h
vers des en-tĂȘtes privĂ©s non exposĂ©s aux applications (waddlesplash).
Ajout dâune fonction manquante dans les «âŻstubsâŻÂ» de la libroot, qui sont utilisĂ©s lors de la compilation de Haiku en mode «âŻbootstrapâŻÂ» (sans aucune dĂ©pendance prĂ©compilĂ©e externe). Les stubs sont normalement gĂ©nĂ©rĂ©s Ă lâaide dâun script, mais celui-ci nâavait pas pris en compte une fonction nĂ©cessaire seulement sur les architectures x86.
Poursuite du travail dâunification des fonctions de manipulation des temps dâattentes pour toutes les fonctions de la libroot qui peuvent dĂ©clencher un timeout. Correction dâun cas oĂč la fonction pthread_testcancel
retournait NULL
au lieu de la valeur attendue PTHREAD_CANCELED
.
Optimisation de la fonction strcmp, remplacement dâautres fonctions avec de meilleures implĂ©mentations provenant de la bibliothĂšque C musl.
Compatibilité POSIX-2024
La spĂ©cification POSIX Issue 8 a Ă©tĂ© publiĂ©e et comporte de nombreux changements. AprĂšs la version 7, la façon de travailler est devenue plus ouverte, avec un outil de suivi de bugs permettant de proposer des amĂ©liorations. Cela conduit Ă la standardisation de nombreuses extensions qui sont communes entre les systĂšmes GNU et BSD, rendant plus facile dâĂ©crire du code portable entre tous les systĂšmes compatibles POSIX.
- Ajout de fonctions qui ouvrent des descripteurs de fichiers avec le drapeau O_CLOEXEC activé par défaut (
dup2
,pipe3
) - Ajout de
reallocarray
(un mélange decalloc
etrealloc
) - Ajout de
memmem
(recherche dâune suite dâoctets dans une zone de mĂ©moire) - Ajout de
mkostemp
- Ajout de
posix_devctl
et modifications de lâimplĂ©mentation deioctl
- Ajout de
pthread_getcpuclockid
pour mesurer le temps CPU consommĂ© par un thread - Ajout de la constante dâerreur
ESOCKTNOSUPPORT
bien quâelle ne soit jamais utilisĂ©e (cela facilite le portage dâapplications qui attendent lâexistence de ce code dâerreur) - Correction dâune boucle infinie dans
pipe2
- Suppression des fonctions
*randr48_r
des en-tĂȘtes publics. Il sâagit dâune extension disponible uniquement dans la glibc, et qui ne devrait donc pas ĂȘtre disponible dans la libroot. Cependant, lâimplĂ©mentation est conservĂ©e pour assurer la compatibilitĂ© dâABI avec les applications existantes.
ioctl et posix_devctl
La fonction ioctl existe depuis le dĂ©but de UNIX et permet de rĂ©aliser des opĂ©rations spĂ©ciales sur les descripteurs de fichiers (tout ce qui nâest pas une simple lecture ou Ă©criture). En particulier, elle est beaucoup utilisĂ©e pour les pilotes de pĂ©riphĂ©riques qui exposent une interface sous forme de fichiers dans /dev
.
Lâexistence de cette fonction Ă©tait demandĂ©e dans la spĂ©cification POSIX, mais son fonctionnement nâĂ©tait pas documentĂ© Ă lâexception de quelques cas particuliers. La documentation spĂ©cifie une fonction avec un nombre dâarguments variable : un numĂ©ro de descripteur de fichier, un identifiant de lâopĂ©ration Ă effectuer, puis des paramĂštres qui dĂ©pendent de lâopĂ©ration. On trouve des opĂ©rations avec aucun, un, ou deux paramĂštres.
Dans UNIX et la plupart de ses dĂ©rivĂ©s, la liste des opĂ©rations possibles est dĂ©finie Ă lâavance, et le format des numĂ©ros identifiants permet de dĂ©terminer de façon prĂ©dictible quel est le nombre de paramĂštres attendus. Ce nâest pas le cas dans Haiku : les pilotes de pĂ©riphĂ©riques ont le choix dâassigner nâimporte quelle valeur Ă nâimporte quelle opĂ©ration, et la mĂȘme valeur numĂ©rique peut donc avoir une signification diffĂ©rente selon le type de fichier.
LâopĂ©ration ioctl est donc en rĂ©alitĂ© implĂ©mentĂ©e avec toujours 4 arguments pour Haiku : en plus des deux dĂ©jĂ mentionnĂ©s, il faut ajouter un pointeur vers une zone de mĂ©moire, et un entier indiquant la taille de cette zone. Des acrobaties Ă base de macros permettent de remplir ces deux paramĂštres avec des valeurs par dĂ©faut lorsquâils ne sont pas nĂ©cessaires (au moins pour les programmes Ă©crits en C ; en C++, ces deux paramĂštres sont simplement dĂ©clarĂ©s avec une valeur par dĂ©faut).
Heureusement, ces problĂšmes avec ioctl vont ĂȘtre rĂ©solus, puisque POSIX a introduit une nouvelle fonction en remplacement : posix_devctl. Celle-ci fonctionne comme lâimplĂ©mentation de ioctl dans Haiku, mais les arguments doivent toujours ĂȘtre spĂ©cifiĂ©s explicitement. Cela va donc permettre de disposer dâune interface rĂ©ellement portable pour ces opĂ©rations.
Kernel
Correction de la taille du tampon mémoire par défaut de la classe KPath qui permet au noyau de manipuler des chemins dans le systÚme de fichiers (waddlesplash).
VFS
Le VFS (virtual filesystem) est lâinterface entre les appels systĂšmes dâaccĂšs aux fichiers (open, read, writeâŠ) et les systĂšmes de fichiers proprement dit. En plus de ce travail dâinterfaçage (par exemple : convertir un chemin de fichier absolu en chemin relatif Ă un point de montage), cette couche regroupe un ensemble de fonctionnalitĂ©s qui nâont pas besoin dâĂȘtre rĂ©implĂ©mentĂ©es par chaque systĂšme de fichier: vĂ©rification des permissions, mĂ©moire cache pour limiter les accĂšs au disque.
Si les systĂšmes de fichiers identifient chaque objet par un inode (en gĂ©nĂ©ral liĂ© Ă la position de lâobjet sur le disque ou dans la partition de stockage), le VFS travaille lui avec des vnode qui existent uniquement en RAM et sont allouĂ©s dynamiquement pour les fichiers en cours dâutilisation.
Dâautre part, les systĂšmes de fichiers peuvent se reposer sur un cache de blocs. Ce dernier se trouve plutĂŽt Ă lâinterface entre un systĂšme de fichier et le support de stockage correspondant, puisquâil fonctionne au niveau des blocs de donnĂ©es stockĂ©es sur disque. Mais son intĂ©gration avec le VFS est nĂ©cessaire pour savoir quels sont les fichiers en cours dâutilisation et les opĂ©rations prĂ©visibles sur chacun (par exemple, il est utile de prĂ©-charger la suite dâun fichier lorsque un programme demande Ă en lire le dĂ©but, car il est probable que ces informations vont bientĂŽt ĂȘtre nĂ©cessaires).
Le VFS est donc un Ă©lĂ©ment central en particulier pour obtenir de bonnes performances sur les accĂšs aux fichiers, en minimisant les accĂšs aux vrais systĂšmes de fichiers qui doivent maintenir beaucoup dâinformations Ă jour sur les disques. Tout ce qui peut ĂȘtre traitĂ© en utilisant uniquement la RAM grĂące Ă la mise en cache est beaucoup plus rapide.
Investigation et amélioration des performances de la commande git status
qui prenait beaucoup plus de temps Ă sâexĂ©cuter que sur dâautres systĂšmes (waddlesplash):
- Meilleure gestion des vnodes inutilisĂ©s Ă lâaide dâune liste chaĂźnĂ©e 'inline' protĂ©gĂ©e par un spinlock, Ă la place dâun mutex peu performant dans ce code trĂšs frĂ©quemment appelĂ©.
- Modification de la structure
io_context
pour utiliser un verrou en lecture-Ă©criture (permettant plusieurs accĂšs concurrents en lecture, mais un seul en modification). - Ajout dâun chemin rapide dans le cas le plus simple de la recherche de vnode.
Avec ces changements, les performances sont améliorées au moins lorsque les données nécessaires sont déjà disponibles dans le cache disque.
Nettoyage et corrections dans les fonctions dâentrĂ©es-sorties vectorisĂ©es et asynchrones do_iterative_fd_io
et do_fd_io
utilisées par les systÚmes de fichiers: meilleure gestion des références et prise en compte de certains cas particuliers. Cela permet de simplifier un peu le code de pré-remplissage du cache de blocs (waddlesplash).
La prise en compte des drapeaux O_RDONLY|O_TRUNC
lors de lâouverture dâun fichier est maintenant faite directement dans le VFS, il nâest plus nĂ©cessaire de transmettre la requĂȘte au systĂšme de fichier. Cette combinaison de drapeaux est un comportement indĂ©fini dans POSIX, et supprime le contenu du fichier dans Linux. Dans Haiku, elle remonte une erreur.
Correction du comportement de lâouverture dâun symlink invalide (ne pointant pas sur un fichier) avec le flag O_CREAT
.
Le parser de requĂȘtes pouvait essayer de lire des donnĂ©es invalides (la taille de clĂ© dâun index inexistant) dans certains cas particuliers.
Nettoyage de logs dans tous les systĂšmes de fichiers qui affichaient un message lors de chaque tentative dâidentification. On avait donc un message de chaque systĂšme de fichier pour chaque partition. Maintenant, le cas le plus courant (le systĂšme de fichier ne reconnaĂźt pas du tout la partition) ne dĂ©clenche plus de logs.
Correction dâune erreur dans userlandfs sur la fonction file_cache_read pour les tentatives dâaccĂšs aprĂšs la fin dâun fichier (cas particulier nĂ©cessaire pour implĂ©menter correctement mmap).
Correction dâune mauvaise gestion du errno
dans le cache de blocs, qui pouvait aboutir Ă un kernel panic.
Diverses amĂ©liorations, nettoyages et corrections de fuites mĂ©moire: dans la gestion des fichiers montĂ©s comme image disques, dans les entrĂ©es-sorties asynchrones, dans lâenregistreur dâĂ©vĂšnements scheduling recorder.
Console et affichage
Unification du code dâaffichage du splash screen (par le bootloader) et des icĂŽnes de la sĂ©quence de dĂ©marrage (par le kernel) pour Ă©viter quâils prennent des dĂ©cisions diffĂ©rentes sur le positionnement (par exemple si lâun est compilĂ© pour afficher le logo de Haiku, et lâautre en version «âŻdĂ©griffĂ©eâŻÂ» sans ce logo qui est une marque dĂ©posĂ©e) (waddlesplash).
Initialisation de la console framebuffer beaucoup plus tĂŽt dans le dĂ©marrage du noyau, ce qui permet dâafficher un message Ă lâĂ©cran en cas de kernel panic y compris dans les premiĂšres Ă©tapes du dĂ©marrage (par exemple, lâinitialisation de la mĂ©moire virtuelle). Auparavant, ces informations Ă©taient disponibles uniquement dans le syslog (inaccessible si le systĂšme ne dĂ©marre pas) ou via un port sĂ©rie (en voie de disparition sur les machines modernes) (waddlesplash).
RĂ©seau
RemontĂ©e des donnĂ©es annexes (ancillary data) en une seule fois lorsque câest possible. Ces donnĂ©es sont utilisĂ©es en particulier dans les sockets de domaine AF_UNIX
pour permettre dâĂ©changer des descripteurs de fichiers entre processus. Ce regroupement de donnĂ©es nâest pas exigĂ© par la spĂ©cification POSIX, mais câest le comportement attendu par le code de communication interprocessus de Firefox et de Chromium (ils utilisent tous les deux le mĂȘme code) (waddlesplash).
Gestion de la mémoire
Comme indiquĂ© plus haut dans la dĂ©pĂȘche, lâapparition du navigateur Iceweasel a mis en Ă©vidence de nombreux problĂšmes autour de la gestion de la mĂ©moire. Cela a donc Ă©tĂ© lâobjet dâun gros travail de stabilisation et dâamĂ©lioration.
- Le cache dâobjets du noyau pouvait parfois ignorer le paramĂštre indiquant la rĂ©serve minimum dâobjets devant toujours ĂȘtre disponibles (waddlesplash)
- AmĂ©lioration de lâimplĂ©mentation de la famille de fonctions autour de
mprotect
, qui permettent une gestion fine et bas niveau de la mĂ©moire. En particulier, plusieurs problĂšmes se posaient lors de lâutilisation de ces fonctions lors dâun appel Ăfork
, les deux processus se retrouvant dans un Ă©tat incohĂ©rent, - Suppression de logs prĂ©sents dans les mĂ©thodes de dĂ©faut de page, qui sont peu appelĂ©es pour les applications classiques, mais exploitĂ©es volontairement par dâautres applications (machines virtuelles Java ou Javascript par exemple). Les logs Ă©taient donc superflus dans ce cas (waddlesplash),
- Optimisation de lâĂ©criture par lot de plusieurs pages de mĂ©moire vers le swap,
- Meilleure gestion des permissions dâaccĂšs page par page,
- Correction de plusieurs problĂšmes conduisant Ă un blocage ou fort ralentissement du systĂšme quand il nây a plus assez de mĂ©moire libre,
- AmĂ©lioration de la stratĂ©gie dâallocation de la table des descripteurs de fichiers,
- Regroupement de code dupliqué pour chaque plateforme qui était en fait générique.
Ce travail se poursuit avec un remplacement de lâallocateur mĂ©moire actuel, qui est basĂ© sur hoard2. Cette implĂ©mentation est assez ancienne et montre aujourdâhui ses limites. Des essais sont en cours avec lâimplĂ©mentation de malloc dâOpenBSD, ainsi quâavec mimalloc de Microsoft, pour dĂ©terminer lequel des deux sera utilisĂ©. Dâautres allocateurs ont Ă©tĂ© rejetĂ©s, car ils ne rĂ©pondent pas au besoin de Haiku, en particulier la possibilitĂ© de fonctionner efficacement sur un systĂšme 32 bits ou lâespace dâadressage est une ressource limitĂ©e.
Autres
SĂ©curisation des permissions sur les zones mĂ©moire partagĂ©es: une application ne peut pas ajouter des permissions en Ă©criture aux zones mĂ©moire dâune autre application. Une application qui nâest pas lancĂ©e par lâutilisateur root ne peut pas inspecter la mĂ©moire dâune application lancĂ©e par lâutilisateur root. Ajout toutefois de cas particuliers pour permettre au Debugger de faire son travail (il a besoin dâaccĂ©der Ă la mĂ©moire dâautres applications).
Ajout et amĂ©lioration de commandes dans le debugger noyau pour investiguer lâĂ©tat de lâordonnanceur dâentrĂ©es-sorties, qui se charge de programmer les accĂšs disque dans un ordre le plus efficace possible (waddlesplash).
La fonction vfork
nâappelle plus les fonctions pre-fork. Haiku nâimplĂ©mente pas complĂštement vfork
, mais peut se permettre des optimisations sur le travail quâun duo fork + exec classique demanderait normalement.
La configuration de la randomization de lâespace mĂ©moire (ASLR) est maintenant faite par la libroot et pas par le noyau. Ainsi une application peut utiliser une version diffĂ©rente de la libroot pour avoir une politique de randomization diffĂ©rente.
Optimisation de lâaccĂšs par un thread Ă sa propre structure Thread
Chargeur de démarrage
LâĂ©cran de dĂ©marrage sâaffiche correctement sur les systĂšmes EFI utilisant un mode Ă©cran avec une profondeur de couleur 16 bits (korli).
Affichage de la taille des partitions démarrables dans le menu de démarrage, pour faciliter leur identification (waddlesplash).
Activation des warnings du compilateur sur les chaĂźnes printf invalides.
Augmentation de la zone de mĂ©moire utilisĂ©e pour la dĂ©compression de lâarchive de dĂ©marrage lors du boot sur le rĂ©seau, lâarchive Ă©tait devenue trop grosse suite Ă lâajout de nouveaux pilotes.
Refactorisation du code de gestion de la mĂ©moire entre le bootloader et le runtime_loader, ajout de tests pour cette implĂ©mentation, et optimisation de lâutilisation mĂ©moire du bootloader.
Amélioration du comportement si le device tree définit un port série sans spécifier de baudrate: le bootloader suppose que le baudrate est déjà configuré, et utilise le port sans essayer de le réinitialiser.
Outils de compilation
La compilation de Haiku est un processus relativement complexe: il faut utiliser deux compilateurs pour Haiku lui-mĂȘme (un gcc rĂ©cent plus une version plus ancienne pour assurer la compatibilitĂ© avec BeOS) ainsi que un compilateur pour le systĂȘme hĂŽte de la compilation (qui peut ĂȘtre Linux, BSD, Mac OS ou Windows) pour gĂ©nĂ©rer des outils nĂ©cessaires Ă la compilation elle-mĂȘme. Lâoutil retenu est Jam, une alternative Ă Make avec une meilleure gestion des rĂšgles gĂ©nĂ©riques rĂ©utilisables.
- Ajout de vĂ©rification pour Ă©viter dâavoir un build partiellement configurĂ©, avec des
ConfigVars
dĂ©finies mais vides. - Retrait dâun warning incorrect dans lâoutil de build
jam
si on spĂ©cifie Ă la fois un profil et une cible de compilation sur la ligne de commande. - Reconnaissance des processeurs hĂŽtes ARM et RISC-V pour la compilation croisĂ©e, correction dâautres problĂšmes avec les architectures non-x86.
- Ajout de dépendances manquantes dans les rÚgles de compilation de packagefs.
- Suppression de fichiers de licence fournis avec Haiku mais concernant du code qui avait été supprimé de Haiku auparavant.
- AmĂ©lioration de la remontĂ©e dâerreur du script configure si un interprĂ©teur Python nâa pas Ă©tĂ© trouvĂ©.
- Correction de messages dâavertissement de
awk
pour lâutilisation de fonctions qui nâexistent plus dans le traitement des fichiers dâidentifiants matĂ©riels USB et PCI.
Documentation
Documentation interne
Ajout de documentation sur les dĂ©tails dâimplĂ©mentation de ioctl
et posix_devctl
et les spécificités de Haiku pour la premiÚre (PulkoMandy).
Correction de fautes de frappe dans lâintroduction au launch_daemon.
Remplacement de toutes les références à "OpenBeOS" par "Haiku".
Documentation dâAPI
Ajout de documentation pour les méthodes GetFontAndColor et SetFontAndColor de BTextView.
Ajout de documentation pour les classes BShelf et BGameSound.
RĂ©organisation de la liste des caractĂšres de contrĂŽles dans la documentation du clavier, ajout dâentrĂ©es manquantes dans cette liste et ajoute de commentaires indiquant Ă quelles combinaisons de touches ces caractĂšres sont normalement associĂ©s.
Traductions de Haiku
La traduction du systĂšme dans diffĂ©rentes langues est un facteur important dâinclusivitĂ© et dâaccessibilitĂ© (mĂȘme si la communication avec lâĂ©quipe de dĂ©veloppeurs pour le support nâest pas toujours simple).
Haiku est disponible dans 30 langues, la trentiÚme étant le coréen, pour lequel il y a un nouveau responsable des traductions (le précédent avait cessé toute activité et laissé la traduction inachevée).
Haiku recherche des volontaires pour sâoccuper des traductions en biĂ©lorusse, croate, bulgare, hindi, punjabi et slovĂšne, pour lesquelles les prĂ©cĂ©dents responsables de relectures nâont plus le temps dâassurer le rĂŽle. Ainsi bien sĂ»r que de lâaide pour la traduction du systĂšme, du manuel dâutilisation, et des applications tierces, que ce soit pour ajouter de nouvelles langues ou pour renforcer les Ă©quipes sâoccupant de langues existantes. Le point dâentrĂ©e est le portail dâinternationalisation de Haiku.
La traduction du systĂšme Haiku sâeffectue avec Pootle. Lâoutil nâest plus dĂ©veloppĂ© et des investigations sont en cours pour le remplacer par Weblate. La traduction du manuel dâutilisation sâeffectue avec [un outil spĂ©cifiquement dĂ©veloppĂ© pour cela](https://github.com/haiku/userguide-translator. La traduction des applications sâeffectue Ă©galement avec un outil personnalisĂ© nommĂ© Polyglot.
Commentaires : voir le flux Atom ouvrir dans le navigateur