Le kernel est le c
ur du système - en fait, le système lui-même, et dans
le cas de Linux, sans doute l'un des éléments les plus remarquables qui soient.
Linux est l'un des très rares systèmes d'exploitation à fournir librement le code source de son kernel - c'est-à-dire à permettre à qui le souhaite, de regarder comment le système est programmé au plus profond. Le code source du kernel de Linux représente à ce jour plus de 1 500 000 lignes de code en langage C (le langage de programmation le plus utilisé actuellement), plus quelques centaines de lignes en langage assembleur (le langage de plus bas niveau qui soit, en prise directe avec l'électronique de l'ordinateur). Cet aspect à lui seul force l'admiration : ces lignes, réparties dans plusieurs centaines de fichiers, ont été écrites par des milliers de programmeurs de toutes nationalités à travers le monde, communiquant par l'Internet, le tout organisé de main de maître (certains parlent de <<dictature éclairée>>) par Linus Torvald, le créateur initiale de Linux.
Ce mode de développement, cette ouverture du kernel, est l'une des plus grandes forces de Linux. Comme chacun peut observer le code source, chacun peut apporter sa pierre à l'édifice, proposer de nouvelles fonctionnalités, corriger des erreurs connues, améliorer des parties existantes... La collaboration de ces milliers de programmeurs, travaillant tous pour la beauté du code et la gloire (au sens propre comme au sens figuré), confère au développement de Linux une dynamique, une puissance et une qualité sans égale - inégalée et inégalable.
Mais en fait, qu'est-ce réellement que ce kernel ? Que fait-il ? Où est-il ?
Répondre à la première question n'est pas si évident que cela. En gros, le kernel
est un programme chargé en mémoire dans les premières microsecondes du démarrage
de Linux. Son rôle est alors de reconnaître le matériel électronique présent
(les cartes diverses, le processeur, etc.), d'en prendre le contrôle, puis de
lancer l'initialisation du système lui-même. Lorsque vous démarrez Linux, les
premiers messages obscurs qui défilent à l'écran proviennent du kernel. Après
cette première phase, le kernel rentre dans l'ombre, et se <<contente>> d'assurer
la communication entre les matériels (clavier, carte vidéo, mémoire, etc.) et
les programmes qui s'exécutent. C'est également lui qui permet à plusieurs programmes
de s'exécuter simultanément, sans qu'ils empiètent les uns sur les autres. C'est
encore lui, lorsque vous arrêtez votre système Linux, qui va s'assurer que l'arrêt
se fait dans de bonnes conditions, que tout ce qui doit être inscrit sur disque
l'a bien été. Comme vous le voyez, le kernel est véritablement le c
ur du
système (ou son cerveau, si l'on veut), élément vitale et indispensable, qui
ne fait jamais parler de lui sauf lors de la phase initiale du démarrage et
la phase finale de l'arrêt.
La figure 5.1 est une schématisation de ce principe de fonctionnement, connu sous le terme de <<modèle à trois couches>>. Ce modèle est respecté par pratiquement tous les systèmes informatiques actuels. Celui présenté ici est particulièrement simple : chacune des couches peut se décomposer en d'autres, mais ce n'est pas l'objet de cet ouvrage.
Physiquement, le kernel se présente sous la forme d'un fichier dont la taille tourne en général autour de 500Ko, souvent situé dans le répertoire /boot ou à la racine, et dont le nom commence par vmlinuz. Il s'agit d'un fichier binaire, comportant du code machine compréhensible seulement par votre processeur : seuls quelques rares et étranges êtres humains sont capables de lire directement un tel fichier... Il s'agit là de ce qui s'exécute sur votre machine lorsque vous l'utilisez.
Mais Linux est OpenSource : le code source du kernel, en langage C, vous est donc librement accessible. Normalement, il est dans une arborescence dans le répertoire /usr/src/linux. Notez qu'en fait, ce chemin n'est qu'un lien symbolique vers un répertoire au nom plus complet, comportant le numéro du kernel, par exemple, /usr/src/linux-2.0.36.
En effet, le kernel est numéroté pour distinguer les différentes versions, selon un principe précis. Le premier chiffre (le '2' dans notre exemple) est appelé le numéro majeur de version. Celui-ci n'évolu que dans le cas d'une modification profonde dans la structure du kernel, qui se traduit par une modification radicale du fonctionnement du système (du moins de façon interne, les changements pour l'utilisateur ne sont pas toujours aussi flagrants). D'une manière générale (à quelques exceptions près), les programmes qui sont prévus pour un kernel de majeur 2 fonctionneront sur presque tous les <<kernels 2>>, mais les programmes prévus pour un <<kernel 1>> ont peut de chance de tourner.
Le deuxième chiffre (le '0' dans notre exemple) est le numéro mineur de version. Il indique une évolution dans le kernel, plutôt qu'une révolution, en général l'ajout de fonctionnalités. De plus, si ce numéro est un chiffre pair, il signale que le kernel est considéré comme stable, en opposition avec les kernels de développement, réservés à ceux qui développent le kernel, qui comportent un mineur impair. Par exemple, un kernel de numéro 2.1.x est un kernel en cours de développement, donc par essence plein de nouveautés, et d'erreurs...
Enfin, le troisième chiffre est un numéro de révision : il correspond à diverses corrections ou améliorations apportées au kernel, mais normalement pas à l'ajout de nouvelles fonctionnalités.