Démarrage
On octobre 2, 2021 by adminTout d’abord, le développement d’un système d’exploitation est probablement l’une des choses les plus difficiles que vous puissiez faire sur un ordinateur (après avoir tué le boss final de Doom au niveau de difficulté Cauchemar). La composition d’un système d’exploitation exige de nombreuses connaissances dans plusieurs domaines complexes de l’informatique. Vous devez comprendre le fonctionnement du matériel et être capable de lire et d’écrire le langage d’assemblage complexe ainsi qu’un langage de niveau supérieur (tel que C, C++ ou Pascal). Votre esprit doit être capable de s’enrouler autour de théories abstraites et de retenir une myriade de pensées. Vous vous sentez déjà découragé ? N’ayez crainte ! Parce que toutes ces choses sont aussi celles qui rendent la programmation OS amusante et divertissante.
Il n’y a rien de tel que le sentiment d’accomplissement lorsque vous, enfin, après des heures de lutte, résolvez le problème. Et après un certain temps, vous êtes en mesure de regarder en arrière et de voir toutes les choses que vous avez créées à partir de zéro. Votre système écrit à la main est capable de démarrer, d’effectuer de la magie contre le matériel, et de donner à l’utilisateur une interface utilisateur et des programmes avec lesquels jouer.
Il n’y a pas de chemin absolu que vous devez prendre lorsque vous créez un OS. Une fois que vous obtenez votre système initial opérationnel (et vous le faites en trouvant des tutoriels appropriés), vous choisissez le chemin que vous voulez prendre ensuite. Votre système d’exploitation est exactement cela : le vôtre. Vous avez le contrôle ultime, et le ciel est la limite !
Contenu
- 1 La dure vérité
- 2 Responsabilité
- 3 Connaissances requises
- 4 Organisez vos plans
- 5 Choisir votre environnement de développement
- 5.1 GNU/Linux
- 5.2 Windows
- 5.3 MacOS
- 6 Tester votre système d’exploitation
- 7 Protéger votre code
- 8 Points de départ communs
- 9 Obtenir des connaissances supplémentaires
- 10 Voir aussi
- 10.1 Articles
- 10.2 Fils de discussion
- 10.3 Liens externes
La dure vérité
Espérons que le fait fondamental que le développement de systèmes d’exploitation est un processus compliqué et continu ne vous décourage pas. La vérité est que le développement de systèmes d’exploitation est vraiment sans pareil car il exige la plus grande quantité de patience et une conception de code minutieuse, et il renvoie très peu à aucune « gratification instantanée » que vous obtenez du développement de choses comme les jeux et les scripts basés sur le Web.
Vous avez été assez avertis du dur travail à venir, mais si vous êtes toujours intéressé, alors avancez dans le royaume du programmeur de systèmes d’exploitation. Préparez-vous à des accès occasionnels de confusion, de découragement, et pour certains d’entre nous… de folie temporaire. Avec le temps, et avec suffisamment de dévouement, vous vous retrouverez parmi l’élite des personnes qui ont contribué à un système d’exploitation fonctionnel. Si vous vous découragez en cours de route, rafraîchissez-vous avec le contenu de ce livre. Avec un peu de chance, il vous rappellera pourquoi vous avez commencé un tel voyage insensé en premier lieu.
À ce stade, il serait également utile de lire la page des erreurs de débutant. Les utilisateurs du forum ont remarqué que beaucoup de ces erreurs se répètent au fil du temps, et les éviter est un excellent moyen de ne pas se ridiculiser.
Responsabilité
Les gens ont tendance à prétendre qu’il est normal d’écrire des logiciels inefficaces, en affirmant que les systèmes informatiques sont si rapides de nos jours, que vous ne verrez pas l’impact. Ce type de mentalité est dangereux dans la conception de systèmes d’exploitation. Il n’y a pas de mal à écrire un code bâclé pour une application simple, mais lorsqu’il s’agit d’un code critique qui peut être appelé des milliers de fois par seconde, il faut supprimer toutes les surcharges possibles. Le système d’exploitation doit fournir l’ordinateur comme une ressource de base aux applications en cours d’exécution, avec le moins de complications, d’abstraction et de surcharge possible.
Les personnes qui conçoivent les systèmes d’exploitation à notre époque ont tendance à avoir la mentalité du « tout sauf l’évier de cuisine ». Ils prennent sur eux de tout prendre en compte, ce qui est bien sûr une bonne chose, mais cela ne devrait pas être fait au détriment de l’épanouissement de programmes mal écrits. Il y a beaucoup de choses qui se passent « sous le capot » lorsque des erreurs de programme se produisent. Les programmes mal écrits coûtent un temps d’exécution précieux et impliquent des changements de tâches qui sont coûteux en mémoire et en fréquence. Nous vous encourageons à décourager les logiciels mal écrits.
Connaissances requises
Article principal : Connaissances requises
Si vous pensez que vous pouvez sauter ceci, c’est juste pour vous.
Cette section a été déplacée vers une page séparée parce qu’elle est mentionnée si souvent dans les discussions du forum.
Organisez vos plans
Avant de procéder, considérez ce que vous voulez obtenir de l’écriture d’un système d’exploitation. Quelles sont vos motivations pour vous lancer dans ce projet ? Il existe de nombreuses raisons possibles pour entreprendre un projet de système d’exploitation de loisir, et la plupart des os-devers en ont plus d’une. Même le simple fait de dire » je veux juste le faire » peut suffire, bien que plus vous considérez et clarifiez vos objectifs et vos motivations, plus vous pouvez vous concentrer sur ce que vous voulez vraiment.
Soyez également honnête avec vous-même. Il n’y a pas de honte à avoir des ambitions plus grandes pour votre projet, même (ou surtout) si elles ne sont pas l’objectif principal. Essayez de reconnaître tous vos objectifs, pas seulement celui que vous pensez être votre objectif principal.
Essayez de vous fixer sur les aspects de la conception d’OS qui vous intéressent le plus ou sur lesquels vous voyez un besoin de travailler. La plupart de ce qui entre dans le développement d’OS, surtout au début, est la conception et le développement du noyau, mais le noyau lui-même n’est qu’une petite partie de la plupart des systèmes d’exploitation ; si votre intérêt principal est dans l’UX, ou la mise en réseau, ou la programmation des pilotes, vous devriez réfléchir si vous avez vraiment besoin (maintenant ou dans le futur) d’écrire votre propre OS du tout ou si vous seriez tout aussi satisfait de développer ces choses sur un noyau existant. Plus de quelques personnes se sont lancées dans le dev OS alors qu’elles voulaient vraiment concevoir un environnement de bureau, c’est donc une question très importante à se poser.
Essayez de penser à tous les projets non-OS que vous pourriez vouloir entreprendre en premier, ou en même temps, en particulier ceux qui pourraient servir de pratique ou de préparation pour le projet OS. Il n’y a généralement pas besoin de travailler sur le projet OS en ce moment, et plus vous vous serez préparé à l’avance, mieux vous vous porterez (jusqu’à un certain point, au moins – la préparation est une chose, la procrastination en est une autre).
De même, si vous avez l’intention de travailler sur la bifurcation d’une conception existante pour expérimenter, ou pour modifier dans un but spécifique, concentrez-vous sur cela plutôt que sur les questions générales de développement. Considérez quelle partie de la base de code existante vous aurez besoin, et celles que vous voulez changer.
Essayez de travailler sur certains de vos objectifs de projet spécifiques, et soyez prêt à planifier des projets séparés si cela vous aide à le faire. Si vous avez simplement l’intention de vous balader et de voir où cela vous mène, c’est bien ; si votre intention est de renverser Microsoft, c’est bien (même si c’est probablement irréaliste), aussi. Une fois que vous savez ce que vous voulez faire, vous pouvez en décomposer les détails en objectifs spécifiques et déterminer ce qu’il faut faire pour les atteindre. N’essayez pas de forcer trop d’objectifs divergents dans un seul projet – si vous avez différentes choses que vous voulez essayer avec des objectifs contradictoires, divisez-les en différents projets.
Il peut être utile que vous écriviez une vue d’ensemble de votre conception d’OS prévue, avec toutes les exigences spécifiques ou les détails qui vous semblent notables ou qui pourraient clarifier ce pour quoi vous avez besoin d’aide, et que vous l’ajoutiez à votre dépôt public si vous le pouvez. Cela permettra non seulement aux autres de vous aider plus facilement, mais aussi d’organiser et de stabiliser vos plans, un peu comme vous écrivez les grandes lignes d’une histoire ou d’un article. Soyez prêt à le mettre à jour au fur et à mesure que vos objectifs et vos plans changent, mais gardez une copie des anciennes versions (ou mieux encore, gardez le document sous contrôle de version) afin de voir comment votre travail évolue au fil du temps.
Enfin, examinez le temps et les ressources que le projet nécessitera, et décidez s’ils sont réalisables. Si vous savez que vous n’avez qu’un certain temps à consacrer au projet, tenez-en compte, et quoi que vous fassiez, ne vous engagez pas sur une date limite extérieure même si vous êtes certain de pouvoir la respecter. Le développement d’un système d’exploitation prend du temps – beaucoup de temps – et essayer de terminer un projet de système d’exploitation complet en un semestre n’est pas réaliste.
Choisir votre environnement de développement
Vous avez besoin d’une plateforme sur laquelle développer votre nouveau système. Suivant les tendances de l’informatique générale, la plus populaire est GNU/Linux, mais beaucoup utilisent aussi Windows. Les développeurs utilisant un système GNU/Linux ont un léger avantage dans la disponibilité des outils, mais cela peut être résolu sous Windows en utilisant un système tel que Cygwin ou MinGW.
- Binutils : Outils fondamentaux pour la manipulation des fichiers objets.
- GCC : La collection de compilateurs GNU. GCC contient des compilateurs pour C, C++, Fortran et Ada, entre autres.
- Make : Pour automatiser le processus de construction, ce qui devient vraiment utile dès que vous avez plus d’une poignée de fichiers.
- Grep et sed : Pour faire des recherches plus puissantes et des recherches et remplacements (utiles pour remplir des tableaux avec des données).
- Diffutils : Incroyablement utile pour montrer les différences entre deux fichiers.
- Perl ou Python : L’un de ces deux langages de script devrait être installé. Utile pour la manipulation des chaînes de caractères, entre autres choses. Perl était autrefois la recommandation, mais Python est maintenant assez mature et est peut-être plus facile à apprendre. Les deux ont des centaines de paquets/modules disponibles pour effectuer diverses tâches.
- Un assembleur : Par exemple NASM ou GAS. Cela varie en fonction de l’architecture de votre CPU cible.
- Un éditeur : Pour écrire vos fichiers Assembleur, C et autres (code).
Vous n’utiliserez peut-être pas tous ces outils, mais il est préférable de les avoir sous la main « au cas où », et de savoir les utiliser, même à un niveau de base. Mais si vous avez décidé d’utiliser une autre langue, alors l’outillage dépend surtout de vous et peut-être que la liste ci-dessus ne vous aidera pas du tout. Ci-dessous se trouvent les informations principalement liées aux développeurs C/C++ ou Assembleur.
GNU/Linux
Le système le plus recommandé pour le développement d’OS est GNU/Linux. Lorsque vous utilisez GNU/Linux, la plupart des outils de développement GNU sont probablement déjà présents. Si ce n’est pas le cas, utilisez les outils de gestion de paquets de votre distribution (APT, RPM, Portage, Pacman, Apk, etc.) pour les installer si nécessaire. Encore une fois, faire un compilateur croisé est nécessaire, afin de ne pas lier dans les fichiers d’exécution du système de développement.
Les éditeurs courants sont Vim, Emacs, KDevelop, Komodo Edit, etc. Certains préfèrent des éditeurs légers au lieu d’un IDE, comme gedit, Geany et SciTE. Beaucoup aiment Midnight Commander qui a une interface utilisateur texte et un éditeur intégré (mcedit) et donc extrêmement léger et rapide comme l’éclair.
A propos des distributions que vous devriez utiliser, consultez la liste des distributions Linux. Ils sont venus dans toutes les formes et tailles, et pas tous adaptés pour le développement du noyau. N’utilisez pas une distro qui a un objectif spécifique, comme la sécurité (Kali, Qubes, BackTrack, Parrot etc.), les applications scientifiques (par exemple Scientific), les pare-feu et le routage (par exemple DD-WRT), la récupération du système ou les environnements embarqués (Knoppix, Rescatux, TinyCore) ou qui vise spécifiquement les débutants (comme Linux Mint, Nitrux etc.) Bien qu’un Linux convivial pour les débutants pourrait faire l’affaire, choisissez-en un qui est une distro à usage général. Utilisez également une distro qui a des paquets à jour, le mieux étant d’en choisir une qui utilise les rolling-release. Debian est facile à utiliser, mais fournit souvent des versions anciennes et corrigées (les outils peuvent ne pas se comporter comme décrit). Beaucoup de débutants aiment Ubuntu, ce qui est bien, mais il est rapporté qu’il a des problèmes avec certaines chaînes d’outils et environnements de compilation (si vous compilez votre propre compilateur croisé au lieu d’utiliser un compilateur installé, ce n’est pas un problème).
Les meilleures distros pour le développement de noyaux sont (mais gardez à l’esprit que c’est aussi une question de goût personnel, donc ces distros ne sont pas obligatoires plutôt suggérées, et elles nécessitent généralement une certaine expérience) : Arch, Gentoo, Solus, Slackware, void etc. même Puppy.
Si vous n’êtes pas sûr, essayez Ubuntu ou Manjaro.
Windows
Pour obtenir les outils nécessaires, vous devez installer l’environnement Cygwin. MinGW ou DJGPP sont des alternatives, mais MSYS2 est fortement suggéré car c’est l’environnement le plus complet et le plus compatible, et il comprend également un gestionnaire de paquets pour installer des bibliothèques et des outils.
Microsoft a récemment (au moment d’écrire ces lignes) publié le sous-système Windows pour Linux comme une fonctionnalité optionnelle pour Windows 10. Il s’agit essentiellement d’une véritable distribution Ubuntu en ligne de commande fonctionnant au-dessus de Windows SANS l’utilisation d’une VM. Les dernières versions de GCC et Binutils (6.1.0 et 2.27 au moment de la rédaction) compilent et fonctionnent correctement dans cet environnement. En utilisant le shell Bash, vous pouvez accéder à vos disques durs Windows via /mnt/<lettre de lecteur>. L’avantage de cette solution est que vous pouvez travailler avec tous les outils Windows ou Linux dont vous avez besoin, sans avoir à vous demander s’ils fonctionnent dans Cygwin. Beaucoup des outils nécessaires peuvent être installés en utilisant « apt-get ».
Pour tout ce qui précède, il est fortement suggéré de construire un compilateur croisé, non seulement parce que les compilateurs par défaut ciblent différents formats d’exécutables, mais parce que c’est généralement une bonne idée. Consultez la page GCC Cross-Compiler pour les détails et les instructions.
Vous aurez également besoin d’un éditeur. L’utilisation de Notepad fonctionnera, mais c’est plus facile si vous avez un éditeur plus complet. Par exemple, Notepad++ ou Notepad2 sont utilisés par de nombreuses personnes. Si vous êtes à l’aise avec les éditeurs Unix, vous pouvez en choisir un parmi le choix proposé par Cygwin (qui comprend par exemple Vim et Emacs, qui demandent un peu d’habitude mais sont très puissants).
Il est également possible d’utiliser Visual Studio, ou Visual C++ Express Edition, téléchargeable gratuitement, pour écrire et compiler votre système d’exploitation. Vous aurez besoin d’un fichier de configuration spécial, et vous serez certainement en minorité, mais cela fonctionne assez bien. Vous pouvez même installer le SDK Windows par-dessus, ce qui permet le développement en 64 bits. Le seul écueil est que cela ne supporte pas Inline Assembly.
D’autres outils tels que Watcom ou Borland peuvent également être utilisés, mais ils ont chacun des exigences spécifiques qui leur sont propres, et ne sont pas largement utilisés pour ce type de travail.
MacOS
Parce que sous le capot il utilise le userland de FreeBSD, il est entièrement compatible POSIX. Tous les outils habituels sont disponibles (vi, bash, dd, cat, sed, tar, cpio, etc.) Presque tous les tutoriels fonctionnent dès la sortie de la boîte. Les outils manquants sont principalement liés au système de fichiers : pas de périphérique de bouclage, pas de fdisk, pas de mkfs.vfat ni de mtools. Mais vous pouvez utiliser diskutil à ces fins, ou utiliser brew ou macports pour installer ces outils manquants.
Pour obtenir gcc, vous aviez l’habitude d’avoir un mpkg sur le 2e DVD d’installation pour les anciennes versions. Les versions plus récentes de MacOS (10.13 et plus) peuvent installer XCode en ligne de commande (pas l’IDE, juste la chaîne d’outils) en exécutant « xcode-select –install » depuis un Terminal. Ceci installera gcc, binutils et make. Ce gcc est en fait un CLang masquaradé, mais suffisamment riche en fonctionnalités pour construire votre propre compilateur croisé sans problème. Il est préférable d’utiliser le compilateur officiel pour amorcer gcc que d’en installer un depuis brew ou macports.
Tester votre système d’exploitation
Article principal : Test
L’article ci-dessus entre dans une grande profondeur sur le choix de la façon de tester votre système d’exploitation et comment intégrer cela à votre processus de développement. Les environnements de test physiques et émulés sont discutés.
Protéger votre code
Pendant votre construction de code, vous écrirez des centaines, voire des milliers, de lignes de code. Vous passerez un nombre inavouable d’heures, et resterez debout tard le soir à coder alors que vous devriez vraiment aller vous coucher. La dernière chose dont vous avez besoin est un crash de disque ou une commande ‘rm’ ou ‘format’ mal écrite jetant tout votre travail.
Ce dont vous avez besoin est un système de contrôle de version. CVS a été utilisé pendant un certain nombre d’années, mais a reçu beaucoup de concurrence de Subversion, Bazaar, Mercurial, et Git dernièrement. Si vous le pouvez, vous devriez configurer un ordinateur ou un serveur distant comme serveur de contrôle de version, mais si vous ne disposez pas d’une telle machine, vous pouvez également héberger le système de contrôle de version sur votre ordinateur de développement local. Pensez simplement à sauvegarder votre code sur CD ou FTP de temps en temps.
Nous ne pouvons pas insister assez sur ce point : si vous n’utilisez pas déjà le contrôle de la source, vous devez commencer à le faire immédiatement. Il suffit de faire une fois une erreur grave dans votre code pour réaliser l’importance d’avoir votre code en version sécurisée et facilement récupérable. Bien que cela puisse sembler excessif pour un petit projet de loisir privé, une fois que vous aurez pris l’habitude d’utiliser le contrôle de révision, vous vous demanderez comment vous avez pu vous en passer.
Pour Git, vous pouvez créer votre projet sur GitHub. Bitbucket est également une bonne alternative car il supporte à la fois Git et Mercurial. Les deux viennent avec des dépôts privés gratuits.
Un avantage supplémentaire de l’utilisation du contrôle de version sur un dépôt accessible par le réseau est qu’il est beaucoup plus facile de collaborer avec les autres et d’obtenir de l’aide. Cela peut être très utile, en particulier dans les forums, car cela peut éviter la nécessité de poster constamment des versions mises à jour de votre code dans un fil de messages – vous dirigez simplement la conversation vers votre dépôt, et les autres dans le fil de discussion auront un accès direct à vos modifications les plus récentes. C’est également crucial si, au fur et à mesure que le projet se développe, vous commencez à travailler avec d’autres développeurs sur le projet (ne vous attendez tout simplement pas à ce que cela se produise du jour au lendemain).
Points de départ communs
La façon la plus simple de faire démarrer un noyau « hello world » est le tutoriel Bare Bones. Une approche différente serait d’apprendre comment l’ordinateur lui-même démarre, sur la page Séquence de démarrage.
Il y a beaucoup d’autres tutoriels disponibles, aussi.
Obtenir des connaissances supplémentaires
Il y a une quantité étonnante de connaissances sur le développement de systèmes d’exploitation disponibles sur Internet aujourd’hui. Il s’agit simplement de les trouver. Tout d’abord, il y a ce wiki lui-même. Entre autres, nous avons beaucoup de tutoriels. Puisque vous êtes ici, vous les avez probablement déjà trouvés. Vous trouverez également sur ce site le forum, où de nombreux développeurs se retrouvent et peuvent vous aider (mais assurez-vous de lire d’abord Comment poser des questions). De nombreux livres sur le développement des systèmes d’exploitation ont été écrits. Un certain nombre d’entre eux sont présentés sur notre page Livres, et d’autres sur osdever.net également.
Voir aussi
Articles
.
Laisser un commentaire