Retour à l'accueil

Le monde merveilleux de Linux 2.6

Publié le :

Cet article est la traduction du document Wonderful World of Linux 2.6, Copyright 2003, Joseph Pranevich (jpranevich AT kniggit.net).


Traduit de l’anglais par : Yves Jacolin (yjacolin AT free.fr, David Soulayrol (dsoulayrol AT free.fr), Wistiti (wistiti AT my-underworld.net). Également révisé par Jean-Michel Fayard (jean-michel.fayard AT laposte.net).

Avant-propos

Bien qu’il nous semble qu’hier seulement nous lancions notre premier système Linux 2.4, le temps a passé et l’équipe de développement du noyau ajuste délivré le noyau 2.6 au public. Ce document se veut être une vue d’ensemble générale des fonctionnalités de la nouvelle version du noyau, en insistant particulièrement sur la version i386. Soyez conscient que quelques-unes des nouvelles fonctionnalités présentées ici pourraient avoir été reportées dans Linux 2.4 après être apparues d’abord dans Linux 2.6, soit officiellement, soit à l’initiative d’une distribution. J’ai aussi inclus des informations sur une poignée de cas où une nouvelle fonctionnalité est apparue durant le cycle de maintenance de Linux 2.4, et ces insertions seront soulignées comme il se doit dans le texte.

À ce jour, ce document a été traduit en dix langues. Voyez la section Traductions tout à la fin pour plus d’informations.

L’histoire à ce jour…

Le projet de noyau Linux fut entamé en 1991 par Linus Torvalds comme une variante du système d’exploitation Minix pour son 386 (Linus voulut tout d’abord nommer son projet Freax, mais le nom maintenant familier est celui qui est resté). La première version officielle de Linux 1.0 date de mars 1994 et supportait uniquement les machines mono-processeur i386. Juste un an après sortait Linux 1.2 (mars 1995), la première version à offrir un support pour différents types de plates-formes (soit Alpha, Sparc et Mips) mais encore seulement mono-processeur. Linux 2.0 est arrivé en juin 1996 et incluait également le support de nombreuses nouvelles architectures, mais amena surtout Linux dans le monde des machines multiprocesseur (SMP). Après Linux 2.0, les révisions majeures se sont faites un peu plus lentement (Linux 2.2 en janvier 1999 et 2.4 en janvier 2001), chaque révision augmentant le support de Linux pour de nouveaux matériels tout en améliorant les possibilités d’extensibilité du système (Il faut aussi souligner que Linux 2.4 est la version qui a réellement fait rentrer Linux dans l’espace de l’informatique bureautique avec le support noyau du Plug & Play, l’USB, le support des cartes PCMCIA, etc.). Linux 2.6, apparu le 17/12/2003, est non seulement bâti sur ces fonctionnalités, mais aussi un saut majeur avec un support amélioré à la fois pour les grands systèmes comme les plus petits (PDA et autres appareils).

Support matériel du noyau

L’une des plus importantes forces des systèmes d’exploitation utilisant Linux est leur flexibilité et leur capacité à supporter une très large gamme de plates-formes matérielles. Bien que ce document soit particulièrement dédié à l’usage de Linux sur des matériels de type PC, le noyau Linux 2.6 a fait de remarquables progrès qui méritent d’être signalés dans ce domaine.

Réduction - Linux pour l’embarqué

L’un des deux changements les plus fondamentaux à Linux dans la version 2.6 est l’acceptation et la fusion de la plupart du projet uCLinux dans le noyau officiel. Le projet uClinux (qui peut être prononcé you-see-linux, mais plus proprement épelé avec la lettre Mu de l’alphabet grec) est le Linux pour micro-contrôleurs. Cette variante de Linux a déjà été le pilote du support de Linux dans le marché de l’embarqué, et son inclusion dans la distribution officielle devrait encourager plus de développement encore dans cet espace. Contrairement aux ports normaux de Linux auxquels nous sommes généralement habitués, les ports embarqués ne possèdent pas l’ensemble des fonctionnalités que l’on associe au noyau du fait des limitations matérielles. La principale différence est que ces ports prennent en charge des processeurs ne possédant pas de MMU (Memory Management Unit, ce qui fait qu’un système en mode protégé est protégé). Bien que ces systèmes soient généralement de vrais Linux multi-tâches, ils ne possèdent pas de système de protection de la mémoire et tout ce qui s’y rattache (sans protection de la mémoire, il est possible pour un processus capricieux de lire les données d’un autre processus, ou même de conduire ce dernier au plantage). Cela les rend inutilisables pour des systèmes multi-utilisateurs, mais fait d’eux un excellent parti pour des PDA à bas coût ou des appareils dédiés. Il est difficile de souligner le bond de géant de cette architecture dans Linux 2.6 ; toutes les versions de Linux jusqu’ici étaient dérivées (indirectement cependant) du travail initial de Linus sur son Intel 80386 et des limitations inhérentes à celui-ci.

Parmi les nouvelles séries majeures de processeurs embarqués supportées par Linux 2.6, on trouve la série Hitachi H8/300, le processeur NEC v850 et la ligne de processeurs embarqués m68k de Motorola. Les offres de Motorola sont les plus familières à l’utilisateur moyen de Linux car elles équipent les Palm Pilots depuis le premier (le Palm 1000) jusqu’au Palm III. D’autres modèles possèdent des noms tels le DragonBall et ColdFire et sont inclus sur des systèmes et des cartes d’évaluation fabriquées par Motorola, Lineo, Arcturus et autres. Malheureusement, le support pour les processeurs m68k plus anciens sans MMU (tels le 68000 utilisés dans les premiers Macintoch) n’est pas encore couvert par cette nouvelle version. Mais il est hautement probable que des projets hobbyistes chercheront à porter Linux sur ces systèmes et d’autres aussi antiques.

Bien que ne faisant pas techniquement partie de uClinux, la nouvelle version de Linux inclut aussi le support des processeurs ETRAX CRIS (Code Reduced Instruction Set) d’Axis Communication (le support de ce processeur est en réalité apparu durant le cycle de maintenance du noyau 2.4, bien après le 2.4.0, et mérite donc d’être mentionné ici). Il s’agit de processeurs embarqués, mais avec MMUs, principalement utilisés pour du matériel réseau. Le support des variantes des ces processeurs sans MMU n’a pas encore été intégré dans le noyau, mais est développé au sein de projets externes.

En plus du pur support matériel, il y a eu de nombreux autres progrès à travers l’intégration du travail pour l’embarqué dans le tronc du noyau. Bien que la plupart des ces changements soient masqués, des nouveautés comme la possibilité de construire un système sans aucun support de swap ajoute à la robustesse globale de l’OS.

L’échelle supérieure ; NUMA et consolidation

Le second des changements les plus fondamentaux dans Linux 2.6 se trouve travailler dans l’autre direction ; faire de Linux un noyau plus acceptable sur les serveurs de plus en plus gros (certains étant basés sur des processeurs i386, d’autres non). La grosse modification dans ce sens est le nouveau support de Linux pour les serveurs NUMA. NUMA (ou Non-Uniform Memory Access) est un nouveau progrès après SMP dans le monde multiprocesseurs et un pas en avant dans l’efficacité des systèmes possédant plusieurs processeurs. Les systèmes multiprocesseurs actuels ont été conçus avec les même limitations que leurs contre-parties monoprocesseurs, en particulier un seul pool de mémoire pour servir tous les processeurs. Sur un système possédant de nombreux processeurs, il existe un goulot d’étranglement majeur sur la performance dû au taux extrêmement élevé de collisions entre les multiples processus sur le bus unique de mémoire. Les serveurs NUMA améliorent cela en introduisant le concept selon lequel, pour un processeur donné, une partie de la mémoire est plus proche que le reste. Un moyen simple (et pas incorrect techniquement) d’imaginer cela est de considérer un système constitué de cartes séparées, chacune contenant des CPU, de la mémoire, et probablement d’autres composants (I/O, etc.). Il y a de nombreuses cartes dans un système et bien qu’elles puissent parler chacune l’une à l’autre il est assez évident que les CPU seront plus rapides en s’adressant à la mémoire locale (la mémoire sur la carte plutôt que sur une carte séparée). Vous pouvez imaginer la nouvelle architecture NUMA comme un très petit cluster au niveau des couches matérielles les plus basses.

Pour supporter correctement ces nouvelles machines NUMA, Linux a du s’adapter par bien des aspects pour rendre le nouveau modèle efficace. Pour commencer, une API de topologie interne a été créée pour autoriser le noyau à comprendre les relations entre un processeur ou pool mémoire et les dispositifs I/O. A partir de là, l’ordonnanceur de Linux est maintenant capable de comprendre ces relations et pourra tenter d’optimiser les tâches pour un meilleur usage des ressources locales. De plus, beaucoup de machines NUMA sont construites de telle façon qu’elles ont des trous dans l’espace linéaire de la mémoire entre les noeuds. Le nouveau noyau est capable de gérer ces cases discontinues de manière sensée. Il y a beaucoup d’autres changements internes qui ont été apportés pour autoriser Linux à supporter ces nouvelles machines de pointe, et il s’agit définitivement d’un espace de progrès pour le noyau. Cependant, il s’agit d’un domaine où Linux croît très rapidement et de la maturation et beaucoup de travail restent à produire pour faire un usage des ressources le plus efficace possible. Durant l’année à suivre, nous pouvons nous attendre à voir beaucoup d’autres améliorations dans le support de Linux pour ces systèmes très haut de gamme.

Support de sous-architectures

Bien que moins profonde que les deux précédentes modifications, la nouvelle version de Linux inclut aussi un nouveau concept appelé sous-architecture (subarchitectures) qui étend encore la pénétration de Linux sur de nouveaux types de matériels. Jusqu’ici, Linux assumait souvent et implicitement que le type de processeur et les types de matériels allaient ensemble. C’est à dire que les processeurs descendant du i386 étaient seulement utilisés sur les serveurs descendants des PC/AT. Dans Linux 2.4, cette supposition a été brisée pour le i386 avec l’ajout du support pour les Visual WorkStation de SGI, une plates-forme récente utilisant une puce Intel (en fait, elle a été également brisée bien avant pour d’autres architectures. Par exemple, m68k a longtemps supporté les Amiga, les Macintosh et d’autres plates-formes). Le grand changement dans Linux 2.6 est que cette fonctionnalité (et concept) a été standardisée de telle sorte que toutes les architectures gèrent cela de cette même manière, plus propre, qui autorise une séparation plus claire des seuls composants qui le nécessitent.

Deux nouvelles plates-formes i386 tirent profit de cette standardisation. La première est l’architecture Voyager de NCR. Il s’agit d’un système SMP (développé avant la spécification Intel MP maintenant standardisée) supportant jusqu’à des configurations de 32 processeurs 486-686. Le nombre de configurations vendues avec cette architecture est relativement faible, et toutes les machines ne sont pas encore supportées (les plus anciennes ne le sont pas). La seconde architecture supportée est la plate-forme plus répandue PC-9800 développée par NEC dans la plate-forme PC (presque) dominante au japon jusqu’à récemment. Les machines PC-9800 originales comportaient un processeur 8086 et la série a évolué et mûri (parallèlement aux descendants des AT) jusqu’à proposer des processeurs de classe Pentium et le support SMP (bien sur, le support de Linux est limité aux 386 et suivants). Bien que complètement inconnues aux états-unis, des versions des produits Microsoft jusqu’à MS Windows 95 ont été portées sur ce matériel. La série a été officiellement interrompue par le fabricant en faveur des PC plus standards.

En formalisant le support de Linux pour ces types de matériel légèrement différents, il sera plus facile de porter le système d’exploitation vers d’autres systèmes, tels que du matériel dédié à l’archivage de données et autres composants qui utilisent des types de processeurs dominant dans l’industrie. Pour être clair cependant, il ne faut pas mener cette subdivision trop loin. Ces sous-architectures ont été séparées parce que des composants de très bas niveau du système (tels que le routage des IRQ) sont légèrement ou radicalement différents. Cela est différent de la possibilité de faire fonctionner Linux sur une X-Box par exemple où, hormis les pilotes matériels et quelques astuces, peu de choses séparent le système d’un système i386 générique. Le support de la X-Box ne serait pas une sous-architecture.

Hyperthreading

L’hyperthreading est une autre avancée matérielle majeure supportée par Linux 2.6. Il s’agit de la possibilité, actuellement disponible seulement sur les processeurs Pentium 4 modernes mais applicable par ailleurs, pour un processeur de se faire passer (au niveau matériel) pour deux ou plus. Cela permet un fort gain de performances dans certaines circonstances, mais ajoute aussi à la complexité de l’ordonnancement et d’autres problèmes. La clef du progrès du support dans le noyau de cette fonctionnalité est que l’ordonnanceur sait maintenant reconnaitre et optimiser la charge entre processeurs physiques et virtuels à l’intérieur d’une machine. Dans les versions précédentes de Linux, il était possible de surcharger un processeur unique parce qu’il n’était pas possible de factoriser la charge de travail comme un tout. Il est remarquable que Linux ait été le leader du marché dans le support transparent et intelligent de cette nouvelle fonction (les serveurs Windows 2000 peuvent voir les processeurs virtuels, mais ne les reconnaissent pas comme virtuels. Ainsi, vous devez disposer de licences CPU supplémentaires pour profiter de cette fonctionnalité. Ce n’est qu’avec Windows XP que Microsoft a complété le support de cette fonction).

Les entrailles de Linux

Améliorations de l’extensibilité

En plus des fonctionnalité décrites précédemment telles que NUMA et l’hyperthreading, Linux 2.6 apporte d’autres changements pour les serveurs Intel les plus récents. D’abord et surtout le support pour d’autres fonctionnalités matérielles d’Intel comme PAE (Physical Address Extension) qui autorise les systèmes x86 32bits les plus modernes à accéder à 4Gb de mémoire RAM, mais en mode paginé. De plus, la gestion de l’équilibrage des IRQ (IRQ balancing) a progressé de manière significative sur les systèmes multiprocesseurs grâce à des améliorations majeures du support de l’APIC.

En plus de simplement supporter de nouvelles fonctionnalités matérielles, des limites internes ont également été repoussées lorsque cela était possible. Par exemple, le nombre d’utilisateurs uniques et de groupes sur un système Linux a bondi de 65000 à plus de 4 milliards (de 16 bits vers 32 bits) rendant Linux plus pratique sur les grand serveurs de fichier et d’authentification. De même le nombre de PID (Process ID) avant rebouclage a explosé de 32000 à un milliard, améliorant la performance du lancement des applications sur les systèmes très chargés ou redémarrant rarement. Bien que le nombre maximum de fichiers ouvrables n’ait pas été augmenté, Linux avec le noyau 2.6 ne requerra plus que vous fixiez cette limite par avance ; ce nombre s’adaptera automatiquement. Et enfin Linux 2.6 comprendra un support amélioré du 64 bit sur les périphériques de type bloc qui le supportent, même sur des plates-formes 32 bits telles que le i386. Cela permettra des systèmes de fichiers jusqu’à 16 Tbit même sur du matériel commun.

Un autre progrès majeur dans le domaine des grands systèmes dans Linux 2.6 est que le noyau lui-même peut non seulement supporter plus de types de périphériques, mais aussi plus de périphériques d’un seul type. Sur chaque version de Linux (en fait sur la plupart des systèmes d’exploitation dérivés de UNIX), les utilisateurs et les applications s’exécutant sur un système communiquent avec le matériel grâce à des noeuds de périphérique numérotés (les entrées se trouvant dans le répertoire /dev). Ces noeuds étaient limités à 255 périphériques majeurs (en général, un type de périphérique possède un ou plusieurs noeuds) et 255 numéros mineurs (un périphérique spécifique de ce type). Par exemple, le périphérique /dev/sda2 (la seconde partition sur le premier disque SCSI détecté possède pour numéro majeur 8, propre à tous les périphériques SCSI, et le numéro mineur 2 qui indique la seconde partition. Les différents types de périphérique allouent leurs numéros majeur et mineur différemment, si bien qu’il est impossible de dire avec certitude combien de périphériques on peut posséder sur un système Linux. Malheureusement, ce principe montre ses limites sur les grands systèmes où il est possible, par exemple, d’avoir beaucoup plus que 255 périphériques d’un type donné (songez aux fermes de mémoire ou d’impression). Sous Linux 2.6, ces limitations ont été assouplies pour autoriser 4095 types majeurs de périphériques et plus d’un million de sous-périphériques par type. Ce progrès devrait être plus que suffisant pour supporter les grands systèmes actuels.

Interactivité et réactivité

En plus de simplement s’adapter aux grands systèmes, une autre priorité avec la nouvelle version a été de rendre le système plus réactif. Cela est utile non seulement à l’utilisateur d’ordinateur de bureau (qui souhaite toujours voir les choses réagir rapidement) mais aussi aux applications plus critiques quant au temps, pour lesquelles une précision absolue est requise pour obtenir l’effet désiré. En dépit de ces changements, Linux ne sera pas un vrai système d’exploitation temps réel qui possède des conditions très strictes pour s’assurer que toute action se déroule de manière prédictible, mais les progrès quant à la réactivité globale devraient attirer toutes les classes d’utilisateurs Linux (ceci dit, des projets externes proposent des patches non officiel pour procurer des fonctionnalités de systèmes temps réel. Il est concevable que ces projets soient rendus officiels dans la prochaine version majeure).

L’un des progrès majeurs présents dans le noyau 2.6 est que le noyau est finalement préemptable. Dans toutes les versions précédentes de Linux, le noyau lui même ne pouvait être interrompu pendant qu’il travaillait (et sur les machines multi-processeurs cela était vrai pour chaque processeur). Sous Linux 2.6, le noyau peut maintenant être interrompu à mi-tâche, de telle façon que d’autres applications puissent continuer à s’exécuter même si quelque chose de bas niveau et de compliqué se déroule en arrière-plan. Bien sûr, il existe toujours des moments pendant lesquels le noyau ne peut être interrompu. En réalité la plupart des utilisateurs ne voient jamais ces moments, qui dépassent rarement de petites fractions de secondes. En dépit de cela, beaucoup d’utilisateurs devraient noter un progrès dans l’interactivité avec cette nouvelle fonctionnalité validée ; des choses comme une saisie de l’utilisateur seront perçues plus rapides, même sur un système extrêmement chargé.

Les sous-systèmes I/O de Linux ont aussi subi des changements majeurs pour leur permettre d’être plus réactifs quelle que soit la charge. Ces changements comprennent une réécriture complète du système d’ordonnancement des I/O, le code du noyau qui détermine quels processus peuvent lire les périphériques et quand. La couche nouvellement réécrite est maintenant capable de s’assurer qu’aucun processus ne reste en attente sur I/O trop longtemps, tout en conservant toujours les optimisations plus anciennes qui s’assurent que les lectures se font dans l’ordre le plus efficace pour le matériel.

Du coté applications logicielles, une autre modification qui rendra les applications Linux plus réactives si elles l’utilisent est le support des nouveaux futexes (ou Fast User-Space Mutexes). Les futexes sont un moyen par lequel plusieurs processus ou tâches peuvent sérialiser les événements de telle sorte qu’elles ne se piétinent pas l’une l’autre (race condition). Au contraire des opérations sur mutex traditionnelles que la plupart des bibliothèques de multi-tâche supportent, les futexes sont partiellement basés sur le noyau (mais uniquement le cas de la controverse sus-citée), et supportent des réglages de priorité pour autoriser les applications ou tâches de priorité supérieures à accéder les premières aux ressources. En autorisant un programme à spécifier qu’une tâche en attente est plus importante qu’une autre, on obtient un meilleur temps de réponse dans ce qui peut être un moment critique d’une application.

En plus des nombreuses modifications décrites ci-dessus, il en existe un certain nombre d’autres plus discrètes qui amélioreront la performance et l’interactivité dans de nombreux cas. Ces modifications incluent de nouveaux retraits du Gros Verrou du Noyau (The Big Kernel Lock : des verrous grossiers qui étaient utilisés dans les premiers jours du support pour multiple processeurs), des optimisations pour la lecture et l’écriture sur le système de fichiers, la manipulation de petits fichiers et autres.

Autres améliorations

Linux, comme le mouvement OpenSource en général, a toujours été un porte-drapeau des bénéfices des standards ouverts. L’un des plus grands changements dans la version 2.6 est que l’infrastructure multi-tâches interne au noyau a été réécrite pour autoriser la bibliothèque Native POSIX Thread (NTPL) à s’exécuter dessus. Ce peut être un coup d’accélérateur majeur à la performance pour les processeurs Pentium Pro et suivants dans les applications lourdement multi-tâches, et beaucoup des acteurs majeurs du domaine de l’entreprise l’ont rélamé (en fait, RedHat a déjà reporté ce support dans Linux 2.4 et le propose à partir de RedHat 9.0 et Advanced Server 3.0). Cela apporte de nouveaux concepts à l’espace multi-tâches de Linux comme les groupes de tâches, la mémoire locale à une tâche, les signaux POSIX et autres. L’un des inconvénients majeurs est que les applications (comme Java de Sun) non écrites selon les spécifications et qui s’appuient sur d’anciens Linuxismes ne marcheront plus avec ce nouveau support. Comme le bénéfice dépasse le coût (et pour tant d’acteurs) il est clair que les plus importantes applications supporteront le changement très vite après la sortie du nouveau noyau.

Sous-système de modules et modèle de périphérique unifié

Dans les systèmes d’exploitation modernes, le sous-système de gestion des périphériques est devenu de plus en plus proéminent tant il a à gérer une myriade de types de bus internes et externes et toujours plus de périphériques de plus de vendeurs. Il n’est pas surprenant alors que la nouvelle version du noyau Linux incorporera un support amélioré à la fois pour le chargeur de modules mais aussi dans sa compréhension interne du matériel lui-même. Ces modifications s’étalent depuis la pure cosmétique (les modules de pilotes utilisent maintenant l’extension .ko, pour kernel object, au lieu de .o) jusqu’à une compète révision du modèle de périphérique unifié. Tous ces changements insistent sur la stabilité et un meilleur contrôle des limitations des versions précédentes.

On trouve dans le strict sous-système de modules une poignée de changements majeurs afin d’améliorer la stabilité. Le processus de déchargement d’un module a été modifié quelque peu pour réduire les cas où il est possible aux modules d’être utilisés alors qu’il sont toujours en train d’être déchargés, causant souvent un plantage. Pour les systèmes où ce problème ne peut être tenté, il est maintenant possible d’invalider tout bonnement le déchargement de modules. De plus, des efforts soutenus ont été fait pour standardiser le processus selon lequel les modules déterminent et annoncent quel matériel ils supportent. Dans les versions précédentes de Linux, le module savait quels périphériques il supportait, mais cette information n’était généralement pas disponible à l’extérieur du module lui-même. Cette modification permettra une gestion logicielle du matérielle, telle que kudzu de RedHat, afin de faire des choix intelligents même sur le matériel qui ne serait pas autrement reconnu. Bien sûr, dans le cas où vous savez mieux que la version courante du pilote ce qu’il supporte, il est toujours possible de forcer un pilote à travailler sur un périphérique spécifique.

En dehors du simple chargement de modules, le modèle de périphériques lui-même a subi des modifications significatives dans la mise à jour du noyau. Contrairement au chargeur de modules, dont le rôle consiste seulement en la détection des ressources requises d’un matériel détecté, le modèle de périphériques est un concept plus profond qui doit être complètement responsable de tout le matériel du système. Les versions 2.2 et précédentes de Linux possédaient seulement le support minimum pour un modèle de périphérique unifié, préférant laisser presque toute la connaissance du matériel au seul niveau des modules. Cela marchait correctement, mais afin d’utiliser toutes les fonctionnalités des matériels modernes (particulièrement ACPI), un système nécessite de connaître plus que les ressources utilisées par un périphérique ; il a besoin de connaître des choses comme le bus sur lequel il est connecté, quels sous-systèmes il possède, quel est son statut en énergie, s’il peut être reconfiguré pour utiliser d’autres ressources en cas de conflit, et même connaître les périphériques qui ne sont encore pris en charge par aucun module chargé. Linux 2.4 a complété ces fondations pour devenir la première édition à unifier les interfaces pour les bus PCI, PC Card et ISA Plug-and-Play à l’intérieur d’une seule structure de périphérique, avec une interface commune. Linux 2.6, grâce à son nouveau sous-système kernel object (kobject), porte ce support à un nouveau niveau, non seulement en apportant la connaissance de tous les périphériques du système, mais aussi en procurant une interface centralisée pour les détails importants comme le comptage de références, la gestion de l’énergie, et les exports vers l’espace utilisateur.

Maintenant qu’une somme importante d’information est disponible dans le noyau, Linux est capable de mieux supporter les fonctionnalités d’ordinateurs portables et de bureau qui requièrent une connaissance plus en profondeur du matériel. L’application première et apparente de ceci est la prolifération croissante des périphériques dit hot plug tels que les PC Cards, les appareils USB et Firewire, et le bus PCI hot-plug. Bien qu’il soit difficile de voir aussi loin en arrière, Linux n’a offert un réel support pour tous ces périphériques qu’à partir du noyau 2.2. Puisque la connexion à chaud est la règle de nos jours et non plus l’exception, la nouvelle infrastructure de périphériques élimine principalement les différences entre un périphérique ancien, et un connectable à chaud. Comme le sous-système du noyau ne différencie pas directement un périphérique découvert au lancement d’un périphérique branché a posteriori, la plupart de l’infrastructure pour gérer les périphériques connectables a été simplifiée. Un second nouveau pilote de ce sous-système nouvellement réécrit est le support amélioré d’une gestion d’énergie moderne. Le nouveau standard de gestion d’énergie de ces dernières années, appelé ACPI pour Advanced Configuration and Power Interface, a été tout d’abord supporté de manière brute dans la version précédente du noyau. Contrairement à l’ancien APM (Advanced PowerManagement), les OS s’exécutant sur cette nouvelle interface doivent s’adresser individuellement à tous les périphériques compatibles pour changer leur état de consommation d’énergie. Sans un système centralisé ayant la connaissance du matériel, il serait impossible au noyau de savoir avec quels périphériques il doit se coordonner et dans quel ordre. Au delà ces deux exemples évidents, d’autres domaines (comme la surveillance et l’audit du matériel) bénéficieront clairement d’une image centralisée du monde matériel.

La dernière, mais probablement la plus évidente, ramification de la nouvelle structure centralisée est la création d’un nouveau système de fichier system (à lier à proc pour les processus, devfs pour les périphériques et devpts pour les pseudo-terminaux UNIX98) appelé sysfs. Ce système de fichier (destiné à être monté sous /sys) est une représentation visible de l’arbre de périphériques tel que le noyau le voit (à quelques exceptions près). Cette représentation inclut généralement un certain nombre d’attributs connus des périphériques détectés, y compris le nom du périphérique, son IRQ et ses ressources DMA, son statut d’énergie, ce genre de choses. Cependant, un aspect de ce changement qui pourrait être dérangeant à court terme est que beaucoup des usages spécifiques aux périphériques du répertoire /proc/sys devraient être déplacés dans ce nouveau système de fichier. Cette modification n’a pas (encore) été appliqué de manière exhaustive, aussi y aura-t-il une période d’ajustement.

Le support du matériel

Linux progressant au fil des ans, chaque nouvelle itération du noyau est apparue bien meilleure que la version précédente en terme de support de périphériques — que ce soit du point de vue des technologies nouvelles (USB dans le noyau 2.4), ou même de technologies anciennes (MCA dans le noyau 2.2). Comme nous parvenons au noyau 2.6 cependant, le nombre de périphériques majeurs que Linux ne supporte pas est relativement petit. Il y a peu de branches majeures de l’univers matériel du PC à conquérir. C’est pour cette raison que la plupart (mais certainement pas toutes) des améliorations du support matériel sur i386 ont été l’ajout de robustesse plutôt que de nouvelles fonctionnalités.

Périphériques internes

Probablement aussi important que le type de processeur, les bus sous-jacent d’un système sont la colle qui structure l’ensemble. Le monde du PC n’a jamais été à court d’idées concernant les technologies de ces bus, depuis le vieux bus ISA (que l’on trouvait déjà dans le premier IBM PC) jusqu’aux tout récents bus externes série et sans fil. Linux a toujours été prompt à s’adapter aux nouveaux bus ou types de périphérique qui devenaient rapidement populaires, et nettement moins rapide à s’adapter aux technologies qui restaient relativement peu utilisées.

Les progrès dans le support de Linux pour les périphériques internes sont extrêmement divers. Le support pour les anciennes extensions Plug’n Play ISA (Industry Standard Architecture) constitue un exemple spécifique où Linux se rattrape. Linux n’a offert aucun support en interne pour le PnP jusqu’à la version 2.4. Ce support a été complété avec la nouvelle version du noyau pour inclure le support complet du BIOS Pnp, une base de données de noms de périphériques, et d’autres changements de compatibilité. La somme de ces modifications fait que Linux est maintenant un vrai OS Plug-and-Play et peut être configuré ainsi dans le BIOS d’une machine compatible. D’autres anciens bus tels que MCA (Microchannel Architecture) et EISA (Extended ISA) ont aussi été encapsulés dans le nouveau modèle de périphérique et présentent des bases de données de nommage de périphériques. Sur un front plus moderne Linux 2.6 met sur la table un certain nombre d’améliorations incrémentales à son sous-système PCI (Peripheral Component Interconnect) comprenant Hot-Plug PCI et la gestion de l’énergie, le support de multiples AGPs (Accelerated Graphic Ports — une extension séparée et à grande vitesse du bus PCI), et d’autres modifications. Enfin, en plus de tous ces bus réels, Linux 2.6 a incorporé le concept de bus ancien qui est spécifique à chaque architecture et contient tous les périphériques supportés auxquels vous pourriez vous attendre. Sur un PC, par exemple, cela pourrait inclure les ports série, parallèle et PS/2 — périphériques qui existent mais ne sont recensés sur aucun bus réel du système. Ce support pourrait requérir un travail plus important (comme interroger un firmware)sur certaines plates-formes, mais de manière générale il s’agit simplement d’une encapsulation pour s’assurer que tous les périphériques sont gérés selon un moyen standard dans le nouveau paradigme de pilote.

Périphériques externes

Bien qu’il soit vrai que les bus de périphériques internes anciens n’aient pas vu l’ajout de beaucoup de nouvelles fonctionnalités durant le plus récent cycle de développement, on ne peut pas en dire autant pour les nouveaux périphériques externes. Le nouveau support des périphériques USB 2.0 est probablement le changement le plus important dans cet espace. Ces périphériques communément nommés périphériques USB grande vitesse supportent une bande passante allant jusqu’à 480 Mbits par seconde, à comparer aux 12 Mbits par seconde de l’USB actuel. Le nouveau standard approchant, l’USB On-the-Go (ou USB OTG), une variante point à point du protocole USB pour connecter directement les périphériques ensemble (par exemple, pour connecter un appareil photo numérique sur une imprimante sans passer par un ordinateur) n’est pas encore supporté par Linux 2.6 (des patches sont disponibles pour cela, mais n’ont pas encore été intégrés dans la sortie officielle). En plus du support, la plus grande partie du moyen d’énumérer les périphériques USB en interne a été révisée afin qu’il soit possible d’avoir beaucoup plus de périphériques du même type accessibles depuis Linux. En plus de ces grosses modifications, l’accent a également été mis sur la simplification, la stabilité et la compatibilité, ce qui devrait permettre un meilleur support des périphériques USB pour tous les utilisateurs de Linux.

Tout à fait à l’autre bout du domaine, Linux 2.6 inclut pour la première fois le support qui autorise une machine exécutant Linux d’incarner un périphérique USB, au lieu d’un hôte USB. Cela permettrait, par exemple, à votre PDA fonctionnant sous Linux d’être connecté à votre PC et d’avoir les deux bouts de la ligne utilisant proprement le protocole. La majorité de ce support est nouveau, mais il s’agit d’une direction essentielle pour permettre à Linux de s’immiscer dans le monde des appareils embarqués.

Les périphériques sans fil

La technologie sans fil a réellement décollé auprès du public au cours de ces dernières années. À tel point qu’on a l’impression que les câbles (excepté les câbles d’alimentation !) ne seront plus qu’un mauvais souvenir dans quelques années. La technologie sans fil regroupe à la fois les périphériques réseaux (actuellement le gros du marché) mais aussi les périphériques tels que les assistants personnels (PDA), etc.

Dans le monde des réseaux sans fil, les périphériques sont généralement divisés en deux catégories, ceux à longue distance (par exemple, AX.25 sur les périphériques radio amateurs) et ceux de proximité (en général, 802.11, mais aussi quelques anciens protocoles existants). Linux supporte ces deux catégories de réseaux sans fil depuis les premiers jours (v1.2), et chacun des sous-systèmes a été mis à jour lors du développement du noyau 2.6. Le principal changement, dans les réseaux sans fil de proximité est que les composants majeurs de gestion des différentes cartes et différents protocoles supportés ont été fusionnés en une API wireless. Cette fusion résout un certain nombre d’incompatibilités mineures, du fait que des périphériques divers et variés ont été pris en charge, et renforce le support de Linux pour ce sous-système en créant un ensemble centralisé d’outils dans l’espace utilisateur qui fonctionneront avec tous les périphériques supportés. En plus de cette standardisation, Linux 2.6 introduit un certain nombre d’améliorations générales, incluant une meilleure aptitude à signaler un changement d’état (pour un périphérique itinérant par exemple) et une modification de TCP afin de mieux prendre en charge les latences périodiques qui sont très fréquentes avec les périphériques sans fil. En raison du besoin pressant d’avoir un meilleur support des périphériques sans fil, beaucoup de ces changements ont d’ores et déjà été portés sous Linux 2.4.

Dans l’espace des appareils sans fil, on trouve des avancées majeures similaires. IrDA (le protocole infrarouge nommé pour le groupe Infrared Data Associates) a connu quelques avancées depuis la dernière version majeure telles que la gestion de l’énergie et son intégration dans le modèle de pilotes du noyau. Les réelles avancées ont été faites en procurant à Linux le support des périphériques Bluetooth. Bluetooth est un nouveau protocole sans fil conçu pour les courtes distances et les basses consommations, mais il n’a pas les limitations de portée de vue que IrDA comporte. Bluetooth en tant que protocole a été pensé pour aller partout et a été implémenté dans des appareils comme des PDA, téléphones cellulaires, imprimantes et autres choses bizarres telles que des équipements motorisés. Le protocole lui-même est constitué de deux types différents de liaisons : SCO, ou Synchronous Connection Oriented, pour les applications audio avec pertes ; et L2CAP, ou Logical Link Control and Adaptation Protocol, pour une connexion plus robuste supportant les retransmissions, etc. Le protocole L2CAP supporte aussi différents sous-protocoles (y compris RFCOMM pour les réseaux point-à-point et BNEP pour des réseaux type Ethernet). Le support de Linux pour pour les choses que Bluetooth sait faire continue de grossir et l’on peut s’attendre à ce qu’il mûrisse de façon significative dès que de nouveaux périphériques seront entre les mains des consommateurs. Il devrait aussi être mentionné que le support initial de Bluetooth a été intégré dans les éditions récentes du noyau 2.4.

Support des périphériques bloc

Bus de stockage

Les bus de stockage dédiés, tels que IDE/ATA (Integrated Drive Electronics/Advanced Technology Attachement) et SCSI (Small Computer System Interface), ont aussi reçu une amélioration majeure durant le cycle 2.6. Les principaux changements ont été centrés autour du sous-système qui a été réécrit (et réécrit encore) durant le développement du nouveau noyau, résolvant de nombreux problèmes d’extensibilité et autres limitations. Par exemple, il est possible maintenant d’écrire directement sur les lecteurs IDE CD/RW à travers le vrai pilote de disque IDE, une implémentation plus propre qu’auparavant (précédemment, l’usage d’un pilote spécial d’émulation SCSI était aussi requis, ce qui était perturbant et souvent difficile). De plus, un nouveau support a été ajouté pour les périphériques grande vitesse Serial ATA (S-ATA), qui possèdent des taux de transfert dépassant 150 Mbits par seconde. Du côté SCSI, il y a aussi eu des améliorations mineures éparpillées sur le système pour le support et la mise à l’extensibilité. Une amélioration spécifique pour les systèmes anciens est que Linux supporte maintenant les périphériques multipath SCSI-2 qui possèdent plus de 2 LUN sur un périphérique (SCSI-2 est la précédente version du standard de périphérique SCSI, vers 1994). Un autre changement important est que Linux peut maintenant revenir au test de changement de média comme le fait Microsoft Windows afin d’être plus compatible avec les périphériques qui ne suivent pas complètement les spécifications. Comme ces technologies se sont stabilisées avec le temps, le support de Linux doit l’être aussi.

Bien qu’il ne soit pas un bus de stockage lui-même, Linux inclut maintenant le support pour accéder au BIOS EDD (Enhanced Disk Device) des machines les plus récentes directement pour voir comment le serveur voit ses propres disques. Le BIOS EDD possède les informations sur tous les bus de stockage qui sont attachés au système et que le BIOS connait (y compris IDE et SCSI). En plus d’obtenir la configuration et autres informations sur les périphériques attachés, cela procure plusieurs autres avantages. Par exemple, cette nouvelle interface permet à Linux de savoir de quel disque le système a été démarré, ce qui est utile sur les systèmes les plus récents pour lesquels cela n’est souvent pas évident. Cela permet aux programmes d’installation intelligents de prendre en compte cette information pour essayer de déterminer où installer le chargeur Linux par exemple.

En plus de tous ces changements, il devrait être souligné encore que tous les types de bus (matériel, sans fil et stockage) ont été intégrés dans le nouveau sous-système de modèle de périphérique. Dans certains cas, ces changements sont purement cosmétiques. Dans d’autres cas, cela implique des changements plus significatifs (dans certains cas par exemple, la logique même de détection du périphérique a du être modifiée).

Systèmes de fichiers

L’usage le plus évident d’un périphérique bloc sur un système Linux (ou n’importe quel autre) est la création d’un système de fichiers dessus, et le support Linux pour les systèmes de fichiers a été grandement amélioré depuis Linux 2.4 par de nombreux aspects. Parmi ces changements figurent le support pour les attributs étendus et les contrôles d’accès POSIX.

Pour parler strictement de systèmes de fichiers Linux conventionnels, les systèmes de fichier étendus (ext2 et ext3) sont les systèmes les plus répandus sur les installations utilisant un coeur Linux (ReiserFS est la troisième option la plus commune). Ces systèmes de fichiers sont ceux dont l’utilisateur se préoccupe le plus et ils ont également été les plus améliorés durant le développement de Linux 2.6. Parmi ces modifications figurent principalement le support pour les attributs étendus, ou les méta-données qui peuvent être embarquées dans le système de fichiers lui-même pour un fichier spécifique. Certains de ces attributs étendus seront utilisés par le système et accessibles en lecture écriture par l’utilisateur root seulement. Plusieurs autres systèmes d’exploitation, comme Windows ou MacOS, font déjà grand usage de ces types d’attributs. Malheureusement, les systèmes d’exploitation UNIX anciens ne possèdent généralement pas un support excellent pour ces attributs et beaucoup d’utilitaires de l’espace utilisateur (tels que tar) nécessiteront d’être mis à jour avant qu’ils puissent sauver et restaurer cette information additionnelle. Le premier usage du sous-système des nouveaux attributs étendus est d’implémenter des listes de contrôle d’accès POSIX, un super-ensemble des permissions UNIX qui permet un contrôle à grain plus fin. En plus de ces changements pour ext3, il y a plusieurs autres modifications mineures ; la date de validation (commit) des journaux pour le système de fichiers peut maintenant être personnalisée pour être plus adaptée aux utilisateurs de bureau (qui pouvaient avoir à relancer le disque s’il était en mode veille) ; les options de montage par défaut peuvent aussi maintenant être enregistrées dans le système de fichiers lui-même (pour que vous n’ayez pas à les fournir au moment du montage) ; et vous pouvez maintenant marquer un répertoire comme indexé pour accélérer les recherches de fichiers dans ce répertoire.

En plus des ajouts aux systèmes de fichier classiques sous Linux, le nouveau noyau offre un support complet pour le nouveau (sous Linux) système de fichier XFS. Ce système de fichier est dérivé et compatible au niveau bloc avec le système de fichier XFS utilisé par défaut sur les systèmes Irix. Tout comme les systèmes de fichier étendus et ReiserFS, il peut être utilisé pour un root-disk et même supporter les plus récentes fonctionnalités telles que les attributs étendus et les ACL. Plusieurs distributions commencent à offrir un support pour ce système de fichier sur leur distributions à base de Linux 2.4, mais il reste à voir encore quelle place ce système de fichier aura dans le panthéon déjà surpeuplé des systèmes de fichier style UNIX sous Linux.

Linux a aussi apporté un certain nombre d’améliorations dans et hors la couche du système de fichiers pour améliorer la compatibilité avec les systèmes d’exploitation dominants sur PC. Pour commencer, Linux 2.6 supporte maintenant le gestionnaire de disque logique de Windows (aussi connu sous le nom de disques dynamiques). Il s’agit du nouveau schéma de table de partitions que Windows 2000 et suivants ont adopté pour permettre le redimensionnement et la création plus faciles de partitions multiples (bien sûr, ce n’est pas comme si Linux allait utiliser dorénavant ce nouveau schéma pour les nouvelles installations). Linux 2.6 présente aussi un support amélioré (et réécrit) pour le système de fichiers NTFS et il est maintenant possible de monter un volume NTFS en lecture ériture (le support de l’écriture est toujours expérimental et est progressivement amélioré ; il pourrait être activé ou pas pour la version finale du noyau). Et finalement, le support de Linux pour FAT12 (le système de fichiers DOS utilisé sur les systèmes vraiment vieux et les disquettes) a été amélioré pour s’affranchir de bogues présents dans quelques lecteurs MP3 qui utilisent ce format. Bien que pas aussi dominant sur le marché, Linux a aussi amélioré la compatibilité avec OS/2 en ajoutant le support d’attributs étendus dans le système de fichier HPFS. Comme les versions précédentes, les nouvelles additions à Linux 2.6 montrent l’importance de la coopération et renforcent la position de Linux comme le couteau suisse des systèmes d’exploitation.

En plus de ces changements, il existe un nombre important de modifications éparpillées dans le support des systèmes de fichiers de Linux. Le support des quota a été réécrit pour augmenter le nombre maximum d’utilisateurs sur un système. Des répertoires individuels peuvent maintenant être marqués comme synchrones afin que tous les changements (fichiers additionnels, etc.) soient atomiques (cela est particulièrement intéressant pour les systèmes de courrier et les bases de données basées sur des répertoires, en plus d’un recouvrement de données un peu meilleur dans le cas d’un problème de disque). La compression transparente (une extension Linux seulement) a été ajoutée au système de fichiers ISO9660 (le système de fichiers utilisé sur CD-ROM). Et finalement, un nouveau système de fichiers basé sur la mémoire (hugetlbfs) a été créé exclusivement pour mieux supporter les bases de donnés à mémoire partagée.

Périphériques d’entrées / sorties

Sur la face la plus externe de n’importe quel système se trouvent les périphériques d’entrée et sortie, les parties importantes qui ne semblent jamais tellement importantes. Elles incluent les choses évidentes comme les souris et claviers, les cartes son et vidéo, et des choses moins évidentes comme les joysticks et les dispositifs d’accessibilité. Le support de beaucoup de sous-systèmes proches de l’utilisateur de Linux a été augmenté durant le cycle de développement du 2.6, mais le support de la plupart des périphériques communs était déjà mûr. Les améliorations de Linux 2.6 pour ces périphériques sont dues en grande partie au support amélioré du noyau pour les bus externes tels que les claviers sans fil Bluetooth et dispositifs similaires. Il existe cependant certains domaines où Linux a davantage été amélioré.

Périphériques d’interface homme-machine

L’un des changements internes majeurs dans Linux 2.6 est la réécriture de la plus grande partie de la couche interface humaine. Cette couche est le centre de l’expérience de l’utilisateur avec un système Linux, incluant la sortie vidéo les souris et les claviers. Dans la nouvelle version du noyau, cette couche a été retravaillée et modularisée à un degré jamais atteint auparavant. Il est maintenant possible de créer un système Linux totalement sans tête sans aucun support pour l’affichage ou quoi que ce soit. Le bénéfice principal de cette modularité pourrait être pour les développeurs de systèmes embarqués produisant des appareils qui ne peuvent être administrés que par réseau ou câble série, mais les utilisateurs bénéficient autant des préceptes sous-jacents sur les périphériques et architectures modularisées. Par exemple, il a toujours été supposé jusqu’ici que si vous aviez un PC vous auriez besoin du support pour un contrôleur clavier standard AT (i8042) ; la nouvelle version du noyau supprime cette condition afin que du code non nécessaire puisse être supprimé des systèmes récents.

Le support de Linux pour la gestion de la sortie moniteur a aussi reçu un certain nombre de modifications, bien que la plupart de celles-ci soient seulement utiles dans des configurations qui font usage du sous-système de console framebuffer interne au noyau (la plupart des PCs à base d’Intel ne sont pas configurés de cette manière, mais ce n’est pas le cas de beaucoup d’autres architectures). A mon humble avis, la meilleure fonctionnalité est que le logo de démarrage (un mignon pingouin si vous ne l’avez jamais vu) supporte maintenant des résolutions jusqu’à 24bpp. A part cela, les autres nouvelles fonctionnalités pour la console incluent le redimensionnement et la rotation (pour les PDAs et appareils similaires) et une accélération accrue pour plus de matériel. Et finalement, Linux incorpore maintenant le support noyau pour interroger les moniteurs VESA sur leur capacité, bien que XFree86 et la plupart des systèmes d’installation des distributions couvrent déjà ce détail dans l’espace utilisateur.

En plus des gros changements, Linux 2.6 inclut aussi un certain nombre de modifications mineures pour l’interaction humaine. Les écrans tactiles, par exemple, sont maintenant supportés. Les pilotes de la souris et des claviers ont aussi été mis à jour et standardisés pour n’exporter qu’un seul noeud périphérique /dev/input/mouse0 par exemple) quel que soit le matériel sous-jacent ou le protocole. Les souris bizarres (avec plusieurs roulettes de défilement par exemple) sont maintenant aussi supportées. La correspondance des touches claviers du PC a aussi été mise à jour pour suivre le standard Windows pour les touches étendues. Le support du joystick a aussi été amélioré grâce non seulement à l’addition de plusieurs pilotes (dont le gamepad XBox), mais aussi l’addition de nouvelles fonctionnalités telles que le retour de force. Et finalement (mais pas le moins important), la nouvelle version possède aussi le support du périphérique braille TTY Tieman Voyager pour autoriser les utilisateurs aveugles d’accéder mieux à Linux (cette fonctionnalité est assez importante pour avoir déjà été reportée dans Linux 2.4).

On peut noter enfin que Linux a aussi changé son interface de requête système pour mieux supporter les systèmes sans clavier local. L’interface de requête système (sysrq) est une méthode pour les administrateurs système sur la console locale d’obtenir des informations de débogage, forcer le système à redémarrer, remonter les systèmes de fichiers en lecture seule, et de faire d’autres choses magiques. Comme Linux 2.6 supporte maintenant les systèmes sans tête, il est possible de de déclencher ces événements en utilisant le système de fichiers /proc (bien sûr, si votre système se gèle et que vous devez le forcer à faire quelque chose, ceci ne devrait pas vous être d’un grand secours).

Audio et multimédia

Une des fonctionnalités les plus attendues de Linux 2.6 pour les utilisateurs d’ordinateurs de bureau est l’apport de ALSA (l’Advanded Linux Sound Architecture) à la place du vieux système de son. L’ancien système, nommé OSS pour Open Sound System, a servi Linux depuis les premiers jours mais possédait beaucoup de limitations architecturales. La première amélioration majeure avec le nouveau système est qu’il a été conçu depuis le début pour être complètement compatible avec le multi-tâche et SMP, corrigeant les problèmes de beaucoup d’anciens pilotes qui ne fonctionnaient pas correctement une fois sorti du paradigme bureau-signifie-un-processeur. Plus important, les pilotes ont été conçus pour être modulaires depuis le début (les utilisateurs d’anciennes versions de Linux se souviendront que la modularité a été introduite a posteriori dans le système de son vers Linux 2.2), et cela autorise le support amélioré de systèmes possédant plusieurs cartes son, y compris plusieurs types de cartes son. En dehors de l’élégance du code interne, le système n’apporterait pas d’amélioration aux utilisateurs s’il ne possédait pas de nouvelles fonctionnalités hyper-whizzz, et le nouveau système en apporte beaucoup. Les fonctionnalités clef parmi toutes sont le support des matériels récents (y compris l’audio USB et des appareils MIDI), la lecture et l’enregistrement full-duplex, le mixage matériel et non entrelacé, le support pour le fusionnement de périphériques de son et d’autres choses. Que vous soyez audiophile ou simplement quelqu’un qui aime lire des MP3, le support amélioré du son de Linux devrait être un pas en avant bienvenu.

Au-delà de l’audio, les utilisateurs veulent de nos jours un support pour du matériel vraiment fantaisiste comme les webcam, les adaptateurs radio et télévision, et les enregistreurs vidéo numériques. Dans ces trois cas, le support de Linux a été amélioré avec la version 2.6. Bien que Linux ait supporté (à un plus ou moins grand degré) les cartes radio (souvent à travers l’espace utilisateur) depuis plusieurs versions, le support des tuners de télévision et des caméras a seulement été ajouté durant les deux dernières révisions majeures. Ce sous-système connu sous le nom de Video4Linux (V4L), a reçu une amélioration majeure durant le travail sur la nouvelle édition du noyau que ce soit un nettoyage de l’API ou le support de plus de fonctionnalités sur les cartes. La nouvelle API n’est pas compatible avec la précédente et les applications la supportant nécessiteront une mise à jour en même temps que le noyau. Et sur une piste toute nouvelle, Linux 2.6 comprend le premier support interne pour le matériel Digital Video Broadcasting (DVB). Ce type de matériel, commun sur les set-top boxes, peut être utilisé pour faire de Linux avec le logiciel approprié un appareil type Tivo.

Des améliorations logicielles

Réseau

Les principales infrastructures réseaux ont toujours été un des avantages fondamentaux de Linux. Linux en tant qu’OS supporte déjà la plupart des protocoles réseaux les plus utilisés au monde dont TCP/IP (v4 et V6), AppleTalk, IPX et d’autres (le seul non supporté qui vient à l’esprit est le vieux et embrouillé protocole NetBEUI). Comme beaucoup des changements dans les autres sous-systèmes, la plupart des modifications du matériel réseau avec Linux 2.6 sont cachées et pas immédiatement visibles. Cela inclut les changements de bas-niveau pour tirer profit du modèle de périphériques et les mises à jour de beaucoup de modules de gestion de périphériques. Par exemple, Linux comprend maintenant un sous-système MII (Media Independant Interface, ou IEEE 802.3u) séparé qui est utilisé par de nombreux pilotes de périphériques réseaux. Ce nouveau sous-ensemble remplace beaucoup d’exemples où chaque pilote prenait en charge ce support MII de manière légèrement différente, produisant ainsi une duplication du code et des efforts. D’autres changements incluent une mise à jour majeur de ISDN et diverses autres choses.

Du côté logiciel, un des changements les plus importants est le nouveau support de Linux pour les protocoles IPsec. IPsec, ou IP Sécurité est une collection de protocoles pour IPv4 (IP normal) et IPv6 qui autorisent une sécurité par chiffrement au niveau du protocole réseau. Et puisque la sécurité est au niveau du protocole, les applications n’ont pas à être explicitement consciente de cela. Cela est similaire à SSL et autres protocoles de tunneling/sécurité mais à un niveau plus bas. Actuellement le chiffrage supporté dans le noyau inclut différentes versions de SHA (Secure Hash Algorithm), DES (Data Encryption Standard), et d’autres.

Toujours du coté du protocole, Linux a amélioré son support pour le réseau multicast. Les réseaux Multicast sont des réseaux pour lesquels un seul paquet envoyé à pour but d’être reçu par de multiples ordinateurs (comparé au traditionnel réseau point à point où vous discutez avec une seule entité à la fois). Essentiellement, cette fonctionnalité est utilisée par les systèmes de messagerie (tel que Tibco) et les logiciels de conférences audio/vidéo. Linux 2.6 améliore cela en supportant plusieurs nouveaux protocoles SSM (Source Specific Multicast), incluant MLDv2 (Multicast Listener Discovery) et IGMPv3 (Internet Group Messaging Protocol). Ce sont des standards qui sont supportés par la plupart des vendeurs de matériels de réseaux tel que Cisco.

Linux 2.6 possède également une pile LLC séparée. LLC (Logical Link Control, IEEE 802.2), est un protocole de bas niveau qui est utilisé au-dessous de plusieurs protocoles réseaux de plus haut niveau tels que NetBeui de Microsoft, IPX, et AppleTalk. Comme part de ce changement, les pilotes d’IPX, AppleTalk et Token Ring ont été réécrit pour profiter du nouveau sous-système. De plus, une source extérieure a incorporé une pile NetBEUI et il reste à voir si elle sera intégrée au noyau final.

En plus de ces changements, il y a de nombreuses petites modifications. IPv6 a reçu quelques changements majeurs et il peut maintenant tourner sur le réseau Tolken Ring. Le support NAT/masquarade de Linux a été étendu pour mieux prendre en compte des protocoles qui nécessitent de multiples connexions (H.323. PPTP, etc). Sur les routeurs Linux, le support pour configurer VLANs sur Linux n’est plus expérimental.

Systèmes de fichiers en réseau

Au dessus du support robuste de Linux pour les protocoles réseaux se trouve le support également robuste des systèmes de fichiers réseau. Monter (et parfois exporter) un système de fichiers réseau est une des seules opérations réseau de haut niveau dont le noyau s’occupe directement (l’autre opération la plus évidente, le périphérique bloc réseau, n’a pas reçu beaucoup de modifications pour la 2.6 et est généralement utilisé dans des applications spécialisées où vous finissez par l’utiliser à la manière d’un système de fichiers de toutes façons). Toutes les autres opérations réseau ont vocation à être reléguées dans l’espace utilisateur et en dehors du domaine de développement du noyau.

Dans le monde de Linux et des clones Unix, le plus commun des systèmes de fichiers réseau est celui nommé NFS (Network File System). NFS est un protocole complexe de partage de fichiers qui possède de profondes racines dans UNIX (et spécialement l’excellente implémentation de Sun Solaris). Le protocole de transport principal peut utiliser soit TCP soit UDP, mais plusieurs sous-protocoles additionnels sont aussi requis, chacun d’eux fonctionnant au dessus du protocole RPC (Remote Procedure Call). Cela inclut le protocole de montage séaré pour l’authentification et NLM (Network Lock Manager) pour le verrouillage des fichiers (l’implémentation commune est aussi fortement liée à d’autres protocoles communs basé sur RPC, tels NIS - network information service - pour l’authentification. NIS n’est pas communément utilisé pour l’authentification sur Linux, du fait de son insécurité fondamentale). Le fait que NFS n’a pas été largement adapté comme un protocole Internet est peut être dû à sa complexité.

Dans Linux 2.6, ce système de fichiers crucial a reçu de nombreuses mises-à-jour et améliorations. La plus importante est que Linux supporte maintenant expérimentalement la nouvelle version du protocole NFSv4 encore peu adoptée pour ses implémentations à la fois client et serveur (les versions précédentes de Linux comprenaient le support des versions 2 et 3 du protocole). La nouvelle version supporte une authentification plus solide et plus sécurisée (avec chiffrement), un verrouillage plus intelligent, le support de pseudo-systèmes de fichiers, et d’autres changements. Seules quelques caractéristiques de NFSv4 ont été implémentées dans Linux pour le moment, mais le support est relativement stable et peut être utilisé pour des applications de production. De plus, l’implémentation du serveur NFS de Linux a été amélioré afin d’être plus adaptable (jusqu’à 64 fois plus d’utilisateurs concurrents et une file de requêtes plus importante), pour être plus complet (par le support du service au-dessus de TCP, en plus de l’UDP), pour être plus robuste (les pilotes des systèmes de fichiers individuels peuvent adapter la façon dont les fichiers sur ces systèmes seront exportés pour s’adapter à leurs particularités) et pour faciliter la maintenance (un nouveau système de fichiers nfsd a été imaginé à la place d’appels système). Il y eu également d’autres changements invisibles, incluant la séparation de lockd et nfsd et un support pour zero-copy networking sur les interfaces supportées. NFS est également un peu plus facilement sécurisable grâce à la possibilité pour l’administrateur d’assigner les numéros de port de lockd. Le côté client de NFS a aussi bénéficié d’un certain nombre d’améliorations sur l’implémentation du protocole RPC sous-jacent incluant une infrastructure de cache, un contrôle de connexion au-dessus d’UDP, et d’autres améliorations pour TCP. Le support de Linux pour l’utilisation de volumes NFS partagé en tant que système de fichiers root (pour des systèmes sans disque) a été amélioré puisque le noyau supporte maintenant NFS par dessus TCP dans ce but.

En plus d’améliorer le support pour les systèmes de fichiers réseau du style UNIX, Linux 2.6 apporte également plusieurs améliorations aux systèmes de fichiers réseaux du style Windows. Le système de fichiers partagé standard pour les serveurs Windows (de même que OS/2 les autres systèmes d’exploitation) a été le protocole SMB (Server Message Block) et le noyau Linux possède un excellent support client du protocole SMB depuis de nombreuses révisions. Cependant Windows 2000 a standardisé un sur-ensemble du protocole SMB, connu sous le nom de CIFS (Common Internet FileSystem). L’intention de cette mise à jour majeure était de rationaliser et de redéfinir certains aspects de SMB qui à ce point était devenu un complet fouillis (le protocole lui-même était pauvrement défini et souvent étendu au point qu’il y avait des cas où même les versions Win95/98/ME étaient incompatibles avec les versions WinNT/win2k). CIFS a répondu à cette intention et ajouté le support UNICODE, amélioré le verrouillage des fichiers, les liens (hard linking, éliminé les derniers vestiges des dépendances à NetBIOS, et ajouté quelques autres fonctionnalités pour les utilisateurs de Windows. Comme les utilisateurs de Linux n’aiment pas être laissés dans l’ignorance très longtemps, Linux 2.6 inclut maintenant une réécriture complète du support natif des systèmes de fichiers CIFS. Linux 2.6 comprend maintenant aussi le support pour les extensions SMB-UNIX aux protocoles SMB et CIFS qui autorisent Linux à avoir accès aux types de fichiers non-Windows (tels que les noeuds périphérique et les liens symboliques) sur les serveurs SMB qui le supportent (tel que SAMBA). Bien que ce ne soit pas communément vu aujourd’hui, Linux n’a pas complètement oublié les utilisateurs de Novell NetWare. Linux 2.6 autorise maintenant les clients à monter jusqu’à 256 partages maximum sur un seul volume NetWare en utilisant son pilote de système de fichiers NCP (NetWare Core Protocol).

Linux 2.6 inclut également un support amélioré pour le domaine relativement nouveau des systèmes de fichiers réseau distribués, système où les fichiers sur un volume logique unique peuvent être découpés sur de multiples noeuds. En plus du système de fichiers CODA introduit dans Linux 2.4, Linux possède maintenant un support pour deux autres systèmes de fichiers distribués : AFS et InterMezzo. AFS, le système de fichiers d’Andrew (ainsi nommé parce qu’il était originellement développé à CMU), est pour l’instant très limité et restreint à des opérations de lecture seule (une version plus complète d’AFS est disponible en dehors du noyau). Le second système de fichiers supporté, InterMezzo (également développé à CMU) est aussi nouvellement supporté sous Linux 2.6 et il possède des caractéristiques plus avancées telles que l’opération de déconnexion (donc vous travaillez sur des fichiers locaux mis en cache) et est adapté à des applications nécessitant une haute disponibilité, où vous avez besoin de garantir que le stockage n’est jamais indisponible (où simulé si absent). Il présente également des applications pour garder des données synchronisées entre plusieurs ordinateurs, tels qu’un portable ou un PDA et un ordinateur de bureau. Plusieurs des projets fournissant un support pour ces nouveaux types de systèmes de fichiers sont initialement développés sur Linux, permettant à Linux d’être très en avance sur le support de ces nouvelles fonctionnalités.

Fonctionnalités diverses

Sécurité

Un autre gros changement dans Linux 2.6 qui n’a pas reçu assez d’attention est la richesse des nouvelles modifications liées à la sécurité. Plus fondamentalement, la totalité de la sécurité basée sur le noyau (la puissance du super-utilisateur sous les systèmes d’exploitation de la famille UNIX) a été modularisée pour n’être plus qu’un module de sécurité parmi une multitude d’alternatives potentielles (cependant le seul modèle de sécurité offert à ce jour est celui par défaut et un exemple pour faire le vôtre). Pour ce changement, toutes les parties du noyau ont été mises à jour afin de baser tous les accès utilisateur sur un système fin de capacités, plutôt que le vieux système superuser. Presque tous les systèmes Linux continueront d’avoir un compte root avec un accès complet, mais ceci permet à un système Linux-like d’ignorer cette supposition fondamentale. Un autre changement connexe à la sécurité est que les modules binaires (par exemple, les pilotes vendus par un fabricant de matériel) ne peuvent plus surcharger des appels système avec les leurs et ne peuvent plus ni lire ni modifier la table d’appels système. Ceci limite de manière significative la quantité d’accès que les modules non open source peuvent faire dans le noyau et règle probablement quelques failles légales autour de la GPL. Le dernier changement quelque peu lié à la sécurité est que Linux avec le nouveau noyau peut maintenant utiliser des générateurs de nombres aléatoires matériels (tels que ceux présents dans quelques nouveaux processeurs), plutôt que de compter sur le pool d’entropie (tout à fait bon il est vrai) basé sur des fluctuations aléatoires de matériel.

Virtualiser Linux

Une des nouvelles fonctions les plus intéressantes dans Linux 2.6 est l’inclusion d’une architecture mode utilisateur. Il s’agit essentiellement d’un port (comme sur une famille différente de matériel) de Linux sur lui-même, autorisant le fonctionnement d’un environnement de linux-sur-Linux complètement virtuel. La nouvelle instance de Linux fonctionne comme si elle était une application normale. À l’intérieur de l’application, vous pouvez configurer de fausses interfaces réseau, systèmes de fichiers, et autres périphériques à travers des périphériques spéciaux qui communiquent avec la copie hôte de Linux d’une manière sécurisée. Ceci s’est avéré tout à fait utile, autant pour le développement (profilage, etc…) que pour l’analyse de la sécurité et les pots à miel. Alors que la plupart des utilisateurs n’auront jamais besoin de ce genre de support, c’est un dispositif incroyablement cool à faire fonctionner sur votre machine (impressionnez vos amis !).

Portables

En plus de tous les autres supports génériques décrits ci-dessus (APM et ACPI amélioré, meilleur support du sans-fil, etc.) Linux inclut également deux autres fonctionnalités difficiles à classifier qui assisteront particulièrement les utilisateurs de portable. La nouvelle édition du noyau supporte maintenant entièrement les fonctionnalités de veille dites software-suspend-to-disk pour les utilisateurs en déplacement. Cette nouvelle fonction recèle encore quelques erreurs mais semble stable pour de nombreuses configurations. La nouvelle version supporte également la capacité des processeurs mobiles modernes à changer de vitesse (et la puissance requise) se basant sur le fait que le portable soit branché ou non.

Support de systèmes agés

Bien que Linux 2.6 soit une mise à niveau importante, la différence pour les applications en mode utilisateur sera presque inexistante. La principale exception à cette règle semble être le multi-tâches : certaines applications peuvent faire des choses qui ont fonctionné sous 2.4 ou 2.2 mais ne sont plus autorisées. Naturellement, les applications de bas niveau telles que les utilitaires de modules ne fonctionneront pas. De plus, certains des dossiers et formats dans les répertoires /proc et /dev ont changé et n’importe quelle application qui possède des dépendances sur ces répertoires pourrait ne pas fonctionner correctement (c’est particulièrement vrai puisque beaucoup de choses se déplacent vers le nouveau système de fichiers virtuel /sys. Dans le cas de /dev, des noms de périphériques peuvent facilement être configurés pour la compatibilité ascendante).

En plus de ces renonciations aux standards, il y a un certain nombre d’autres changements qui pourraient affecter quelques environnements. D’abord, les vieux fichiers d’échange (de Linux 2.0 ou plus ancien) devront être reformatés avant qu’ils puissent être employés avec la 2.6 (puisque les fichiers d’échange ne contiennent aucune donnée permanente, ce ne devrait être un problème pour aucun utilisateur). Le démon kHTTPd qui a permis au noyau de servir des pages Web directement a également été enlevé puisque la plupart des goulots d’étranglement de performance qui empêchaient Apache, Zeus, etc. d’atteindre les vitesses du noyau ont été résolus. L’auto-détection de gestionnaires de disque DOS/Windows, tels que OnTrack et EzDrive pour supporter les gros disques durs sur d’anciens BIOS a été retirée. Enfin, le support pour utiliser un secteur spécial d’amorçage inclus dans le noyau pour démarrer d’une disquette a également été enlevé ; vous devez employer SysLinux à la place.

Bas de page

Ce document a principalement été assemblé à partir de longues heures à observer les logs de BitKeeper, à regarder et jouer avec les sources, à lire les listes de diffusion, et beaucoup beaucoup de recherche de documentation sur Google et Lycos sur ceci ou cela. En tant que tel, il y a de grandes chances que des choses aient pu être oubliées ou mal comprises par endroit, et que d’autres aient pu être modifiées par la suite (j’ai spécialement fait attention aux deux versions du support IDE qui étaient en développement pendant cette période, mais il y a d’autres exemples). Comme une partie de mes recherches consistait à consulter les pages web de divers projets relatifs au noyau, j’ai dû faire très attention à ce que ces projets ne s’avançaient pas trop en s’appuyant sur des fonctionnalités encore non intégrées au tronc principal Linux. Si vous voyez des erreurs dans ce document ou souhaitez m’envoyer un courriel pour savoir comment je me porte, vous pouvez le faire à jpranevich kniggit.net.

Des informations supplémentaires concernant l’état et les fonctionnalités de Linux 2.6 peuvent être trouvées en de nombreux endroits en ligne. Guillaume Boissière maintient une page sur http://www.kernelnewbies.org comportant les informations version par version. Dave Jones maintient également une liste de modifications sur http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt.

La version la plus récente de ce document se trouve toujours sur http://kniggit.net/wwol26.html.

Traductions

Pour vous qui ne parlez pas anglais, ce document (ou une version plus ancienne) a été traduit dans une poignée de langues différentes ;

Une version abrégée est aussi apparue en Allemagne dans le numéro du mois de septembre 2003 du magasine LanLine. Je crois qu’une version non abrégée existe quelque part aussi, mais je ne suis pas certain du lien. Si vous connaissez d’autres traductions à ajouter à cette liste, faites le moi savoir.

Ce document est la propriété intellectuelle de Joseph Pranevich. Toute redistribution en ligne sans modification est permise. La reproduction hors ligne (tout ou partie) est aussi encouragée, mais envoyez-moi un courriel s’il vous plaît pour discuter des détails. Les traductions sont également les bienvenues ; envoyez-moi un courriel que je puisse aider à leur coordination.