1 points par GN⁺ 2025-01-26 | 1 commentaires | Partager sur WhatsApp
  • Snowdrop OS est un système d’exploitation 16 bits en mode réel pour l’architecture IBM PC, un OS homebrew implémenté entièrement à la main en assembleur x86, du démarrage à l’exécution des applications
  • La distribution est proposée sous forme d’image de disquette 1,44 Mo et d’image CD-ROM, avec le chargeur d’amorçage, le noyau, le shell, des utilitaires, des applications de test et le clone de Tetris aSMtris
  • Le chargeur d’amorçage de 512 octets localise le noyau et le charge en mémoire, puis le noyau configure les vecteurs d’interruption pour les applications avant de charger l’application de démarrage
  • Il inclut un gestionnaire de fichiers, un éditeur de texte, des applications graphiques, un interpréteur BASIC, ainsi qu’un assembleur x86 et un débogueur, ce qui permet de développer et d’expérimenter directement dans l’OS
  • Le code source est publié sans restriction d’utilisation ni de modification, ce qui en fait une ressource de référence pour les programmeurs qui veulent suivre de près le fonctionnement bas niveau d’un système d’exploitation

Une architecture implémentée à la main, du boot aux applications

  • Snowdrop OS est né de la curiosité de comprendre ce qui se passe quand on allume un PC, comment fonctionne un disque amorçable et comment s’organise l’intérieur d’un système d’exploitation
  • La cible est un OS 16 bits en mode réel pour l’architecture IBM PC, écrit entièrement depuis zéro en assembleur x86
  • L’image de distribution est proposée sous deux formats
    • image de disquette 1,44 Mo
    • image CD-ROM
  • L’image embarque aussi des composants de base écrits à la main
    • un chargeur d’amorçage qui charge le noyau en mémoire
    • un noyau qui configure les vecteurs d’interruption pour les applications utilisateur puis charge l’application de démarrage
    • des applications utilisateur comme le shell, des utilitaires, des applications de test et le clone de Tetris aSMtris
  • Si un disque dur est détecté pendant le démarrage, le système propose l’installation de Snowdrop OS sur le disque
  • Les applications et outils inclus vont jusqu’au gestionnaire de fichiers, à l’éditeur de texte, aux applications graphiques, à l’interpréteur BASIC, à l’assembleur x86 et au débogueur x86
  • Le code source de Snowdrop OS et de ses applications est publié sans restriction d’utilisation ni de modification

Zones du code source qui valent le détour

  • Boot loader : tient dans 512 octets et localise puis charge le noyau
  • kernel : fournit des services de base et des abstractions aux applications
  • Graphics and GUI framework : base pour créer des applications graphiques pilotées à la souris
  • x86 assembler : permet de créer directement des applications bas niveau dans Snowdrop OS
  • BASIC interpreter : outil pour créer rapidement des applications de plus haut niveau
  • x86 debugger : peut être utilisé avec l’assembleur
  • Dynamic data structure libraries : prend en charge les structures de données dynamiques comme les listes chaînées, les arbres et les BST
  • All applications : inclut des jeux, un éditeur de texte, un gestionnaire de fichiers, des outils et des applications de test

Des fonctionnalités enrichies version après version

  • L’historique des versions montre une progression continue depuis v1, limitée à une seule tâche, au shell et à aSMtris, jusqu’à l’ajout progressif de nouvelles fonctions
    • v2 : pilote de souris PS/2 et application de test de la souris
    • v3 : multitâche basique et prise en charge d’affichages virtuels
    • v4 : pilote FAT12 avec écriture et suppression, gestionnaire de fichiers, éditeur de texte
    • v6 : jeu Snake multijoueur via port série
    • v16 : framework GUI
    • v18 : interpréteur BASIC et éditeur de liens
    • v19 : installation sur disque dur
    • v22 : assembleur x86, prise en charge de plusieurs disques, utilitaire de visualisation de fichiers
    • v23 : débogueur x86
    • v25 : mémoire dynamique et structures de données
    • v28 : GUI haute résolution, application de dessin, application de bureau
    • v31 : bibliothèque d’exécution et RTL de l’interpréteur BASIC

1 commentaires

 
GN⁺ 2025-01-26
Avis sur Hacker News
  • Au milieu des années 90, j’ai créé quelque chose de similaire, un OS graphique 32 bits de loisir, et ce livre était vraiment incontournable
    https://www.amazon.com/Developing-32-Bit-Operating-System-Cd...

    • Il peut être lu gratuitement
      https://web.archive.org/web/20140704223135/https://www.ipdat...
      Après avoir acquis les droits, Sensory Publishing en a changé le titre et en a imprimé 1 000 exemplaires supplémentaires, mais il n’en reste aujourd’hui qu’environ 200 et ils ne sont plus vendus. Le livre serait désormais dans le domaine public, et les exemplaires restants seraient conservés pour la Great Alexandria Library
  • Si ce genre de projet vous intéresse, MenuetOS et KolibriOS valent aussi le détour. KolibriOS est un fork de MenuetOS datant d’il y a longtemps
    MenuetOS a aussi une version x64 avec prise en charge du SMP, mais celle-ci est propriétaire

    • J’aimerais apprendre l’assembleur, mais je n’ai pas trouvé sur Coursera de cours adapté aux vrais débutants. J’ai de l’expérience en Java et je suis en train de suivre un cours de C/C++ pour me rapprocher du matériel
    • Je ne comprends pas pourquoi on ferait ça en code propriétaire en 2025
      À part pour un OS de loisir, je me demande qui utiliserait réellement ce genre de chose sur une machine x64 multicœur
    • Si vous voulez encore plus fou, il y a aussi TempleOS
  • Je me demande quelles sont aujourd’hui les dernières idées vraiment intéressantes en matière de conception d’OS, du point de vue utilisateur comme du point de vue hacker d’OS

    • C’est publié discrètement, mais je travaille sur une nouvelle conception de noyau. C’est ma 12e et dernière réécriture, et cela fait environ un an que je la développe
      https://github.com/oro-os/kernel
      C’est une conception de micro-noyau sans utilisateurs ni capabilities, où le contrôle d’accès est imposé via la hiérarchie d’entités du noyau. Les ports de mémoire partagée, avec plusieurs niveaux de sûreté, sont le principal mécanisme d’IPC, et ils sont typés au niveau du noyau
      J’en suis actuellement à la phase finale de validation de l’utilité du noyau. Si j’arrive à prouver la conception, j’écrirai quelque chose de plus formel. Cela fait environ 8 ans que le projet est dans ma tête, et 4 ans qu’il existe dans l’éditeur
    • Les idées intéressantes de Plan 9 n’ont, pour la plupart, toujours pas été surpassées ni correctement réimplémentées
      https://doc.cat-v.org/plan_9/3rd_edition/rio/rio_slides.pdf
    • Fuchsia contient pas mal d’idées assez audacieuses. Micro-noyau, capabilities, système d’installation d’applications particulier, et on dirait qu’ils essaient de rapprocher les apps des sites web
      https://rtic.rs/ est une idée assez intéressante dans un domaine proche des RTOS embarqués
      Honnêtement, il existe encore des fonctionnalités de Plan 9 qui sont très en avance sur Linux. Par exemple https://9p.io/sys/doc/lexnames.html
    • Genode [1] a une approche intéressante de la conception d’OS en tant que framework. Je ne sais toutefois pas quelle quantité d’assembleur il contient
      [1] https://genode.org
    • En tenant compte de ces deux extrêmes au sens large, je pense que la meilleure réponse est Redox OS
      https://redox-os.org/
  • Dans le même ordre d’idées, je me demande quelles avancées existent du côté des RTOS hautes performances pour la robotique. Ce domaine semble susciter relativement peu d’attention
    ROS/ROS2 ne sont pas des systèmes d’exploitation, et la plupart ne correspondent pas non plus à ce qu’on appellerait du logiciel haute performance

    • x86 et RTOS ne font pas bon ménage, à cause de facteurs comme le SMM et les caches complexes. Si vous avez des tâches hautes performances, il est probable que vous préfériez les piloter avec un, ou plusieurs, MCU embarqués séparés
      Côté embarqué, il existe beaucoup d’OS comme FreeRTOS, Zephyr et ThreadX, ainsi que plusieurs solutions propriétaires comme Nvidia DriveOS
      Les OS embarqués sont toutefois nettement plus limités que les OS généralistes comme Linux. Ils ont un planificateur de tâches, mais les processus, systèmes de fichiers, chargement dynamique de fichiers et outils binaires sont souvent absents ou optionnels
    • Les gens qui font ça sérieusement semblent utiliser QNX ou VxWorks. Malheureusement, la plupart des projets de robotique ne sont pas très sérieux et font tourner Ubuntu
    • Ce n’est pas un RTOS au sens habituel du terme, mais RTIC est pas mal. D’après ce que je sais, il a été développé à l’origine pour la robotique
      https://rtic.rs
  • Il y a ces articles liés. Y en a-t-il d’autres ?
    Homebrew an OS from Scratch? Snowdrop Shows How It's Done - https://news.ycombinator.com/item?id=39005640 - Jan 2024 (1 commentaire)
    Snowdrop OS – a homebrew operating system from scratch, in assembly language - https://news.ycombinator.com/item?id=28090574 - août 2021 (3 commentaires)

  • Pour être précis, c’est de l’assembleur x86

    • Pour être encore plus précis, c’est de l’assembleur x86 en mode réel 16 bits
  • L’ensemble d’outils et d’apps créés est impressionnant. Et pourtant, il ne semble pas avoir succombé à la tentation du self-hosting
    Pour mettre l’assembleur au niveau de nasm, il faudrait sans doute plus de travail, ou rapprocher l’ensemble du code source de Snowdrop ASM

  • Ce serait bien d’avoir aussi V32, un compilateur BASIC
    Il devrait être possible de faire une demande de fonctionnalité

  • J’aimerais voir ce genre de chose porté sur esp32, par exemple sur une carte ttgo vga32
    Ce serait bien d’avoir un OS de base avec GUI et shell, avec carte SD, VGA, son, clavier/souris, WiFi et Bluetooth. Dans l’esprit d’un Commodore 64 moderne, avec impression WiFi même limitée au texte, un navigateur façon lynx, de l’e-mail, IRC, gopher, etc.

  • Les prérequis de build de Snowdrop OS sont impressionnants
    Works on: Windows XP 32bit, Windows 98, Windows 95