Article de reference

Noyau Linux

{{cite web |date=2008 |title=Linux Logos and Mascots |url=https://www.linux.org/info/logos.html |url-status=dead |archive-url=https://web.archive.org/web/20100815085106/http://w...

noyau libre et open source de type Unix , utilisé dans de nombreux systèmes informatiques à travers le monde. Créé par Linus Torvalds en 1991, il a rapidement été adopté comme noyau du système d'exploitation GNU (GNU OS), conçu comme une alternative libre à Unix . Depuis la fin des années 1990, il est intégré à de nombreuses distributions de systèmes d'exploitation , dont beaucoup portent le nom de Linux . Android , par exemple, est un système d'exploitation basé sur le noyau Linux et utilisé dans de nombreux appareils mobiles et embarqués.

La majeure partie du code du noyau est écrite en C , avec le support de la collection de compilateurs GNU (GCC), qui offre des extensions au-delà du C standard. Le code contient également du code assembleur pour la logique spécifique à l'architecture, comme l'optimisation de l'utilisation de la mémoire et de l'exécution des tâches. Le noyau possède une conception modulaire permettant l'intégration de modules en tant que composants logiciels monolithique au sens architectural du terme, puisque l'ensemble du noyau du système d'exploitation s'exécute dans l'espace noyau .

Linux est fourni sous la licence publique générale GNU version 2, bien qu'il contienne des fichiers sous d'autres licences compatibles .

Linus Torvalds à la LinuxCon Europe 2014

En 1991, Linus Torvalds était étudiant en informatique à l' Université d'Helsinki . Durant ses études, il commença à développer un système d'exploitation, en parallèle de ses études, inspiré d'UNIX, pour un ordinateur personnel. Il débuta par un gestionnaire de tâches en langage assembleur Intel 80386 et un pilote de terminal . Le 25 août 1991, Torvalds publia le message suivant sur comp.os.minix , un groupe de discussion Usenet :

Je développe un système d'exploitation (gratuit) (un simple passe-temps, rien de comparable à GNU) pour les clones AT 386(486) . Le projet est en gestation depuis avril et commence à prendre forme. J'aimerais avoir vos retours sur les points forts et les points faibles de Minix , car mon système d'exploitation lui ressemble quelque peu (même organisation physique du système de fichiers, pour des raisons pratiques, entre autres). J'ai porté Bash (1.08) et GCC (1.40) et tout semble fonctionner. Cela signifie que je devrais obtenir quelque chose de fonctionnel d'ici quelques mois. [...] Oui, il est exempt de tout code Minix et possède un système de fichiers multithread. Il n'est PAS portable ( il utilise la commutation de tâches du 386 , etc.) et ne prendra probablement jamais en charge d'autres périphériques que les disques durs AT, car ce sont les seuls dont je dispose :-(.

Le 17 septembre 1991, Torvalds a préparé la version 0.01 de Linux et l'a mise en ligne sur le serveur FTP « ftp.funet.fi » du Réseau finlandais des universités et de la recherche ( FUNET ). Elle n'était même pas exécutable, car son code nécessitait encore Minix pour être compilé et testé.

Le 5 octobre 1991, Torvalds annonça la première version « officielle » de Linux, la version 0.02.

projet GNU avait achevé de nombreux composants de son système d'exploitation libre remplaçant UNIX, GNU , mais son noyau, GNU Hurd , était incomplet. Le projet a adopté le noyau Linux pour son système d'exploitation.

Torvalds a attribué au noyau la version majeure 0 pour indiquer qu'il n'était pas encore destiné à un usage général. La version 0.11, publiée en décembre 1991, a été la première version auto-hébergée ; compilée sur un ordinateur exécutant le noyau Linux.

Lors de la publication de la version 0.12 en janvier 1992, Torvalds a adopté la licence publique générale GNU version 2 (GPLv2), remplaçant ainsi sa précédente licence, rédigée par ses soins, qui n'autorisait pas la redistribution commerciale. La GPL est entrée en vigueur le 1er février 1992. Contrairement à Unix , tous les fichiers sources de Linux sont librement disponibles, y compris les pilotes de périphériques .

Le succès initial de Linux a été porté par des programmeurs et des testeurs du monde entier. Grâce à l'implémentation d'une sémantique d'appels système similaire à celle d'Unix et à l'exposition des API POSIX standard via une implémentation de la bibliothèque standard C , Linux pouvait exécuter des logiciels et des applications initialement développés pour Unix.

Le noyau Linux prend en charge diverses architectures matérielles, fournissant une plateforme commune pour les logiciels, y compris les logiciels propriétaires .

Le 19 janvier 1992, le premier message a été publié sur le nouveau groupe de discussion alt.os.linux . Le 31 mars 1992, le groupe de discussion a été renommé comp.os.linux .

Le fait que Linux soit un noyau monolithique plutôt qu'un micro-noyau a fait l'objet d'un débat entre Andrew S. Tanenbaum , le créateur de MINIX, et Torvalds. Le débat Tanenbaum–Torvalds a débuté en 1992 sur le groupe Usenet comp.os.minix , dans le cadre d'une discussion générale sur les architectures de noyau.

La version 0.96, sortie en mai 1992, fut la première capable d'exécuter le système X Window . En mars 1994, Linux 1.0.0 fut publié avec 176 250 lignes de code. Comme l'indique son numéro de version, il s'agissait de la première version considérée comme adaptée à un environnement de production . En juin 1996, après la sortie de la version 1.3, Torvalds estima que Linux avait suffisamment évolué pour justifier un nouveau numéro de version majeure et nomma la version suivante 2.0.0. Parmi les fonctionnalités importantes de la version 2.0 figuraient le multiprocesseur symétrique (SMP), la prise en charge de davantage de types de processeurs, la possibilité de sélectionner des cibles matérielles spécifiques et d'activer des fonctionnalités et des optimisations propres à l'architecture. La famille de commandes `make *config` de `kbuild` permet d'activer et de configurer les options de compilation d'exécutables noyau ad hoc ( vmlinux ) et de modules chargeables.

La version 2.2, publiée le 20 janvier 1999 , a amélioré la granularité du verrouillage et la gestion SMP, et a ajouté la prise en charge des plateformes m68k , PowerPC , Sparc64 , Alpha et autres plateformes 64 bits . De plus, elle a intégré de nouveaux systèmes de fichiers, notamment la fonctionnalité de lecture seule NTFS de Microsoft . En 1999, IBM a publié ses correctifs pour le code Linux 2.2.13 afin d'assurer la prise en charge de l' architecture S/390

La version 2.4.0, sortie le 4 janvier 2001 , prenait en charge ISA Plug and Play , l'USB et les cartes PC . Linux 2.4 ajoutait la prise en charge des processeurs Pentium 4 et Itanium (ce dernier introduisant l' architecture ISA ia64 , développée conjointement par Intel et Hewlett-Packard pour remplacer l'ancienne architecture PA-RISC ), ainsi que du nouveau processeur MIPS 64 bits . Le développement des versions 2.4.x évoluait légèrement, avec l'ajout de nouvelles fonctionnalités, notamment la prise en charge du Bluetooth , du gestionnaire de volumes logiques (LVM) version 1, du RAID , d'InterMezzo et des systèmes de fichiers ext3 .

La version 2.6.0 a été publiée le 17 décembre 2003. Le développement de la version 2.6.x a évolué pour inclure de nouvelles fonctionnalités dans toute la série. Parmi les changements apportés à la série 2.6, on peut citer : l'intégration de μClinux dans les sources du noyau principal, la prise en charge de PAE , la prise en charge de plusieurs nouvelles gammes de processeurs , l'intégration de l'architecture sonore Linux avancée (ALSA) dans les sources du noyau principal, la prise en charge de jusqu'à 2 <sup>32</sup> utilisateurs (contre 2 <sup>16</sup> auparavant ), la prise en charge de jusqu'à 2 <sup>29</sup> identifiants de processus (64 bits uniquement, les architectures 32 bits étant toujours limitées à 2 <sup>15</sup> ), une augmentation substantielle du nombre de types de périphériques et du nombre de périphériques de chaque type, une prise en charge améliorée du 64 bits , la prise en charge des systèmes de fichiers prenant en charge des tailles de fichiers allant jusqu'à 16 téraoctets , la préemption dans le noyau , la prise en charge de la bibliothèque de threads POSIX native (NPTL), l'intégration de Linux en mode utilisateur dans les sources du noyau principal, l'intégration de SELinux dans les sources du noyau principal, la prise en charge d'InfiniBand , et bien plus encore.

À partir des versions 2.6.x, le noyau a pris en charge un grand nombre de systèmes de fichiers. Certains étaient conçus pour Linux, comme ext3 , ext4 , FUSE et Btrfs . D'autres étaient natifs d'autres systèmes d'exploitation comme JFS , XFS , Minix, Xenix , Irix , Solaris , System V , Windows et MS-DOS .

Bien que le développement n'ait jusqu'alors utilisé aucun système de contrôle de version , en 2002, les développeurs Linux ont adopté BitKeeper , mis à leur disposition gratuitement malgré son statut de logiciel non libre . En 2005, suite à des tentatives de rétro-ingénierie , l'entreprise propriétaire du logiciel a retiré son soutien à la communauté Linux. En réaction, Torvalds et d'autres ont développé Git . Ce nouveau système a été écrit en quelques semaines, et deux mois plus tard, le premier noyau officiel utilisant Git a été publié.

En 2005, l' équipe stable a été formée en réponse à l'absence d'un noyau partagé où travailler sur les corrections de bogues , et elle se chargerait de la mise à jour des versions stables . En février 2008, le noyau Linux Next a été créé pour centraliser les correctifs destinés à être intégrés lors du cycle de développement suivant. Plusieurs responsables de sous-systèmes ont également adopté le suffixe `-next` pour les noyaux contenant du code qu'ils prévoient de soumettre pour inclusion dans la prochaine version. i386 , et plus précisément en n'émulant plus l' instruction atomique CMPXCHG introduite avec l' i486 pour permettre des mutex fiables . La série de noyaux 3.7 est ainsi devenue la dernière à prendre en charge le processeur d'origine. Cette même série a unifié la prise en charge du processeur ARM .

Le changement de numérotation de 2.6.39 à 3.0, puis de 3.19 à 4.0, n'a entraîné aucune différenciation technique significative ; le numéro de version majeure a simplement été augmenté pour éviter des numéros de version mineure trop longs. Des noyaux 3.xy stables ont été publiés jusqu'à la version 3.19 en février 2015. La version 3.11, publiée le 2 septembre 2013, a ajouté de nombreuses nouvelles fonctionnalités telles que le nouvel indicateur O_TMPFILERadeon , l'interrogation réseau à faible latence et zswap (cache d'échange compressé).

En avril 2015, Torvalds a publié la version 4.0 du noyau Linux. En février 2015, Linux avait reçu les contributions de près de 12 000 programmeurs issus de plus de 1 200 entreprises, dont certains des plus grands fournisseurs mondiaux de logiciels et de matériel. La version 4.1 de Linux, publiée en juin 2015, contient plus de 19,5 millions de lignes de code, fruit du travail de près de 14 000 programmeurs.

En mars 2019, Linus Torvalds annonça que la version 4.22 du noyau serait désormais numérotée 5.0, expliquant que « “5.0” ne signifie rien de plus que les numéros 4.x étaient devenus tellement longs que je n’avais plus de doigts ni d’orteils ». Cette version comprenait de nombreuses nouveautés importantes, telles que la prise en charge des écrans AMD Radeon FreeSync et NVIDIA Xavier, des correctifs pour F2FS , EXT4 et XFS , le rétablissement de la prise en charge des fichiers d’échange sur le système de fichiers Btrfs et la poursuite du développement des processeurs graphiques Intel Icelake Gen11 et des SoC NXP i.MX8 . Cette version était sensiblement plus volumineuse que les précédentes, Torvalds précisant que « les changements apportés par l’ensemble de la version 5.0 sont beaucoup plus importants ».

Au total, 1 991 développeurs, dont 334 étaient des collaborateurs pour la première fois, ont ajouté plus de 553 000 lignes de code à la version 5.8, battant le record précédemment détenu par la version 4.9.

Popularité

Linux et environ 27 % pour Android , bien que seulement environ 25 % développent avec des systèmes d'exploitation basés sur Linux.

La plupart des sites web fonctionnent sur des systèmes d'exploitation basés sur Linux , et tous les 500 supercalculateurs les plus puissants du monde fonctionnent sous Linux.

Les distributions Linux regroupent le noyau avec les logiciels système (par exemple, la bibliothèque GNU C , systemd et d'autres utilitaires et démons Unix ) et une large sélection de logiciels d'application , mais leur part d'utilisation sur les ordinateurs de bureau est faible par rapport aux autres systèmes d'exploitation.

Android , qui fonctionne sur un noyau Linux modifié, représente la majorité des systèmes d'exploitation pour appareils mobiles, et est de plus en plus utilisé dans les appareils embarqués , ce qui en fait un moteur important de l'adoption de Linux.

Valeur

Coûts de redéveloppement du noyau Linux

Le coût de redéveloppement de la version 2.6.0 du noyau Linux dans un contexte de développement propriétaire traditionnel a été estimé à 612 millions de dollars américains (467 millions d'euros, 394 millions de livres sterling) aux prix de 2004, selon le modèle d'estimation COCOMO par personne-mois. En 2006, une étude financée par l'Union européenne a évalué le coût de redéveloppement de la version 2.6.8 du noyau à 882 millions d'euros (1,14 milliard de dollars, 744 millions de livres sterling).

Ce sujet a été réexaminé en octobre 2008 par Amanda McPherson, Brian Proffitt et Ron Hale-Evans. En utilisant la méthodologie de David A. Wheeler, ils ont estimé que la refonte du noyau 2.6.25 coûte désormais 1,3 milliard de dollars (sur un total de 10,8 milliards de dollars pour la refonte de Fedora 9). Par ailleurs, Garcia-Garcia et Alonso de Magdaleno, de l'Université d'Oviedo (Espagne), estiment que la valeur ajoutée annuelle au noyau était d'environ 100 millions d'euros entre 2005 et 2007 et de 225 millions d'euros en 2008. Son développement au sein de l'Union européenne coûterait également plus d'un milliard d'euros (environ 1,4 milliard de dollars en février 2010).

En se basant sur le nombre de lignes de code ( LOC ) alors en vigueur pour un noyau Linux 2.6.x et sur les estimations salariales de David A. Wheeler, la refonte du noyau Linux, qui ne cesse de s'alourdir, coûterait environ 3 milliards de dollars (environ 2,2 milliards d'euros). Calcul actualisé distribution Linux . Certaines distributions intègrent le noyau stable. Plusieurs fournisseurs (comme Red Hat et Debian ) maintiennent une arborescence de sources personnalisée. Celle-ci est généralement mise à jour moins fréquemment que la branche stable et inclut généralement tous les correctifs de cette dernière. Cependant, elle peut également ajouter la prise en charge de pilotes ou de fonctionnalités qui n'étaient pas disponibles dans la version stable sur laquelle le fournisseur de la distribution s'est basé.

Développeurs

Communauté

Andrew Morton , 2005

Aucun
Inconnu
Consultants
SUSE
Google
près de 500 autres entreprises
Affiliation des entreprises aux contributions au noyau Linux, 4.8–4.13

Conflit

Conflits notables entre les développeurs du noyau Linux :

  • En juillet 2007, Con Kolivas a annoncé qu'il cesserait de développer pour le noyau Linux.
  • En juillet 2009, Alan Cox a quitté son rôle de responsable de la couche TTY après un désaccord avec Torvalds.
  • En décembre 2010, une discussion a eu lieu entre James Bottomley, responsable de la maintenance SCSI sous Linux, et Vladislav Bolkhovitin, responsable de la maintenance SCST, au sujet de la pile cible SCSI à inclure dans le noyau Linux. Cette discussion a suscité le mécontentement de certains utilisateurs de Linux.
  • En juin 2012, Torvalds a clairement indiqué qu'il n'était pas d'accord avec la décision de NVIDIA de publier ses pilotes comme étant fermés.
  • En avril 2014, Torvalds a interdit à Kay Sievers de soumettre des correctifs au noyau Linux pour avoir omis de traiter des bogues qui provoquaient une interaction négative entre systemd et le noyau.
  • En octobre 2014, Lennart Poettering a accusé Torvalds de tolérer le style de discussion brutal sur les listes de diffusion liées au noyau Linux et d'être un mauvais exemple.
  • En mars 2015, Christoph Hellwig a intenté un procès contre VMware pour violation des droits d'auteur sur le noyau Linux. Linus Torvalds a clairement exprimé son désaccord avec cette initiative et d'autres similaires, qualifiant les avocats de maladie purulente.
  • En avril 2021, une équipe de l' Université du Minnesota a été surprise en train de soumettre des correctifs de mauvaise foi au noyau dans le cadre de ses recherches. Tous les correctifs soumis par un membre de l'université ont été immédiatement annulés. De plus, un responsable de la maintenance a averti que tout futur correctif provenant de l'université serait rejeté d'emblée.
  • En février 2025, Hector Martin a démissionné de son poste de responsable du projet Asahi Linux (qui ajoutait la prise en charge des systèmes Apple Silicon à Linux) et des sous-systèmes du noyau associés en raison de désaccords concernant l'utilisation du langage de programmation Rust dans le noyau.
  • En juin 2025, le système de fichiers Bcachefs créait des tensions avec Torvalds et en septembre 2025, il a été retiré du noyau Linux à partir de la version 6.18.

Les principaux développeurs du noyau Linux sont conscients de l'importance d'éviter les conflits entre développeurs. Pendant longtemps, aucun code de conduite n'a été établi pour les développeurs du noyau en raison de l'opposition de Torvalds. Un Code de gestion des conflits du noyau Linux a été introduit le 8 mars 2015. Il a été remplacé le 16 septembre 2018 par un nouveau Code de conduite basé sur le Contributor Covenant . Ce changement a coïncidé avec des excuses publiques de Torvalds et une brève interruption du développement du noyau. Le 30 novembre 2018, conformément au Code de conduite , Jarkko Sakkinen d'Intel a publié des correctifs remplaçant les occurrences de « fuck » dans les commentaires du code source par des versions plus appropriées, notamment avec le mot « hug ».

Les développeurs qui s'estiment traités injustement peuvent le signaler au Conseil consultatif technique de la Linux Foundation . En juillet 2013, Sage Sharp , responsable du pilote USB 3.0, a demandé à Torvalds de s'attaquer aux propos injurieux tenus au sein de la communauté de développement du noyau. En 2014, Sharp s'est retiré du développement du noyau Linux, déclarant : « L'accent mis sur l'excellence technique, combiné à la surcharge de travail des responsables et à des différences culturelles et sociales, fait que les responsables du noyau Linux sont souvent directs, voire brusques, pour mener à bien leur travail. » Lors de la conférence linux.conf.au (LCA) de 2018, les développeurs ont estimé que la culture de la communauté s'était nettement améliorée ces dernières années. Daniel Vetter, responsable du pilote graphique Intel drm/i915, a commenté que le « langage et les discussions plutôt violents » au sein de la communauté du noyau avaient diminué, voire disparu.

Lors de la conférence Embedded Linux Europe 2017, Laurent Pinchart a sollicité l'avis des développeurs sur leur expérience avec la communauté du noyau. Les problèmes soulevés ont été discutés quelques jours plus tard lors du Maintainers Summit. Shuah Khan , responsable du framework d'autotest du noyau, a fait part de ses inquiétudes quant au manque d'homogénéité dans le traitement des correctifs par les responsables de la maintenance. Torvalds a soutenu qu'il serait impossible d'atteindre une uniformité totale dans la gestion des correctifs, car les différents sous-systèmes du noyau ont, au fil du temps, adopté des processus de développement distincts. Il a donc été convenu que chaque responsable de sous-système du noyau documenterait les règles d'acceptation des correctifs.

Développement

une conception intelligente !

— Linus Torvalds, 2005

Base de code

Le code source du noyau, également appelé arbre source, est géré dans le système de contrôle de version Git liste de diffusion du noyau Linux (LKML) (et souvent aussi sur d'autres listes de diffusion dédiées à des sous-systèmes particuliers). Ces correctifs doivent respecter un ensemble de règles et un langage formel qui, entre autres, décrit les lignes de code à supprimer et celles à ajouter aux fichiers spécifiés. Ces correctifs peuvent être traités automatiquement afin que les administrateurs système puissent les appliquer pour apporter des modifications ponctuelles au code ou pour effectuer une mise à niveau progressive vers la version suivante. Linux est également distribué aux formats GNU zip (gzip) et bzip2 .

Un développeur souhaitant modifier le noyau Linux écrit et teste une modification de code. Selon l'importance de la modification et le nombre de sous-systèmes concernés, elle sera soumise soit sous forme de correctif unique, soit sous forme de plusieurs correctifs de code source . Dans le cas d'un sous-système unique maintenu par un seul responsable, ces correctifs sont envoyés par courriel à ce responsable, avec la liste de diffusion appropriée en copie. Le responsable et les abonnés de la liste de diffusion examineront les correctifs et donneront leur avis. Une fois l'examen terminé, le responsable du sous-système accepte les correctifs dans l' arborescence Git du noyau concerné. Si les modifications apportées au noyau Linux sont des corrections de bogues jugées suffisamment importantes, une demande de fusion (pull request) sera envoyée à Torvalds sous quelques jours. Sinon, elle lui sera envoyée lors de la prochaine fenêtre de fusion. Cette fenêtre dure généralement deux semaines et commence immédiatement après la publication de la version précédente du noyau. L'arborescence source du noyau Git nomme tous les développeurs qui ont contribué au noyau Linux dans le répertoire Credits et tous les responsables de sous-systèmes sont listés dans Maintainers .

Comme pour de nombreux projets de logiciels libres de grande envergure, les développeurs sont tenus de respecter le Pacte des contributeurs , un code de conduite visant à lutter contre le harcèlement des contributeurs issus de minorités. De plus, afin de prévenir toute offense, l'utilisation d'une terminologie inclusive dans le code source est obligatoire.

langage de programmation

langage de programmation C spécial pris en charge par GCC , un compilateur qui étend la norme C de nombreuses manières, par exemple en utilisant des sections de code en ligne écrites dans le langage assembleur (dans la syntaxe « style AT&T » de GCC) de l'architecture cible.

En septembre 2021, la version requise de GCC pour la compilation et la construction du noyau Linux est passée de GCC 4.9 à 5.1, permettant ainsi au noyau de passer de l'utilisation de code C basé sur la norme C89 à l'utilisation de code écrit avec la norme C11 , la migration vers la norme ayant eu lieu en mars 2022, avec la sortie de Linux 5.18.

La prise en charge initiale du langage de programmation Rust a été ajoutée dans Linux 6.1, sorti en décembre 2022, et améliorée par les versions ultérieures du noyau, telles que Linux 6.2 et Linux 6.3.

Style de codage

Depuis 2002, le code doit respecter les 21 règles du style de codage du noyau Linux.

Versionnage

Comme pour la plupart des logiciels, le noyau est versionné sous forme d'une série de nombres séparés par des points.

Pour les premières versions, le numéro de version était composé de trois ou quatre nombres séparés par des points : version majeure , version mineure et révision. À cette époque, les versions mineures impaires étaient destinées au développement et aux tests, tandis que les versions mineures paires étaient destinées à la production. Le quatrième chiffre, optionnel, indiquait le niveau de correctif. Les versions de développement étaient indiquées par le suffixe « -rc » (version candidate ).

Les conventions de versionnage actuelles sont différentes. La distinction entre versions paires et impaires (développement/production) a été abandonnée ; une version majeure est désormais indiquée par ses deux premiers chiffres. Tant que le développement de la prochaine version majeure est possible, le suffixe -rcN permet d'identifier la n-ième version candidate (release candidate) de cette version. Par exemple, la version 4.16 a été précédée de sept versions 4.16-rcN (de -rc1 à -rc7). Une fois une version stable publiée, sa maintenance est confiée à l' équipe de maintenance . Les mises à jour d'une version stable sont identifiées par un système à trois chiffres (par exemple : 4.16.1, 4.16.2, etc.).

Chaîne d'outils

Le noyau est généralement construit avec la chaîne d'outils GNU . Le compilateur C GNU (GNU cc), qui fait partie de la collection de compilateurs GNU (GCC), est le compilateur par défaut pour le système Linux principal. L'enchaînement des opérations est géré par GNU make . L' assembleur GNU (souvent appelé GAS ou GNU as) génère les fichiers objets à partir du code assembleur produit par GCC . Enfin, l' éditeur de liens GNU (GNU ld) produit un fichier exécutable du noyau lié statiquement, appelé vmlinux . as et ld font tous deux partie des utilitaires binaires GNU (binutils).

Pendant longtemps, GNU cc a été le seul compilateur capable de compiler correctement Linux. En 2004, Intel a affirmé avoir modifié le noyau afin que son compilateur C puisse également le compiler. Un autre succès similaire a été rapporté en 2009, avec une version modifiée 2.6.22. Le support du compilateur Intel a été abandonné en 2023.

Depuis 2010, des efforts sont déployés pour compiler Linux avec Clang , un compilateur alternatif pour le langage C ; au 12 avril 2014, le noyau officiel pouvait presque être compilé avec Clang. Le projet dédié à cet effort est nommé LLVMLinux, d'après l' infrastructure de compilation LLVM sur laquelle Clang est construit. LLVMLinux ne vise pas à créer de fork de Linux ni de LLVM ; il s'agit donc d'un méta-projet composé de correctifs qui sont ensuite soumis aux projets amont. En permettant la compilation de Linux avec Clang, les développeurs peuvent bénéficier de temps de compilation plus courts.

En 2017, les développeurs ont finalisé l'intégration de correctifs au noyau Linux pour permettre sa compilation avec Clang dans la version 4.15, après avoir rétroporté la prise en charge des architectures x86-64 et AArch64 vers les branches 4.4, 4.9 et 4.14 de l'arbre de développement stable. Le Pixel 2 de Google a été livré avec le premier noyau Linux compilé avec Clang , bien que des correctifs existaient déjà pour le Pixel (première génération) . En 2018, ChromeOS a commencé à utiliser Clang pour la construction des noyaux par défaut, tandis qu'Android a rendu Clang et le linker LLD de LLVM obligatoires pour la construction des noyaux en 2019. Google a migré son noyau de production utilisé dans tous ses centres de données vers une construction avec Clang en 2020. Le groupe ClangBuiltLinux coordonne les correctifs pour Linux et LLVM afin d'assurer la compatibilité, les deux étant composés de membres de LLVMLinux et ayant des correctifs amont de LLVMLinux .

Débogage

Sortie de panique du noyau Linux

Comme pour tout logiciel, les problèmes liés au noyau Linux peuvent être difficiles à résoudre . Les difficultés courantes concernent l'accès à l'espace utilisateur par rapport à l'espace noyau, la mauvaise utilisation des primitives de synchronisation et une gestion matérielle incorrecte.

Une erreur oops est une erreur non fatale du noyau. Après une telle erreur, les opérations se poursuivent avec une fiabilité incertaine.

Une panique (générée par panic() ) est une erreur fatale. Après une telle erreur, le noyau affiche un message et arrête l'ordinateur.

Le noyau permet le débogage par affichage via `printk ()` , qui stocke les messages dans un tampon circulaire (les entrées les plus anciennes étant écrasées par les plus récentes). L' appel système ` syslog(2)` permet de lire et d'effacer le tampon de messages et de définir le niveau de journalisation maximal des messages à envoyer à la console. Les messages du noyau sont également exportés vers l'espace utilisateur via l' interface `/dev/kmsg` . ftrace permet le débogage par traçage. Il est utilisé pour la surveillance et le débogage de Linux en cours d'exécution et peut analyser les latences de l'espace utilisateur dues à des dysfonctionnements du noyau. De plus, ftrace permet aux utilisateurs de tracer Linux au démarrage.

Les kprobes et les kretprobes peuvent s'insérer dans l'exécution du noyau (comme les débogueurs en espace utilisateur) et collecter des informations de manière non perturbatrice. Les kprobes peuvent être insérées dans le code à (presque) n'importe quelle adresse, tandis que les kretprobes fonctionnent au retour d'une fonction. Les uprobes ont des objectifs similaires, mais présentent également quelques différences d'utilisation et d'implémentation.

Avec KGDB, Linux peut être débogué de manière très similaire aux programmes en espace utilisateur. KGDB nécessite une machine supplémentaire exécutant GDB et connectée à la cible à déboguer via un câble série ou Ethernet .

Processus de changement

Le projet du noyau Linux intègre progressivement du nouveau code. La procédure standard exige que tout logiciel intégré au projet fonctionne et compile sans erreur.

Chaque sous-système du noyau se voit attribuer un responsable de maintenance chargé d'examiner les correctifs par rapport aux normes du code du noyau et de maintenir une file d'attente de correctifs pouvant être soumis à Torvalds dans un délai de fusion généralement de plusieurs semaines.

Les correctifs sont intégrés par Torvalds au code source de la version stable précédente du noyau Linux, créant ainsi la version candidate (-rc) pour la prochaine version stable. Une fois la période d'intégration terminée, seules les corrections apportées au nouveau code de la version de développement sont acceptées. La version de développement -rc du noyau est soumise à des tests de régression et, une fois qu'elle est jugée stable par Torvalds et les responsables des sous-systèmes, une nouvelle version est publiée et le processus de développement recommence.

Linux principal

kernel.org . Linux mainline ne prend en charge qu'un petit nombre de périphériques exécutant Linux. La prise en charge des périphériques non mainline est assurée par des projets indépendants, tels que Yocto ou Linaro , mais dans de nombreux cas, le noyau du fabricant du périphérique est nécessaire . L'utilisation d'un noyau fourni par le fabricant requiert généralement un paquet de support de carte (BSP) .

Maintenir une arborescence du noyau en dehors du noyau Linux principal s'est avéré difficile.

L'intégration au noyau principal (mainlining) désigne l'effort d'ajouter la prise en charge d'un périphérique au noyau principal , alors qu'auparavant cette prise en charge n'était assurée que par une branche dérivée ou qu'elle était totalement inexistante. Cela comprend généralement l'ajout de pilotes ou de fichiers d'arbre de périphériques . Une fois cette opération terminée, la fonctionnalité ou le correctif de sécurité est considéré comme intégré au noyau principal .

Noyau de type Linux

Le responsable de la branche stable, Greg Kroah-Hartman , a utilisé le terme « de type Linux » pour désigner les forks du noyau Linux créés par les fournisseurs et qui ajoutent des millions de lignes de code au noyau principal. En 2019, Google a déclaré vouloir utiliser le noyau Linux principal dans Android afin de réduire le nombre de forks. Le terme « de type Linux » a également été appliqué au sous-ensemble du noyau Linux embarqué (Embeddable Linux Kernel Subset ), qui n'inclut pas l'intégralité du noyau Linux principal, mais un petit sous-ensemble modifié du code.

forks de Linux

Un iPod démarrant sous iPodLinux

Certaines communautés développent des noyaux basés sur la distribution Linux officielle. Des portions de code intéressantes issues de ces forks , tels que Linux-libre , Compute Node Linux , INK , L4Linux , RTLinux et User-Mode Linux (UML), ont été intégrées au noyau principal. Certains systèmes d'exploitation développés pour téléphones mobiles utilisaient initialement des versions fortement modifiées de Linux, notamment Google Android , Firefox OS , HP webOS , Nokia Maemo et Jolla Sailfish OS . En 2010, la communauté Linux a critiqué Google pour avoir, de fait, créé son propre arbre de développement de noyaux :

Greg Kroah-Hartman , 2010

Aujourd'hui, Android utilise une distribution Linux personnalisée où des modifications importantes sont apportées aux pilotes de périphériques, mais certaines modifications du code du noyau sont nécessaires. Les développeurs Android soumettent également des correctifs à la distribution Linux officielle, permettant ainsi le démarrage du système d'exploitation Android. Par exemple, une Nexus 7 peut démarrer et exécuter la distribution Linux officielle.

Lors d'une présentation au Computer History Museum en 2001 , Torvalds a répondu ainsi à une question concernant l'utilisation ou non des mêmes sources de noyau par les distributions Linux :

qu'Yggdrasil était connu pour ses modifications importantes du noyau, et même aujourd'hui, tous les principaux fournisseurs y apportent leurs propres ajustements, car ils ont une part de marché en ligne de mire. Et franchement, c'est très bien comme ça. Si tout le monde s'attend à ce qu'une seule personne, moi par exemple, soit capable de tout contrôler, ce n'est pas le but de la GPL. Ce n'est pas le but d'un système ouvert. Donc, le fait qu'une distribution juge un élément si important qu'elle ajoute des correctifs même s'il n'est pas inclus dans le noyau standard est pour moi un excellent signe. C'est ainsi, par exemple, que ReiserFS a été intégré. Et si ReiserFS est le premier système de fichiers journalisé intégré au noyau standard, ce n'est pas parce que j'admire Hans Reiser . C'est parce que SUSE a commencé à distribuer ReiserFS comme noyau standard que je me suis dit : « OK. C'est utilisé en production. Des gens normaux le font. Ils doivent savoir quelque chose que j'ignore. » En fait, beaucoup de distributeurs participent à cette démarche : « Créons notre propre branche » et « Apportons nos modifications ». Et grâce à la GPL, je peux m'approprier les meilleures parties de leur travail.

Linus Torvalds , 2001

soutien à long terme

Messages de démarrage d'un noyau Linux 2.6.25.17

La dernière version et les versions antérieures sont maintenues séparément. La plupart des dernières versions du noyau ont été supervisées par Torvalds.

La communauté des développeurs du noyau Linux maintient un noyau stable en corrigeant les bogues logiciels découverts lors du développement du noyau stable suivant. C'est pourquoi www.kernel.org répertorie toujours deux noyaux stables. Le prochain noyau Linux stable est publié environ 8 à 12 semaines plus tard.

Certaines versions sont conçues pour bénéficier d' un support à long terme avec des correctifs de bogues pendant deux ans ou plus.

Taille

Certains projets ont tenté de réduire la taille du noyau Linux. TinyLinux en est un exemple . En 2014, Josh Triplett a lancé l'arbre source -tiny pour une version de taille réduite.

Architecture et fonctionnalités

Carte du noyau Linux
Diagramme de Sankey des lignes de code source du noyau Linux

Bien que cela puisse paraître contradictoire, le noyau Linux est à la fois monolithique et modulaire. Du point de vue architectural, il est monolithique puisque l'intégralité du système d'exploitation s'exécute dans l'espace noyau. Sa conception est modulaire car il peut être assemblé à partir de modules qui, dans certains cas, sont chargés et déchargés à l'exécution. Il prend en charge des fonctionnalités autrefois réservées aux noyaux propriétaires des systèmes d'exploitation non libres.

Le reste de l'article utilise la convention des pages de manuel des systèmes d'exploitation UNIX et de type Unix . Le nombre qui suit le nom d'une commande, d'une interface ou d'une autre fonctionnalité spécifie la section (c'est-à-dire le type de composant ou de fonctionnalité du système d'exploitation) à laquelle elle appartient. Par exemple, ` execve(2)` fait référence à un appel système et `exec(3)` à une interface de bibliothèque utilisateur.Calcul simultané et (avec la disponibilité de suffisamment de cœurs de processeur pour les tâches prêtes à être exécutées) même une véritable exécution parallèle de nombreux processus à la fois (chacun d'eux ayant un ou plusieurs threads d'exécution ) sur les architectures SMP et NUMA .

  • Sélection et configuration de centaines de fonctionnalités et de pilotes du noyau (à l'aide de l'une des commandes de la famille make *config avant la compilation), modification des paramètres du noyau avant le démarrage (généralement en insérant des instructions dans les lignes d'un menu de chargeur de démarrage ou d'un fichier de configuration), et réglage fin du comportement du noyau à l'exécution (à l'aide de l' interface sysctl(8) sur /proc/sys/ ). planificateurs de tâches permettant le multitâche préemptif (en mode utilisateur et, depuis la série 2.6, en mode noyau ) ; le planificateur EEVDF ( Early Eligible Virtual Deadline First Scheduling ) est le planificateur par défaut de Linux depuis 2023 et utilise un arbre rouge-noir capable de rechercher, d'insérer et de supprimer des informations de processus ( structure de tâche ) avec une complexité temporelle de O(log n) , où n est le nombre de tâches exécutables.
  • Gestion avancée de la mémoire avec mémoire virtuelle paginée et un algorithme de remplacement de pages multigénérationnel le moins récemment utilisé (MGLRU) .
  • Mécanisme de communication et de synchronisation interprocessus .
  • Un système de fichiers virtuel superposé à plusieurs systèmes de fichiers concrets ( ext4 , Btrfs , XFS , JFS , FAT32 et bien d'autres).
  • Planificateurs d'E/S configurables, appel système ioctl(2) qui manipule les paramètres de périphérique sous-jacents des fichiers spéciaux (il s'agit d'un appel système non standard, car les arguments, les retours et la sémantique dépendent du pilote de périphérique en question), prise en charge des E/S asynchrones POSIX (car elles évoluent mal avec les applications multithreadées, cependant, une famille d'appels système d'E/S spécifiques à Linux ( io_*(2) ) a dû être créée pour la gestion des contextes d'E/S asynchrones adaptés au traitement concurrent).Virtualisation au niveau du système d'exploitation (avec Linux-VServer ), paravirtualisation et virtualisation assistée par matériel (avec KVM ou Xen , et en utilisant QEMU pour l'émulation matérielle) ; Sur l' hyperviseur Xen , le noyau Linux permet de créer des distributions Linux (telles qu'openSUSE Leap et bien d'autres) qui fonctionnent comme Dom0 , c'est-à-dire des serveurs hôtes de machines virtuelles fournissant l'environnement de gestion des machines virtuelles de l'utilisateur ( DomU ).
  • Virtualisation des E/S avec VFIO et SR-IOV . Les E/S à fonction virtuelle (VFIO) permettent un accès direct aux périphériques depuis l'espace utilisateur dans un environnement protégé par une mémoire sécurisée (IOMMU). Grâce à VFIO, une machine virtuelle invitée peut accéder directement aux périphériques matériels du serveur hôte. Cette technique améliore les performances par rapport à la virtualisation complète et à la paravirtualisation. Cependant, avec VFIO, les périphériques ne peuvent pas être partagés entre plusieurs machines virtuelles invitées. La virtualisation des E/S à racine unique (SR-IOV) combine les gains de performance de VFIO et la possibilité de partager un périphérique avec plusieurs machines virtuelles invitées (mais elle nécessite un matériel spécifique capable d'apparaître comme un périphérique différent pour au moins deux machines virtuelles invitées).
  • Mécanismes de sécurité pour le contrôle d'accès discrétionnaire et obligatoire (SELinux, AppArmor, ACL POSIX , etc.).
  • Plusieurs types de protocoles de communication en couches (y compris la suite de protocoles Internet ).
  • Multitraitement asymétrique via le sous-système RPMsg .
  • La plupart des pilotes de périphériques et des extensions du noyau s'exécutent dans l'espace noyau ( anneau 0 dans de nombreuses architectures de processeurs ), avec un accès complet au matériel. Certaines exceptions s'exécutent dans l'espace utilisateur ; on peut citer comme exemples les systèmes de fichiers basés sur FUSE /CUSE et certaines parties d'UIO. Par ailleurs, le système X Window et Wayland , le système de fenêtrage et les protocoles de serveur d'affichage les plus utilisés sous Linux, ne s'exécutent pas au sein du noyau. En revanche, l'interface avec les GPU des cartes graphiques est assurée par un sous-système du noyau appelé Gestionnaire de rendu direct (DRM).

    Contrairement aux noyaux monolithiques classiques, les pilotes de périphériques sont facilement configurables sous forme de modules et peuvent être chargés ou déchargés pendant l'exécution du système. Ils peuvent également être préemptés dans certaines conditions afin de gérer correctement les interruptions matérielles et de mieux prendre en charge le multiprocesseur symétrique . Linux fait le choix de ne pas disposer d'interface binaire stable pour les applications de pilotes de périphériques .

    Linux utilise généralement la protection de la mémoire et la mémoire virtuelle et peut également gérer l'accès non uniforme à la mémoire , le projet a absorbé μClinux , ce qui permet également d'exécuter Linux sur des microcontrôleurs sans mémoire virtuelle.

    Le matériel est représenté dans l'arborescence des fichiers. Les applications utilisateur interagissent avec les pilotes de périphériques via des entrées dans les répertoires /dev ou /sys . Les informations relatives aux processus sont stockées dans le répertoire /proc .

    Les différentes couches de Linux illustrent également la séparation entre l' espace utilisateur et l'espace noyau.Mode utilisateurApplications utilisateurbash , LibreOffice , GIMP , Blender , 0 AD , Mozilla Firefox , ...Composants du systèmeDémon d'initialisation : OpenRC , runit , systemd , ...Démons système : polkitd , smbd , sshd , udevd , ...Système de fenêtrage : X11 , Wayland , SurfaceFlinger (Android)Graphismes : Mesa , logiciel AMD , ...Autres bibliothèques : GTK , Qt , EFL , SDL , SFML , FLTK , GNUstep , …bibliothèque standard Cfopen, execv, malloc, memcpy, localtime, pthread_create, ... (jusqu'à 2000 sous-programmes ) glibc vise à être rapide, musl vise à être léger, uClibc cible les systèmes embarqués, bionic a été écrit pour Android , etc. Tous visent à être compatibles POSIX / SUS .Mode noyauNoyau Linuxstat, splice, dup, read, open, ioctl, write, mmap, close, exitetc. (environ 380 appels système) L' interface d'appel système (SCI) du noyau Linux vise à être compatible POSIX / SUS Sous-système de planification des processussous-système IPCsous-système de gestion de la mémoiresous-système de fichiers virtuelsSous-système de mise en réseauAutres composants : ALSA , DRI , evdev , klibc , LVM , gestionnaire de périphériques , planificateur de réseau Linux , Netfilter . Modules de sécurité Linux : SELinux , TOMOYO , AppArmor , Smack.Matériel ( processeur , mémoire principale , périphériques de stockage de données , etc.)

    Interfaces

    On distingue quatre interfaces : deux internes au noyau et deux entre le noyau et l’espace utilisateur.

    Linux a été initialement conçu comme un clone d'UNIX et vise la conformité aux normes POSIX et Single UNIX Specification . Le noyau fournit les appels système et autres interfaces spécifiques à Linux. Pour être intégré au noyau officiel, le code doit respecter un ensemble de règles de licence.

    L’ interface binaire d’application (ABI) Linux entre le noyau et l’espace utilisateur possède quatre degrés de stabilité (stable, en test, obsolète, supprimée) ; Les appels système ne devraient jamais changer afin de préserver la compatibilité avec les programmes de l’espace utilisateur qui en dépendent.

    Les modules de noyau chargeables (LKM), de par leur conception, ne peuvent pas s'appuyer sur une ABI stable. Par conséquent, ils doivent systématiquement être recompilés lors de l'installation d'un nouvel exécutable de noyau sur un système, faute de quoi ils ne seront pas chargés. Les pilotes intégrés configurés pour faire partie intégrante de l'exécutable de noyau ( vmlinux ) sont liés statiquement lors du processus de compilation.

    La stabilité de l'API noyau au niveau du code source n'est pas garantie et, de ce fait, le code des pilotes de périphériques , ainsi que celui de tout autre sous-système du noyau, doit être mis à jour en fonction de l'évolution du noyau. Tout développeur qui modifie l'API est tenu de corriger tout code rendu altéré par cette modification.

    API noyau-espace utilisateur

    L'ensemble de l' API du noyau Linux , qui concerne les interfaces exposées aux applications utilisateur, est fondamentalement composé d'appels système UNIX et d'appels système spécifiques à Linux . Un appel système est un point d'entrée dans le noyau Linux. Par exemple, parmi les appels système spécifiques à Linux, on trouve la famille des appels système clone(2) . La plupart des extensions doivent être activées en définissant la macro correspondante dans un fichier d'en-tête ou lors de la compilation du code utilisateur. _GNU_SOURCE

    Les appels système ne peuvent être invoqués que par le biais d'instructions assembleur permettant la transition de l'espace utilisateur non privilégié à l'espace noyau privilégié ( anneau 0 ). C'est pourquoi la bibliothèque standard C (libC) sert d'interface à la plupart des appels système Linux, en exposant des fonctions C qui, si nécessaire, accèdent de manière transparente au noyau, lequel s'exécute pour le compte du processus appelant. Pour les appels système non exposés par libC, tels que le mutex rapide de l'espace utilisateur , la bibliothèque fournit une fonction appelée syscall(2) , qui permet de les invoquer explicitement. Les pseudo-systèmes de fichiers (par exemple, les systèmes de fichiers sysfs et procfs ) et les fichiers spéciaux (par exemple, /dev/random, , /dev/sda, /dev/ttyet bien d'autres) constituent une autre couche d'interface avec les structures de données du noyau représentant des périphériques matériels ou logiques (logiciels).

    ABI noyau-espace utilisateur

    ISA du matériel cible), sont souvent incompatibles avec certaines distributions Linux. Ce problème est principalement dû aux configurations propres à chaque distribution et à un ensemble de correctifs appliqués au code du noyau Linux, ainsi qu'aux différences au niveau des bibliothèques système, des services (démons), de l'arborescence du système de fichiers et des variables d'environnement.

    La principale norme concernant la compatibilité applicative et binaire des distributions Linux est la Linux Standard Base (LSB). La LSB va au-delà du noyau Linux, car elle définit également les spécifications du bureau, les bibliothèques X et Qt, qui n'ont que peu de rapport avec lui. La version 5 de la LSB s'appuie sur plusieurs normes et ébauches (POSIX, SUS, X/Open, File System Hierarchy (FHS), etc.).

    Les parties du LSB les plus pertinentes pour le noyau sont l' ABI générale (gABI), en particulier l' ABI System V et le format exécutable et de liaison (ELF), et l' ABI spécifique au processeur (psABI), par exemple la spécification de base pour X86-64.

    L'ABI standard pour la manière dont les programmes utilisateur x86_64 invoquent les appels système consiste à charger le numéro de l'appel système dans le registre rax , et les autres paramètres dans rdi , rsi , rdx , r10 , r8 et r9 , et enfin à insérer l' instruction assembleur d'appel système dans le code.

    API intégrée au noyau

    Lors de la conférence XDC 2014, Alex Deucher d'AMD a annoncé le pilote unifié en mode noyau. Le pilote graphique propriétaire Linux, libGL-fglrx-glx , partagera la même infrastructure DRM que Mesa 3D . En l'absence d' une ABI stable au sein du noyau , AMD a dû constamment adapter l'ancien blob binaire utilisé par Catalyst.

    Il existe plusieurs API internes au noyau permettant la communication entre les sous-systèmes du noyau. Certaines ne sont disponibles qu'au sein des sous-systèmes du noyau, tandis qu'un ensemble relativement limité de symboles internes au noyau (c'est-à-dire des variables, des structures de données et des fonctions) est exposé aux modules chargeables dynamiquement (par exemple, les pilotes de périphériques chargés à la demande), qu'ils soient exportés ou non avec les macros EXPORT_SYMBOL() et EXPORT_SYMBOL_GPL() (cette dernière étant réservée aux modules publiés sous une licence compatible GPL). des listes chaînées , des arbres radix , des arbres rouge-noir , des files d'attente ) ou effectuent des routines courantes (par exemple, copier des données depuis et vers l'espace utilisateur, allouer de la mémoire, imprimer des lignes dans le journal système, etc.) qui sont restées stables au moins depuis la version 2.6 de Linux.

    Les API intégrées au noyau comprennent des bibliothèques de services communs de bas niveau utilisés par les pilotes de périphériques :

    • Interfaces SCSI et libATA respectivement, un protocole de communication par paquets pair à pair pour les périphériques de stockage connectés à des périphériques USB, SATA, SAS, Fibre Channel, FireWire, ATAPI, et une bibliothèque intégrée au noyau pour prendre en charge les contrôleurs et périphériques hôtes [S]ATA. Gestionnaire de rendu direct (DRM) et paramètre de mode noyau (KMS) pour l’interface avec les GPU et la prise en charge des besoins du matériel vidéo 3D accéléré moderne, et pour la configuration de la résolution d’écran, de la profondeur de couleur et du taux de rafraîchissement Tampons DMA ( DMA-BUF ) pour le partage de tampons pour l'accès direct à la mémoire matérielle entre plusieurs pilotes de périphériques et sous-systèmes Video4Linux pour le matériel d'acquisition vidéoArchitecture sonore avancée Linux (ALSA) pour cartes sonNouvelle API pour les contrôleurs d'interface réseau
    • mac80211 et cfg80211 pour les contrôleurs d'interface réseau sans fil noyaux , permet de gérer les processus, notamment leur création, leur suspension, leur reprise et leur arrêt. Contrairement à d'autres systèmes d'exploitation, le noyau Linux implémente les processus sous forme de groupes de threads appelés tâches. Si deux tâches partagent le même TGID (Tâche , Thrusted Process ID), elles forment un groupe de tâches. Chaque tâche est représentée par une structure de données task_struct . Lors de sa création, un processus se voit attribuer un identifiant unique global appelé PID (Processus ID) qui ne peut être partagé

      Un nouveau processus peut être créé en appelant la famille d'appels système `clone` ou l'appel système ` fork` . Les processus peuvent être suspendus et repris par le noyau via des signaux tels que `SIGSTOP` et `SIGCONT` . Un processus peut se terminer lui-même en appelant l'appel système ` exit` , ou être terminé par un autre processus via des signaux tels que `SIGKILL` , `SIGABRT` ou `SIGINT` .éditeur de liens dynamique est utilisé pour trouver et charger les objets nécessaires, préparer le programme à l'exécution, puis l'exécuter.

      La bibliothèque native de threads POSIX (NPTL) fournit l'interface de threads standard POSIX ( pthreads ) à l'espace utilisateur. Le noyau ignore la notion de processus et de thread, mais il reconnaît celle de tâche ; les threads sont donc implémentés dans l'espace utilisateur. Sous Linux, les threads sont implémentés comme des tâches partageant des ressources, tandis que lorsqu'ils ne partagent pas de ressources, on les considère comme des processus indépendants.

      Le noyau fournit les mécanismes futex(7) (mutex rapide en espace utilisateur) pour le verrouillage et la synchronisation en espace utilisateur. La majorité des opérations sont effectuées en espace utilisateur, mais il peut être nécessaire de communiquer avec le noyau à l'aide de l' appel système futex(2) . Le planificateur de processus Linux est modulaire, en ce sens qu'il permet différentes classes et politiques de planification. Les classes de planificateur sont des algorithmes de planification modulaires qui peuvent être enregistrés auprès du code du planificateur de base. Chaque classe planifie différents types de processus. Le code principal du planificateur parcourt chaque classe par ordre de priorité et sélectionne le planificateur ayant la priorité la plus élevée et disposant d'une entité planifiable de type `struct sched_entity` prête à être exécutée. Les entités peuvent être des threads, des groupes de threads, voire l'ensemble des processus d'un utilisateur spécifique.

      Linux offre à la fois la préemption utilisateur et la préemption complète du noyau (sélectionnable, jusqu'à) . La préemption réduit la latence , augmente la réactivité et rend Linux plus adapté aux applications de bureau et temps réel . Ceci se fait au détriment du débit, car l'interruption des tâches dégrade le comportement du cache.

      Pour les tâches normales, par défaut, le noyau utilise la classe Completely Fair Scheduler (CFS)., introduit dans la version 2.6.23. Le planificateur est défini comme une macro dans un en-tête C. SCHED_NORMALDans d'autres noyaux POSIX, une politique similaire, appelée SCHED_OTHERallocation de tranches de temps CPU (c'est-à-dire qu'elle attribue des tranches absolues de temps processeur en fonction de la priorité prédéterminée ou calculée dynamiquement de chaque processus), est utilisée. Le CFS de Linux abandonne les tranches de temps absolues et attribue une proportion équitable de temps CPU, en fonction de paramètres tels que le nombre total de processus exécutables et leur temps d'exécution ; cette fonction prend également en compte une pondération qui dépend de leurs priorités relatives (valeurs nice).

      Avec la préemption utilisateur, le planificateur du noyau peut remplacer le processus courant par l'exécution d'un changement de contexte vers un autre processus qui acquiert ainsi les ressources de calcul nécessaires à son exécution (CPU, mémoire, etc.). Ce choix s'effectue selon l'algorithme CFS (en particulier, il utilise une variable appelée `vruntime` pour trier les entités et sélectionne celle qui a la plus petite valeur de `vruntime`, c'est-à-dire l'entité planifiable ayant consommé le moins de temps CPU), la politique du planificateur actif et les priorités relatives. Avec la préemption du noyau, ce dernier peut s'auto-interrompre lorsqu'un gestionnaire d'interruptions se termine, lorsque des tâches noyau sont bloquées et lorsqu'un sous-système appelle explicitement la fonction `schedule()`.SCHED_FIFO , nommées FIFO ( premier entré, premier sorti ) et ROCK SCHED_RR( tourniquet ), qui sont toutes deux prioritaires sur la classe par défaut. Une politique d'ordonnancement supplémentaire, appelée EDF (Early Deadline First), SCHED_DEADLINEimplémentant l' algorithme EDF (Early Deadline First), a été ajoutée dans la version 3.14 du noyau, publiée le 30 mars 2014. SCHED_DEADLINE est prioritaire sur toutes les autres classes d'ordonnancement.

      Les correctifs temps réel PREEMPT_RT, intégrés à Linux depuis la version 2.6, offrent un ordonnanceur déterministe , la suppression de la préemption et la désactivation des interruptions (lorsque possible), les mutex PI (c’est-à-dire des primitives de verrouillage qui évitent l’inversion de priorité), la prise en charge des minuteurs d’événements haute précision (HPET), la lecture-copie-mise à jour préemptive (RCU), les threads IRQ (forcés) et d’autres fonctionnalités mineures.

      En 2023, Peter Zijlstra a proposé de remplacer CFS par un ordonnanceur EEVDF ( Early Eligible Virtual Deadline First Scheduling ) afin d'éviter le recours aux correctifs de latence de CFS . L'ordonnanceur EEVDF a remplacé CFS dans la version 6.6 du noyau Linux

    Synchronisation

    Le noyau présente différentes causes de concurrence (par exemple, interruptions, moitiés inférieures, préemption des tâches du noyau et des utilisateurs, multiprocesseur symétrique).

    Pour protéger les régions critiques (sections de code devant être exécutées de manière atomique), les zones de mémoire partagée (comme les variables globales et autres structures de données à portée globale) et les régions de mémoire modifiables de manière asynchrone par le matériel (par exemple, celles possédant le qualificateur de type `volatile` en C ), Linux fournit un large éventail d'outils. Ces outils comprennent les types atomiques (manipulables uniquement par un ensemble d'opérateurs spécifiques), les verrous d'exclusion mutuelle ( spinlocks ) , les sémaphores , les mutex et les algorithmes sans verrou (par exemple, les RCU ) . La plupart des algorithmes sans verrou reposent sur des barrières mémoire afin de garantir l' ordre d'accès à la mémoire et d'éviter les effets de bord indésirables dus à l' optimisation du compilateur .

    Le code PREEMPT_RT inclus dans le noyau Linux fournit des mutex RT , un type particulier de mutex qui ne désactive pas la préemption et prend en charge l'héritage de priorité. Presque tous les verrous sont transformés en verrous dormants lors de l'utilisation d'une configuration pour un fonctionnement en temps réel. L'héritage de priorité évite l'inversion de priorité en accordant à une tâche de faible priorité qui détient un verrou contesté la priorité d'une tâche en attente de priorité supérieure jusqu'à ce que ce verrou soit libéré.

    Linux inclut un validateur de verrous du noyau appelé Lockdep .

    Interrompt

    Bien que la gestion des interruptions puisse être considérée comme une tâche unique, elle est en réalité divisée en deux. Cette division s'explique par les différentes contraintes temporelles et les besoins de synchronisation des tâches qui la composent. La première partie est constituée d'une routine de service d'interruption (ISR) asynchrone, appelée « partie supérieure » ​​sous Linux , tandis que la seconde partie est exécutée par l'un des trois types de « parties inférieures » ( softirq , tasklets et files d'attente de travail ).

    Les routines de service d'interruption (ISR) Linux peuvent être imbriquées. Une nouvelle IRQ peut déclencher une ISR de haute priorité qui préempte toute autre ISR de priorité inférieure.

    Mémoire

    DMA .
  • la mémoire virtuelle avec des tables de pages à 4 ou 5 niveaux . Le noyau n'est pas paginé (c'est-à-dire qu'il réside toujours en mémoire physique et ne peut pas être transféré sur le disque) et il n'y a pas de protection mémoire (pas de signaux SIGSEGV , contrairement à l'espace utilisateur) ; par conséquent, les violations de mémoire entraînent une instabilité et des plantages système. La mémoire utilisateur est paginable par défaut, bien que la pagination pour des zones mémoire spécifiques puisse être désactivée avec la famille d'appels système .

    Les informations relatives aux cadres de page sont conservées dans des structures de données appropriées (de type `Page`

    Diagramme de la pile de stockage Linux

    Le noyau incluait autrefois les allocateurs SLAB, SLUB et SLOB comme alternatives configurables. L'allocateur SLOB a été supprimé dans Linux 6.4 et l'allocateur SLAB dans Linux 6.8. Le seul allocateur restant est SLUB, qui vise la simplicité et l'efficacité, est compatible avec PREEMPT_RT et a été introduit dans Linux 2.6.

  • système de fichiers virtuel

    système de fichiers virtuel (VFS) interagit avec d'autres sous-systèmes Linux, l'espace utilisateur ou les API , et masque les différentes implémentations des systèmes de fichiers sous-jacents. Le VFS implémente des appels système tels que `ip install` create, open`ip install`, ` readip install` writeet `ip install`. Il implémente un superblocclose générique et un bloc d'inodes indépendants de ceux du système de fichiers sous-jacent.

    Dans ce sous-système, les répertoires et les fichiers sont représentés par une struct filestructure de données . Lorsqu'un utilisateur demande l'accès à un fichier, un descripteur de fichier (un entier positif ou nul) lui est renvoyé. En revanche, dans l'espace noyau, il s'agit d'une struct filestructure. Cette structure stocke toutes les informations que le noyau possède sur un fichier ou un répertoire.

    sysfs et procfs sont des systèmes de fichiers virtuels qui exposent des informations matérielles et des informations d'exécution des programmes en espace utilisateur . Ces systèmes de fichiers ne sont pas présents sur le disque ; le noyau les implémente sous forme de fonctions de rappel ou de routines appelées lorsqu'ils sont utilisés par l'espace utilisateur.

    Architectures prises en charge

    TiVo DVR , un appareil grand public fonctionnant sous Linux

    Bien que n'ayant pas été conçu initialement pour être portable , Linux est aujourd'hui l'un des noyaux de systèmes d'exploitation les plus portés, fonctionnant sur une gamme variée de systèmes, de l' architecture ARM aux ordinateurs centraux IBM z/Architecture . Le premier portage a été réalisé sur la plateforme Motorola 68000. Les modifications apportées au noyau étaient si fondamentales que Torvalds considérait la version Motorola comme une bifurcation et un « système d'exploitation de type Linux ». Cela l'a incité à mener une restructuration majeure du code afin de faciliter le portage vers davantage d'architectures informatiques. La première version de Linux qui, dans un seul arbre source, comportait du code pour plus que le seul i386, prenait en charge la plateforme DEC Alpha AXP 64 bits.

    Linux est utilisé comme système d'exploitation principal sur le supercalculateur Summit d'IBM . En octobre 2019, tous les systèmes figurant sur la liste TOP500 des supercalculateurs les plus rapides au monde fonctionnaient avec des systèmes d'exploitation basés sur le noyau Linux, alors que le premier supercalculateur basé sur Linux est apparu sur la liste en 1998.

    Linux a également été porté sur divers appareils portables tels que l'iPhone 3G et l'iPod .

    Appareils compatibles

    En 2007, le projet LKDDb a été lancé afin de constituer une base de données exhaustive du matériel et des protocoles reconnus par les noyaux Linux. Cette base de données est construite automatiquement par analyse statique des sources du noyau. Plus tard, en 2014, le projet Linux Hardware a été lancé pour collecter automatiquement une base de données de toutes les configurations matérielles testées, avec la contribution des utilisateurs de diverses distributions Linux.

    Patchage en direct

    Les mises à jour du noyau peuvent être appliquées sans redémarrage grâce à des technologies de patch à chaud telles que Ksplice , kpatch et kGraft . La prise en charge initiale du patch à chaud du noyau a été intégrée au noyau Linux dans la version 4.0, publiée le 12 avril 2015. Cette fonctionnalité, appelée livepatch , utilise ftrace et fournit une infrastructure commune pour les correctifs à chaud distribués via des modules du noyau, ainsi que des interfaces pour les outils de gestion de l'espace utilisateur. Dans sa première implémentation sous Linux 4.0, la prise en charge de livepatch était limitée à l' architecture x86 et offrait une infrastructure de base plutôt qu'un modèle complet de cohérence pour le patch à chaud.

    Sécurité

    Les bogues du noyau présentent des risques de sécurité potentiels. Par exemple, ils peuvent permettre une élévation de privilèges ou créer des vecteurs d'attaque par déni de service . Au fil des années, de nombreux bogues affectant la sécurité du système ont été découverts et corrigés. De nouvelles fonctionnalités sont fréquemment implémentées pour améliorer la sécurité du noyau.

    Les capacités (7) ont déjà été introduites dans la section relative aux processus et aux threads. Android les utilise et systemd offre aux administrateurs un contrôle détaillé sur les capacités des processus.

    Linux offre de nombreux mécanismes pour réduire la surface d'attaque du noyau et améliorer la sécurité ; ces mécanismes sont collectivement appelés modules de sécurité Linux (LSM) . Ils comprennent le module Security-Enhanced Linux (SELinux), dont le code a été initialement développé puis rendu public par la NSA [ , et AppArmor autres. SELinux est désormais activement développé et maintenu sur GitHub . SELinux et AppArmor prennent en charge les politiques de sécurité de contrôle d'accès, notamment le contrôle d'accès obligatoire (MAC), bien qu'ils diffèrent considérablement en termes de complexité et de portée.

    Une autre fonctionnalité de sécurité est le Seccomp BPF (SECure COMPuting with Berkeley Packet Filters), qui fonctionne en filtrant les paramètres et en réduisant l'ensemble des appels système disponibles pour les applications en espace utilisateur.

    Les critiques ont accusé les développeurs du noyau de dissimuler des failles de sécurité, ou du moins de ne pas les annoncer ; en 2008, Torvalds a répondu à cela par ce qui suit :

    à support long terme (LTSS) qui bénéficient de mises à jour de sécurité pour une version spécifique du noyau Linux pendant une période prolongée.

    En 2024, des chercheurs ont révélé qu'une vulnérabilité critique, CVE-2024-50264, affectait le sous-système AF_VSOCK du noyau Linux. Ce bogue, de type « use-after-free », est une faille de corruption de mémoire qui survient lorsqu'un programme continue d'utiliser de la mémoire après sa libération. Ces failles sont particulièrement dangereuses au niveau du noyau, car elles peuvent permettre à un attaquant d'élever ses privilèges. Ce bogue a été corrigé en mai 2025.

    Légal

    Conditions de licence

    Initialement, Torvalds a publié Linux sous une licence interdisant toute utilisation commerciale. Cette restriction a été levée dans la version 0.12 par l'adoption de la licence publique générale GNU version 2 (GPLv2). Cette licence autorise la distribution et la vente de versions de Linux, éventuellement modifiées ou non, mais exige que toutes ces copies soient publiées sous la même licence et accompagnées du code source complet correspondant, ou que ce code soit accessible gratuitement sur demande. Torvalds a déclaré que la publication de la licence Linux sous GPLv2 était « la meilleure chose que j'aie jamais faite ».

    Le noyau Linux est distribué exclusivement sous la licence publique générale GNU version 2 (GPL-2.0) avec une exception explicite concernant les appels système (Linux-syscall-note) sans offrir au titulaire de licence la possibilité de choisir une version ultérieure, ce qui constitue une extension courante de la GPL. Le code fourni doit être disponible sous une licence compatible avec la GPL .

    La question de la facilité avec laquelle la licence pourrait être modifiée pour utiliser des versions ultérieures de la GPL (y compris la version 3), et même de l'opportunité d'un tel changement, a fait l'objet de nombreux débats. Torvalds lui-même a explicitement indiqué, lors de la publication de la version 2.4.0, que son propre code n'était distribué que sous la version 2. Les termes de la GPL stipulent que si aucune version n'est spécifiée, n'importe quelle version peut être utilisée, et Alan Cox a souligné que très peu d'autres contributeurs Linux avaient spécifié une version particulière de la GPL.

    En septembre 2006, un sondage mené auprès de 29 programmeurs clés du noyau Linux a révélé que 28 d'entre eux préféraient la GPLv2 au projet de GPLv3 alors en vigueur. Torvalds a commenté : « Je pense que plusieurs personnes extérieures au milieu… croyaient que j'étais simplement une exception, car je n'avais jamais caché publiquement mon aversion pour la GPLv3. » Ce groupe de développeurs de noyau de renom, dont Torvalds, Greg Kroah-Hartman et Andrew Morton , a fait part de ses objections à la GPLv3 dans les médias. Ils ont évoqué des clauses relatives aux DRM / à la tivoïsation , aux brevets, aux « restrictions supplémentaires » et ont mis en garde contre une balkanisation de l'« univers du logiciel libre » par la GPLv3. Torvalds, qui a décidé de ne pas adopter la GPLv3 pour le noyau Linux, a réitéré ses critiques même des années plus tard.

    Modules du noyau chargeables

    La question de savoir si certains modules de noyau chargeables (LKM) doivent être considérés comme des œuvres dérivées au sens du droit d'auteur, et donc s'ils relèvent ou non des termes de la GPL, fait débat.

    Conformément aux règles de licence, les LKM utilisant uniquement un sous-ensemble public des interfaces du noyau sont des œuvres non dérivées, Linux donne ainsi aux administrateurs système les mécanismes pour charger des objets binaires hors de l'arbre dans l'espace d'adressage du noyau.

    Certains modules chargeables hors du noyau utilisent légitimement la fonctionnalité noyau dma_buf . Le code conforme à la GPL peut bien sûr l'utiliser. Un autre cas d'utilisation possible serait Nvidia Optimus , qui associe un GPU rapide à un GPU intégré Intel, le GPU Nvidia écrivant dans le framebuffer Intel lorsqu'il est actif. Cependant, Nvidia ne peut pas utiliser cette infrastructure car cela nécessiterait de contourner une règle qui ne peut être utilisée que par les LKM également sous GPL. Alan Cox a répondu sur LKML , rejetant une demande d'un ingénieur de Nvidia visant à supprimer cette contrainte technique de l'API. Torvalds a clairement déclaré sur LKML : « [Je] soutiens que les modules noyau binaires uniquement SONT dérivés “par défaut” ».

    D'autre part, Torvalds a également déclaré : « Une zone grise, en particulier, concerne les pilotes initialement conçus pour un autre système d'exploitation (c'est-à-dire, clairement, qui ne sont pas des œuvres dérivées de Linux). C'est une zone grise, et c'est précisément dans ce cas que je pense que certains modules peuvent être considérés comme n'étant pas des œuvres dérivées, simplement parce qu'ils n'ont pas été conçus pour Linux et ne dépendent d'aucun comportement spécifique de Linux. » Les pilotes graphiques propriétaires , notamment, font l'objet de nombreuses discussions.

    Chaque fois que des modules propriétaires sont chargés dans Linux, le noyau se marque comme étant « contaminé » et par conséquent, les rapports de bogues provenant de noyaux contaminés seront souvent ignorés par les développeurs.

    blobs binaires du firmware

    Le noyau officiel, c'est-à-dire la branche git de Torvalds sur le dépôt kernel.org, contient des blobs binaires distribués sous les termes de la licence GNU GPLv2. Linux peut également charger des blobs binaires, des firmwares propriétaires, des pilotes ou d'autres modules exécutables depuis le système de fichiers et les intégrer à l'espace noyau.

    Lorsque cela s’avère nécessaire (par exemple, pour accéder aux périphériques de démarrage ou pour des raisons de vitesse), le firmware peut être intégré au noyau, c’est-à-dire intégré à vmlinux ; toutefois, cette option n’est pas toujours viable pour des raisons techniques ou juridiques (par exemple, il est interdit de le faire avec un firmware non compatible avec la GPL, bien que cela soit assez courant).

    Marque déposée

    Linux est une marque déposée de Linus Torvalds aux États-Unis, dans l'Union européenne et dans d'autres pays. Une bataille juridique autour de cette marque a débuté en 1996, lorsque William Della Croce, un avocat qui n'avait jamais participé au développement de Linux, a commencé à réclamer des droits de licence pour l'utilisation du terme « Linux » . Après avoir prouvé que le terme était couramment utilisé bien avant la première utilisation revendiquée par Della Croce, la marque a été attribuée à Torvalds.

    Suppression des techniciens russes

    En octobre 2024, lors de l' invasion russe de l'Ukraine , Greg Kroah-Hartman, développeur du noyau Linux, a démis de leurs fonctions de mainteneurs certains développeurs dont les adresses électroniques laissaient supposer un lien avec la Russie. Linus Torvalds a réagi en déclarant qu'il ne soutenait pas l'agression russe et qu'il ne reviendrait pas sur le correctif, insinuant que les opposants à ce dernier étaient des trolls russes . James Bottomley, développeur du noyau, a présenté ses excuses pour la gestion de la situation et a précisé que cette action était une conséquence des sanctions américaines contre la Russie .

    Plus d articles de Worldlex Wiki

    Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

    Explorer l index