# Naissance de Linux
#### Traduction en cours

Cette page est consacrée à la traduction en français de en:Linux's History. Si vous souhaitez participer à la traduction, il vous suffit d’éditer cette page. Merci de corriger les erreurs que vous pourrez y trouver.

## Histoire de Linux

Note : Le texte suivant a été écrit par Linus le 31 juillet 1992. C’est une collection de divers artefacts de la période où Linux a commencé à prendre forme.
Il s’agit juste d’un voyage sentimental dans certains des premiers messages concernant Linux, vous pouvez donc appuyer sur "n" maintenant si vous pensiez vraiment obtenir quelque chose de technique.
From : torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds) Newsgroups : comp.os.minix Subject : Gcc-1.40 et une question sur Posix Message-ID : Date : 3 Jul 91 10:00:50 GMT
Bonjour les internautes,
En raison d’un projet sur lequel je travaille (en minix), je suis intéressé par la définition du standard posix. Quelqu’un pourrait-il m’indiquer un format (de préférence) lisible par machine des dernières règles posix ? Des sites Ftp seraient les bienvenus.
Le projet était évidemment linux, donc le 3 juillet j’ai commencé à penser à des choses de niveau utilisateur : certains pilotes de périphériques étaient prêts, et le disque dur fonctionnait. Pas grand chose d’autre.
En passant, pour tous ceux qui utilisent gcc sur minix - [supprimé].
Juste un rapport de réussite sur le portage de gcc-1.40 sur minix en utilisant la version 1.37 faite par Alan W Black & co.
﻿Linus Torvalds﻿torvalds@kruuna.helsinki.fi
PS. Quelqu’un pourrait-il essayer de me donner un coup de main depuis l’étranger, car j’ai installé un "changing .plan" (fait par votre serviteur), et je ne suis pas certain qu’il fonctionne depuis l’extérieur ? Il devrait signaler un new .plan à chaque fois.
J’étais donc désemparé - je venais juste d’apprendre l’existence des tuyaux nommés. Suivez-moi. Cette partie du message a suscité beaucoup plus de réponses que la requête POSIX proprement dite, mais la requête a fait sortir arl du bois, et nous avons échangé quelques messages, ce qui a donné naissance au sous-répertoire Linux sur nic.funet.fi.
Puis, presque deux mois plus tard, j’ai réussi à faire fonctionner quelque chose : j’ai rendu les sources de la version 0.01 disponibles sur nic à peu près à cette époque. Les sources de la version 0.01 n’étaient pas réellement exécutables : c’était juste un geste symbolique envers arl qui avait probablement commencé à désespérer d’obtenir un jour quelque chose. Le message suivant doit avoir été posté quelques semaines avant cette publication.
From : torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds) Newsgroups : comp.os.minix Subject : Qu’est-ce que vous aimeriez voir le plus dans minix ? Résumé : Petit sondage pour mon nouveau système d’exploitation Message-ID : Date : 25 Aug 91 20:57:08 GMT Organisation : Université d’Helsinki
Bonjour à tous ceux qui utilisent minix -
Je suis en train de faire un système d’exploitation (libre) (juste un hobby, il ne sera pas grand et professionnel comme gnu) pour les clones 386(486) AT. C’est en gestation depuis avril, et je commence à être prêt. J’aimerais avoir un retour sur les choses que les gens aiment ou n’aiment pas dans minix, car mon système d’exploitation lui ressemble un peu (même disposition physique du système de fichiers (pour des raisons pratiques) entre autres choses). J’ai actuellement porté bash(1.08) et gcc(1.40), et les choses semblent fonctionner. Cela implique que je vais obtenir quelque chose de pratique d’ici quelques mois, et J’aimerais savoir quelles fonctionnalités la plupart des gens voudraient avoir. Toute suggestion sont les bienvenues, mais je ne promets pas de les mettre en œuvre :-)
﻿Linus (torvalds@kruuna.helsinki.fi)
PS. Oui - il est libre de tout code minix, et il a un fs multi-thread. Il n’est PAS portable (il utilise la commutation de tâches du 386, etc. ne supportera probablement jamais autre chose que les disques durs AT, puisque c’est tout ce que j’ai :-(.
A en juger par le post, la 0.01 n’est pas encore sortie, mais elle est proche. Je pense que la première version est sortie au milieu du mois de septembre 1991. J’ai eu quelques réponses à cela (la plupart par courrier, que je n’ai pas sauvegardé), et J’ai même reçu quelques mails demandant à être bêta-testeurs pour linux. Après cela juste quelques réponses générales à des questions sur le net :
From : torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds) Newsgroups : comp.os.minix Subject : Re : Qu’est-ce que vous aimeriez voir le plus dans minix ? Summary : Oui, c’est non portable. Message-ID : Date : 26 Aug 91 11:06:02 GMT Organization : Université d’Helsinki
Dans l’article jkp@cs.HUT.FI (Jyrki Kuoppala) écrit : >> [re : mon post sur mon nouvel OS] > >Dites-nous en plus ! A-t-il besoin d’une MMU ?
Oui, il a besoin d’une MMU (désolé tout le monde), et il a spécifiquement besoin d’une MMU 386/486 (voir plus loin).
> >>PS. Oui - il est libre de tout code minix, et il a un fs multi-thread. >>Il n’est PAS protable (utilise la commutation de tâches 386, etc.). > >Quelle est la part du code en C ? Quelles seront les difficultés de portage ? >Personne ne vous croira pour ce qui est de la non-portabilité ;-), et pour ma part, >J’aimerais le porter sur mon Amiga (Mach a besoin d’une MMU et Minix n’est pas libre).
Simplement, je dirais que le portage est impossible. C’est principalement en C, mais la plupart des gens n’appelleraient pas ce que j’écris C. Il utilise toutes les fonctionnalités imaginables du 386 que j’ai pu trouver, car c’était aussi un projet pour m’apprendre le 386. Comme déjà mentionné, il utilise une MMU, à la fois pour la pagination (pas encore vers le disque) et la segmentation. C’est la segmentation qui le rend VRAIMENT dépendant du 386. (chaque tâche a un segment de 64Mo pour le code et les données - 64 tâches max. dans 4Gb. Si quelqu’un a besoin de plus de 64Mo/tâche, c’est un dur à cuire).
Il utilise également toutes les fonctionnalités de gcc que j’ai pu trouver, en particulier la directive __asm__ de sorte que je n’ai pas besoin de tant d’objets en langage assembleur. Certains de mes fichiers "C" (en particulier mm.c) sont presque autant de l’assembleur que du C. Il serait "intéressant" même de le porter sur un autre compilateur (bien que pourquoi quelqu’un voudrait-il utiliser autre chose que gcc ? c’est un mystère). Note : linux est en fait devenu plus portable avec les nouvelles versions : il y avait beaucoup plus d’assemblage dans les premières versions. Il a en fait été porté sur d’autres architectures maintenant.
Contrairement à minix, il se trouve que j’AIME aussi les interruptions, donc les interruptions sont gérées sans essayer de cacher leur raison sousjacente (j’aime particulièrement mon pilote de disque dur. Quelqu’un d’autre a fait en sorte que les interruptions pilotent une ##???machine en l’état ?). Dans l’ensemble, c’est un cauchemar pour les porteurs.
>En ce qui concerne les fonctionnalités ; eh bien, pseudo ttys, sockets BSD, systèmes de fichiers en mode utilisateur (donc je peux dire cat /dev/tcp/kruuna.helsinki.fi/finger), taille de la fenêtre dans la structure du tty, appels système capables de supporter POSIX.1. Oh, et des noms de fichiers longs à la Bsd. La plupart d’entre elles semblent possibles (la structure de tty possède déjà des stubs pour la taille de la fenêtre), sauf peut-être pour les systèmes de fichiers en mode utilisateur. Quant à POSIX, je serais ravi de l’avoir, mais Posix veut de l’argent pour ses papiers, donc donc ce n’est pas une option actuellement. En tout cas, ce sont des choses qui ne seront pas supportées avant un certain temps (je vais d’abord en faire un simple minix-lookalike, mot-clé SIMPLE).
﻿Linus (torvalds@kruuna.helsinki. fi)
PS. Pour que les choses soient vraiment claires, oui je peux faire tourner gcc dessus, et bash, et la plupart des [bin/file]utilities de gnu, mais il n’est pas beaucoup débuggé, et la bibliothèque est vraiment minimale. Il ne supporte même pas encore les disquettes. Il Il ne sera pas prêt à être distribué avant quelques mois. Et même à ce moment là ne sera probablement pas capable de faire beaucoup plus que minix, et beaucoup moins à certains égards. Il sera cependant libre (probablement sous licence gnu ou similaire).
Eh bien, il est évident que quelque chose a fonctionné sur ma machine : je doute que j’aie déjà obtenu que gcc se compile tout seul sous linux (sinon j’aurais été trop fier pour ne pas le mentionner). Toujours avant toute date de sortie.
Puis, le 5 octobre, il semble que j’ai publié la 0.02. Comme je l’ai déjà mentionné, la 0.01 ne contenait pas de binaires : c’était juste un code source pour les personnes intéressées par ce à quoi ressemblait linux. Notez l’absence d’annonce pour la 0.01 : je n’en étais pas très fier, donc je pense que j’ai seulement envoyé une note à tous ceux qui avaient montré de l’intérêt.
From : torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds) Newsgroups : comp.os.minix Subject : Sources gratuites de noyaux de type minix pour 386-AT Message-ID : Date : 5 Oct 91 05:41:06 GMT Organisation : Université d’Helsinki
Avez-vous la nostalgie des beaux jours de minix-1.1, quand les hommes étaient des hommes et écrivaient leurs propres pilotes de périphériques ? Vous n’avez pas de projet intéressant et vous mourrez d’envie de vous faire les dents sur un système d’exploitation que vous pouvez essayer de modifier pour vos besoins ? Est-ce que vous trouvez frustrant que tout fonctionne sur minix ? Fini les nuits blanches pour faire fonctionner un programme intéressant ? Alors ce post pourrait être pour vous :-)
Comme je l’ai mentionné il y a un mois (?), je travaille sur une version gratuite d’un minix-lookalike pour les ordinateurs AT-386. Il a finalement atteint le stade où il est même utilisable (bien qu’il puisse ne pas l’être selon ce que vous voulez), et je suis prêt à publier les sources pour une distribution plus large. Il s’agit juste la version 0.02 (+1 (très petit) patch déjà), mais j’ai réussi à faire fonctionner bash/gcc/gnu-make/gnu-sed/compress etc. sous cette version.
Les sources de mon projet personnel se trouvent sur nic.funet.fi. (128.214.6.100) dans le répertoire /pub/OS/Linux. Ce répertoire contient également quelques fichiers README et un couple de binaires pour tourner sous linux (bash, update et gcc, que demander de plus :-). Le noyau complet est fourni, car aucun code minix n’a été utilisé. Les sources des bibliothèques ne sont que partiellement libres, elles ne peuvent donc pas être distribuées actuellement. Le système est capable de compiler "tel quel" et est connu pour fonctionner. Heh. Les sources des binaires (bash et gcc) peuvent être trouvées au même endroit dans /pub/gnu.
ALERTE ! WARNING ! NOTE ! Ces sources ont encore besoin de minix-386 pour être compilées (et gcc-1.40, peut-être 1.37.1, je n’ai pas testé), et vous avez besoin de minix pour le configurer si vous voulez l’exécuter, donc ce n’est pas encore un système autonome pour ceux d’entre vous qui n’ont pas minix. Je travaille dessus. Vous devez aussi avoir quelque chose d’un hacker pour le configurer (?), donc pour ceux qui espèrent une alternative à minix-386, veuillez m’ignorer. Il est actuellement destiné aux les hackers intéressés par les systèmes d’exploitation et les 386 ayant accès à minix.
Le système a besoin d’un disque dur compatible AT (IDE est bien) et EGA/VGA. Si Si vous êtes toujours intéressé, envoyez par ftp le README/RELNOTES, et/ou envoyez-moi un mail pour plus d’informations.
Je peux (enfin, presque) vous entendre vous demander "pourquoi ?". Hurd sera sortira dans un an (ou deux, ou le mois prochain, qui sait), et j’ai déjà minix. C’est un programme pour les hackers par un hacker. J’ai pris plaisir à le faire et quelqu’un pourrait aimer le regarder et même le modifier pour ses propres besoins. Il est encore assez petit pour être compris, utilisé et modifié, et j’attends avec impatience tout commentaire que vous pourriez avoir.
Je suis également intéressé par les commentaires de toute personne qui a écrit des fonctions utilitaires/bibliothèques pour minix. Si vos efforts sont librement librement distribuables (sous copyright ou même dans le domaine public), j’aimerais les entendre pour que je puisse les ajouter au système. J’utilise Earl Chews estdio en ce moment (merci pour ce système agréable et fonctionnel Earl), et les travaux similaires seront les bienvenus. Vos (C) seront bien sûr laissés intacts. Envoyez-moi une ligne si vous êtes prêt à me laisser utiliser votre code.
﻿Linus
PS. à PHIL NELSON ! Je n’arrive pas à vous joindre, et je reçois sans cesse le message suivant "forward error - strawberry unknown domain" ou quelque chose comme ça.
Eh bien, ça ne ressemble pas beaucoup à un système, n’est-ce pas ? Il a fonctionné, et certaines personnes l’ont même essayé. Il y avait plusieurs mauvais bugs (et il n’y avait pas de lecteur de disquette, pas de VM, rien), et la 0.02 n’était pas vraiment utilisable.
La 0.03 est sortie peu de temps après (2-3 semaines maximum étaient le temps entre les versions, même à l’époque), et la 0.03 était plutôt utilisable. La version suivante a été numérotée 0.10, car les choses ont commencé à fonctionner assez bien. Le post suivant donne une idée de ce qui s’est passé en deux mois de plus…
From : torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds) Newsgroups : comp.os.minix Subject : Re : Statut de LINUX ? Summary : Toujours en version bêta Message-ID : Date : 19 Dec 91 23:35:45 GMT Organization : Université d’Helsinki
Dans l’article miquels@maestro.htsa.aha.nl (Miquel van Smoorenburg) écrit : >Bonjour *, > Je sais que certaines personnes travaillent sur un système d’exploitation libre pour les 386/486, >sous le nom de Linux. J’ai vérifié nic.funet.fi de temps en temps, pour voir ce qui se passait. >Cependant, pour le moment, je n’ai pas d’accès FTP et je ne sais pas ce qui se passe sur le site. >Quelqu’un pourrait-il me renseigner à ce sujet >Il est peut-être préférable de faire un suivi de cet article, car je pense qu’il y a beaucoup de personnes potentiellement intéressées qui lisent ce groupe. Notez que je "n’ai" pas >vraiment de >= 386, mais je suis sûr que j’en aurai un jour.
Linux est toujours en version bêta (bien que disponible pour les âmes courageuses par ftp), et a atteint la version 0.11. Il n’est toujours pas aussi complet que 386-minix, mais meilleur à certains égards. La "fiche d’information sur Linux" devrait être postée ici un jour par la personne qui la tient à jour. En En attendant, je vais donner quelques petits conseils.
D’abord les mauvaises nouvelles : - Toujours pas de SCSI : des gens y travaillent, mais pas encore de date. Vous avez donc besoin d’un disque à interface AT (j’ai un rapport indiquant qu’il fonctionne sur un 486 EISA) avec un disque SCSI qui émule l’interface AT, mais c’est plus une chance qu’autre chose : ISA+AT-disk est actuellement la configuration matérielle)
Comme vous pouvez le voir, la 0.11 avait déjà un petit public. Ce n’était pas grand chose, mais ça a marché.
- Toujours pas d’init/login : vous entrez dans bash en tant que root au démarrage.
C’était toujours la norme dans la prochaine version. - bien que j’aie une VM quelque peu fonctionnelle (pagination sur disque), elle n’est pas encore prête. Ainsi, linux a besoin d’au moins 4M pour être capable d’exécuter les binaires GNU (surtout gcc). Il démarre avec 2M, mais vous ne pouvez pas compiler.
En fait, j’ai publié une version 0.11+VM juste avant Noël 91 : je n’en avais pas besoin moi-même, mais les gens essayaient de compiler le noyau en 2Mo et échouaient, alors j’ai dû l’implémenter. La version 0.11+VM était disponible uniquement pour un petit nombre de personnes qui voulaient la tester : Je suis toujours surpris qu’elle ait aussi bien fonctionné.
- minix a toujours beaucoup plus d’utilisateurs : meilleur support. - Il n’y a pas eu des années de tests par des milliers de personnes, donc il y a probablement encore quelques bugs.
Ensuite, pour les bonnes choses...
- C’est gratuit (copyright par moi, mais librement distribuable sous un copyright très clément)
Le premier copyright était en fait beaucoup plus restrictif que le GNU copyleft : je ne permettais pas que de l’argent change de mains grâce à Linux. Cela a changé avec la 0.12.
- c’est amusant de hacker dessus. - f/real/ système de fichiers multithreading. - utilise les caractéristiques du 386. Ainsi enfermé dans la famille 386/486, mais mais cela rend les choses plus claires quand on n’a pas à s’adapter à d’autres puces. puces. - beaucoup plus... lisez mon .plan.
/Je/ pense que c’est mieux que Minix, mais j’ai un peu de préjugés. Il ne sera jamais le genre de système d’exploitation professionnel que Hurd sera (dans le prochain prochain siècle :), mais c’est un bon outil d’apprentissage (encore plus que minix, IMHO), et c’était/est amusant de travailler dessus.
﻿Linus (torvalds@kruuna.helsink1i. fi)
--- mon .plan --------------------------Free FreeUNIX pour le 386 - à venir 4QR 91 ou 1QR 92.
La version actuelle de linux est la 9.11 - elle possède la plupart des choses dont un noyau Unix a besoin, et sera probablement publié en 1.0 dès qu’il aura été un peu plus de testé, et que nous pourrons mettre en place un init/login. Actuellement, vous êtes dans un shell en tant que root au démarrage.
Linux peut être obtenu par ftp anonyme depuis 'nic.funet.fi' (128.214.6.100) dans le répertoire '/pub/OS/Linux'. Le même répertoire contient également quelques fichiers binaires à exécuter sous Linux. Actuellement gcc, bash, update, uemacs, tar, make et fileutils. Plusieurs personnes ont réussi à faire fonctionner un système, mais c’est toujours un noyau de hacker.
Linux a toujours besoin d’un disque compatible AT pour être utilisable : des gens travaillent sur un pilote SCSI, mais je ne sais pas quand il sera prêt.
Il y a maintenant deux autres sites contenant linux, car les gens ont eu des difficultés à se connecter à nic. Ces sites sont : Tupac-Amaru.Informatik.RWTH-Aachen.DE (137.226.112.31) : répertoire /pub/msdos/replace tsx-ll.mit.edu (18.172.1.2) : répertoire /pub/linux
Il existe également une liste de diffusion 'Linux-activists@niksula.hut.fi'. Pour la rejoindre, envoyez une demande à 'Linux-activists-request@niksula.hut.f1'. Il ne sert à rien de m’envoyer un courrier : je n’ai aucun contact réel avec la liste de diffusion (autre que d’en faire partie, naturellement). Envoyez-moi un courriel pour plus d’informations :
﻿Linus (torvalds@kruuna.Helsinki.FI)
0.11 a ces nouvelles choses :
- chargement de la demande - partage de code et de données entre des processus non liés - pilotes de disquettes bien meilleurs (ils fonctionnent en général) - corrections de bogues - support pour Hercules/MDA/CGA/EGA/VGA - la console émet également un bip (WoW ! Wonder-kernel :-) - mkfs/fsck/fdisk - claviers US/allemand/français/finlandais - Vitesse de ligne paramétrable pour coml1/2
Comme vous pouvez le voir : la 0.11 était en fait autonome : j’ai écrit la première version de programmes mkfs/fsck/fdisk pour elle, de sorte que vous n’aviez plus besoin de minix minix pour le configurer. De plus, les lignes série avaient été codées en dur à 2400bps, car c’était tout ce que j’avais.
Il manque toujours :
- init/login - renommage de l’appel système - tuyaux nommés - liens symboliques
Eh bien, ils sont tous là maintenant : init/login n’est pas arrivé jusqu’à la 0.12, et rename a été implémenté sous forme de patch quelque part entre la 9.12 et la 0.95. Les liens symboliques étaient présents dans la 0.95, mais les tubes nommés ne sont arrivés qu’en 0.96.
Note : Le numéro de version est passé directement de la 0.12 à la 0.95, puisque la la suite de la 0.12 devenait suffisamment riche en fonctionnalités pour mériter un numéro dans les années 0.90
La version 0.12 sortira probablement en janvier (vers le 15), et comportera : - Contrôle des tâches POSIX (par tytso) - VM (pagination sur disque) - Corrections mineures
En fait, la version 0.12 est sortie le 5 janvier, et contenait des corrections majeures. Il s’agissait en fait d’un noyau très stable : il fonctionnait sur beaucoup de nouveaux matériel, et il n’y a pas eu besoin de correctifs pendant longtemps. La version 0.12 était aussi le noyau qui l’a "fait" : c’est à ce moment que Linux a commencé à se répandre beaucoup plus rapidement. Les versions précédentes du noyau étaient réservées aux hackers : la 0.12 a en fait très bien fonctionné.
Note : Le document suivant est une réponse de Linus Torvalds, créateur de Linux. Linux, dans laquelle il parle de ses expériences dans les premières étapes du développement de Linux
A : Linux-Activists@BLOOM- PICAYUNE .MIT.EDU From : torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds) Subject : Re : Écriture d’un OS - questions ! ! Date : 5 May 92 07 :58 :17 GMT
Dans l’article nani@td2cad.intel.com (V. Narayanan) écrit :
Salut les amis,
Depuis un certain temps, ce "novice" se demande comment on fait pour écrire un OS à partir de "Scratch" [rien]. Voici donc quelques questions, et j’apprécierais si vous pouviez prendre le temps d’y répondre.
Eh bien, je vois que quelqu’un d’autre a déjà répondu, mais j’ai pensé que je prendrais sur les parties spécifiques à linux. C’est juste mon expérience personnelle, et je ne sais pas comme c’est normal.
1) Comment débogueriez-vous le noyau pendant la phase de développement ?
Cela dépend à la fois de la machine et de l’état d’avancement du noyau : sur les systèmes plus simples, c’est généralement plus facile à mettre en place. Voici ce que j’ai dû faire sur un 386 en mode protégé.
Le pire c’est de commencer : une fois que vous avez un système minimal, vous pouvez utiliser printf etc, mais passer en mode protégé sur un 386 n’est pas drôle, surtout si au début vous ne connaissez pas très bien l’architecture. Il est terriblement facile de redémarrer le système à ce stade : si sur le 386 quelque chose ne va pas, il s’éteint et redémarre - vous n’avez même pas une chance de voir ce qui ne va pas.
Printf n’est pas très utile - un redémarrage efface également l’écran et, de toute façon, vous devez avoir accès à la mémoire vidéo, qui peut échouer si vos segments sont incorrects, etc. Ne pensez même pas aux débogueurs : aucun des débogueurs que je connais n’est capable de suivre l’évolution d’un 386 en mode protégé. Un émulateur de 386 pourrait faire l’affaire, ou un matériel lourd, mais ce n’est généralement pas réalisable.
Ce que j’ai utilisé est une simple boucle d’exécution : j’ai mis des instructions comme
die : ﻿jmp die
à des endroits stratégiques. S’il se bloquait, c’était bon, s’il redémarrait, c’était bon. vous saviez qu’au moins ça s’était passé avant le die-loop. Alternativement, vous pourriez utiliser les ports io pour des indices sonores, mais comme je n’avais pas d’expérience avec le matériel PC, je n’ai même pas utilisé ça. Je ne dis pas que c’est la seule façon : je n’ai pas commencé à écrire un noyau, j’ai juste voulu explorer les primitives de commutation de tâches du 386, etc, et c’est ainsi que j’ai commencé (en environ en avril 1991).
Une fois que vous avez mis en place un système minimal et que vous pouvez utiliser l’écran pour la sortie, ça devient un peu plus facile, mais c’est à ce moment-là que vous devez activer les interruptions. Bang, redémarrage instantané, et retour à l’ancienne méthode. En tout et pour tout, il m’a fallu environ 2 mois pour que j’arrive à régler tous les problèmes liés au 386. Ainsi je n’avais plus à compter sur le fait d’éviter de redémarrer en même temps, et d’avoir les les choses de base (paging, timer-interrupt et un simple commutateur de tâches pour tester les segments, etc).
2) Pouvez-vous tester la fonctionnalité du noyau en l’exécutant en tant que processus sur un autre système d’exploitation ? Le système d’exploitation (l’environnement de développement) ne génèrerait-il pas des exceptions dans les cas où le noyau (du nouvel OS) essaie de modifier les registres "privilégiés" ?
Oui, c’est généralement possible pour certaines choses, mais par exemple les pilotes de périphériques doivent généralement être testés sur la machine nue. J’ai utilisé minix pour pour développer linux, je n’avais donc pas accès aux registres d’E/S, aux interruptions, etc. Sous DOS, il aurait été possible d’avoir accès à tout cela, mais il n’y a pas le mode 32 bits. Intel n’est pas si génial que ça - cela aurait été probablement beaucoup plus facile sur un 68040 ou similaire.
Donc, après avoir obtenu un simple commutateur de tâches (il a commuté entre deux processus qui ont imprimé AAAA… et BBBB… respectivement en utilisant la fonction de timer-interrupt - Dieu que j’étais fier de ça), je devais continuer à déboguer en utilisant printf. La première chose écrite a été le pilote de clavier : c’est la raison pour laquelle il est toujours écrit complètement en assembleur (je n’ai pas encore osé passer au C - je déboguais encore au niveau des instructions).
Après cela, j’ai écrit les pilotes de série, et voilà, j’avais un programme de terminal simple qui fonctionnait (enfin, pas en tant que tel). programme de terminal fonctionnant (enfin, pas si simple que ça en fait). C’était toujours les deux mêmes processus (AAA..), mais maintenant ils lisaient et écrivaient sur les lignes sur la console/série les lignes à la place. J’ai du rebooter pour me sortir de tout ça, mais c’était un noyau simple.
Après cela, c’était la navigation à voile : le codage est encore difficile, mais j’ai eu et le débogage était plus facile. J’ai commencé à utiliser le C à ce stade, et et cela accélère certainement le développement. C’est aussi à ce moment que je commence à être sérieux sur mes idées mégalomanes de faire "un minix meilleur que minix". J’espérais pouvoir recompiler gcc sous linux un jour…
Le pilote de disque dur a été la même chose : cette fois les problèmes de mauvaise documentation ont commencé à se manifester. Le PC est peut-être l’architecture la plus utilisée au monde, mais cela ne veut pas dire que la documentation est meilleure : en fait, je n’ai vu aucun livre mentionner le couplage bizarre 386-387 dans un AT etc (Merci Bruce).
Après cela, un petit système de fichiers, et voilà, vous avez un unix minimal. Deux mois pour les configurations de base, mais seulement un peu plus longtemps jusqu’à ce que j’aie un pilote de disque (sérieusement buggé, mais il fonctionnait sur ma machine) et un petit système de fichiers. C’est à peu près au moment où j’ai rendu la 9.01 disponible (fin août 1991 ? Quelque chose comme ça) : elle n’était pas très jolie, elle n’avait pas de pilote de disquette, et elle ne pouvait pas faire grand chose. Je ne pense pas que quiconque ait jamais compilé cette version. Mais à ce moment-là, j’étais accroché, et je ne voulais pas m’arrêter avant d’avoir pu me débarrasser de minix. arrêter jusqu’à ce que je puisse me débarrasser de Minix.
3) Est-ce que de nouveaux Linkers (créateurs de liens) et loaders (lanceurs) doivent être écrits avant d’avoir un noyau de base ?
Toutes les versions jusqu’à environ 0.11 ont été compilées sous minix386 - tout comme les programmes utilisateurs. J’ai réussi à faire fonctionner bash et gcc sous la version 0.02. 0.02, et bien qu’une race-condition dans le code du buffer-cache m’a empêché de de recompiler gcc sous lui-même, j’ai pu m’attaquer à des compilations plus petites. La 0.03 (octobre ?) était capable de recompiler gcc sous elle-même, et je pense que que c’est la première version que quelqu’un d’autre a réellement utilisée. Toujours pas de disquettes, mais la plupart des choses de base fonctionnaient.
Après la 0.03, j’ai décidé que la version suivante était réellement utilisable (elle l’était, en quelque sorte, mais X sous 0.96 est plus impressionnant), et j’ai appelé la version suivante version 0.10 (novembre ?). Il y avait encore un bogue assez sérieux dans le code de gestion du buffer-cache, mais après avoir corrigé cela, c’était plutôt bien. La 0.11 (décembre) est venu le premier pilote de disquette, et c’est à ce moment que j’ai commencé à faire du développement linux tout seul. C’est bien ainsi, car j’ai j’ai détruit ma partition minix386 par erreur en essayant d’appeler automatiquement /dev/hd2.
A ce moment là d’autres personnes utilisaient réellement linux, et se retrouvaient à court de mémoire. Ce qui était particulièrement triste, c’est que gcc ne fonctionnait pas sur une machine de 2MB, et bien que c386 ait été porté, il ne faisait pas tout ce que gcc faisait, et ne pouvait pas recompiler le noyau. J’ai donc dû implémenter le disk-paging : La version 0.12 est sortie en janvier (?) et contenait la pagination par moi ainsi que le contrôle des tâches par tytso (et d’autres patches : pmacdona avait commencé sur les VC’s etc). C’était la première version qui commençait à avoir des fonctionnalités "non essentielles", et étant partiellement écrites par d’autres. C’était aussi la première version qui faisait beaucoup de choses mieux que minix, et les gens ont commencé à vraiment à s’y intéresser.
Puis ce fut la 0.95 en mars, des corrections de bogues en avril, et bientôt la 0.96. C’était certainement amusant (et j’espère que ça continuera à l’être) les réactions ont été pour la plupart très positives, et vous apprenez beaucoup en faisant ce genre de chose (d’un autre côté, vos études en souffrent à d’autres égards :)
﻿Linus