Category: Développement

Firmware open source : nécessité et choix stratégiques

2024-12-17

Cet article explore la nécessité d'un firmware open source. L'auteur soutient que le firmware, en tant que logiciel contrôlant le matériel, devrait adhérer aux principes du logiciel libre. Il ne s'agit pas seulement de liberté en soi, mais aussi directement des intérêts pratiques des utilisateurs. Un firmware non libre peut restreindre les fonctionnalités du matériel, masquer les vulnérabilités de sécurité et même empêcher les utilisateurs de résoudre les problèmes de sécurité. L'article analyse deux points de vue : l'un considère le firmware open source comme souhaitable mais non nécessaire ; l'autre plaide pour que tous les logiciels système soient open source. L'auteur penche pour le premier, estimant qu'il est plus important de prioriser la liberté du noyau du système d'exploitation, mais souligne simultanément les avantages d'un firmware open source et discute de la manière de le promouvoir par des moyens stratégiques.

Développement logiciel libre

Une équipe de développement solo atteint deux millions d'utilisateurs

2024-12-17

Nadia Odunayo, ingénieure logiciel, a créé StoryGraph, une application de communauté de lecture comptant plus d'un million d'utilisateurs, en tant que développeuse solo. StoryGraph aide les utilisateurs à suivre leurs lectures et recommande des livres en fonction de leur humeur et de leurs préférences. Cette histoire inspirante met en lumière la détermination, les compétences techniques et le « framework d'une seule personne » qu'Odunayo a utilisé pour réaliser cet exploit impressionnant. Elle offre des informations précieuses aux aspirants développeurs solo.

L'algèbre linéaire propulse un éditeur de diagrammes interactif

2024-12-17
L'algèbre linéaire propulse un éditeur de diagrammes interactif

Ivan Shubin, lors du développement de son éditeur de diagrammes interactif Schemio, a astucieusement utilisé les opérations matricielles de l'algèbre linéaire pour résoudre une série de problèmes complexes. Initialement, Schemio ne supportait que la création et la manipulation de formes simples. Cependant, l'introduction d'une structure hiérarchique a rendu les transformations de coordonnées complexes. L'auteur a d'abord utilisé une approche récursive, mais a rencontré des problèmes d'échelle et de points de pivot. Finalement, Shubin a utilisé des matrices pour représenter les transformations (translation, rotation, mise à l'échelle), utilisant la multiplication matricielle pour la conversion de coordonnées et employant ingénieusement l'inversion de matrices pour résoudre le problème de conversion des coordonnées du monde vers les coordonnées locales. De plus, les opérations matricielles ont permis d'ajuster précisément la position et la rotation d'un objet lors de son déplacement dans la hiérarchie, évitant ainsi les sauts inattendus. Le code source de Schemio est open source et disponible sur GitHub.

Tig : Interface en mode texte pour Git

2024-12-17

Tig est une interface en mode texte basée sur ncurses pour Git, fonctionnant principalement comme un navigateur de référentiel Git. Elle aide également à préparer les modifications pour la validation au niveau des blocs et sert de paginateur pour les sorties de diverses commandes Git. Des instructions d'installation, des notes de publication détaillant les nouvelles fonctionnalités et les corrections de bogues, ainsi que des ressources telles que la page d'accueil, le manuel et la section de questions-réponses sur Stack Overflow sont facilement accessibles. Les rapports de bogues et les demandes de fonctionnalités peuvent être soumis via le système de suivi des problèmes ou par e-mail.

Des programmeurs créent un jeu de programmation fantaisiste : Droste's Lair

2024-12-17
Des programmeurs créent un jeu de programmation fantaisiste : Droste's Lair

Deux programmeurs ont passé deux semaines à développer Droste's Lair, un jeu d'environnement de programmation fantaisiste. Les joueurs construisent et comptent des structures mathématiques grâce à des interactions intuitives de glisser-déposer, en utilisant un mécanisme « amb » pour l'exécution ramifiée et la récursivité. Le jeu, sur le thème des épées et de la sorcellerie, propose des défis tels que l'inversion d'éléments de liste, la génération de toutes les combinaisons de cartes et le comptage des façons de recouvrir un damier avec des dominos. Droste's Lair associe habilement des éléments de programmation et de jeu, offrant un moyen nouveau et engageant d'apprendre des concepts de programmation et de mathématiques.

Valhalla : La refonte épique de Java touche à sa fin

2024-12-17

Après dix ans de développement, le projet Valhalla, la refonte ambitieuse de Java, approche de son terme. Visant à combler le fossé entre les classes et les types primitifs, Valhalla introduit des classes de valeur qui offrent la commodité de codage des classes avec les performances des primitifs, résultant en une disposition mémoire plate et compacte. À la Devoxx 2024, l'architecte de langage Java Brian Goetz a fourni une mise à jour complète, soulignant des fonctionnalités clés telles que les classes de valeur, les types à restriction de nullité, l'analyse d'affectation définitive améliorée et l'initialisation stricte.

Développement Classes de valeur

Le nouveau framework Forked de Swift simplifie la gestion des données partagées

2024-12-17
Le nouveau framework Forked de Swift simplifie la gestion des données partagées

Le développeur Drew McCormack a lancé Forked, un nouveau framework Swift pour simplifier la gestion des données partagées sur des appareils uniques et multiples. Inspiré par le mécanisme de fusion de Git, Forked prend en charge la ramification et la fusion au sein d'un seul fichier, atteignant une cohérence éventuelle. Il ne nécessite pas un historique complet des modifications, seulement suffisamment de versions pour une fusion à trois voies. Forked utilise des structs au lieu de classes, prend en charge Codable et s'intègre parfaitement aux services cloud comme iCloud. Il gère même les conditions de concurrence dues à l'accès concurrentiel et prend en charge la logique de fusion personnalisée ou les algorithmes CRDT intégrés. La synchronisation CloudKit est réalisée en quelques lignes de code.

Nouveau compilateur pour CHICKEN Scheme : CRUNCH – Un compilateur Scheme typé statiquement

2024-12-17

Cet article présente CRUNCH, un nouveau compilateur pour un sous-ensemble typé statiquement du langage de programmation Scheme. Basé sur le système CHICKEN Scheme, il compile du code Scheme en code C99 portable. CRUNCH vise à fournir un compilateur Scheme performant et léger, palliant les lacunes des systèmes Scheme existants en termes de performances et de portabilité. Il est particulièrement adapté au développement de jeux, à la création de machines virtuelles et à la programmation de systèmes embarqués. Bien que CRUNCH présente des limitations quant aux fonctionnalités de Scheme prises en charge, il assure une génération de code efficace grâce à l'inférence de types et à diverses optimisations, s'intégrant parfaitement à l'écosystème CHICKEN Scheme.

Développement Typé Statique

Microsoft publie Multilspy : simplification du développement de clients de serveurs de langage

2024-12-17
Microsoft publie Multilspy : simplification du développement de clients de serveurs de langage

Microsoft a publié Multilspy, une bibliothèque Python conçue pour simplifier la création d'applications autour des serveurs de langage. Prenant en charge Java, Rust, C# et Python, Multilspy automatise le téléchargement des binaires du serveur, la configuration/la désinstallation et fournit une API simple. Il interagit avec les serveurs de langage pour obtenir les résultats d'analyses statiques, tels que la complétion de code, les définitions de symboles et les références, essentiels aux techniques de génération de code assistée par IA comme le Monitor-Guided Decoding.

Bonnes pratiques pour représenter l'héritage dans les bases de données SQL Server

2024-12-17
Bonnes pratiques pour représenter l'héritage dans les bases de données SQL Server

Cet article explore les meilleures pratiques pour représenter les relations d'héritage dans les bases de données SQL Server. Trois approches courantes sont présentées : l'héritage de table unique, l'héritage de table concrète et l'héritage de table de classe. Les avantages et les inconvénients de chacune sont détaillés. L'héritage de table unique est simple mais pose des problèmes d'évolutivité et d'intégrité des données ; l'héritage de table concrète résout ces problèmes mais entraîne des requêtes inefficaces ; l'héritage de table de classe équilibre simplicité et efficacité, ce qui en fait le choix préféré dans la plupart des scénarios. Des approches alternatives utilisant JSON pour les champs spécifiques aux sous-types et la conception de bases de données normalisées sont également abordées.

Rendre votre QEMU 10 fois plus rapide grâce à une astuce étrange

2024-12-17

Lors du débogage de tests NixOS, Linus Heckemann a découvert des temps de copie de données extrêmement longs (plus de 2 heures) sur une machine virtuelle QEMU. L'analyse de performance avec `perf` a révélé que le serveur 9p de QEMU utilisait une liste chaînée inefficace (complexité O(n)) pour les recherches de fichiers. En passant à une table de hachage fournie par glib (complexité O(1)), il a réduit le temps de test à 7 minutes et a contribué avec succès à l'optimisation du projet QEMU.

Développement protocole 9p

Advent of Code sur Nintendo DS : Un défi de programmation Rust sur un système embarqué

2024-12-16

L’auteur a relevé le défi de l’Advent of Code 2024 en utilisant Rust sur une Nintendo DS. Ce récit détaillé relate le parcours, de la configuration d’un environnement de compilation croisée et de l’écriture de code Rust pour un système embarqué sans runtime à la résolution des problèmes de gestion de la mémoire, des interruptions et de la sortie d’affichage. L’auteur a réussi à afficher la solution de l’Advent of Code sur l’écran de la DS. L’article met en lumière de solides compétences en programmation et une compréhension approfondie des systèmes embarqués, soulignant les techniques et le plaisir de la programmation dans des environnements aux ressources limitées.

Développement

Principes de la conception de langages de programmation éducatifs : pourquoi le manque de consensus ?

2024-12-16
Principes de la conception de langages de programmation éducatifs : pourquoi le manque de consensus ?

Cet article explore l'évolution des principes de la conception des langages de programmation éducatifs au cours de plusieurs décennies. Bien que les travaux de Wirth et d'autres aient mis l'accent sur des principes tels que la simplicité et la modularité, un désaccord persiste parmi les éducateurs concernant les langages adaptés aux programmeurs débutants. L'article analyse comment l'interprétation de ces principes évolue dans le contexte des technologies actuelles et pourquoi un langage de programmation éducatif commun et largement utilisé à l'échelle mondiale n'a pas émergé. Les auteurs discutent des mérites relatifs des langages pédagogiques par rapport aux langages industriels et soutiennent que chaque génération d'apprenants a besoin de son propre langage.

Panne majeure chez OpenAI : Un nouveau service de télémétrie provoque une interruption importante

2024-12-16
Panne majeure chez OpenAI : Un nouveau service de télémétrie provoque une interruption importante

OpenAI a subi une panne majeure le 11 décembre, due à un nouveau service de télémétrie récemment déployé. Destiné à améliorer la fiabilité, ce service a généré de manière inattendue une charge massive sur les serveurs de l'API Kubernetes, saturant les serveurs et provoquant la panne du plan de contrôle Kubernetes dans la plupart des grands clusters. Cela a entraîné la défaillance de la découverte de services basée sur le DNS. L'incident met en évidence les interactions imprévisibles au sein des systèmes complexes et les défis liés au test des modes de défaillance qui n'apparaissent que sous pleine charge. OpenAI a restauré le service en réduisant la taille des clusters, en bloquant l'accès réseau aux API d'administration Kubernetes et en augmentant l'échelle des serveurs d'API.

La nouvelle API opaque de Go Protobuf améliore les performances et la sécurité

2024-12-16

L'équipe Go a publié une nouvelle API opaque pour Go Protobuf, coexistant avec l'API Open Struct existante. Cette nouvelle API découple le code généré de sa représentation mémoire sous-jacente, améliorant ainsi les performances, réduisant les allocations mémoire et permettant des optimisations telles que le décodage paresseux. En masquant les champs de la structure et en y accédant uniquement via des méthodes d'accès, elle prévient les bogues liés aux pointeurs et le partage accidentel. La migration implique d'activer l'API hybride, d'utiliser l'outil `open2opaque` puis de basculer vers l'API opaque. L'API Open Struct existante reste prise en charge.

(go.dev)
Développement

Une modification incompatible de GRUB2 provoque une boucle de démarrage de la configuration du BIOS

2024-12-16
Une modification incompatible de GRUB2 provoque une boucle de démarrage de la configuration du BIOS

Les systèmes Debian et Kali Linux de l'auteur ont subi des boucles de démarrage après une mise à jour de GRUB2 ayant ajouté la commande `fwsetup --is-supported`. Les anciennes versions de GRUB ne reconnaissaient pas ce paramètre. Le problème provenait d'un module `efifwsetup.mod` plus ancien, restant d'une restauration de sauvegarde du système, provoquant un conflit entre la nouvelle configuration de GRUB et l'ancien module. L'installation du paquet `grub-efi-amd64-bin` a résolu le problème. Cela souligne l'importance de la compatibilité descendante dans les mises à jour logicielles et la nécessité de prendre en compte les effets secondaires potentiels lors de modifications partielles dans un logiciel complexe comme GRUB2.

Développement boucle de démarrage

Résumé des conférences Ruby : aperçu mondial

2024-12-16

Ruby Video Talks est un site Web qui agrège des informations sur les conférences de développeurs Ruby dans le monde entier. Des événements majeurs tels que RubyConf 2024 (70 conférences) et Rails World 2024 (46 conférences) aux plus petites rencontres régionales, le site fournit un calendrier complet. Il met en évidence des conférenciers clés tels que Matz et propose des fonctions de recherche par date, lieu et sujet, ce qui facilite la recherche d'événements pertinents. Les futures conférences de 2025, telles que Balkan Ruby et Friendly.rb, sont également répertoriées, promettant encore plus d'opportunités pour la communauté Ruby.

Emacs propulsé par Guile : Un projet de réécriture audacieux

2024-12-16

L'éditeur Emacs est réputé pour son extensibilité, mais il rencontre des limites de performance et d'expressivité avec son langage principal, Emacs Lisp (Elisp). Pour y remédier, le projet Guile-Emacs vise à remplacer Elisp dans Emacs par Guile Lisp. Après des années de développement et de dormance, Guile-Emacs a été relancé par les développeurs Robin Templeton et Larry Valkama. Le projet entend exploiter les avantages du compilateur et des performances de Guile pour améliorer la vitesse et l'extensibilité d'Emacs, tout en maintenant la compatibilité avec Elisp. L'objectif final est de réécrire une partie importante du code C d'Emacs en Lisp, améliorant ainsi considérablement sa capacité de personnalisation. Malgré les défis techniques et politiques, le projet offre des perspectives stimulantes pour l'avenir d'Emacs.

Développement

Réécriture de SQLite en Rust : Limbo atteint une réduction de 100x de la latence de queue

2024-12-16

Des chercheurs de l'Université d'Helsinki et de Cambridge ont réécrit SQLite en Rust, créant Limbo, un projet utilisant les E/S asynchrones et io_uring pour améliorer considérablement les performances. Grâce aux E/S asynchrones et à la désagrégation du stockage, Limbo réalise une réduction jusqu'à 100x de la latence de queue, particulièrement avantageux dans les environnements serverless multi-locataires. L'amélioration principale provient du remplacement des instructions de bytecode synchrones par leurs équivalents asynchrones, éliminant les blocages et améliorant la concurrence. Les améliorations sont plus marquées aux percentiles élevés, ce qui rend Limbo idéal pour les applications exigeant une haute fiabilité.

(avi.im)
Développement E/S Asynchrone

Converge recrute un ingénieur full-stack senior : construisez une plateforme de mesure marketing de plusieurs millions de dollars

2024-12-16
Converge recrute un ingénieur full-stack senior : construisez une plateforme de mesure marketing de plusieurs millions de dollars

Converge, une entreprise soutenue par Y Combinator avec plus de 1 million de dollars de revenus annuels récurrents (ARR), recrute un ingénieur full-stack senior. La petite équipe (seulement 4 personnes) sert plus de 180 clients, traitant des milliards de dollars de ventes annuelles et des milliards d'événements par mois. Vous construirez une pile de mesure marketing unifiée, incluant la collecte de données client, la résolution d'identité et l'attribution marketing, avec une interaction directe avec le client et une propriété significative. L'entreprise valorise l'esprit d'action, l'apprentissage continu, le positivisme et la simplicité. Une expérience approfondie en full-stack, une maîtrise de React et du développement back-end, ainsi que des connaissances sur le déploiement et la mise à l'échelle de logiciels de production sont requis.

Composant d'intégration Xiaomi Home Assistant officiellement lancé

2024-12-16
Composant d'intégration Xiaomi Home Assistant officiellement lancé

Xiaomi a officiellement lancé le composant d'intégration Xiaomi Home Assistant, permettant aux utilisateurs d'intégrer leurs appareils intelligents Xiaomi IoT à Home Assistant. Le composant prend en charge plusieurs méthodes d'installation, notamment le clonage Git, HACS et l'installation manuelle. Les utilisateurs doivent se connecter avec leur compte Xiaomi ; plusieurs comptes et la sélection de région sont pris en charge. Le composant prend en charge la plupart des appareils domestiques intelligents Xiaomi, mais exclut actuellement les appareils Bluetooth, infrarouge et virtuels. Les méthodes de contrôle incluent le contrôle via le cloud et le contrôle local (nécessitant une passerelle centrale Xiaomi ou des appareils avec passerelle intégrée). Il mappe MIoT-Spec-V2 aux entités Home Assistant. Le composant prend également en charge plusieurs langues et un mode de débogage, en priorisant la confidentialité et la sécurité de l'utilisateur, mais nécessite un stockage prudent des fichiers de configuration.

L'erreur à un million de dollars d'un programmeur : un bug avec un rebondissement dramatique

2024-12-16
L'erreur à un million de dollars d'un programmeur : un bug avec un rebondissement dramatique

Trey, un programmeur travaillant pour une start-up de télécommunications 3G, a écrit un programme de test de paiement automatisé destiné à de petites transactions de test. Cependant, trois bugs dans le code ont fait que le programme crédite son compte de test de 100 $ toutes les cinq minutes. L'absence de vérification d'activité signifiait que lorsqu'une passerelle échouait, le programme continuait à s'exécuter pendant des heures, accumulant une somme considérable. Le lendemain matin, Trey a été interrogé par l'équipe de sécurité jusqu'à ce que son responsable de département explique la situation, mais le solde du compte de test a été remis à zéro.

Association Modelica : Modélisation efficace des systèmes complexes

2024-12-16

L'Association Modelica promeut le langage Modelica et ses outils associés. Modelica est un langage orienté objet pour la modélisation et la simulation de systèmes cyber-physiques complexes, particulièrement adapté à la modélisation acausale de composants réutilisables régis par des équations mathématiques. L'association fournit les spécifications du langage, les outils, les bibliothèques et le support communautaire pour permettre aux utilisateurs de modéliser efficacement les systèmes.

NAS minimaliste : frood, un système Alpine initramfs

2024-12-16
NAS minimaliste : frood, un système Alpine initramfs

L'auteur présente frood, un système NAS construit sous la forme d'une seule et grande image initramfs contenant un système Alpine Linux complet. Cette conception permet des temps de démarrage rapides et réduit l'usure des dispositifs de stockage. La configuration est simple : les fichiers résident directement dans l'image, éliminant ainsi les DSL complexes ou les outils de configuration. L'état du système est suivi à l'aide de Git, et chaque démarrage est en fait un nouveau départ, évitant l'accumulation de désordre dans la configuration. L'article détaille le processus de construction du système, notamment l'utilisation du script alpine-make-rootfs, l'installation des paquets essentiels et la rédaction des scripts de démarrage. Les tests avec QEMU et la procédure de mise à jour de l'image système sont également décrits. En résumé, frood est un système NAS léger, facile à maintenir et à déployer, dont la philosophie de conception simple mérite d'être imitée.

Développement

État actuel d'HTTP/3 : défis et opportunités sur la voie de l'adoption

2024-12-16
État actuel d'HTTP/3 : défis et opportunités sur la voie de l'adoption

Les spécifications HTTP/3 sont terminées, mais attendent leur publication finale. Le support côté serveur est étonnamment élevé, notamment parmi les principaux sites web. De grands acteurs comme Cloudflare ont activé HTTP/3, et les navigateurs le prennent largement en charge. Cependant, le support côté client, comme dans curl, reste incomplet, en grande partie en raison du développement retardé des bibliothèques TLS compatibles avec QUIC. Le support QUIC d'OpenSSL a été retardé, tandis que des alternatives comme BoringSSL et quictls présentent des limitations. Bien qu'HTTP/3 promette des améliorations de vitesse, les avantages réels dépendent des conditions du réseau. L'adoption généralisée dépend de la publication des spécifications et de bibliothèques TLS matures.

Développement

Vec::drain de Rust : exploitation de Drop pour la sécurité

2024-12-16
Vec::drain de Rust : exploitation de Drop pour la sécurité

Cet article explore en profondeur la méthode Vec::drain de Rust et son implémentation Drop, illustrant comment la propriété prévient les bogues subtils, liés à la mémoire ou autres. Vec::drain optimise les performances en maintenant une référence mutable au vecteur original et en ne lisant/mettant à jour que le stockage original. La clé réside dans l'implémentation Drop de la structure Drain, qui utilise un DropGuard pour garantir que, même si l'itérateur est abandonné prématurément, les éléments restants sont déplacés en toute sécurité vers le vecteur original, assurant ainsi la sécurité mémoire. L'article explique en détail les aspects d'implémentation de Drain et DropGuard, en traitant des cas spéciaux comme les types de taille nulle et la provenance des pointeurs.

Développement

Le nouveau mode --shuffle de GNU Make : découverte de bogues cachés dans les compilations parallèles

2024-12-16

Pendant onze ans, des bogues difficiles à reproduire ont affecté les compilations parallèles dans GNU Make. Inspiré par cela, un nouveau mode `--shuffle` a été développé pour réorganiser aléatoirement les cibles du Makefile, simulant un ordre de compilation non déterministe. Cela a révélé efficacement des bogues cachés dans plus de 30 paquets, notamment gcc, vim et ghc. Désormais intégré à GNU Make 4.4, ce mode est accessible via `make --shuffle` ou la variable d’environnement `GNUMAKEFLAGS=--shuffle`. Cette fonction puissante aide les développeurs à identifier et à résoudre les problèmes de compilation parallèle, soulignant l’amélioration continue des outils de développement logiciel.

Nouveau système d'équilibrage de charge de Google, PReQuaL : au-delà de l'équilibrage de charge du processeur

2024-12-16

Google Research a présenté PReQuaL (Probing to Reduce Queuing and Latency), un nouveau système d'équilibrage de charge, à la NSDI 2024. Contrairement à l'équilibrage de charge du processeur traditionnel, PReQuaL sonde activement la latence du serveur et les requêtes actives pour sélectionner les serveurs, réduisant ainsi considérablement la latence de queue, les taux d'erreur et la consommation de ressources sur des systèmes tels que YouTube. Déployé sur YouTube depuis plus d'un an, PReQuaL a considérablement amélioré l'utilisation du système. Cette approche innovante remet en question la sagesse conventionnelle et offre un nouveau paradigme pour les systèmes distribués hautes performances.

Développement équilibrage de charge

Un voyage d'ingénierie logicielle en CAO et impression 3D : un support de webcam surdimensionné

2024-12-16

Un ingénieur logiciel chevronné, las du monde virtuel de la programmation, aspirait à créer dans le monde réel. Il a acquis une imprimante 3D Bambu Lab X1C et a rapidement maîtrisé l'impression 3D. Il a ensuite commencé à apprendre le logiciel de CAO Fusion 360, découvrant avec surprise que ses concepts de contraintes ressemblaient aux contraintes de l'interface utilisateur iOS, et la conception CAO paramétrique faisant écho à la programmation fonctionnelle. Son premier projet : un support de webcam surdimensionné pour résoudre le problème de la webcam obstruant son écran. Ce projet lui a non seulement procuré la joie de l'impression 3D et de la conception CAO, mais aussi une compréhension approfondie de la fabrication, des matériaux et d'autres détails à prendre en compte lors de la phase de conception.

Développement impression 3D conception CAO

Adélie Linux 1.0-BETA6 disponible : compatibilité améliorée et fonctionnalités enrichies

2024-12-16
Adélie Linux 1.0-BETA6 disponible : compatibilité améliorée et fonctionnalités enrichies

Adélie Linux a publié sa version 1.0-BETA6, prenant en charge les architectures ARM, POWER et x86 32 et 64 bits, couvrant ainsi les smartphones, les consoles de jeux et les superordinateurs. Cette version comprend plus de 35 nouveaux paquets, des mises à jour pour GCC 13, LLVM 18, Rust 1.80 et le noyau Linux 6.6 LTS, ainsi qu'une prise en charge améliorée de GRUB et de Wayland. De nombreux bogues ont été corrigés et l'expérience utilisateur a été améliorée. Bien que quelques problèmes connus persistent, l'équipe Adélie travaille activement sur leurs solutions et apprécie les rapports de bogues et les commentaires.

Développement distribution Linux
1 2 85 86 87 88 90 92 93