Ce chapitre décrit les principes de base qu'il faut connaître pour bien comprendre Linux. Les informations qui sont données ici ne sont pas réellement spécifiques à Linux. Elles s'appliquent souvent aux systèmes Unix en général. Il est donc recommandé de lire ce chapitre, surtout si l'on n'a jamais vu ni utilisé un système Unix. En particulier, les utilisateurs chevronnés de Windows risquent d'être légèrement déroutés. L'architecture du système sera présentée, ainsi que la sécurité et la notion d'utilisateur. Viendront ensuite les descriptions des principales fonctionnalités du système de fichiers et de sa structure.
Comme tout logiciel d'une certaine taille, Linux est d'une grande complexité. Tous les systèmes d'exploitation récents sont constitués d'un grand ensemble de composants qui interagissent et dont la mise en place peut être soit indispensable au bon fonctionnement du système, soit facultative, soit tout simplement inutile étant donnés la configuration matérielle et les besoins de l'utilisateur. Cette complexité implique un grand nombre d'erreurs, d'anomalies et de dysfonctionnements possibles. En effet, pour qu'un système informatique fonctionne correctement, il faut tout prévoir pour donner une action appropriée à tous les événements possibles. Cela n'est pas humainement réalisable quand le système devient trop complexe.
Pour résoudre ce problème, il est courant de subdiviser le système en composants indépendants, dont le mauvais fonctionnement potentiel ne peut perturber que partiellement les autres parties du système. Des points de synchronisation à partir desquels le système peut reprendre un fonctionnement normal après une erreur sont prévus. Ces points de synchronisation permettent simplement d'assurer la viabilité du système, même en cas d'erreur inopinée. Pour quelques systèmes, le seul point de synchronisation est le point de départ, à savoir le démarrage de l'ordinateur. De tels systèmes doivent donc souvent être redémarrés, parfois pour une cause mineure (erreur d'un logiciel, modification de la configuration du système, ajout d'un composant au système). Ce n'est pas le cas de Linux, qui dans le pire des cas détruit le composant qui a généré l'erreur sans toucher aux autres parties du système. Le point de synchronisation de Linux est donc le redémarrage d'une partie du système uniquement, ce qui assure ainsi une grande stabilité du système complet.
Il va de soi que, lorsqu'un composant se plante, ceux qui l'utilisent risquent fort de se retrouver dans un état d'erreur assez difficile à gérer. Cela peut souvent provoquer leur propre perte. Par conséquent, plus un composant est utilisé, plus il doit être fiable. Or il est un composant à la base de tout dans Linux : le noyau (« kernel » en anglais). C'est le c½ur du système, et en fait c'est précisément le système Linux. Heureusement, ce composant est d'une très, très grande fiabilité, et il n'est pas rare de voir un système Linux fonctionner plusieurs mois ou années sur des serveurs. Cette fiabilité provient du modèle de développement de Linux, qui est ouvert à tout le monde (chacun peut récupérer, lire, modifier, compléter ou corriger le noyau à condition de savoir bien programmer). À partir d'une taille critique en terme de nombre d'utilisateurs, taille que Linux a atteinte, il existe suffisamment de développeurs pour détecter et corriger les erreurs. Ainsi, dès qu'une erreur est détectée, elle est souvent corrigée dans les jours qui suivent, ce qui assure une grande qualité.
Le noyau gère quasiment tout (mémoire, disques, systèmes de fichiers, réseau, clavier, droits des utilisateurs, etc.), mais il n'est pas exploitable tel quel. Il n'est par exemple pas capable d'offrir une interface utilisateur permettant de lui donner les commandes qu'il doit exécuter. Ces opérations sont du ressort d'autres modules développés par la Free Software Foundation. Parmi ces modules, on trouve le « shell » (ce qui signifie grosso modo « environnement utilisateur »). Le shell est capable de lire des commandes saisies au clavier, de les exécuter et d'afficher leurs résultats à l'écran. En général, les programmes capables de réaliser ces opérations sont appelés des interpréteurs de commandes. Mais le shell est bien plus que cela, car il peut être programmé, et il peut gérer les processus (en arrêter un, en lancer un autre, etc.).
En fait, les commandes que le shell peut exécuter sont en nombre très réduit. La plupart des commandes sont tout simplement d'autres programmes. Les programmes que l'on peut utiliser dans le shell sont des programmes dits « en ligne de commande », parce qu'ils sont propres à être utilisés dans les lignes de commandes que l'on saisit au clavier dans le shell. Ces programmes sont, encore une fois, développés soit par la Free Software Foundation, soit par des bénévoles, toujours sous la licence GNU. Toutes ces commandes sont des commandes compatibles Unix. Ces commandes sont absolument essentielles pour pouvoir utiliser le système, mais elles sont assez rébarbatives et peu d'utilisateurs acceptent de s'en contenter.
C'est pour cela qu'une couche graphique a été développée, pour introduire une interface graphique plus conviviale (mais cependant légèrement moins puissante en termes de fonctionnalités) : XWindow. Encore une fois, cette couche logicielle est constituée de plusieurs composants, dont la base est le serveur X. Le serveur X est un programme capable de fournir les services graphiques (d'où le nom de serveur) aux autres applications. Plusieurs implémentations concurrentes existent. L'une d'elles est particulièrement utilisée sous Linux, puisqu'elle est libre (comme tout le reste) : XFree86. À vrai dire, un serveur X ne fait pas grand chose d'autre que de réaliser des affichages sous les ordres d'autres programmes. D'autres composants permettent donc d'obtenir des fonctionnalités de plus haut niveau.
Le gestionnaire de fenêtres (« Window Manager » en anglais) est le composant qui se place juste au-dessus du serveur X. Il est en charge, comme son nom l'indique, de gérer les fenêtres des applications graphiques sous X. C'est le gestionnaire de fenêtres qui prend en charge la gestion des décorations des fenêtres de premier niveau (c'est-à-dire des fenêtres principales des programmes). Par exemple, il s'occupe d'afficher les bords, la barre de titre, les boutons de réduction et de restauration, etc. des fenêtres. C'est également lui qui s'occupe du positionnement des fenêtres, et qui donc permet à l'utilisateur de déplacer et de réduire les fenêtres des applications graphiques. L'utilisateur est libre d'utiliser le gestionnaire de fenêtres qu'il désire, selon ses propres goûts et ses désirs, la différence est souvent une pure question de style.
Il existe des environnements graphiques complets qui, en plus d'un gestionnaire de fenêtres souvent extrêmement puissant, fournissent la plupart des outils classiques que l'on est en droit d'attendre d'un système graphique moderne. Ainsi, ces environnements comprennent des éditeurs, des outils de configuration, des navigateurs Internet, des logiciels multimédia... En plus de ces applications, ils fournissent un cadre standard pour les applications graphiques qui savent communiquer avec eux. Ce cadre permet d'améliorer l'intégration des diverses applications entre elles, et c'est la raison pour laquelle on appelle souvent ces environnements des gestionnaires de bureau. KDE et Gnome sont des exemples de tels environnements de travail.
Enfin, au-dessus de toutes ces couches logicielles, on trouve les applications X, qui sont aussi diverses que variées (traitement de texte, tableurs, logiciels de dessin...). Quelques-unes de ces applications sont simplement des « front-end » d'applications en ligne de commande, c'est-à-dire des interfaces graphiques à des programmes non graphiques existants. Ce concept permet d'avoir un composant unique, et plusieurs interfaces différentes pour ce composant, et en plus de rendre indépendante la fonctionnalité de l'interface utilisateur. Encore une fois, la stabilité en est d'autant plus accrue.
Bon nombre d'applications pour XWindow sont libres, ou utilisables librement à des fins non commerciales. Cela signifie qu'un particulier a le droit de les utiliser tant qu'il ne s'en sert pas pour un travail qu'il revendra. Comme c'est le cas de la plupart des particuliers, on peut considérer qu'il est actuellement possible, avec Linux, d'avoir un environnement logiciel complet, fiable et performant... pour un prix de revient minime.
En résumé, un système GNU/Linux est structuré de la manière suivante :
le noyau Linux ;
les programmes en ligne de commande et le shell ;
le serveur XWindow ;
le gestionnaire de fenêtres et le gestionnaire de bureau ;
les applications XWindow.
Il n'est pas évident d'établir un parallèle avec MS Windows, puisque ce système est réellement monolithique. Cependant, on peut considérer que le noyau Linux correspond aux modules KERNEL ou IO.SYS de Windows, que le shell correspond aux interpréteurs de commandes COMMAND.COM ou CMD.EXE, que les programmes en ligne de commande correspondent aux programmes DOS ou console classiques (xcopy, fdisk, format...), que le serveur X correspond au couple (pilote de carte graphique, GDI), que le gestionnaire de fenêtres correspond au module USER, et le gestionnaire de bureau à l'explorateur, les fonctionnalités d'OLE et aux programmes fournis avec Windows. La différence essentielle vient du fait que le shell est à peine programmable sous Windows, que les commandes DOS ont tendance à accéder aux ressources de la machine directement sans passer par le noyau, que le pilote de carte graphique, la GDI et le module USER sont tous intégrés dans le système au lieu d'en être séparés (ce qui multiplie les chances de crash du système complet), et que la plupart des applications Windows ne peuvent fonctionner que dans l'environnement graphique. Elles sont donc entraînées par le système lorsque les modules graphiques de Windows plantent (je n'ai d'ailleurs jamais vu un processus DOS survivre à un crash de l'interface graphique de Windows).
En conclusion :
les systèmes Unix, donc Linux, sont très structurés, plus simples à utiliser, à configurer, à maintenir et à développer ;
ils sont très stables, car les composants de haut niveau n'interfèrent pas sur les composants de bas niveau ;
ils sont faciles à personnaliser, puisque l'utilisateur a le choix des outils à chaque niveau ;
Linux a de plus la particularité d'être parfaitement modifiable, puisque si l'on sait programmer, on peut personnaliser les composants du système ou en rajouter ;
et il n'est pas propriétaire, c'est-à-dire que l'on n'est pas dépendant d'une société éditrice de logiciel pour résoudre un problème donné.