Comment créer un système d'exploitation pour ordinateur

Un système d'exploitation est ce qui permet à un ordinateur de fonctionner, aussi bien pour connecter des périphériques entre eux que pour exécuter des programmes. À y regarder de plus près, c'est un ensemble de programmes composé de centaines de milliers de lignes de codes, le plus souvent en langage C, C++ ou assembleur.

Étapes

  1. Avant de vous lancer, vous devez savoir programmer. Maitriser un langage dit « assembleur » est le minimum, même si le plus souvent il faut aussi en maitriser un autre, le langage C étant particulièrement utile.
  2. Déterminez le support sur lequel vous allez installer votre système d'exploitation. Ce peut être un lecteur de CD ou de DVD, une clé USB, un disque dur, une disquette ou un autre PC.
  3. Déterminez ce que devra accomplir votre système d'exploitation. Vous avez le choix entre un système d'exploitation complet, avec, entre autres, une interface graphique utilisateur et quelque chose de plus basique. Vous devez décider dès le départ.
  4. Optez pour un processeur capable d'être géré par votre système d'exploitation. Les processeurs IA-32 et x86_64 sont aujourd'hui les plus courants sur les ordinateurs personnels, aussi serait-il judicieux que vous choisissiez l'un d'eux.
  5. Déterminez à l'avance si vous allez tout coder ou si vous allez emprunter, par exemple, un noyau qui vous servira de base. « Linux From Scratch » (LFS) est ainsi un projet qui permet de construire sa propre distribution Linux.
  6. Déterminez également à l'avance si vous allez créer votre propre chargeur d'amorçage ou si vous en adoptez un déjà construit, comme GRUB (pour « Grand Unified Bootloader »). L'élaboration d'un chargeur est un travail long qui requiert des connaissances approfondies tant au niveau du matériel que du BIOS. Tout dépend aussi du temps que vous vous êtes imparti.
  7. Déterminez quel langage de programmation vous allez adopter. Théoriquement, il est possible de construire un système d'exploitation en Pascal ou en Basic, mais il vaut mieux utiliser le C ou un langage assembleur. Ce dernier est absolument indispensable, certaines parties du système d'exploitation devant être écrites dans ce langage. De son côté, le langage C++ a une syntaxe (mots-clés) qui n'est opératoire que si le système d'exploitation est déjà construit.
    • Pour compiler un système d'exploitation en C ou en C++, vous devrez, à un moment ou un autre, recourir à un compilateur. Quel que soit le compilateur choisi, vous devrez, dans un premier temps, vous plonger dans la documentation qui l'accompagne, que vous l'ayez obtenu sur un support physique ou téléchargé. Vous devrez entrer dans la complexité de votre compilateur et, dans le cas d'une programmation en C++, vous devez savoir comment votre compilateur gère les erreurs de codage et comment fonctionne l'interface binaire-programme (ABI). Sachez qu'il existe différents formats de programmes précompilés ou exécutables (ELF, PE, COFF, « plain binary », etc.) et que parmi eux, le format PE (.exe) est propriété de Windows, donc protégé par des droits d'auteur.
  8. Déterminez l'interface de programmation (API). Nous ne saurions trop vous conseiller d'opter pour les normes POSIX, dont l'avantage est d'être très bien documentées. Le standard POSIX est totalement ou partiellement implémenté sur les systèmes tournant sous Unix, ce qui permet à des programmes Unix de tourner sur n'importe quel autre système d'exploitation.
  9. Déterminez votre architecture. Vous avez le choix entre un système à noyau monolithique et celui à micronoyaux. Les premiers ne renferment que les fonctions fondamentales du noyau, tandis que les seconds sont de petits noyaux avec des services qui tournent en mode espace utilisateur (« userland »). Les noyaux monolithiques sont plus rapides, tandis que les micronoyaux sont plus stables et plus sécurisés.
  10. Pensez à travailler en équipe. Plusieurs expériences valent mieux qu'une : vous allez résoudre ensemble nombre de problèmes. Outre le temps gagné, vous aurez un système d'exploitation plus performant.
  11. N'effacez pas complètement votre disque dur pour installer votre système d'exploitation. Vous perdriez toutes vos données. Installez GRUB ou tout autre programme d'amorçage qui vous permettra de démarrer votre ordinateur en attendant que votre système d'exploitation soit opérationnel.
  12. Commencez petit ! Commencez modestement avec, par exemple, un simple affichage de texte et des interruptions avant de vous attaquer à des « morceaux plus coriaces », comme la gestion de la mémoire et la fonction multitâche.
  13. Sauvegardez régulièrement votre travail. Ainsi, en cas de grosse erreur sur le système, vous ne repartiriez pas de zéro. De même, si votre ordinateur venait à « planter » méchamment au point de ne pouvoir être redémarré, vous serez rassuré de savoir qu'une copie vous attend quelque part.
  14. Le plus souvent, on teste le nouveau système d'exploitation sur une machine dite « virtuelle ». Plutôt que de redémarrer votre ordinateur chaque fois que vous avez opéré des modifications ou transféré de nouveaux fichiers, pensez à utiliser ce qu'on appelle une machine virtuelle. Il vous faut pour cela un programme d'émulation qui va faire comme si vous aviez deux systèmes d'exploitation, le « vrai » et votre ébauche de système d'exploitation. Parmi ces émulateurs, citons VMWare (flanqué d'une application serveur disponible gratuitement), Bochs (open source), Microsoft Virtual PC (non compatible avec Linux) et xVM VirtualBox.
  15. Faites connaitre l'état d'avancement de votre projet (versions alpha, bêta…). Ainsi, les utilisateurs pourront vous faire part de leurs critiques.
  16. Si vous voulez mettre sur pied un système d'exploitation convivial, il vous faudra ajouter à votre architecture quelques fonctionnalités de votre choix.

Conseils

  • Voyez s'il y a des interblocages (« deadlocks ») et autres bogues. Ces défauts peuvent ralentir, voire réduire à néant votre projet.
  • Quand on construit un système d'exploitation, la sécurité doit être la priorité absolue. Vous devez donc y travailler sérieusement en implémentant ce qu'il faut.
  • N'hésitez pas à consulter certains sites (OSDev et OSDever) en cas de difficultés. Cependant, la communauté OSDev.org renvoie les débutants vers ses pages wiki, le forum étant destiné aux programmeurs plus que confirmés. Si vous décidez de participer au forum, sachez qu'il y a une condition : vous devez bien maitriser le C ou le C++ et le langage assembleur x86. Vous devez aussi maitriser des concepts de programmation très avancés comme les listes chainées, les files (structures de données), etc. La communauté OSDev s'est très clairement positionnée : elle n'est pas là pour donner des cours et des explications aux apprentis programmeurs ! Que cela soit dit ! Vous avez bien compris que pour créer un système d'exploitation, il fallait être un « as » de l'informatique. Quand vous aurez choisi l'architecture externe de processeur de votre système d'exploitation, il faudra vous munir des bons manuels qui la décrivent, que ce soit x86 (Intel), ARM, MIPS, PPC, etc. Vous les trouverez facilement en tapant dans Google des requêtes du type« manuels Intel », « manuels ARM »… Inutile d'aller sur les forums de OSDev.org pour poser des questions de débutant ! Vous vous attireriez des réponses pas très polies du genre : « Read the f***ing Manual » (la décence nous interdit de traduire !) Avec de bons manuels, Wikipédia et quelques bons sites, vous devriez vous en tirer.
  • Quand votre système d'exploitation sera terminé, ce sera à vous de décider si vous le protégez par des droits d'auteurs ou si vous donnez le code à tous (open source).
  • Ne vous lancez pas dans cet ambitieux projet sans savoir programmer. Si vous ne maitrisez ni le C, le C++, le Pascal ou tout autre langage de programmation, ni la manipulation des pointeurs, la manipulation de bit pour opérations de bas niveau, le décalage de bit, le code assembleur « inline », il est inutile de songer à créer un système d'exploitation, vous iriez à l'échec !
  • Il est généralement judicieux de construire son système d'exploitation sur une partition de votre disque dur.
  • Pour vous faciliter la tâche, pensez aux distributions Linux toutes prêtes, comme Fedora Revisor, Custom Nimble X, Puppy Remaster, PCLinuxOS mklivecd, SUSE Studio ou encore SUSE KIWI. Sachez cependant que votre système d'exploitation ne vous appartient pas entièrement dans la mesure où vous avez fait des emprunts, mais vous pourrez le distribuer gratuitement, le modifier, si vous respectez les clauses de la LPG (pour Licence Publique Générale).

Avertissements

  • L'installation de votre nouveau système d'exploitation sur le disque dur de votre ordinateur peut tourner à la catastrophe. Prudence donc !
  • Inutile de vous dire que vous ne créerez pas un système d'exploitation en 15 jours ! Commencez par créer un système d'exploitation qui démarre et petit à petit, étoffez-le.
  • Si vous faites n'importe quoi, comme envoyer n'importe quelle donnée vers n'importe quel port d'entrée ou de sortie, vous allez planter votre système et éventuellement endommager votre matériel.
  • Construire un système d'exploitation est tout, sauf simple ! Il faut penser à tout, les éléments internes comme externes et tout interagit, parfois en même temps. Ainsi, si vous voulez un système d'exploitation capable de gérer plusieurs processeurs, votre gestionnaire de mémoire devra être configuré en sorte qu'il « empêche » tous les processeurs d'accéder au même moment à la même ressource. Ce ou ces « blocages » seront activés par un allocataire de mémoire qui donnera la priorité (définie par vous) à tel processeur, les autres devant attendre leur tour. L'allocation de mémoire dépend du gestionnaire de mémoire. Si c'est mal fait, vous allez vous retrouver avec des interblocages et des dépendances de données. Il n'y a pas de solution unique pour régler de tels problèmes : tout programmeur d'un système d'exploitation doit avoir suffisamment de connaissances pour trouver une solution.

Éléments nécessaires

  • Un ordinateur
  • Un processeur adapté à la plateforme que vous allez développer
  • Suffisamment de mémoire vive (RAM) pour la machine virtuelle
  • Un système d'exploitation 'hôte' (qui sera utilisé pour tester votre système - ce peut très bien être le système d'exploitation dont est équipé actuellement votre ordinateur)
  • Un éditeur de code avec syntaxe en couleur (si vous n'avez pas d'environnement de développement de type IDE)
  • Un compilateur
  • Un lecteur de CD/DVD
Information
Les membres de Guests ne peuvent laisser de commentaires.