16 points par GN⁺ 2023-08-13 | 2 commentaires | Partager sur WhatsApp
  • Le noyau Linux est aujourd’hui un immense projet open source de 36 millions de lignes, mais sa toute première version ne comptait que 10 239 lignes (8 670 hors commentaires et lignes vides)
  • Linux v0.01, par sa simplicité, constitue un excellent point de départ pour apprendre le fonctionnement interne d’un noyau de type Unix
  • La v0.01 ne possède que 66 appels système
    • création, suppression et écriture de fichiers/répertoires
    • chmod, chown, pipe, fork, execve
    • Le concept de socket n’ayant pas encore été introduit, aucun support réseau n’est possible
    • mount n’est pas encore implémenté
  • Tout est codé en dur pour l’architecture Intel 386 (ce que l’auteur de MINIX avait critiqué)
    • strcpy est codé en assembleur à l’aide d’instructions i386
  • Seuls les équipements PC/AT sont pris en charge
    • CMOS, PIT (Programmable Interval Timer), ATA (PIO), VGA (mode texte), clavier PS/2 Intel 8042 (assembleur)
    • Il n’existe pas encore de dossier drivers, tout est codé en dur dans les sous-systèmes
  • On trouve dans le Makefile un commentaire mentionnant le nom initialement choisi par Linus, le noyau "FREAX"
  • Le système de fichiers ne prend en charge que MINIX (ext s’en est inspiré)
  • Dans le code de l’ordonnanceur, un commentaire dit : "cette partie est un code plutôt bon qui devrait fonctionner dans tous les environnements, il n’y aura donc probablement aucune raison de la modifier !"
    • Bien sûr, cette prédiction s’est révélée fausse, puisque de nombreuses améliorations et de nouveaux algorithmes ont depuis été introduits
  • L’implémentation du kernel panic tient en seulement 5 lignes : affichage de "kernel panic: raison" puis arrêt du système avec for(;;)
  • Il y a un passage qui semble appeler fork(2) dans l’espace noyau
    • En apparence seulement : juste avant, move_to_user_mode() sert en fait d’astuce
  • Linus ne disposait pas de machine avec plus de 8 Mo de RAM (il n’a donc pas pu tester lui-même et disait en substance à ceux qui en avaient une de se débrouiller…)
  • Il est difficile de compiler cela avec une toolchain moderne
    • GCC reste rétrocompatible, mais pas suffisamment
    • Linus disposait de sa propre version de GCC avec l’option -mstring-insns (probablement pour prendre en charge les instructions de chaîne x86)

2 commentaires

 
arfwene 2023-10-31

C'est intéressant.

 
GN⁺ 2023-08-13
Commentaires sur Hacker News
  • Discussion sur la complexité du Linux moderne, avec la question de savoir si une complexité 40 fois supérieure au nombre de lignes de code de Linux v0.01 est vraiment nécessaire.
  • Les lecteurs aimeraient voir une analyse graphique du nombre de lignes de code et des fonctionnalités utilisées dans chaque grand module logiciel de Linux.
  • Il est suggéré de lire des codebases classiques comme Linux, SQLite et vim, majoritairement écrites par une seule personne et qui ont été soit très réussies, soit très influentes.
  • Explication du fonctionnement du « counter » de Linux, avec l’affirmation qu’il diminue exponentiellement jusqu’à 2 * la priorité lorsqu’une tâche n’est pas exécutable.
  • Mention qu’au moment de son IPO, Redhat a envoyé aux actionnaires une affiche contenant le code source de la version 0.01, que certains lecteurs trouvent intéressant à relire de temps en temps.
  • Discussion sur la compatibilité rétroactive de GCC (GNU Compiler Collection), avec un commentaire disant que GCC n’a pendant longtemps pas réussi à compiler ses propres versions précédentes.
  • Les lecteurs sont orientés vers un code source du noyau Linux abondamment annoté pour mieux comprendre et approfondir leur lecture.
  • Suggestion que lire la première version fonctionnelle d’un projet à grand succès comme Linux est une bonne manière de le comprendre, car elle ne contient généralement que les fonctionnalités essentielles les plus importantes, sans beaucoup d’abstractions ni de généralisations.
  • Certains lecteurs ont remarqué l’utilisation d’espaces au lieu de tabulations dans le code, et spéculent que Torvalds est peut-être devenu partisan des tabulations plus tard.
  • La profondeur et la fréquence des commentaires dans le code sont saluées pour leur accessibilité, et certains se demandent si quelqu’un a réussi à le compiler.