Si vous connaissez parfaitement les langages Assembleur, C ou C++, vous pourrez envisager de concevoir et de créer un système d'exploitation, ce qui est une tâche complexe. Les systèmes d'exploitation ont pour rôle de gérer le fonctionnement des composants matériels d'un ordinateur et les ressources qui seront nécessaires pour permettre l'exécution d'applications. Écrire de toutes pièces un tel système fera appel à une parfaite connaissance des langages de programmation informatique que vous devrez utiliser ainsi que de la gestion du code que vous produirez.
Étapes
-
Prenez des cours de programmation informatique. À la différence du développement d'applications pour le web, la création d'un système d'exploitation requerra de votre part une très bonne compréhension des concepts d'algorithmes, de structures de données et de gestion de ressources matérielles [1] X Source de recherche . Pour en arriver à ce point, beaucoup de gens obtiennent des diplômes d'un niveau très poussé et vous devez réaliser que ce ne sera pas en lisant un simple tutoriel que vous pourrez créer votre système d'exploitation. Des cours d'introduction à l'informatique sont disponibles gratuitement sur Internet.
-
Apprenez un langage de haut niveau comme Python. Lorsque vous aurez acquis une bonne compréhension de ce que représente l'informatique, l'étape suivante consistera pour vous à apprendre des langages tels que le C ou le C++ et à les connaitre sur le bout des doigts . Ce n'est pas une option et vous n'arriverez jamais à coder le contenu d'un système d'exploitation si vous êtes incapable d'écrire des applications suffisamment robustes.
- Si vous débutez en langage C, consultez ce cours de programmation en langage C pour débutants qui est en langue anglaise, mais a l'avantage d'être gratuit. Lorsque vous aurez assimilé le contenu de ce premier cours, vous pourrez passer à l'étape suivante sur les principes fondamentaux du langage C . Vous pourrez ensuite passer à la programmation modulaire et la gestion de mémoire puis aux Pointeurs et la gestion de mémoire . Les cours ici mentionnés sont dispensés gratuitement par EDX et des professeurs du Dartmouth College . Notez qu'il est important de comprendre la langue anglaise pour avoir accès aux meilleurs textes dans ce domaine.
-
Apprenez un langage d'assemblage. Les langages d'assemblage représentent ce qu'il y a de plus bas niveau et permettent de maitriser les microprocesseurs des divers ordinateurs existant sur le marché au niveau du matériel. Chaque microprocesseur a un langage mnémonique qui lui est propre (x86 de Intel, AMD ou VIA ou autres) et de ce fait, vous devrez apprendre les versions correspondant à chacun des microprocesseurs sur lesquels vous voulez programmer. Comme pour l'apprentissage de diverses langues étrangères, vous devrez acquérir pour chaque type de processeur un vocabulaire (les instructions mnémoniques) et la grammaire (les modes d'adressage) qui leur sont propres. Ce n'est pas une tâche facile, mais c'est ainsi que vous apprendrez le fonctionnement de chaque type de processeur équipant les matériels sur lequel vous voulez programmer.
- Si vous lisez ce livre open source dans sa totalité, vous acquerrez de robustes connaissances des microprocesseurs de la famille Intel et pourrez ainsi commencer à comprendre comment construire un système d'exploitation [2] X Source de recherche .
- Il est hautement recommandé de lire The Art of Assembly Language (l'art de la programmation en Assembleur), qui est disponible en ligne et téléchargeable gratuitement au format PDF pour l'imprimer et le lire hors ligne à tête reposée.
- Vous devrez aussi effectuer des recherches ciblant plus particulièrement les microprocesseurs sur lesquels vous prévoyez de faire tourner votre système d'exploitation. Vous pourrez utiliser Google pour trouver les manuels téléchargeables décrivant les architectures de beaucoup de microprocesseurs, comme celles des fameux Intel IA64 ou celles des processeurs des familles ARM qui sont très volumineuses.
-
Suivez un tutoriel concernant les systèmes d'exploitation. Vous pourrez ainsi assimiler le fonctionnement élémentaire d'un système d'exploitation et avoir une idée beaucoup plus claire de ce que vous voulez créer. Lorsque vous serez bien introduit à ce genre de logiciels, vous pourrez avoir un concept plus clair de la tâche que vous devrez mener à bien.
- Le tutoriel Bare Bones vous aidera à concevoir votre premier noyau en 32 bits. Lorsque vous aurez assimilé le contenu de ce premier document en ligne, vous pourrez passer à Meaty Skeleton pour apprendre à structurer proprement votre propre système d'exploitation.
- Linux from Scratch (Linux depuis rien) est un livre à lire en ligne qui vous permettra de parcourir les étapes de création d'un premier système basé sur un noyau Linux.
- Operating systems from 0 to 1 (les systèmes d'exploitation de 0 à 1) est un livre gratuit et téléchargeable permettant d'appréhender toutes les étapes de la création de divers systèmes d'exploitation.
-
Faites-vous une idée de ce que devra faire votre système. Demandez-vous ce que vous voulez que fasse votre système et comment il doit être perceptible par ses utilisateurs. Demandez-vous si vous avez besoin de créer un système d'exploitation complet ou s'il s'agit de donner une apparence particulière à un ordinateur de bureau. Ce seront les premiers éléments à prendre en compte avant de vous attaquer au codage [3] X Source de recherche .
- Effectuez le développement de votre OS en vous adjoignant une équipe de programmeurs. Le développement en équipe coordonnée vous permettra de réduire significativement le temps de travail nécessaire pour arriver à votre objectif.
- Ajoutez des plans et des objectifs sur votre site web et posez des questions de telle manière que vous puissiez recevoir des suggestions et éventuellement de l'aide de vos lecteurs.
Publicité
-
Choisissez un environnement de développement. Il s'agit de la plateforme sur laquelle vous devrez coder votre nouveau système d'exploitation. C'est bien souvent une question de préférences personnelles, mais la plupart du temps, cela se fera sous Windows ou sur une version d'Unix ou de Linux. Si vous utilisez Windows, vous devrez installer un environnement de type Unix comme Cygwin ou MinGW. Vous devrez vous assurer que, quel que soit l'environnement que vous choisirez, il devra être composé comme suit :
- un compilateur GNU GCC ; si vous avez l'habitude de travailler sous Windows, vous pourrez l'installer dans Cygwin ou MinGW ;
- il existe une collection d'utilitaires nommée Binutils qui est conçue pour la manipulation des fichiers des programmes ; vous devrez également l'installer dans Cygwin ou MinGW si vous travaillez sous Windows ;
- un bon éditeur de textes ; Vim, Emacs et Geany sont fréquemment utilisés sous Linux pour l'édition des codes sources, mais les développeurs habitués à travailler sous Windows pourront porter leur choix sur Notepad++ qui permet de travailler simultanément sur plusieurs fichiers sous forme d'onglets ;
- les interpréteurs Perl ou Python sont recommandés pour effectuer des manipulations de chaines de caractères.
-
Mettez en place un système de contrôle de versions. Écrire un système d'exploitation signifie que vous devrez créer des dizaines de milliers de lignes de code et travailler sur des révisions de ce code peut souvent donner lieu à des confusions pouvant avoir des conséquences couteuses en temps. Consultez, pour remédier à cela, les options proposées par les sites CVS , Mercurial et Subversion .
-
Choisissez un chargeur d'amorçage. Un système d'exploitation, c'est très bien, mais il doit démarrer sans intervention humaine et il doit donc pour cela et en tout premier lieu, exécuter un chargeur d'amorçage pour fonctionner. Si vous ne voulez pas créer votre propre chargeur d'amorçage pour ne pas réinventer la roue , vous pouvez opter pour un chargeur d'amorçage existant et open source comme GRUB , qui a déjà fait ses preuves et est utilisé sur la plupart des distributions Linux. Si, au contraire, vous vous sentez de taille à coder votre propre chargeur d'amorçage, consultez la page la création de son propre chargeur d'amorçage du site OSDev.org.
-
Optez pour la conception d'un noyau. Le noyau représente le cœur d'un système d'exploitation. Il fournit l'interface entre l'utilisateur et la partie matérielle d'un ordinateur. Certains noyaux sont dits monolithiques et d'autres sont appelés micronoyaux . Un noyau monolithique implémente toutes les fonctionnalités nécessaires dans le même bloc logiciel tandis qu'un micronoyau est constitué d'un tout petit morceau de logiciel autour duquel gravitent de petites routines implémentant au moment requis les fonctionnalités matérielles à exécuter. Les noyaux monolithiques sont en général les plus rapides, mais aussi les plus volumineux et les micronoyaux sont dotés de meilleures caractéristiques d'isolement de défauts et, par voie de conséquence, de fiabilité.
-
Comme pour tout travail, commencez par le commencement. Débutez votre développement avec de petites tâches simples, comme celles gérant les interruptions du système et l'affichage de texte avant de passer à la vitesse supérieure en vous attaquant aux modes multitâches et au verrouillage de la mémoire. Vous pourrez aussi essayer de construire un système d'exploitation 16 bits plutôt que de plonger immédiatement dans la création d'un système d'architecture complexe de 32 ou 64 bits qui sera difficile à gérer.
- N'espérez pas obtenir un système complet en deux semaines. Commencez déjà à créer un système capable de démarrer, puis portez votre attention sur la gestion de tâches simples avant d'aller plus avant.
-
Testez votre nouveau système dans une machine virtuelle. Vous n'aurez pas à redémarrer votre ordinateur à chaque fois que vous effectuez des modifications ou que vous devez transférer les fichiers corrigés depuis votre plateforme de développement vers votre machine de tests. Utilisez une application de machine virtuelle comme VMWare , qui est une option classique fonctionnant autant sous Windows que sous Linux. Il en va de même pour Bochs . Vous pourrez ainsi rechercher des solutions à tous les points de blocage et autres bogues se manifestant sur votre prototype de système d'exploitation et les réparer sans perte de temps.
-
Lancez une préversion de publication ou Release candidate . Lorsque votre système d'exploitation aura été testé et que vous ne rencontrerez plus de problèmes lors de vos tests, vous pourrez téléverser votre préversion vers votre dépôt sur le web afin de la mettre à disposition d'un plus large public. Cela permettra aux usagers les plus avertis de tester votre système d'exploitation et de vous rapporter toutes les difficultés qu'ils pourraient rencontrer lors de son utilisation en temps réel afin que vous puissiez les reproduire et leur apporter une solution.
-
Échangez vos idées en réseau avec d'autres développeurs de systèmes. Vous pourrez trouver des communautés entières de développeurs de systèmes d'exploitation qui sont très actives sur plusieurs forums d'ingénierie logicielle, dont les plus connues sont osdev.org sur Reddit ainsi que sur ce site spécialisé dans l'ingénierie logicielle . Lorsque vous aurez commencé à bien appréhender le fonctionnement d'un système d'exploitation et que vous aurez développé un premier prototype du vôtre, lisez forums qui sont publiés sur ces sites pour vous rendre compte des difficultés qui peuvent se présenter pendant le développement d'un tel ensemble logiciel et trouver des solutions à vos problèmes.Publicité
Conseils
- Prenez soin de donner la priorité absolue à l'implémentation des caractéristiques de sécurité de votre système d'exploitation si vous voulez qu'il puisse être considéré comme fiable par ses utilisateurs.
- Après avoir terminé le développement de votre système d'exploitation, vous devrez choisir si vous voulez le mettre à disposition du public sous la forme d'un logiciel Open source ou propriétaire.
- Pour permettre à votre système d'exploitation de prendre en charge des microprocesseurs multicœurs, son gestionnaire de mémoire doit être doté de mécanismes de verrouillages afin d'éviter que plusieurs cœurs n'accaparent les mêmes ressources en même temps, ce qui provoquerait son plantage immédiat. Les verrous que vous utiliserez pour cela devront être soumis à un planificateur de tâches pour assurer que seul un des cœurs puisse accéder à une ressource critique à un moment donné pendant que les autres sont mis en attente ; le planificateur de tâches doit donc à son tour être soumis au gestionnaire de mémoire, il s'agit ici d'une interdépendance impérative. Il n'existe ici aucune manière standard de résoudre de tels obstacles et il vous appartient, en tant que programmeur, d'acquérir suffisamment de connaissances pour être en mesure d'apporter une réponse efficace à ces impératifs.
- Un système d'exploitation doit aussi être abordable à un utilisateur. Lors de sa conception, vous devrez prendre des mesures conceptuelles permettant à ses utilisateurs de mettre en œuvre votre système de la manière la plus simple possible.
- Sur les forums très techniques comme OSDev.org, ne posez pas de questions dont la réponse est évidente, vous n'obtiendrez que des réponses très laconiques du style Lisez le manuel ou parfois quelques moqueries. Vous devez d'abord consulter les textes du site Wikipedia et les manuels des divers outils que vous serez amené à utiliser avant de poser des questions.
- Ne commencez pas à concevoir un système d'exploitation dans le but d'apprendre à programmer. Si vous n'avez pas une connaissance approfondie des langages C, C++, Pascal, Rust, Go, Python, Perl ou autres et si vous ne maitrisez pas les concepts de manipulations de pointeurs, de glissement de bits ou d'utilisation d'un assembleur en ligne, vous n'êtes pas prêt à aborder un tel projet.
- N'oubliez pas que vous devez maitriser ce que fera votre OS en tout moment. S'il vient à émettre des données aléatoires sur un port non déterminé, vous risquez de planter purement et simplement votre système.
Publicité
Références
Publicité