❌

Vue normale

Reçu aujourd’hui — 18 mai 2025

Nouvelles de Haiku - 1er trimestre 2025

Il est temps de s'intéresser à nouveau aux nouveautés de Haiku pour ce dernier trimestre.

Les gros changements sont:

  • Un nouvel allocateur mĂ©moire qui permet enfin d'allouer plus de 3GiB par application (un reste de l'historique de Haiku sur les systĂšmes 32 bits), tout en Ă©tant plus rapide et moins gourmand en mĂ©moire,
  • Des raccourcis claviers sans touches modificatrices,
  • De grosses mises Ă  jour dans la bibliothĂšque C,
  • La poursuite du nettoyage de code et de l'optimisation du navigateur de fichiers Tracker,
  • La reprise du travail sur le pilote NFS4 pour les systĂšmes de fichiers en rĂ©seau,
  • Et bien sĂ»r, de trĂšs nombreuses corrections de bugs et petites amĂ©liorations un peu partout dans le systĂšme.

Sommaire

Google Summer of Code

Le Google Summer of Code est un programme organisĂ© par Google pour encourager de nouveaux dĂ©veloppeurs Ă  se lancer dans la contribution aux logiciels libres. Il prend la forme d'un stage, oĂč un projet de logiciel libre fournit un sujet et une Ă©quipe d'encadrement, et Google se charge de financer le nouveau contributeur pour quelques semaines.

Cette annĂ©e, la candidature de Haiku a Ă©tĂ© rejetĂ©e, la prĂ©fĂ©rence Ă©tant donnĂ©e Ă  des projets engagĂ©s dans l'intelligence artificielle et dans la cybersĂ©curitĂ© (deux domaines beaucoup demandĂ©s par les personnes souhaitant participer au programme). Ce n'est finalement peut-ĂȘtre pas une mauvaise chose pour Haiku: les dĂ©veloppeurs d'autres projets se sont plaints d'avoir reçu des centaines de candidatures visiblement gĂ©nĂ©rĂ©es par des LLM sans aucun travail de prĂ©paration, ce qui leur demande donc beaucoup de temps pour faire le tri dans les candidatures. Les dĂ©veloppeurs de Haiku vont cette annĂ©e pouvoir se consacrer Ă  d'autres tĂąches.

Applications

Tracker

Le travail de refonte du Tracker se poursuit. Les changements intégrés en début d'année ont provoqué un certain nombre de régressions qui sont corrigées petit à petit:

  • Il est Ă  nouveau possible d'ouvrir le dossier contenant un rĂ©sultat de requĂȘte en double cliquant la colonne "emplacement" dans les rĂ©sultats.
  • Correction d'un crash et de problĂšmes de gestion de la mĂ©moire et de problĂšmes de synchronisation entre threads.
  • RĂ©-optimisation de la gestion des menus dynamiques pour Ă©viter de les reconstruire Ă  chaque clic de souris, mise en cache de certaines parties du menu dont la construction nĂ©cessite des accĂšs disque (liste de patrons pour le menu "nouveau document", liste d'add-ons)

Toujours beaucoup de nettoyage de code Ă  faire dans le Tracker:

  • correction de dimensions en dur dans les menus spĂ©ciaux du Tracker,
  • nettoyage du glisser-dĂ©poser,
  • refactorisation de la logique de dessin,
  • amĂ©lioraiton du chargement des add-ons,

Optimisation de la méthode de surveillance des dossiers, utilisation d'un "node monitor" (équivalent de inotify sous Linux) récursif pour surveiller un dossier et tous ses sous-dossiers au lieu de créer un monitor pour chaque dossier. Cela a nécessité des changements au niveau du noyau avec l'ajout du flag B_QUERY_WATCH_ALL pour couvrir ce cas d'usage.

Par jscipione, waddlesplash

MediaPlayer

L'infobulle sur le "scrubber" (barre de navigation temporelle dans le fichier) s'affiche dÚs que la souris est au-dessus de la barre. Elle contient le marqueur de temps correspondant à la position de la souris, permettant de naviguer avec précision dans le fichier. Ceci a nécessité des évolutions dans BToolTip, la classe responsable des infobulles, qui n'était pas prévue pour faire des infobulles persistantes poursuivant le déplacement de la souris.

Ajout d'une option pour afficher une vidéo à 25% de sa taille originale (les contenus en 4K ou plus se faisant plus courants).

Par AkashKumar7902, x512, waddlesplash

WebPositive

WebPositive ne prétend plus savoir traiter les liens utilsant le protocole gopher. Ces liens ne fonctionnaient plus depuis le retour à l'utilisation de cURL pour la couche réseau de WebKit au lieu d'essayer de réimplémenter un client HTTP maison.

AmĂ©lioration de la gestion des sessions : sauvegarde du workspace utilisĂ© pour chaque fenĂȘtre, restauration de la session complĂšte lorsque le navigateur est dĂ©marrĂ© en cliquant sur un lien, avec ouverture du lien dans une fenĂȘtre du workspace courant s'il y en a dĂ©jĂ  une, et dans une nouvelle fenĂȘtre sinon.

Par nephele, ilzu

HaikuDepot

Amélioration de performances, en particulier lors de l'affichage des résultats de recherche, qui étaient trÚs trÚs lents sur les machines un peu anciennes.

Par apl, oco, waddlesplash

ProcessController

Affichage de "system resources" avant "caches" afin de rendre les statistiques d'utilisation mémoire plus claires et plus lisibles.

Correction de problĂšmes dans la mesure d'utilisation de resources par le noyau.

Par OscarL, waddlesplash

Terminal

Correction d'un bug d'initialisation de la couleur du curseur, visible principalement lorsque le terminal est utilisé comme réplicant dans une autre application. Cette possibilité est utilisée dans l'IDE Genio par exemple.

Par jackburton

StyledEdit

Interdiction d'entrer des caractĂšres de contrĂŽle ASCII dans un fichier texte (via les raccourcis clavier control+une lettre).

Par OscarL

Screenshot

Ajout de la possibilitĂ© de sĂ©lectionner un rectangle Ă  capturer (en plus des possibilitĂ©s existantes de capturer tout l'Ă©cran ou la fenĂȘtre active).

Préférences

Nettoyage de code inutile dans les préférences d'affichage

AmĂ©lioration de la gestion des erreurs dans les prĂ©fĂ©rences de sons si le dossier oĂč devraient se trouver les fichiers son n'existe pas.

Par captain0xff, humdinger

Outils en ligne de commande

strace: DĂ©codage des arguments passĂ©s Ă  rlimit ainsi que de l'argument "type" pour mmap, affichage correct des valeurs de type ssize_t ne pouvant pas ĂȘtre reprĂ©sentĂ©es sur 32 bits.

Fusion des outils query et filteredquery. Ces deux outils permettent de rechercher des fichiers Ă  partir de leurs attributs (xattrs) qui sont indexĂ©s par le systĂšme de fichier. Cette mĂ©thode de recherche retourne tous les rĂ©sultats, le filtrage pour limiter Ă  certains dossiers doit donc ĂȘtre fait par l'outil aprĂšs avoir rĂ©cupĂ©rĂ© les rĂ©sultats de la recherche. Cette fonction Ă©tant trĂšs utile, il n'y a pas de raison de l'implĂ©menter comme un outil sĂ©parĂ©.

keymap: l'option -h affiche l'aide, en conformité avec les bonnes pratiques d'interface utilisateur. L'option pour afficher un header est donc réaffectée et devient -H.

leakanalyzer (outil d'analyse des fuites mĂ©moire): ignore la mĂ©moire allouĂ©e en interne par le "locale kit" pour le support des locales dans la librairie C, cette mĂ©moire ne peut pas ĂȘtre libĂ©rĂ©e.

listusb: correction de l'alignement vertical du statut des ports qui n'était pas en face des autres informations affichées.

waitfor (petite application permettant d'attendre différents évÚnements, trÚs utile dans certains scripts) peut maintenant attendre la disponibilité d'une connexion réseau.

Par humdinger, jmairboeck, korli, OscarL, waddlesplash

Kits

Interface Kit

Les raccourcis claviers pour les menus peuvent maintenant ne pas utiliser la touche "Commande" du clavier. Cela permet de dĂ©finir des raccourcis sans touches modificatrices ou avec des touches non-standard. L'utilisation de ce type de raccourcis est relativement rare, mais nĂ©cessaire dans quelques cas particuliers. Par exemple, la touche "Supprimer" peut ĂȘtre utilisĂ©e pour supprimer un fichier ou un Ă©lĂ©ment de liste de lecture, la touche "F2" pour renommer un fichier dans le Tracker, 


Correction de la gestion des raccourcis claviers dans BPopUpMenu qui pouvaient ĂȘtre associĂ©s Ă  la mauvaise fenĂȘtre.

Amélioration du mode sombre: meilleure méthode de choix de la couleur de fond dans BTextView, utilisation d'une combinaison de couleurs cohérentes pour les boutons des barres de défilement.

Ajout de définitions et de documentation pour tous les cÎdes de contrÎle ASCII dans InterfaceDefs.h. Certains d'entre eux n'étaient pas documentés, ce qui pouvait laisser penser qu'il restait de la place libre utilisable pour coder d'autres choses.

Ajout de vérifications dans BMenuField::SetLabel pour traiter correctement les labels NULL.

Optimisations de BScrollView et BColumnListView pour limiter les rafraßchissements inutiles de l'affichage (dans le cadre des améliorations de performances pour HaikuDepot). Dans BColumnListView, ajout d'APIs pour ajouter et supprimer un ensemble d'éléments d'un seul coup, ce qui est beaucoup plus rapide que de les traiter un par un.

Meilleure gestion du sĂ©maphore de synchronisation des menus dans BWindow. Tous les menus dans Haiku sont implĂ©mentĂ©s comme des fenĂȘtres, ce qui signifie que chaque menu s'exĂ©cute dans un thread dĂ©diĂ© avec sa propre boucle d'Ă©vĂšnements. La synchronisation peut donc ĂȘtre particuliĂšrement complexe.

Correction d'un use-after-free (utilisation de mĂ©moire libĂ©rĂ©e qui ne devrait logiquement plus ĂȘtre accĂ©dĂ©e) dans BSlider.

BDecimalSpinner (un contrÎle pour changer une valeur numérique au clavier ou avec des boutons '+' et '-') utilise BNumberFormat et affiche donc le nombre en fonction des préférences de localisation.

Par apl, bitigchi, jscipione, korli, nipos, nephele, PulkoMandy, waddlesplash, x512

Support Kit

Modification de BObjectList pour passer l'argument "owning" en paramÚtre de template plutÎt qu'en paramÚtre du constructeur. Cela améliore les résultats d'analyse statique qui détectaient de nombreux faux positifs "double free" ou "use after free", et rend également plus difficile de faire des erreurs sur la gestion de la mémoire avec ces listes.

Certaines utilisations de BObjectList<BString> ont été remplacées par la classe dédiée BStringList, plus simple à utiliser pour ce cas particulier.

AmĂ©lioration de performances dans BList, BMessage et certaines parties du code les utilisant beaucoup pour rĂ©duire la quantitĂ© d'allocations mĂ©moire dynamiques, en utilisant la pile comme stockage temporaire ou simplement en retardant au maximum les allocations. Par exemple, plutĂŽt que de prĂ©-allouer de la mĂ©moire pour une liste dĂšs la crĂ©ation de cette derniĂšre, on attend l'insertion du premier Ă©lĂ©ment dans la liste. On Ă©limine ainsi des allocations dans les cas oĂč du code crĂ©e une liste, mais n'insĂšre finalement jamais rien dedans.

Amélioration des erreurs remontées par les classes de traitement de fichiers JSON.

Ajout de vérifications de pointeurs NULL manquantes dans BString pour corriger des crashs quand il n'y a plus de mémoire et qu'une allocation échoue.

Par ilzu, waddlesplash

Storage Kit

Amélioration de BFilePanel pour mieux réagir lorsque le dossier de destination n'existe pas.

Inhibition de BBlockCache lors de l'utilisation d'un allocateur mémoire de debug ou avec des gardes pour détecter les mauvaises utilisations mémoire. Dans ce cas, il vaut mieux se dispenser des gains de performance de la mise en cache mais détecter correctement l'utilisation de mémoire aprÚs sa remise à disposition dans le cache.

Ajout d'un type MIME pour les BMessage serialisés sur disque (souvent utilisés pour sauvegarder les préférences d'applications par exemple).

Par augiedoggie, nephele, waddlesplash

Serveurs

input server

Amélioration du clavier virtuel pour se mettre à jour automatiquement lors des changements de résolution d'écran et de disposition du clavier. Ce clavier virtuel n'est pas inclus par défaut dans l'installation de Haiku, il est réservé aux personnes aventureuses qui utilisent Haiku sur une tablette ou qui débugguent un pilote de clavier en ne disposant que d'un écran tactile comme périphérique d'entrée.

Correction du traitement des appels systĂšmes interrompus (SIGINT), ce qui permet Ă  input server de s'arrĂȘter (et de se redĂ©marrer) lorsqu'on le lui demande. Cela est principalement utile pour tester les pilotes de pĂ©riphĂ©riques d'entrĂ©e.

screen blanker

L'Ă©cran de veille utilise le mot de passe "systĂšme" (configurĂ© dans /etc/passwd) au lieu d'implĂ©menter son propre systĂšme de mot de passe. La commande screen_blanker permet de lancer l'Ă©cran de veille immĂ©diatement, et peut ĂȘtre configurĂ©e comme un raccourci clavier pour implĂ©menter un verrouillage simple de la session (note: ne faites pas confiance Ă  l'Ă©cran de veille pour sĂ©curiser votre session, actuellement il est assez facile Ă  contourner par exemple Ă  l'aide du debugger noyau).

launch daemon

AmĂ©liorations sur le launch_daemon: correction du traitement des conditions Ă©chouĂ©es pour lancer un service, ajout de la possibilitĂ© de dĂ©finir une condition sur le contenu d'un fichier au format "driver settings" (format similaire aux fichiers ini) en plus des fichiers BMessage (format binaire), correction de l'arrĂȘt des services.

app server

Remise en route du test_app_server (outil de test permettant de lancer un deuxiĂšme app_server dans une fenĂȘtre, et donc de tester des changements sur le serveur graphique sans avoir besoin de redĂ©marrer tout le systĂšme).

Correction de bugs dans app_server pour l'affichage de texte: retrait de code dupliqué, ajout de nouveaux cas de test, meilleure gestion du clipping et des "bounding boxes" des glyphes, correction de problÚmes sur les lignes de "décoration" (texte souligné, barré) utilisées en combinaison avec une transformation (rotation, déformation).

Par augiedoggie, korli, nipos, madmax

Pilotes

Le pilote i2c prend en charge les plateformes AMD en plus des machines PCH Intel. Le module i2c utilisĂ© (conçu par Designware) est le mĂȘme pour les deux fabricants Ă  quelques petits dĂ©tails prĂšs.

Amélioration de la détection du pointeur racine ACPI: ce pointeur était fourni par le bootloader sur les machines EFI, mais détecté par l'OS aprÚs démarrage sur les machines BIOS. C'est désormais la seule responsabilité du bootloader dans les deux cas, ce qui simplifie le code.

Correction d'un crash sur certaines machines dans le pilote des batteries ACPI.

Ajout de vérifications supplémentaires et corrections du traitement de quelques cas particuliers dans la pile XHCI (USB3).

La gestion des "révisions" des périphériques virtio a été mise en conformité avec la spécification virtio. Pour les anciennes versions de virtio, ce champ de la configuration PCI indiquait la version du protocole virtio à utiliser. Mais cela implique qu'un seul pilote virtio (identifiant les périphériques par leur ID PCI uniquement) doit implémenter toutes les versions de virtio. Pour les nouvelles spécifications, ce sera donc le "device ID" qui va changer, et il sera beaucoup plus simple de développer des pilotes spécifiques "virtio v1", "virtio v2", etc pour chaque version majeure.

Mise à jour des pilotes wifi iaxwifi200 (nommé iwx chez BSD) et ethernet atheros813x pour supporter de nouvelles générations de matériel. Import du nouveau pilote FreeBSD pour les cartes MT7601U, mais il n'y a pas encore de confirmation de son bon fonctionnement sous Haiku.

Nettoyage de code dans les pilotes SCSI et ralinkwifi.

Dans le pilote NVMe, activation de l'option de mise en veille automatique qui permet de réduire la consommation électrique lorsque le disque n'est pas sollicité (réduction de 1W constatée sur certaines machines).

Correction de problĂšmes dans les pilotes d'entrĂ©e (clavier, souris) qui empĂȘchent de redĂ©marrer l'input_server et de retrouver l'usage de ces pĂ©riphĂ©riques.

Ajout de la tablette graphique Cintiq13HD dans le pilote Wacom.

Correction du pilote framebuffer pour ne mapper en mĂ©moire que la zone utilisĂ©e pour le framebuffer, et pas toute la mĂ©moire de la carte graphique. Non seulement cela rĂ©duit la consommation mĂ©moire reportĂ©e, mais surtout, le reste de la mĂ©moire peut ainsi ĂȘtre configurĂ© pour autre chose (par exemple, de l'accĂ©lĂ©ration 3D).

Ajout des cartes Polaris 10 et correction de quelques erreurs de versions du chipset pour d'autres cartes dans le pilote Radeon HD. Ces cartes récentes sont toujours désactivées dans le pilote, le support reste expérimental et peut conduire à un écran noir. Il vaut mieux donc utiliser les pilotes VESA ou framebuffer pour l'instant.

Par ilzu, korli, Lt-Henry, waddlesplash

SystĂšmes de fichiers

Poursuite d'investigations pour amĂ©liorer le temps d'exĂ©cution de "git status" qui est anormalement lent par rapport Ă  la mĂȘme opĂ©ration sous Linux. AmĂ©lioration de l'itĂ©ration sur les arbres B+ dans BFS, qui faisaient plusieurs "get" et "put" du mĂȘme bloc disque successif (les opĂ©rations "get" et "put" permettent d'obtenir l'accĂšs exclusif Ă  un bloc disque, puis de le libĂ©rer, le cache de blocs se chargeant de lire les blocs depuis le disque, puis de les réécrire lorsque c'est nĂ©cessaire).

Amélioration également des verrous de parallélisme dans BFS, ce qui devrait corriger quelques kernel panic.

Correction d'un blocage de ramfs lors de l'utilisation de "trim" pour libérer de la mémoire.

Ajout d'un contrÎle du flag O_DIRECTORY dans plusieurs systÚmes de fichiers lors de l'ouverture d'un fichier. En particulier cela permet d'écrire une image disque sur un disque à l'aide de la commande cp fichier.image /dev/disk/.../raw.

Plusieurs corrections sur le pilote NFS4 qui était délaissé depuis quelque temps: gestion des inodes "périmés" (fichier présent dans un cache local, mais supprimé par une autre machine sur le serveur), et correction d'autres problÚmes rendant le pilote instable. Ajout également de divers outils de debug pour investiguer l'état du pilote.

Le serveur userlandfs peut ĂȘtre lancĂ© plusieurs fois (B_MULTIPLE_LAUNCH), ce qui permet d'utiliser plusieurs systĂšmes de fichiers FUSE ou userlandfs en mĂȘme temps.

Par augiedoggie, Jim906, waddlesplash, x512

libroot

BibliothĂšque C standard

dlsym(RTLD_NEXT) et d'autres fonctions similaires du runtime_loader recherchent maintenant les symboles dans toutes les régions ELF chargées, et pas seulement dans la premiÚre.

Ajout de RTLD_NOLOAD dans la fonction dlopen, ce qui permet d'accéder à des symboles déjà présents dans l'exécutable sans charger un fichier de librairie à nouveau. Il ne s'agit pas d'une fonction standard C ou POSIX, mais d'une extension proposée par GNU et la glibc.

Ajout de la fonction getloadavg qui permet d'obtenir une mesure de la charge du systĂšme. Cela peut ĂȘtre simplement informatif (dans des outils comme htop) ou utilisĂ© pour allouer au mieux les ressources CPU (l'outil de build ninja peut par exemple utiliser cette valeur pour dĂ©cider combien de jobs lancer en parallĂšle)

Mise en conformitĂ© de l'ordre d'appel des destructeurs de pthread_key (il faut potentiellement appeler les destructeurs plusieurs fois, jusqu'Ă  PTHREAD_DESTRUCTOR_ITERATIONS, pour contourner les problĂšmes d'interdĂ©pendances). Correction de l'ordre d'appel des destructeurs lors de l'arrĂȘt d'une application: les destructeurs globaux C++ doivent ĂȘtre appelĂ©s avant les destructeurs de threads (il existe plusieurs mĂ©thodes pour enregistrer des fonctions Ă  exĂ©cuter Ă  l'arrĂȘt d'un thread ou d'un programme, et c'est assez compliquĂ© de toutes les sĂ©quencer correctement).

Une petite optimisation de pthread_cond_signal pour éviter un appel systÚme dans certains cas.

Poursuite du remplacement de fonctions de la libroot par les versions provenant de musl: memmove, strlen, strlcat, ainsi que toutes les fonctions de conversions entre chaĂźnes de caractĂšres et nombres flottants.

Synchronisation de l'implémentation de glob avec FreeBSD.

Optimisation de la famille de fonctions memcmp, strcmp, strncmp: utilisation de comparaisons sur 64 bits lorsque c'est pertinent, retrait de calculs inutiles.

Réécriture et optimisation des fonctions génériques memcpy et memset (utilisées pour les machines qui n'ont pas une version optimisée manuellement en assembleur). Utilisation de la version optimisée de NetBSD pour les machines x86 32 bits. Pour la version 64 bits, le code utilisé par Haiku est meilleur que celui des autres systÚmes, et reste donc en place. Le bootloader utilise uniquement la version générique pour simplifier les choses (il n'a pas besoin de fonctions de trÚs haute performance).

Correction de la fonction write() avec une taille supÚrieure à 2Gio sur les systÚmes 64 bits (la taille était accidentellement tronquée à 32 bits).

Mise en conformité POSIX de la fonction dup3: retour de EINVAL si l'ancien et le nouveau descripteur de fichier sont identiques.

Déplacement de la fonction qsort_r de la libgnu vers la libroot (elle a été standardisée dans POSIX Issue 8). Il s'agit d'une version de qsort permettant de passer un paramÚtre supplémentaire à la fonction de comparaison contenant un contexte réservé à l'utilisateur de la fonction.

Nettoyage du code restant dans la libroot qui provient de la glibc: retrait de dĂ©clarations internes prĂ©sentes dans les en-tĂȘtes publics, retrait de fonctions qui ont dĂ©jĂ  Ă©tĂ© remplacĂ©es, suppression de fichiers non utilisĂ©s, remplacement d'un maximum de fonctions par les versions de musl ou de BSD, ajout des fonctions stdio_ext de musl en remplacement des fonctions privĂ©es supprimĂ©es, retrait d'une partie des fonctions mathĂ©matiques au profit de celles de musl, retrait d'une couche d'abstraction pour l'interfaçage entre la glibc et le support des locales dans Haiku. Certaines parties de la glibc continuent d'ĂȘtre utilisĂ©es pour assurer la compatibilitĂ© avec BeOS, mais l'objectif est de minimiser cette partie et d'utiliser les fonctions de BSD ou de musl, qui sont souvent beaucoup plus simples. La raison est que la glibc est conçue pour pouvoir ĂȘtre utilisĂ©e comme librairie C alternative sur de nombreux systĂšmes, et doit donc avoir un comportement trĂšs proche de la librairie C originale. Par exemple, le format des nombres "long double" peut ĂȘtre diffĂ©rent d'une architecture et d'un systĂšme Ă  l'autre, et la glibc implĂ©mente de nombreux formats spĂ©cifiques, lĂ  oĂč musl se contente des formats les plus classiques.

Mise Ă  jour de getopt, printf et scanf avec la verson de la glibc 2.41. Pour l'instant ces fonctions continuent d'utiliser la version de la glibc, afin de prĂ©server la compatibilitĂ© avec les applications existantes (notamment les applications pour BeOS). En effet, des structures internes sont exposĂ©es dans l'ABI et ne peuvent pas ĂȘtre facilement remplacĂ©es par une autre implĂ©mentation.

Tous ces changements sur la librairie C standard sont faits également en collaboration avec un développeur de la gnulib, dont la suite de tests permet de repérer de nombreux comportements incorrects ou non standards.

Gestion de la mémoire

Finalisation d'un gros chantier de refonte de la gestion de la mĂ©moire, avec en particulier la possibilitĂ© de fusionner des zones de mĂ©moire adjacentes lorsqu'elles sont redimensionnĂ©es. Suite Ă  ces changements, l'allocateur mĂ©moire hoard2 a pu ĂȘtre remplacĂ© par une nouvelle implĂ©mentation basĂ©e sur celle de OpenBSD, avec quelques adaptations et amĂ©liorations spĂ©cifiques Ă  Haiku, dont en particulier un cache d'allocation global pour chaque application. Le nouvel allocateur est lĂ©gĂšrement plus rapide en gĂ©nĂ©ral, et plusieurs ordres de grandeur plus rapide sur certains cas particuliers (par exemple: gcc avec les options de link-time-optimization, ou le compilateur SDCC, ou un test de compilation passe de plusieurs heures Ă  une ou deux minutes). Ce nouvel allocateur est Ă©galement moins consommateur de mĂ©moire et permet aux applications d'allouer plus de mĂ©moire (hoard2 limitait les allocations Ă  environ 3Go y compris sur les systĂšms 64 bits).

Amélioration des messsages d'erreur de la "guarded heap" (allocateur mémoire de débug) pour afficher des messages d'erreurs plus spécifiques au lieu de "generic segfault".

Autres changements

Ajout de macros manquantes dans le fichier elf.h ainsi que de la constante MAP_FILE (inutile mais présente sur Linux et tous les systÚmes BSD) pour faciliter le portage de WebKit.

Interdiction de l'appel de create_sem avec un compteur négatif. Cela était interdit par BeOS mais autorisé par Haiku et il n'y a pas vraiment de raison de le faire.

Modification du code assembleur d'appel des appels systÚmes pour inclure des informations de debug sur la pile d'appels. D'autre part, dladdr a été modifié pour pouvoir accéder aux informations sur ces symboles, qui sont chargés dans la commpage (une zone de mémoire partagée entre le noyau et les processus utilisateurs, qui n'est pas à proprement parler une section de code classique en mémoire). Cela permet à libunwind d'analyser une stacktrace comprenant un appel systÚme.

Par korli, PulkoMandy, trungnt2910, waddlesplash, zeldakatze

Noyau

DĂ©sactivation des Ă©tats de veille C5 et C6 sur les machines Intel "Skylake", car elles empĂȘchent ces machines de dĂ©marrer correctement pour l'instant.

Réparation du cache d'objets "guarded heap" qui permet de détecter et d'investiguer certains problÚmes d'allocation mémoire dans le noyau.

Traitement d'un cas d'erreur dans le cache de fichiers, si la taille d'un fichier est devenue plus petite que son cache entre le moment ou une application demande un accĂšs et le moment oĂč l'accĂšs va effectivement ĂȘtre rĂ©alisĂ©.

Protection de l'accĂšs Ă  certains "spinlock" par des mutex. L'accĂšs aux spinlocks doit ĂȘtre rapide, puisque l'attente est faite de façon active et monopolise un coeur de CPU. Il faut donc s'assurer que le spinlock pourra ĂȘtre rapidement disponible. En particulier, l'affichage de logs Ă  l'Ă©cran lors du dĂ©marrage pouvait considĂ©rablement ralentir les choses (l'affichage se fait page Ă  page et le processus de dĂ©marrage est mis en pause en attendant que l'utilisateur appuie sur une touche).

DĂ©placement de la calibration du timer APIc x86 dans le noyau au lieu du bootloader. AmĂ©lioration de la prĂ©cision de la mesure et utilisation de la calibration fournie via les registres CPUID si elle est disponible (c'est le cas pour certains hyperviseurs par exemple, sur lesquels le systĂšme virtualisĂ© peut difficilement faire lui-mĂȘme une mesure fiable).

Correction du traitement d'un cas particulier par mprotect, qui se manifestait par un kernel panic lors de l'utilisation du navigateur Iceweasel.

Ajout d'un timeout sur l'envoi d'infos sur le port sĂ©rie sur les machines x86. Par exemple sur le Steam Deck, le port sĂ©rie n'est pas du tout prĂ©sent et cela empĂȘchait le dĂ©marrage du systĂšme.

Réécriture de la fonction x86_{read|write}_msr pour les machines 32 bit en tant que fonction inline (c'était déjà le cas pour les machines 64 bits).

Correction de problĂšmes trouvĂ©s en essayant de dĂ©marrer Haiku sur un laptop trĂšs rĂ©cent: ajout du support de X2APIC dans le bootloader EFI, allocation de la page "PML4" avec une adresse physique < 4Go pouvant ĂȘtre codĂ©e sur 32 bits, et Ă  l'inverse traitement correct de la table GDT lorsqu'elle se trouve au-delĂ  de cette limite de 4Go.

DĂ©placement de code de bfs vers le VMCache gĂ©nĂ©rique pour traiter le cas particulier du mmap sur un fichier dont la taille n'est pas un multiple de la taille de pages du systĂšme. La derniĂšre page doit alors ĂȘtre remplie avec des 0. Cela avait Ă©tĂ© corrigĂ© pour bfs, mais le problĂšme Ă©tait Ă©galement prĂ©sent pour d'autres systĂšmes de fichiers dont en particulier ramfs.

Réécriture des FIFOs noyaux (utilisés pour implémenter pipe(2)). Le benchmark stress-ng --pipe 1 passe de 230 Mo/s à 2.5Go/s (dans une machine virtuelle).

Ajout d'une option syslog_max_history pour pouvoir conserver plus que 2 fichiers de syslog (ce qui reste l'option par défaut).

Nettoyage et optimisation de la structure Thread utilisĂ©e dans le noyau pour reprĂ©senter les threads: utilisation d'une liste doublement chaĂźnĂ©e pour accĂ©lĂ©rer les manipulations de la liste, correction du dĂ©comptage du temps CPU utilisĂ© par les processus, correction d'une fuite mĂ©moire, et correction d'un problĂšme dans la fonction get_next_thread_info si les identifiants de threads bouclent (c'est-Ă  dire que plus de 4 milliards de threads ont Ă©tĂ© créés et que des identifiants de threads ont donc dĂ» ĂȘtre recyclĂ©s).

Le kernel panic se produisant si un thread tente de libérer un mutex qui ne lui appartient pas affiche automatiquement la stacktrace du thread qui est propriétaire du mutex.

Ajout d'un appel à cpu_pause dans le code des conditions variables pour réduire la consommation électrique inutile lors d'une attente active.

Correction de plusieurs problĂšmes de sauvegarde du contexte de la FPU pour l'architecture x86_64:

  • Remise Ă  0 de l'Ă©tat de la FPU lors des changements de threads,
  • Stockage de l'Ă©tat de la FPU dans la structure d'info sur le thread au lieu de la stocker sur la pile,
  • Envoi des bons codes d'exception FPE_* lors des exceptions SIGFPE,
  • Gestion des "control words" lors des changements de contexte.

Cela corrige des crashs d'application et mĂȘme des kernel panic dans certains cas.

Les drapeaux de protection des zones de mémoire du noyau ne sont plus visibles par les utilisateurs non privilégiés. L'utilisateur "user" principal peut toujours y accéder, cela est utilisé par exemple par ProcessController. Correction d'un flag mal positionné pour les zones mémoire de l'allocateur "slab", qui n'étaient pas indiquées comme accessibles en écriture.

Renommage des fonctions concernant la gestion des interruptions pour Ă©viter l'abbrĂ©viation "int" qui pouvait prĂȘter Ă  confusion avec "integer" dans certains cas. Utilisation du mot complet "interrupt" lorsque c'est possible, ou Ă  dĂ©faut de "intr".

Correction d'une fuite de mémoire dans la gestion de la mémoire physique avec du paging à 5 niveaux (LA57).

Correction d'un interblocage dans le cache du systÚme de fichier identifié à l'aide des tests de gVisor.

Correction d'un bug dans la fonction vsnprintf du noyau qui n'affichait pas correctement les nombres inférieurs à 0.1 (les 0 aprÚs le point étaient perdus, et donc 0.01, 0.001. 0.0001, 
 étaient tous affichés comme 0.1).

L'appel systĂšme create_dir retourne EEXIST si un fichier ou un dossier existe dĂ©jĂ  Ă  l'endroit demandĂ©, et ce, mĂȘme si le systĂšme de fichier est en lecture seule. Auparavant, l'appel systĂšme retournait EROFS, ce qui perturbe certaines applications.

AmĂ©lioration du traitement des "doubles fautes" (lorsque le traitement d'une exception matĂ©rielle dĂ©clenche une autre exception matĂ©rielle) sur x86. Le registre GS Ă©tait corrompu, ce qui empĂȘchait l'utilisation du debugger dans ce cas, et plusieurs autres problĂšmes conduisaient vraissemblablement Ă  une "triple faute" (une exception dans le traitement de l'exception dans le traitement de
 bon vous voyez le principe), et Ă  un redĂ©marrage de la machine car Ă  ce stade il est peu probable qu'aucune autre opĂ©ration ne remette le systĂšme dans un Ă©tat cohĂ©rent.

Bootloader

Amélioration du bootloader PXE pour afficher clairement "Network" dans la méthode de démarrage, ainsi que l'adresse IP du serveur de disque fournissant le rootfs.

Remise en route du développement sur la console graphique utilisée pour simuler un mode texte pour le menu de démarrage, lorsque la machine ne fournit pas un mode texte matériel ou au niveau de son BIOS (c'est le cas par exemple sur certains Chromebooks avec SeaBIOS). Pour l'instant, cela nécessite une version du bootloader compilée spécifiquement pour ce cas de figure, car on ne sait pas encore détecter de façon fiable si le mode texte du BIOS est disponible.

Par Anarchos, augiedoggie, korli, phcoder, waddleslplash

Scripts de compilation

Poursuite du travail pour corriger tous les warnings détectés par le compilateur, ainsi que quelques problÚmes détectés par les sanitizers de gcc (libasan et libubsan) qui sont maintenant compatibles avec Haiku.

Correction de problĂšmes empĂȘchant de cross-compiler Haiku depuis FreeBSD ou un systĂšme Linux utilisant la libc musl. Correction Ă©galement de problĂšmes pour le build depuis macOS.

Suppression de fichiers inutiles dans la version de unzip intégrée dans le build de Haiku.

Généralisation des options permettant d'activer la "stack protection" à plus de parties du systÚme.

Remplacement de la commande which par command -v. Cette derniÚre est un builtin de la plupart des shells, elle est donc plus rapide à exécuter et ne nécessite pas une dépendance supplémentaire.

Migration de Python 2 à Python 3 pour le script générant les fichiers "libroot stubs" (utilisé uniquement lors du bootstrapping de Haiku pour une nouvelle architecture).

Mise à jour de la version de m4 utilisée pour le bootstrap de Haiku (compilation de tous les paquets à partir des sources, utile en particulier pour le portage sur une nouvelle architecture).

Ajout des modules PCI manquants dans l'image de bootstrap.

Par korli, PulkoMandy, waddlesplash

Documentation

Ce trimestre, il y a principalement du travail sur la documentation interne. Il s'agit d'un document destiné aux développeurs de Haiku, par opposition aux développeurs d'applications pour Haiku, qui se tourneront plutÎt vers le Haiku book pour les informations sur les interfaces publiques du systÚme.

Mise à jour de la documentation sur la procédure à suivre pour synchroniser du code avec d'autres systÚmes. Haiku réutilise du code de FreeBSD, NetBSD, OpenBSD, musl et quelques autres, et maintient également deux copies de gcc et des binutils. Il est important d'avoir une procédure bien définie pour tracer ce qui a été importé, depuis quelle version, et quels changements ont été effectués. Plusieurs documentations existaient avec différentes fçons de faire, dont certaines étaient obsolÚtes.

Dans la documentation du device manager, ajout d'une image montrant un exemple de device tree, pour mieux visualiser ce qui est expliqué dans la page.

Déplacement d'articles sur l'implémentation des appels systÚmes du site web principal vers la documentation interne (dans le cadre d'un trÚs long projet pour réorganiser la documentation et libérer le site principal de nombreux articles techniques pour en faire une vitrine plus orientée vers les utilisateurs).

Ajout dans la documentation interne d'un article sur le profilage et l'analyse de performance des applications.

Correction de liens internes morts dans la documentation interne sur la gestion des paquets, suite Ă  des erreurs de formatage.

Mise Ă  jour de la documentation interne sur le processus de bootstrap.

Par kuku929, oco, PulkoMandy, waddlesplash

Commentaires : voir le flux Atom ouvrir dans le navigateur

Reçu avant avant-hier

Information couleur du jour pour contrats électricité Tempo

Par :lym · pulkomandy · tisaac · Ysabeau đŸ§¶ · BAud · gUI
9 avril 2025 Ă  17:44

Suite Ă  une question posĂ©e en 2023, cette dĂ©pĂȘche propose un Ă©tat des lieux des sources librement accessibles (sans imposer un jeton pour accĂ©der aux API pour obtenir de maniĂšre structurĂ©e l’information) permettant de suivre les jours en tensions pris en compte dans l’option tarifaire TEMPO chez EDF. Cette option tarifaire consiste Ă  payer moins cher l’électricitĂ© Ă  condition de la payer 3 fois plus cher 22 jours dans l’annĂ©e : les jours en tensions, gĂ©nĂ©ralement durant l’hiver.

Cette option permet de lisser la charge sur le rĂ©seau de transport de l’électricitĂ©. Pour faire bon usage de cette option, il faut surveiller la couleur du jour pour dĂ©terminer s’il vaut mieux rĂ©duire le chauffage Ă©lectrique et les autres sources de consommations Ă©lectriques. L’information est affichĂ©e le jour mĂȘme sur le compteur Ă©lectrique, mais il peut ĂȘtre utile d’ĂȘtre prĂ©venu. On peut consulter le site de EDF, mais il peut ĂȘtre plus intĂ©ressant de disposer d’une API pour rĂ©cupĂ©rer cette information, et ainsi pouvoir l’intĂ©grer dans un systĂšme domotique, par exemple.

    Sommaire

    Les anciennes APIs ne fonctionnent plus

    En effet, les forums domotiques attestent que c’était pourtant trĂšs utilisĂ©, depuis le 29/08/2024 (avant-veille du changement de saison Tempo) les URL concernĂ©es (resp. couleur du jour+lendemain et compteurs saison en cours) rĂ©pondent en erreur:

    Couleurs jour/lendemain
    Totaux en cours

    À la recherche d’une solution de remplacement

    On voit une autre URL apparaĂźtre ces derniers jours sur les forums, mais elle ne donne pas spĂ©cifiquement les couleurs jour/lendemain mais des compteurs: nombre de jours bleus, rouges et blancs depuis le dĂ©but de l’annĂ©e. Il faudrait donc dĂ©duire la couleur du jour en fonction de ce qui change d’un jour Ă  l’autre! On a vu plus simple, mais comme ça marche pas on ne risque pas de l’utiliser:
    URL nouvelle

    {
        “errors”: [],
        “content”: [
            {
                “typeJourEff”: « TEMPO_BLANC Â»,
                “libelle”: « TEMPO BLANC 2024 2025 Â»,
                “nombreJours”: 43,
                “premierJour”: « 2024-09-01 Â»,
                “dernierJour”: « 2025-08-31 Â»,
                “premierJourExclu”: null,
                “dernierJourExclu”: null,
                “nombreJoursTires”: 0,
                “etat”: “OUVERTE”
            },
            {
                “typeJourEff”: « TEMPO_BLEU Â»,
                “libelle”: « TEMPO BLEU 2024 2025 Â»,
                “nombreJours”: 300,
                “premierJour”: « 2024-09-01 Â»,
                “dernierJour”: « 2025-08-31 Â»,
                “premierJourExclu”: null,
                “dernierJourExclu”: null,
                “nombreJoursTires”: 12,
                “etat”: “OUVERTE”
            },
            {
                “typeJourEff”: « TEMPO_ROUGE Â»,
                “libelle”: « TEMPO ROUGE 2024 2025 Â»,
                “nombreJours”: 22,
                “premierJour”: « 2024-11-01 Â»,
                “dernierJour”: « 2025-03-31 Â»,
                “premierJourExclu”: null,
                “dernierJourExclu”: null,
                “nombreJoursTires”: 0,
                “etat”: « NON_COMMENCEE Â»
            }
        ]
    }

    Le site d’EDF utilise une API interne indiquant la couleur, jour par jour, pour une plage de dates donnĂ©e. Il faut remplir quelques en-tĂȘtes HTTP pour que la requĂȘte soit acceptĂ©e :

    curl \
        'https://api-commerce.edf.fr/commerce/activet/v1/calendrier-jours-effacement?option=TEMPO&dateApplicationBorneInf=2023-9-12&dateApplicationBorneSup=2023-9-15&identifiantConsommateur=src' \
        -H 'accept: application/json, text/plain, */*' \
        -H 'cache-control: no-cache' \
        -H 'content-type: application/json'

    Exemple de réponse:

    {
        “errors”: [],
        “content”: {
            “dateApplicationBorneInf”: « 2023-09-12 Â»,
            “dateApplicationBorneSup”: « 2023-09-16 Â»,
            “dateHeureTraitementActivET”: « 2024-09-11T11:19:26Z Â»,
            “options”: [
                {
                    “option”: “TEMPO”,
                    “calendrier”: [
                        {
                            “dateApplication”: « 2023-09-12 Â»,
                            “statut”: « TEMPO_BLEU Â»
                        },
                        {
                            “dateApplication”: « 2023-09-13 Â»,
                            “statut”: « TEMPO_BLEU Â»
                        },
                        {
                            “dateApplication”: « 2023-09-14 Â»,
                            “statut”: « TEMPO_BLEU Â»
                        },
                        {
                            “dateApplication”: « 2023-09-15 Â»,
                            “statut”: « TEMPO_BLEU Â»
                        }
                    ]
                }
            ]
        }
    }

    Ces APIs semblent rĂ©pondre en erreur « La syntaxe de la requĂȘte est erronĂ©e » alĂ©atoirement lorsqu’on y accĂšde avec curl. Une requĂȘte peut fonctionner une fois puis subitement cesser de rĂ©pondre. S’agit-il d’une limitation du nombre de requĂȘtes venant de la mĂȘme IP? D’une authentification Ă  effectuer pour avoir le droit de faire des requĂȘtes? Ou juste d’un systĂšme complĂštement buggĂ© qui plante une fois sur 10?

    Pour ceux, que j’imagine nombreux, a qui cela va poser problĂšme et qui ne veulent (ou peuvent) obtenir l’info via un module tĂ©lĂ©info Ă  monter sur son compteur, il y a une URL dont je n’ai pas trouvĂ© rĂ©fĂ©rence sur le site de RTE (qui ne propose que des API Ă  jetons) qui se trouve en regardant le github source d’un site tiers donnant Ă©galement l’info:
    Source tierce

    L’info dĂ©livrĂ©e par le compteur arrive en prime bien plus tardivement: En dĂ©but de soirĂ©e au lieu de fin de matinĂ©e. C’est parce qu’elle transite par Enedis, une autre entreprise qui se charge de la distribution de l’électricitĂ© (les lignes Ă  basse tension et les compteurs Ă©lectriques).

    On peut donc utiliser cette indirection ou regarder les sources afin de trouver l’URL en question, pour laquelle on a une info hĂ©las bien plus verbeuse oĂč il faut faire son marchĂ© : on rĂ©cupĂšre un JSON de tous les jours Ă©coulĂ©s depuis le dĂ©but de la saison en cours, et il faut :

    — extraire l’info aux bonnes dates,
    — refaire ses compteurs de jours bleu/blanc/rouge pour savoir s’il reste des jours rouges ou blancs prĂ©vus avant la fin de l’hiver,
    — traiter le flag “fallback” qui, selon la documentation, indique un mode dĂ©gradĂ©, mais ce flag ne semble jamais ĂȘtre mis Ă  “true” dans l’historique des donnĂ©es disponibles, et son rĂŽle exact n’est pas clair.

    Conclusion

    Il est au final navrant qu’EDF remplace un truc simple qui marchait trĂšs bien par un machin alambiquĂ© qui tombe en marche une fois sur 10


    Je ne donne pas l’URL librement accessible, mais non documentĂ©e, de RTE car je n’aimerais pas qu’elle croule sous les demandes: Ceux qui sont capables de l’utiliser de maniĂšre raisonnĂ©e sans exploser des quotas sauront bien la trouver avec les infos donnĂ©es!

    (RTE, RĂ©seau de Transport de l’ÉlectricitĂ© est l’entreprise qui s’occupe du rĂ©seau Ă©lectrique Ă  haute tension en France. Ce sont eux qui dĂ©terminent les jours oĂč le rĂ©seau va ĂȘtre trĂšs chargĂ©, et c’est ça qui dĂ©termine le prix de l’électricitĂ©).

    Un avantage Ă  l’utiliser, c’est que l’info est disponible encore plus tĂŽt qu’elle ne l’était chez EDF (c’était gĂ©nĂ©ralement MAJ peu aprĂšs 11h00), permettant d’anticiper encore un peu plus un jour rouge, sachant qu’ils sont souvent en sĂ©rie, si on a quelques lessives Ă  lancer


    S’il y a des suggestions d’alternatives (sans jetons d’API) non citĂ©es, merci de les indiquer en commentaires.

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    Nouvelles de Haiku - Hiver 2024-25

    17 février 2025 à 15:01

    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.

    Sommaire

    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 et BShape 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 de calloc et realloc)
    • 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 de ioctl
    • 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

    ❌