rapport sur l'évolution du projet FreeBSD de janvier à mars 2020. Parmi les changements, on peut noter :
- Questions générales et systémiques
- Le jeu de compilateurs GCC a été supprimé de l'arborescence des sources FreeBSD-CURRENT, ainsi que les utilitaires inutilisés gperf, gcov et gtc (compilateur devicetree). Toutes les plateformes ne supportant pas Clang ont été transférées vers l'utilisation d'outils de construction externes, installés à partir des ports. La version obsolète de GCC 4.2.1 était fournie dans le système de base, et l'intégration de versions plus récentes était impossible en raison du passage de la version 4.2.2 à la licence GPLv3, qui a été jugée inacceptable pour les composants de base de FreeBSD. Les versions actuelles de GCC, y compris GCC 9, peuvent toujours être installées à partir des paquets et des ports.
- Dans l'infrastructure d'émulation de l'environnement Linux (Linuxulator), le support de l'appel système sendfile, du mode TCP_CORK (nécessaire pour nginx), et du drapeau MAP_32BIT (qui résout le problème de l'exécution de paquets avec Mono à partir d'Ubuntu Bionic) a été ajouté. Des problèmes de résolution DNS lors de l'utilisation de glibc plus récente que 2.30 (par exemple, d'Ubuntu 8) ont été résolus.
Dans l'infrastructure d'intégration continue, le lancement des tâches pour exécuter LTP (Linux Testing Project) sous Linuxulator a été effectué pour tester les améliorations apportées au code pour supporter Linux. Environ 400 tests échouent et nécessitent des corrections (certaines erreurs sont causées par des faux positifs, certaines nécessitent des corrections triviales, mais d'autres nécessitent l'ajout de nouveaux appels système). Un travail de nettoyage du code de Linuxulator et de simplification du débogage a été effectué. Des correctifs, bien qu'encore non examinés, ont été préparés pour la prise en charge des attributs étendus et de l'appel système fexecve. - Les réunions du groupe de travail créé pour migrer les sources d'un système de gestion centralisée de version Subversion vers un système décentralisé Git se poursuivent. Un rapport avec des propositions de migration est en cours de préparation.
- Dans (linker à l'exécution) a amélioré le mode d'exécution directe ("/libexec/ld-elf.so.1 {chemin} {arguments}" ).
- Le projet de test de fuzzing du noyau FreeBSD se poursuit avec l'utilisation du système syzkaller. Au cours de la période rapportée, des problèmes ont été résolus dans la pile réseau et le code de gestion des tables de descripteurs de fichiers, identifiés grâce à syzkaller. À la suite du diagnostic des erreurs dans la pile SCTP, des modifications ont été ajoutées pour faciliter le débogage. De nouvelles règles ont été ajoutées au jeu test stress2 pour identifier d'éventuelles régressions. Le test de fuzzing a été étendu aux nouveaux appels système, y compris copy_file_range(), __realpathat() et les appels du sous-système Capsicum. Le travail sur la couverture de test de fuzzing de la couche d'émulation Linux se poursuit. Une analyse et des corrections des erreurs signalées dans les derniers rapports de Coverity Scan ont été effectuées.
- Dans le système d'intégration continue, la transition vers l'exécution de tous les tests de la branche head uniquement avec clang/lld a été réalisée. Pour les tests RISC-V, une image disque complète a été créée pour exécuter les tests dans QEMU avec OpenSBI. De nouvelles tâches ont été ajoutées pour tester les images et les machines virtuelles powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
- Le travail de portage du jeu de tests Kyua depuis les ports (devel/kyua) vers le système de base est en cours pour résoudre les problèmes (les paquets s'installent très lentement) rencontrés lors de l'utilisation de Kyua sur de nouvelles architectures, dont le développement se fait à l'aide d'un émulateur ou d'un FPGA. L'intégration dans le système de base simplifiera considérablement le test des plateformes embarquées et l'interfaçage avec les systèmes d'intégration continue.
- Un projet visant à optimiser les performances du pilote de pont réseau a été lancé. , qui utilise un mutex pour verrouiller les données internes, ce qui ne permet pas d'atteindre les performances souhaitées sur les systèmes avec un grand nombre d'environnements jail ou de machines virtuelles connectées à un même réseau. À ce stade, des tests ont été ajoutés au code pour prévenir des régressions lors de la modernisation de la gestion des verrous. L'utilisation de ConcurrencyKit pour paralléliser les gestionnaires de transfert de données (bridge_input(), bridge_output(), bridge_forward(), …) est envisagée.
- Un nouvel appel système sigfastblock a été ajouté, permettant à un thread de déterminer un bloc de mémoire pour un gestionnaire de signaux rapide dans le but d'améliorer les performances des gestionnaires d'exceptions.
- Le noyau a ajouté la prise en charge des instructions atomiques LSE (Large System Extension), prises en charge par les systèmes ARMv8.1. Ces instructions sont nécessaires pour améliorer les performances sur les plateformes Cavium ThunderX2 et AWS Graviton 2. Les modifications ajoutées définissent la disponibilité du support LSE et activent dynamiquement l'implémentation atomique basée sur celles-ci. Lors des tests, l'utilisation de LSE a permis de réduire de 15 % le temps processeur utilisé pour la compilation du noyau.
- Des optimisations de performance ont été réalisées et les fonctionnalités des outils pour les fichiers exécutables au format ELF ont été étendues.
La prise en charge de la mise en cache des informations de débogage DWARF a été ajoutée, des problèmes dans les utilitaires elfcopy/objcopy ont été résolus, et le traitement de DW_AT_ranges a été ajouté.
Dans readelf, la possibilité de décoder les drapeaux PROTMAX_DISABLE, STKGAP_DISABLE et WXNEEDED a été réalisée, ainsi que Xen et GNU Build-ID.
- Sécurité
- Pour améliorer le fonctionnement de FreeBSD dans les environnements cloud Azure, des travaux sont en cours pour assurer la prise en charge du mécanisme HyperV Socket, permettant d'utiliser l'interface de socket pour interagir avec l'environnement hôte sans configuration réseau.
- Des travaux sont en cours pour garantir des compilations reproductibles de FreeBSD, permettant de s'assurer que les fichiers exécutables des composants du système sont compilés exactement à partir des sources déclarées et ne contiennent pas de modifications non autorisées.
- L'outil elfctl a été ajouté pour contrôler l'activation de mécanismes de protection supplémentaires (ASLR, PROT_MAX, stack gap, W+X mapping) au niveau de processus individuels.
- Systèmes de stockage et systèmes de fichiers
- Des travaux sont en cours pour implémenter la possibilité de faire fonctionner NFS sur un canal de communication chiffré basé sur TLS 1.3, au lieu d'utiliser Kerberos (mode sec=krb5p), qui limite le chiffrement uniquement aux messages RPC et se réalise uniquement par logiciel. La nouvelle implémentation utilise la pile TLS fournie par le noyau, permettant d'utiliser des moyens d'accélération matérielle. Le code NFS sur TLS est presque prêt pour les tests, mais nécessite encore des travaux pour prendre en charge les certificats clients signés et adapter la pile TLS du noyau pour l'envoi de données NFS (les patchs pour la réception sont déjà prêts).
- Support matériel
- Des travaux sont en cours pour ajouter la prise en charge des CPU x86 chinois Hygon basés sur des technologies AMD.
- Dans le cadre de CheriBSD, une branche de FreeBSD pour l'architecture de processeur de recherche. (Capacité des instructions RISC améliorées par le matériel), la mise en œuvre du support du processeur ARM Morello se poursuit, qui prendra en charge le système de gestion d'accès à la mémoire CHERI, basé sur le modèle de protection du projet Capsicum. La puce Morello sera lancée en 2021. Actuellement, le travail se concentre sur l'ajout du support de la plateforme Arm Neoverse N1, qui sous-tend Morello. Un port initial de CheriBSD pour l'architecture RISC-V a été présenté. Le développement de CheriBSD pour le prototype de référence CHERI basé sur l'architecture MIPS64 se poursuit.
- Le portage de FreeBSD pour le SoC 64 bits NXP LS1046A basé sur le processeur ARMv8 Cortex-A72 avec un moteur intégré d'accélération du traitement des paquets réseau, Ethernet 10 Gb, PCIe 3.0, SATA 3.0 et USB 3.0 a été poursuivi. Actuellement, des pilotes pour QorIQ et LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI sont préparés pour la transmission au tronc principal de FreeBSD.
- Jusqu'à la version 2.1.1, le pilote ena a été mis à jour avec un support pour la deuxième génération d'adaptateurs réseau ENAv2 (Elastic Network Adapter), utilisés dans l'infrastructure Elastic Compute Cloud (EC2) pour établir des communications entre les nœuds EC2 à des vitesses allant jusqu'à 25 Gb/s. Une mise à jour vers ENA 2.2.0 est en préparation.
- L'amélioration du port FreeBSD pour la plateforme powerpc64 se poursuit. L'accent est mis sur l'assurance d'une performance de qualité sur les systèmes équipés de processeurs IBM POWER8 et POWER9. Au cours de la période reportée, le passage de FreeBSD-CURRENT à l'utilisation du compilateur LLVM/Clang 10.0 et du lld linker au lieu de GCC a été réalisé. Par défaut, l'ABI ELFv2 est utilisé pour les systèmes powerpc64, et le support de l'ABI ELFv1 a été abandonné. Dans FreeBSD-STABLE, gcc 4.2.1 est encore présent. Des problèmes avec les pilotes virtio, aacraid et ixl ont été résolus. Sur les systèmes powerpc64, il est désormais possible de lancer QEMU sans support des Huge Pages.
- Le travail sur la mise en œuvre du support pour l'architecture RISC-V a été poursuivi. À l'heure actuelle, FreeBSD se charge déjà avec succès sur la carte SiFive Hifive Unleashed, pour laquelle des pilotes UART, SPI et PRCI ont été préparés, prenant en charge le firmware OpenSBI et SBI 0.2. Au cours de la période reportée, le travail a été axé sur la migration de GCC vers clang et lld.
Applications et système de ports
- Applications et système de ports
- La collection de ports FreeBSD a franchi la barre des 39 000 ports, avec un peu plus de 2400 PR non clôturés, dont 640 PR n'ont pas encore été examinés. Au cours de la période de rapport, 8146 modifications ont été apportées par 173 développeurs. Quatre nouveaux membres (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore) ont reçu des droits de commit. Le drapeau USES=qca a été ajouté et le drapeau USES=zope a été supprimé (en raison d'une incompatibilité avec Python 3). Un travail est en cours pour retirer Python 2.7 de l'arborescence des ports — tous les ports dépendant de Python 2 doivent être portés sur Python 3 ou seront supprimés. Le gestionnaire de paquets pkg a été mis à jour à la version 1.13.2.
- Les composants de la pile graphique et les ports associés à xorg ont été mis à jour.
Le serveur X.org a été mis à jour vers la version 1.20.8 (la branche 1.18 était précédemment fournie), ce qui a permis de passer par défaut FreeBSD à l'utilisation du backend udev/evdev pour le traitement des périphériques d'entrée. Le paquet Mesa est passé par défaut à l'utilisation de l'extension DRI3 au lieu de DRI2. Des efforts sont en cours pour maintenir à jour les pilotes graphiques, la pile des périphériques d'entrée et les composants drm-kmod (port assurant le fonctionnement des modules DRM amdgpu, i915 et radeon, utilisant le framework linuxkpi pour la compatibilité avec le Direct Rendering Manager du noyau Linux). - L'environnement de bureau KDE Plasma, les KDE Frameworks, les applications KDE et Qt ont été tenus à jour et mis à jour avec les dernières versions. Une nouvelle application kstars (atlas stellaire) a été ajoutée aux ports.
- Des efforts ont été faits pour corriger des régressions dans le gestionnaire de fenêtres xfwm4, qui sont apparues après la mise à jour de Xfce vers la version 4.14 (par exemple, des artefacts sont apparus lors de la décoration des fenêtres).
- Le port de Wine a été mis à jour vers la version Wine 5.0 (précédemment proposé 4.0.3).
- À partir de la version 1.14, le compilateur du langage Go a ajouté un support officiel pour l'architecture ARM64 pour FreeBSD 12.0.
- OpenSSH dans le système de base a été mis à jour vers la version 7.9p1.
- Une bibliothèque sysctlmibinfo2 a été mise en œuvre et placée dans les ports (devel/libsysctlmibinfo2), offrant une API pour accéder à MIB sysctl et effectuant la translation des noms sysctl en identifiants d'objets (OID).
- Une mise à jour de la distribution a été formée. , représentant une édition de FreeBSD adaptée pour être utilisée comme un bureau portable, pouvant être démarré à partir d'une clé USB. L'environnement graphique est basé sur le gestionnaire de fenêtres . Pour le montage des périphériques, un certain nombre de fonctionnalités sont utilisées. (supporte le montage CD9660, FAT, HFS+, NTFS, Ext2/3/4), pour configurer le réseau sans fil — , et pour contrôler le volume — .
- L'intégration pour la rédaction d'une documentation complète pour le gestionnaire de prison virtuelles . La version pot 0.11.0 est en préparation, proposant des outils de gestion de la pile réseau.
Source : opennet.ru
