URL: https://linuxfr.org/news/sortie-du-noyau-linux-3-18 Title: Sortie du noyau Linux 3.18 Authors: Martin Peres Davy Defaud, Romain Perier, BAud, Siosm, M5oul, Mali, come, Benoît Sibaud, palm123, claudex, Sidonie_Tardieu, alpha_one_x86, ʭ ☯ , ariasuni, jcr83, needs, BlackNoTiger, TortuXm, Anonyme, esdeem, Nÿco, Olivier Esver, Tanki et Jiehong Date: 2014年10月20日T09:30:18+02:00 License: CC By-SA Tags: kernel, noyau_linux, coulisses, linus_torvalds, selinux, smack et lwn Score: 87 La sortie de la version stable 3.18 du noyau Linux a été annoncée le lundi 7 décembre 2014 par Linus Torvalds. Le nouveau noyau est, comme d’habitude, téléchargeable sur les serveurs du site [_kernel.org_](http://www.kernel.org). Le détail des évolutions, nouveautés et prévisions est dans la seconde partie de la dépêche. ---- [Les noyaux précédents](http://linuxfr.org/wiki/depeches_noyau) [Site officiel du noyau Linux](http://www.kernel.org/) [LWN : 3.18 Merge window part 1](http://lwn.net/Articles/615327/) [LWN : 3.18 Merge window part 2](http://lwn.net/Articles/615825/) [LWN : 3.18 Merge window part 3](http://lwn.net/Articles/617599/) [Heise : Die Neuerungen von Linux 3.18](http://www.heise.de/open/artikel/Die-Neuerungen-von-Linux-3-18-2482186.html) [Kernel Newbies : Linux 3.18](http://kernelnewbies.org/Linux_3.18) ---- # En bref * Architecture * Mise en veille plus rapide (100 ms par cœur) * Développeurs * Amélioration de la gestion du compilateur Clang * Gestion des modules compressés * Pilotes graphiques libres * DRM : unification des barrières TTM * ATI/AMD : meilleure gestion d’énergie * Nouveau : gestion du son avec les connexions DisplayPort ; amélioration du recadencement * Réseau * Amélioration des performances réseau * Nouvel appel système : `bpf()` * Mise en place de tunnels génériques : Foo-over-udp * Systèmes de fichiers * Ajout d’un nouveau système de fichiers : OverlayFS intégré * Virtualisation * KVM améliore la gestion de l’imbrication de machines virtuelles, ainsi que la prise en charge de l’hyperviseur Jailhouse pour les processeurs AMD * Xen se prépare à XenServer 4.5 # Annonces des RC par Linus Torvalds ## RC-1 La version [RC-1](https://lkml.org/lkml/2014/10/19/233) est sortie le 19 octobre 2014 :> Quand j’avais publié la version 3.17, j’avais dit que j’étendrais la phase d’intégration à trois semaines en raison de déplacements. J’ai clairement menti. Parce que nous voilà, après les deux semaines habituelles, et j’ai déjà sorti la 3.18-RC1.>> Ce qui s’est passé, c’est que non seulement j’ai activement intégré malgré les voyages — j’ai été privé de communication seulement pendant quelques jours (en grande partie, mais pas seulement, à cause des vols ; l’hôtel à Düsseldorf a aussi été privé d’Internet pendant un jour) —, mais, sans doute plus important, les gens semblent avoir massivement envoyé leurs demandes d’intégration, parce que la RC-1 en contient plus que `linux-next` n’en a produit les quelques jours après le 3.17... Donc, la retenir une semaine de plus semble inutile.>> Cela dit, je me rends compte que les gens auraient très bien pu prendre mes déclarations au pied de la lettre, et prévoir en fonction. Je déteste quand je reçois des demandes en toute fin de la phase d’intégration, mais en l’ayant fermée selon le calendrier habituel, je comprends aussi que l’on ait pu prévoir d’envoyer des demandes d’intégration un peu plus tard. Ça va. Prosternez‐vous un peu et expliquez‐moi ce qui se passe, et vous pourrez presque à coup sûr me rendre coupable de certains trucs.>> Aussi, ai‐je peut‐être tout simplement raté quelque chose en raison du décalage horaire (hum... oui, appelons ça « décalage horaire », ça sonne tellement mieux que « incompétence de base et mauvaise planification »), donc, si vous vous sentez injustement négligé, envoyez‐moi un courriel pour expliquer pourquoi je vous ai injustement lésé.>> Il y a également au moins une demande d’intégration que j’ai l’espoir d’obtenir le plus vite possible et que je prévois toujours de récupérer : j’espère toujours ardemment voir _overlayfs_ enfin intégré. Mais il y avait quelques questions de dernière minute d’Al. En supposant que tout fonctionne bien, c’est une intégration tardive prévue. Pas la peine de retarder la sortie de la RC-1 pour un traînard connu, cependant.>> Donc, là vous l’avez. La fenêtre d’intégration est close, mais avec un espace [_room_] pour des excuses et les possibles demandes d’intégration oubliées. Comme d’habitude, le résumé des rapports de modifications est beaucoup trop long pour être posté (statistiques de base : en gros 74 % de pilotes, 10 % de mises à jour d’architecture ; le reste étant : du réseau, les systèmes de fichiers, le cœur du noyau , la documentation, les fichiers d’en‐têtes, des mise à jour des outils...), et la suite est mon « journal d’intégration » qui, comme d’habitude, mentionne ceux qui m’ont fait des remontées, qui ne sont pas nécessairement les mêmes que les gens qui ont écrit le code.>> En avant, testez,>> Linus ## RC-2 La version [RC-2](https://lkml.org/lkml/2014/10/26/137) est sortie le 26 octobre 2014 :> Nouvelle semaine, nouvelle RC, et maintenant la phase d’intégration est _définitivement_ fermée.> J’avais espéré que la sortie de la RC-1 signifierait que quelques traînards feraient rapidement surface, et que le reste de la RC serait plus normale. Mais non, j’ai eu le droit toute la semaine à des demandes d’intégration en pagaille et la RC-2 a été plus longue que je l’aurais voulu.> Tant pis. Ce n’est pas que je sois vraiment surpris, mais ça veut dire que je vais probablement être désagréable la semaine prochaine envers quiconque essaiera de me soumettre des choses dont je penserai qu’elles ressemblent plus à du « développement » plutôt qu’à des « correctifs ». Vous aurez été prévenus. Je vous ai en effet donné trois semaines complètes pour l’intégration, c’est maintenant le moment de la correction des bogues, et d’un autre brouhaha. D’accord ?>> Et, pour être honnête, nous avons eu de plus longues RC-2 historiquement. Pas récemment, toutefois. Les 3.3 et 3.4 avaient toutes deux de grosses RC-2, et la 3.15 (qui était la plus grosse jamais vue, si j’ai bonne mémoire) s’en approchait.> Au moins _une partie_ provient de l’intégration très longtemps retardée d’_overlayfs_, que j’ai déjà mentionné dans le message de publication de la RC-1 comme étant en attente. Voyons quelles sont toutes les retombées que tout cela génère, mais ça aura duré longtemps (entre autres, parce qu’il avait besoin de différentes choses dans les couches VFS pour être intégré proprement), et je pense que c’est en bonne voie. Touchons du bois.>> Donc, au moins en partie en raison de l’intégration d’_overlayfs_, près du tiers du correctif est du système de fichiers. Mais ce n’est pas dû _qu’à_ _overlayfs_, cependant ; il y avait une demande d’intégration tardive pour ext4 qui, je pense, est en fait plus grosse, en partie à cause d’un ré‐usinage de code.>> Le reste correspond à des mises à jour de pilotes plus usuelles (thermique, _watchdog_, cible SCSI, ACPI & gestion de l’alimentation, mises à jour diverses) et des mises à jour d’architectures (ARC, BRAS, PowerPC, MIPS, x86). Un peu de documentation et des mises à jour de fichiers en‐têtes viennent compléter le reste.>> Le résumé ci‐joint pour les détails, je crois qu’il respecte toujours les contraintes de taille de la liste de diffusion.>> Linus ##RC-3 La version [RC-3](https://lkml.org/lkml/2014/11/2/171) est sortie le 2 novembre 2014 :> Une autre semaine, une autre RC, et les choses ne s’affinent pas vraiment de la manière que j’aurais espérée...>> Bien que le correctif lui‐même soit beaucoup plus petit que ne l’était la RC-2 (pas de nouveau système de fichiers dans cette RC !), il y a en fait plus de modifications et plus de fichiers concernés. Il y en a partout, en plus.>> Cela dit, je ne pense pas qu’il y ait quoi que ce soit de particulièrement horrible ici. Beaucoup, beaucoup, de petits trucs, avec des pilotes qui représentent la majorité de ce vrac (à la fois en termes de nombre de modifications et de lignes de code), mais le réseau et le cœur du noyau sont également présents dedans. Rien de particulier ne se démarque.>> Le résumé des rapports de modifications ci‐joint pour plus de détails, s’il vous plaît, allez le tester.> > Linus ##RC-4 La version [RC-4](https://lkml.org/lkml/2014/11/9/166) est sortie le 9 novembre 2014 :> Eh, finalement, les choses se calment. En fait, ça avait _vraiment_ l’air calme jusqu’à hier, au moment où certaines personnes ont soudain réalisé : « Eh, je pourrais envoyer mes trucs à Linus pour qu’il les mette dans la RC-4 ». Du coup, un tiers de tous les changements est arrivé le dernier jour, mais malgré cela, les choses semblent enfin se mettre en place, et nous parviendrons à la stabiliser en fin de compte. En espérant que la tendance se maintienne...>> Les choses semblent assez habituelles. Un peu plus de la moitié concerne des pilotes, et près d’un tiers sont des correctifs d’architectures (ARM, MIPS, PowerPC et s390). Le reste est constitué de quelques mises à jour de systèmes de fichiers (principalement XFS) et des trucs divers.>> Le résumé du journal des modifications permet de se faire une bonne idée des détails, et rien ne semble particulièrement effrayant ni étrange.>> Linus ##RC-5 La version [RC-5](https://lkml.org/lkml/2014/11/16/263) est sortie le 16 novembre 2014 :> Hum. Nous avons eu une RC-4 très calme, et j’aurais aimé pouvoir dire que les choses ont continué à se calmer, mais... Ouais, la RC-5 est nettement plus grande que la RC-4. Tant pis.>> Ce n’est pas comme si ça dépassait les bornes, même si la RC-4 était vraiment petite. Et les changements ne sont pas particulièrement étranges ni effrayants : environ 55 % de pilotes (réseau, pilotes graphiques, crypto, thermique, son), 15 % pour l’architecture (Xtensa, x86, ARM[64], PA-RISC, SPARC), et le reste est principalement un mélange de mises à jour du réseau, des systèmes de fichiers, des machines virtuelles, de la documentation et du traçage.>> Les modifications tendent à être assez petites et explicites, et environ un tiers d’entre elles sont déclarées stables. Donc, nous avons encore quelques questions en suspens, mais les choses semblent assez normales. Il nous reste encore quelques semaines avant le final, et plus vous pourrez tester, mieux ce sera.>> Linus ##RC-6 La version [RC-6](https://lkml.org/lkml/2014/11/23/189) est sortie le 23 novembre 2014 :> Des progrès constants nous amènent vers la version finale, même si nous avons encore un gros souci non élucidé dans une régression que Dave Jones a signalée et que nous n’avons pas encore résolu. Dans notre processus de traque, on a regardé un bon paquet de détails divers de bas niveau et cela a révélé quelques points litigieux, mais encore aucune preuve irréfutable. Mais cela explique certains des correctifs de la RC-6...>> La bonne nouvelle est que les choses se calment dans l’ensemble, et la plupart des modifications sont ici des corrections d’assez petites régressions, avec une poignée de correctifs stables. Près de la moitié de pilotes (réseau, son, PCI, InfiniBand, etc.), avec des mises à jour d’architectures (x86, MPIPS, ARM), et le code réseau représentant environ la moitié du reste. Et le dernier quart est « divers » : corrections de systèmes de fichiers, documentation, ordonnanceur...>> Il y a assez peu de code qui a changé, et s’il n’y avait pas le problème en suspens de DaveJ, je serais probablement parfaitement heureux. Nous verrons comment tout cela se déroulera ; mais en attendant, plus ceci pourra subir de tests, mieux ce sera.>> Donc, allez‐y, secouez‐moi ça,>> Linus ##RC-7 La version [RC-7](https://lkml.org/lkml/2014/11/30/303) est sortie le 30 novembre 2014 :> Les choses se calment gentiment et tout semble assez normal. En fait, s’il n’y avait pas les questions en suspens avec les blocages étranges du _watchdog_ (et peut‐être le RCU), je serais assez heureux. En soi, ce n’est pas une régression de la 3.17, mais c’est toujours très inquiétant.>> En même temps, avec l’arrivée des vacances et le problème qui _n’est pas_ une régression, je suppute que ce qui arrivera, c’est que je sortirai la version 3.18 à l’heure dans une semaine, parce que la retarder perturbera la phase d’intégration et les fêtes de fin d’année, ou alors je devrai _beaucoup_ la retarder.>> Nous verrons... Peut‐être que DaveJ pourra le résoudre par dichotomie, maintenant qu’on a montré que « la 3.17 était OK » était une fausse piste (en fait, il semble que le problème se soit glissé entre la 3.16 et la 3.17).>> C’est ennuyeux, parce que, comme mentionné, le reste semble fonctionner correctement. Le correctif RC-7 semble tout à fait normal, les deux tiers étant des pilotes (un peu sur tout : USB, réseau, _staging_, thermique, pilotes graphiques, son...) et la moitié du reste concernant des mises à jour d’architectures (principalement MIPS, ARM et PowerPC). Le reste est principalement des corrections du réseau et des systèmes de fichiers (NFS et Btrfs).>> Linus ## Version finale La [version finale](https://lkml.org/lkml/2014/12/7/202) est sortie le 7 décembre 2014 :> Ce fut une semaine calme, et le correctif depuis la RC-7 est minuscule, donc le 3.18 est sorti.>> J’aurais adoré annoncer que nous avons compris le problème qui empoisonne le 3.17 pour une poignée de gens, mais nous n’y sommes pas parvenus. En même temps, il n’y a absolument aucune raison que tout le monde se tourne les pouces pendant que quelques‐uns tentent ardemment de dichotomiser un ancien problème. Par conséquent, retarder la publication n’était vraiment pas pertinent. D’autant plus que ça aurait ensuite fait traîner les choses pendant toute la période des vacances.>> La fenêtre d’intégration du 3.19 est donc ouverte, et espérons que DaveJ aura achevé sa dichotomie (ou au moins que les hypothèses soient suffisamment restreintes pour que l’on atteigne le moment du « Ahaa ! ») au cours de la semaine prochaine. Mais, en solidarité avec Dave (et aussi pour rendre ma vie plus facile ;), essayons d’éviter d’introduire tout nouveau méchant problème. D’accord ?>> Linus # Les nouveautés ## Architecture La compilation à la volée des programmes de l’_extended Berkeley packet filter_ (eBPF) est maintenant prise en charge sur l’architecture ARM64 (_Cf._ [article sur le site _LWN.net_](https://lwn.net/Articles/615327/)). ### Prise en charge des nouvelles puces ARM Cette nouvelle version inclut, comme d’habitude, la prise en charge de nouvelles puces ARM. Nous parlerons ici des plus importants, ainsi que des changements notables au niveau du _device tree_ pour ARM. L’Atmel SAMA5D4 dispose d’une prise en charge basique. il s’agit d’un système monopuce (SoC) basé sur le ARM Cortex A5, orienté haute performance et basse consommation énergétique. Il intègre un décodeur matériel pour l’affichage en 720p, un contrôleur mémoire DDR qui offre une bande passante allant jusqu’à 1 408 Mio/s, un co‐processeur pour le calcul flottant (FPU), un co‐processeur vectoriel NEON (SIMD), 3 ports USB _high‐speed_, deux contrôleurs réseau Ethernet 10/100 Mbit/s, un contrôleur vidéo LCD, une interface pour une caméra et bien plus. En consommation maximale, il est annoncé en dessous de 150 mW. Du côté d’Allwinner, nous pouvons évoquer une première prise en compte des cartes Olimex A20-OLinuXino-LIME, ainsi que de la Merrii Hummingbird A20. La Olimex A20-OLinuXino-LIME est une carte de développement disposant d’un système monopuce Allwinner A20 double cœur ARM Cortex A7 cadencé à 1 GHz, de 512 Mio de mémoire vive DDR3, un processeur graphique ARM Mali 400, un connecteur SATA, un connecteur HDMI gérant des résolutions en HD 1080p. La Merrii Hummingbird A20, quant à elle, dispose également d’un système monopuce Allwinner A20 double cœur ARM Cortex A7 cadencé à 1 GHz, de 1 Gio de mémoire vive, 4 Gio de mémoire Flash NAND interne, Ethernet Gigabit, un connecteur SATA, un lecteur de carte microSD... Nous pouvons également mentionner quelques changements au sein de l’arborescence matérielle _device tree_. Quelques définitions de systèmes monopuces ont changé de licence, passant de la GPLv2 à une double licence GPLv2/X11, ce qui permet de faciliter leur réutilisation sans imposer d’héritage de licences. Les prises en charge de l’horloge temps réel, d’un contrôleur DMA, ainsi que d’un contrôleur MMC ont été ajoutées à la définition du sun8i. Les contrôleurs MMC et i2c sont activés et utilisés sur les Ippo Q8H-V5 et bien d’autres. Je vous invite à voir les changements dans le _commit_ de [fusion](https://patchwork.ozlabs.org/patch/391552/). Concernant les systèmes monopuces Rockchip, nous pouvons mentionner l’ajout de nouvelles horloges processeur au sein du pilote des horloges des Rockchip, il s’agit principalement de modifications pour la prise en charge des derniers RK3288. Le pilote Ethernet _arc_ bénéficie d’un pilote spécifique pour les systèmes monopuces RK3188 et RK3066 (que l’on peut trouver dans la Radxa Rock ou la Marsboard, par exemple). Ceci leur permet, d’intégrer la prise en charge de la couche physique Ethernet concernant la vitesse de communication entre le contrôleur EMAC et le contrôleur Ethernet, de gérer correctement les régulateurs de tensions, ainsi que les horloges MDIO. Enfin, un pilote pour le circuit de gestion de l’énergie (PMIC) RK808 de Rockchip a été ajouté. Celui‐ci est notamment présent dans la carte d’évaluation du RK3288 ou certaines cartes qui possèdent cette puce. Une prise en charge préliminaire pour les systèmes monopuces MesonX/Meson6 de chez Amlogic fait son entrée dans le noyau. Amlogic AML8726-MX (nom de code Meson6) est un microprocesseur haute performance destiné aux applications multimédia et aux appareils multimédia connectés à Internet (_Multimedia Internet Devices_ — MID). Il intègre deux cœurs ARM Cortex A9 cadencés à 1,5 GHz, un co‐processeur SIMD NEON, un processeur graphique ARM Mali 400, un décodeur matériel permettant d’aider au décodage des vidéos en 1080p. L’ordinateur Acer Chromebook 13 CB5 dispose d’une prise en charge au sein du _device tree_. Il s’agit d’un ultra‐portable équipé d’un NVIDIA Tegra K1 quadri‐cœur ARM Cortex A15 cadencé à 2,1 GHz, de 4 Gio de mémoire vive et d’une carte graphique à architecture Kepler. Il est livré sous ChromeOS. Parmi les autres changements notables au sein du _device tree_ pour Tegra, on peut citer l’ajout de la gestion SATA et PCIe pour les Tegra124, ainsi que leur activation sur la Jetson TK1 et l’activation du pavé tactile pour les Venise 2. Les changements non évoqués sont consultables dans le _commit_ de fusion, consultable [_ici_](http://lkml.iu.edu/hypermail/linux/kernel/1410.1/00575.html). ### ACPI et gestion d’énergie Le [principal changement](http://www.phoronix.com/scan.php?page=news_item&px=MTgwNjI) dans la gestion de l’[[ACPI]] est sur les machines Apple : le microprogramme change de comportement selon que le système d’exploitation annonce être `_OSI("Darwin")` ou autre chose. Par exemple, il désactive les ports Thunderbolt, à moins que le système fonctionne sous OS X. Linux s’annonce donc maintenant comme Darwin sur ces machines. ### Gestion du bus PCI sur les processeurs ARM 64 bits Après onze versions de Linux, la gestion des bus PCI sur les processeurs ARM 64 bits vient d’être achevée. Il est maintenant possible d’utiliser cette fonctionnalité avec trois ponts PCI (AppliedMicro X-Gene, TI Keystone, Xilinx AXI). Pour plus d’informations, vous pouvez consulter la [demande d’intégration](http://lkml.iu.edu/hypermail/linux/kernel/1410.1/00466.html). ### Mise en veille et réveil plus rapide Ouah, [on a gagné jusqu’à 100 ms par cœur de processeur](http://www.phoronix.com/scan.php?page=news_item&px=MTgxMzE) lors du processus de mise en veille et de réveil. En effet, un temporisateur de 100 ms était utilisé pour attendre le réveil, et Lan Tianyu, d’Intel, l’a remplacé par un vrai signal. Ça n’a l’air de rien, mais sur un simple quadricœur on arrivait déjà presque à une seconde ; alors, pensons à ce joli serveur à 48 cœurs qui va pouvoir se réveiller en 5 secondes de moins ! ### Architecture SPARC64 La quantité de mémoire adressable sur l’architecture SPARC64 a été considérablement augmentée grâce à l’utilisation de tables de pages à quatre niveaux. ## Développeurs ### Mailbox Une nouvelle API fait son entrée dans cette version pour utiliser les capacités matérielles de communication inter-processeurs. Pour un peu plus d’informations, vous pouvez consulter la [documentation écrite à son sujet](http://lwn.net/Articles/617602/). ### Correction de l’appel système `fanotify_init()` L’interface de programmation `fanotify` met à disposition un ensemble de fonctions qui permettent d’être notifié et d’intercepter les événements de systèmes de fichiers. Surveiller un dossier hiérarchisé ou un fichier ciblé peut faire partie des cas d'utilisations. `fanotify_init` est un appel système associé à cette interface. Il permet d'initialiser un groupe fanotify et retourne un descripteur de fichier correspondant à la file d’événements que l'on peut manipuler par la suite via l'interface de programmation correspondante, comme par exemple `fanotify_mark`. Jusqu'à présent, cet appel système contenait une limitation. Lorsque les drapeaux leur étant passés en paramètre au travers de la variable `flags` contenait le drapeau `O_CLOEXEC`, celui ci était tout simplement ignoré. Reste à savoir s'il s'agit d'une action volontaire ou d'un oublie... Ce problème est désormais corrigé. Il est demandé à tout les développeurs dont les applications peuvent utiliser ce drapeau de façon silencieuse ou qui travaillent tout simplement avec cette interface de vérifier leur code afin de ne pas introduire d'effets de bords non désirés. ### Quelques fonctions variables par processeur marquées obsolètes Quelques fonctions qui permettent d’accéder à des variables locales au processeur ont été marquées obsolètes, il s’agit de `__get_cpu_var()` et de `__this_cpu_ptr()`. L’usage de ces fonctions est à remplacer respectivement par `this_cpu_ptr()` et `raw_cpu_ptr()`. Je ne décrirai ici que les nouvelles fonctions. `this_processeur_ptr()` et `raw_processeur_ptr()` sont des fonctions qui permettent d’accéder à un pointeur qui est propre au processeur depuis lequel la fonction est appelée. Ceci est notamment possible grâce aux [registres de segments](http://en.wikipedia.org/wiki/X86_memory_segmentation) sur les architectures x86 ou des registres internes spécifiques qui contiennent le début de la zone mémoire dédiée au processeur courant. Ces fonctions permettent d’ajouter un décalage à l’adresse de base par processeur contenue dans ces registres spéciaux, et encodent cette opération de calcul d’adresse directement dans l’instruction de l’opération d’accès à la variable par processeur. Cela permet notamment de résoudre pas mal de problèmes d’atomicité d’accès à des données sensibles, entre le moment où l’adresse est calculée et où la donnée est modifiée. Cela est d’autant plus intéressant concernant la lecture ou l’écriture de ces variables. Bon nombre d’instructions sont garanties atomiques car le processeur signale par un verrou matériel sur le bus mémoire qu’il est en train d’écrire ou lire une donnée. L’usage de telles instructions évite d’avoir à utiliser des moyens de synchronisation (type _mutex_, _spinlock_...) car elles sont atomiques et non conflictuelles. En revanche, lorsqu’elles sont utilisées de façon assez agressive, elles ont tendance à provoquer de la contention sur le bus. L’utilisation des fonctions évoquées dans cette section est donc très intéressante, car, comme les données sont garanties uniques par processeur, il n’y a pas besoin de mettre un verrou matériel sur le bus. Ceci est très intéressant en termes de performances sur des machines qui disposent de plusieurs cœurs. D’autres fonctions « `this_cpu()` » sont disponibles dans le noyau. Je vous invite à lire la [documentation](http://lxr.free-electrons.com/source/Documentation/this_cpu_ops.txt) pour plus de détails. ### LLVM Vingt‐six correctifs ont été intégrés pour améliorer la prise en charge de LLVM/Clang, en partie pour l’architecture ARM64 et les modules de cryptographie. Une partie des correctifs consiste à remplacer les tableaux de taille variable dans les structures (_Variable Length Array In Struct_ ou VLAIS. _Cf._ [présentation à la _Linux Plumbers Conference 2013_](https://www.youtube.com/watch?v=aliQx0uDSX0)) par un équivalent valide dans le standard C99 (correctifs : [[1](http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a0a77af14117e388d43b2385d5ecc800e2d6eee9)], [[2](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=357aabed626fe3fc753a99ef1d652f4e2d82ba26)]...). ### Vidage mémoire des périphériques Les périphériques que nous utilisons sont en général pilotés par un pilote depuis le noyau. Certains ont toutefois un micrologiciel directement dans la mémoire du périphérique, qui permet de réaliser des tâches complexes côté matériel (si vous me permettez l’expression). Lors du chargement du pilote au sein du noyau si celui‐ci le demande, le noyau Linux peut charger à la volée un micrologiciel directement dans la mémoire du périphérique. C’est notamment à ça que sert le projet _linux-firmware_. Il arrive toutefois, comme le code logiciel au sein des pilotes de votre noyau, que celui du micrologiciel soit bogué ou fonctionne mal. Ceci rend la tâche beaucoup plus complexe aux développeurs, car cela peut concerner des parties matérielles non couvertes par la fiche technique, et il est parfois difficile de savoir dans quel état le périphérique se trouve. Une fonctionnalité de vidage mémoire (_coredump_) de périphérique vient d’être ajoutée à cette nouvelle version. Ceci permet de récupérer une image binaire de l’état dans lequel votre périphérique se trouve. Il s’agit d’un mécanisme générique de récupération des données dans la mémoire du périphérique, et non d’une image ou d’un format en particulier (qui varie d’un matériel à l’autre). Ceci est exposé dans _sysfs_ via l’interface `/sys/class/devcoredump/devcd*/`. Je vous invite à regarder le [_commit_](http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=833c95456a70826d1384883b73fd23aff24d366f) en question pour de plus amples informations. ### Modules compressés Il était déjà possible de manipuler des modules noyau compressés par l’intermédiaire de _module-init-tools_ (_gzip_) ou de _kmod_ (_gzip_, _xz_). Les développeurs de distributions, ainsi que les bidouilleurs du dimanche n’auront plus besoin de mettre en place des procédures de compression automatique durant un déploiement, ceci vient d’être ajouté à _kbuild_ (le système de construction du noyau). Ce [correctif](http://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/commit/?id=beb50df39e91745604ce3cb9dc6a503f39f4383d) rajoute une option à _kconfig_ dans la section _Enable loadable module support_, et vous propose le choix de compresser avec _xz_ ou _gzip_. Ainsi, dès lors que vous lancez la commande `make modules_install`, vos modules seront automatiquement compressés après installation. Il est toutefois suggéré d’utiliser _gzip_ pour les périphériques embarqués, certes moins efficace en termes de compression, mais bien plus rapide comparé à son homologue _xz_. ### Paramètres de modules non sûrs Il arrive parfois que certains modules exposent des paramètres de débogage ou de test pour les développeurs, s’avérant peu utiles voire dangereux pour les utilisateurs. Il serait pour cela pratique que des messages d’avertissement retiennent l’attention de l’utilisateur lorsqu’il examine ses journaux noyau. Deux fonctions ont été [ajoutées](http://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/commit/?id=3baee201b06cfaff84c2c5ddc551b192bb3eaed3) pour remédier à ce problème, il s’agit de `_module_param_unsafe()` et `_module_param_named_unsafe()`. Lorsque des paramètres module exposés au noyau par l’intermédiaire de ces fonctions sont manipulés depuis l’espace utilisateur, cela mettra le noyau dans un état spécial, de corruption, que l’on appelle dans le jargon linuxien : [_kernel tainted_](https://www.kernel.org/doc/Documentation/sysctl/kernel.txt). Il s’agit d’un état dans lequel le noyau peut se mettre lorsqu’un module propriétaire est chargé ou qu’une action qui n’a pas lieu d’être est utilisée. Cela peut bloquer certaines API ou fonctionnalités du noyau dans certaines conditions et permet aux développeurs noyau de savoir s’il s’agit d’une utilisation ou d’un bogue dont ils doivent se soucier. Cela permet également d’informer l’utilisateur si ce qu’il est en train de faire est pris en charge par la communauté en cas de problème. ### Résolveur de références au sein du _device tree_ Le _device tree_ est une fonctionnalité qui permet de décrire la topologie matérielle de la carte embarquée sur laquelle le noyau s’exécute et lui donne des informations précieuses concernant la façon dont les composants matériels sont configurés et comment les exploiter. Par exemple, quelles broches [[GPIO]] utiliser en tant qu’interruption pour un périphérique, ou encore quelle est l’adresse de base physique [[en:MMIO]] d’un contrôleur dans la mémoire. Ainsi, un grand nombre d’informations spécifiques à la carte embarquée se retrouve au sein de ce _device tree_, et permet en plus de donner du contexte au noyau pour se retrouver avec du code pilote beaucoup plus générique et beaucoup plus maintenable. En effet, avec un tel mécanisme, le code des pilotes se focalise sur le fonctionnement du périphérique lui‐même et n’a pas besoin de contenir des dizaines de variantes en fonction de la carte utilisée, ceci est maintenant factorisé et sorti du code (du moins quand cela est possible). En général, cela se présente sous la forme d’un fichier ayant une extension `.dts` contenant la topologie matérielle sous forme d’arborescence dans laquelle chaque pilote de périphérique (_device driver_) contient un nœud, que l’on appelle un _device node_. Chaque nœud dispose de propriétés et peut contenir à son tour des sous‐nœuds. Ces définitions et descriptions représentent généralement l’architecture matérielle de la carte. Au sein de ce même fichier, les nœuds peuvent se référencer les uns avec les autres, ce qui permet d’exprimer des contraintes matérielles (par exemple, mon contrôleur de NAND à besoin du SPI 0). Ces référencements sont exprimés en attribuant le nom d’une variable du nœud cible à une propriété du nœud qui en dépend. On appelle une telle référence, un _phandle_, une adresse de _device node_ au sein du _device tree_ en quelque sorte. Ce fichier est ensuite compilé en un _device tree blob_ par le compilateur _device tree compiler_ (appelé _dtc_, oh yeah !) et chargé par le noyau. C’est dynamiquement que celui‐ci est interprété par les pilotes qui en ont besoin, en utilisant la bibliothèque _device tree_ prévue à cet effet. Je vous invite à consulter le [site _devicetree.org_](http://devicetree.org/) pour plus de renseignements. Oui, mais... c’est certes très pratique, mais quand même très statique. Qu’en est‐il des cartes disposant de plusieurs cartes d’extension, ou de certaines à base de processeurs ARM contenant des FPGA et complètement programmables ? Doit‐on définir un _device tree_ par carte et par configuration ? Cela deviendrait rapidement non maintenable. C’est la raison pour laquelle, les mainteneurs de ce composant au sein du noyau ont commencé à étudier le sujet sérieusement. L’idée serait d’avoir un _device tree_ de base, chargé par le noyau au démarrage et de pouvoir par la suite venir y greffer dynamiquement, soit la portion d’un _device tree_ par dessus, soit venir changer ou modifier à chaud une partie de celui‐ci chargée en mémoire. Cela serait très pratique pour les développeurs qui souhaitent tester rapidement un changement sans avoir à tout recharger, ou pour commencer à répondre aux problématiques ci‐dessus (par exemple, une portion de _device tree_ par carte d’extension, que l’on greffe par dessus celui de la carte de base). Une première partie, consiste à intégrer un solveur de portions de _device tree_ au sein du noyau. Vous rappelez‐vous des _phandles_ dans le paragraphe précédent ? Un nœud est capable d’en référencer un autre, en fonction des besoins du pilote lui étant associé ; pour ce faire, le noyau doit être en mesure de résoudre ce référencement sur les portions de _device tree_ insérées à chaud. Il s’agit d’un solveur de références au sein du _device tree_. Cette prise en charge vient d’être ajoutée au noyau 3.18. C’est le début d’une suite assez intéressante de fonctionnalités. ### Miniaturisation Aujourd’hui, le noyau Linux est capable de tourner sur à peu près n’importe quoi, allant de l’objet connecté et des cartes de développement de type BeagleBone Black jusqu’aux super‐calculateurs. Qu’en est‐il des vrais systèmes embarqués avec des contraintes de tailles et de ressources ? Par exemple, des cartes avec des systèmes monopuces STM32 ou EFM32 qui ne disposent que de 1 Mio de mémoire vive, voire de quelques kibioctets. Le noyau Linux a vu son empreinte mémoire minimum augmenter au fil des versions, chose qui a rarement diminué avec le temps. Ceci rend la tâche difficile aux développeurs qui ne disposent que de quelques kibioctets pour faire tourner l’intégralité de leur système, ainsi que leurs applications. Dans des cas comme celui‐ci, ils peuvent se tourner vers des alternatives libres comme [FreeRTOS](http://fr.wikipedia.org/wiki/FreeRTOS) ou [Contiki](http://fr.wikipedia.org/wiki/Contiki), voire des systèmes propriétaires. Et c’est ici qu’est le problème. Pourquoi le noyau Linux, ne pourrait‐il pas répondre à un tel besoin ? Outre le fait que Linux nécessite une unité de gestion mémoire (MMU) pour pouvoir fonctionner, des alternatives libres basées sur la branche principale du noyau ont vu le jour, c’est le cas de [μCLinux](http://fr.wikipedia.org/wiki/%CE%9CCLinux). Ce fut le sujet de l’une des présentations de Josh Triplett au _Kernel Summit 2014_. Même si certains développeurs ont l’air de suggérer d’utiliser un noyau 2.4, ceci n’est pas une vraie solution sur le long terme. Pourquoi ces plates‐formes ne pourraient‐elles pas bénéficier d’une prise en charge par le noyau actuel ? C’est la raison pour laquelle le site [_tiny.wiki.kernel.org_](https://tiny.wiki.kernel.org) a été mis à disposition. Il regroupe toutes les modifications qui sont à faire afin de minimiser le noyau et contient des informations relatives à ce projet. Cela n’a pas été mentionné, mais depuis la version précédente, la commande `make tinyconfig` a été ajoutée. Elle permet de compiler un noyau minimal et vous laisse ensuite la possibilité d’ajouter uniquement ce dont vous avez besoin. Malheureusement, ceci n’est pas encore suffisant. Beaucoup de choses peuvent être optimisées au sein du noyau, afin de réduire la taille de l’image et son empreinte mémoire. Dans cette version, pas mal d’améliorations et de correctifs ont été acceptés à ce sujet. Vous pouvez suivre l’état des choses à faire directement sur la [page du site du projet](https://tiny.wiki.kernel.org/projects). ### Temps réel Il y a un an [Thomas Gleixner](https://rt.wiki.kernel.org/index.php/User:Tglx), mainteneur et développeur principal du projet Linux temps réel (ou [PREEMPT_RT](https://rt.wiki.kernel.org/index.php/Main_Page)), alertait sur le [manque de soutien de la part des industriels](http://lwn.net/Articles/572740/) l’utilisant. Un an plus tard, malgré les efforts de la Linux Foundation et de l’[OSADL](http://www.osadl.org/), la situation n’'ayant pas évolué, il annonce que la [maintenance de ce correctif sera maintenant effectuée à titre de _hobby_](http://lwn.net/Articles/617140/). Apparemment les industriels ont préféré jouer à « le premier qui bouge (paye) a perdu » mais au final, ils risqueraient bien d’être tous perdants. Il est alors fort probable, au vu de la vitesse d’évolution du noyau que ce projet prenne rapidement beaucoup de retard et soit de plus en plus difficile à maintenir. ## Pilotes graphiques libres ### DRM (Direct Rendering Manager) La modification la plus importante de DRM concerne la gestion de l’intervalle de suppression de trame (_vblank_). Auparavant, celle‐ci était désactivée quelques millisecondes après qu’aucun client n’ait demandé de synchronisation avec elle. Dorénavant, le comportement par défaut est de la désactiver immédiatement. Cela permet d’économiser de l’énergie en évitant de recevoir des interruptions non nécessaires. Ce comportement est possible pour tous les matériels possédant un horodatage matériel précis. Pour plus d’informations, vous pouvez consulter la [demande d’intégration de cette série de correctifs](https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/drivers/gpu/drm?id=edbaae5a5cab89de0e64b8c03ebd9a8d5d266550). David Herrmann et Daniel Vetter ont assaini les fichiers d’en‐tête de DRM, afin de mieux délimiter les fonctions préservées par souci de respect de l’API, mais qui ne devraient jamais être utilisées par un nouveau pilote. Ils ont également profité de cette opération de nettoyage pour exposer au pilotes DRM le moins possible des structures internes à DRM. Pour l’anecdote, lors de la relecture de ces correctifs, nous avons envoyé deux correctifs ([[1](http://cgit.freedesktop.org/drm-intel/commit/?h=topic/core-stuff&id=393e872e1daa4958f862fdbd321bb9ba7f7acb0d)] et [[2](http://cgit.freedesktop.org/drm-intel/commit/?h=topic/core-stuff&id=e2db726b560c963c6da49005d24d1310eeed22c5)]) triviaux pour corriger des erreurs dans les commentaires. Ces correctifs ont été fusionnés pour Linux 3.19. La morale est que si vous voyez des erreurs, même si elles sont triviales, envoyez des correctifs ! L’infrastructure commune s’améliore également sur la question de la gestion du mode d’affichage atomique. Cela inclut la prévention d’interblocages dans le tampon de trame Linux (_fbdev_) qui pouvaient déjà arriver avec les noyaux actuels, mais vont devenir bien plus courants lorsque plus d’applications vont demander des changements. Du côté de TTM, le système de synchronisation par barrière a été revu et unifié à travers tous les pilotes utilisant TTM. Cela devrait améliorer la synchronisation entre plusieurs pilotes graphiques, comme cela est nécessaire pour les ordinateurs portables utilisant la technologie Optimus. Pour plus d’informations, vous pouvez [consulter la demande d’intégration](https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/drivers/gpu/drm?id=6ba59f3b5c977af2df3f9446f030f71e29d77dc1). Pour plus d’informations sur les modifications apportées dans DRM, vous pouvez consulter la [demande d’intégration DRM](https://lkml.org/lkml/2014/10/13/500). ### AMD/ATI (pilote Radeon) La partie DRM du pilote Radeon fait encore de gros progrès, avec l’activation du décodeur vidéo matériel UVD pour le H.264 sur d’anciennes cartes (3xxx et 48xx). Après avoir corrigé un problème avec la [gestion d’énergie dans la famille _Cayman_ dans Linux 3.17](https://linuxfr.org/news/sortie-de-linux-3-17#amdati-pilote-radeon), un utilisateur a pu vérifier que les familles _Nothern Island_, _Southern Island_, _Canary Island_ et BTC n’étaient plus touchées par ce problème ([rapport de bogue](https://bugs.freedesktop.org/show_bug.cgi?id=69721)). Ces puces gèrent maintenant mieux le DPM. Pour finir, quelques correctifs pour la gestion du son via l’interface HDMI ont été proposés. Pour plus d’informations, vous pouvez consulter la [demande d’intégration Radeon](http://lists.freedesktop.org/archives/dri-devel/2014-October/069535.html). ### Intel (pilote i915) Le pilote DRM i915 a enfin reçu les derniers correctifs afin d’activer la gestion du PPGTT (_Per‐Process Graphics Translation Table_) qui permet d’isoler les différents clients graphiques dans différents espaces d’adressage. Du moins, c’était avant que plus de tests mettent en avant d’autres bogues, ce qui a [conduit à sa désactivation](http://www.spinics.net/lists/intel-gfx/msg53968.html). Ces bogues ont normalement été corrigés et espérons que la gestion du PPGTT sera enfin disponible dans Linux 3.19 ! Du côté de l’affichage, la gestion de la rotation de plans graphiques vient d’être ajoutée. La gestion du DRRS (_dynamic refresh rate switching_ — commutation dynamique de fréquence de rafraîchissement) s’approche avec l’ajout des parties communes, le reste devrait arriver dans les noyaux suivants, ce qui devrait permettre de diminuer la consommation énergétique. Du côté gestion du mode d’affichage, le code pour les puces i830M a été corrigé. La gestion de l’alimentation des panneaux eDP a également été revue et la gestion d’un nouveau mode d’établissement de lien DisplayPort a été ajoutée. Pour finir, plusieurs corrections de bogues ont été faites dans la gestion du HDMI, pour améliorer les résultats aux tests de conformité du standard. Pour finir sur les modifications compréhensibles, la gestion de la commutation de pages a été améliorée pour mieux gérer les cas où le pilote ou le matériel a oublié un événement. Cela va permettre de ne pas voir son écran bloqué en attente d’un événement qui s’est déjà terminé ! Comme à son habitude, Daniel Vetter (mainteneur i915) a publié un [compte‐rendu des modifications](http://blog.ffwll.ch/2014/10/neat-drmi915-stuff-for-318.html) sur son _blog_, que vous pouvez lire pour plus d’informations. Vous pouvez aussi consulter la [demande d’intégration i915](http://permalink.gmane.org/gmane.comp.freedesktop.xorg.drivers.intel/47877). ### NVIDIA (pilote Nouveau) L’amélioration la plus visible dans Nouveau est l’ajout de la gestion du son avec les écrans DisplayPort (DP) ([_correctif_](https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/drivers/gpu/drm/nouveau?id=cc2a9071458254cb0db6153811734750da0233ea)). Cette fonctionnalité fait miroir à l’ajout du son sur HDMI, qui avait été [ajouté dans le noyau 3.13](//linuxfr.org/news/sortie-de-linux-3-13#nvidia-pilote-nouveau). Une autre amélioration visible dans Nouveau concerne les changements de fréquence d’horloge (_reclocking_ — recadencement), notamment de la mémoire. Ce travail a été initié par Roy Spliet qui a travaillé pendant trois mois à plein temps durant l’été, dans le cadre du [_Google Summer of Code_](https://fr.wikipedia.org/wiki/Google_Summer_of_Code). Son travail a uniquement porté sur les [puces GT21\[568\] (NVA\[358\])](http://nouveau.freedesktop.org/wiki/CodeNames/#nv50familytesla), mais il est maintenant possible de recadencer la majorité des cartes utilisant cette puce. Pour un compte‐rendu sur son projet, vous pouvez consulter sa [présentation faite au XDC2014](http://www.x.org/wiki/Events/XDC2014/XDC2014SplietREclock/) qui s’est déroulée à Bordeaux en octobre. Grâce aux découvertes de Roy, Ben Skeggs a pu améliorer la gestion du recadencement dans la [famille Kepler](http://nouveau.freedesktop.org/wiki/CodeNames/#nve0familykepler) et, en outre, en a profité pour améliorer la gestion du recadencement de la mémoire. Concernant la prise en charge de la première génération des processeurs graphiques Maxwell (puce [GM107](http://nouveau.freedesktop.org/wiki/CodeNames/#nv110familymaxwell)), celle‐ci s’améliore avec l’ajout de la gestion du ventilateur et de PDAEMON/PMU ([système d’exploitation temps réel](https://fr.wikipedia.org/wiki/Syst%C3%A8me_d%27exploitation_temps_r%C3%A9el) s’exécutant sur le processeur graphique ayant pour but de gérer l’énergie). ### En vrac Peu de changements du côté des pilotes DRM pour les [systèmes monopuces](https://fr.wikipedia.org/wiki/Syst%C3%A8me_sur_une_puce). La principale nouveauté est la gestion de la puce Samsung Exynos 3250 par le pilote _exynos_. Ce pilote a également changé son interface pour l’appel système `mmap()` et l’a remplacé par l’implémentation proposée par DRM. Pour finir, le pilote utilise maintenant la nouvelle interface DRM de gestion universelle des plans graphiques, afin d’exposer ses différents contrôleurs vidéo CRTC (partie du processeur graphique qui envoie les pixels à l’écran). Pour plus d’informations, voir la [demande d’intégration _exynos_](http://lists.freedesktop.org/archives/dri-devel/2014-September/068612.html). Du côté d’Adreno, la puce _md4_ se voit ajouter la gestion du protocole de communication [[LVDS]], utilisé par les dalles LCD des ordinateurs portables. La gestion du panneau B101XTN01.0 a également été ajoutée. Pour finir, le pilote a commencé à être refactorisé, pour faciliter l’arrivée de la future famille de processeur Adreno. Pour plus d’informations, voir la [demande d’intégration MSM](http://www.spinics.net/lists/dri-devel/msg67728.html). ## Réseau ### Transmission de paquets réseau en masse Les améliorations de performance réseau dans cette version ont été fusionnées. Entre beaucoup d’autres choses, elles permettent à de relativement petits systèmes de gérer des interfaces rapides à leur vitesse réelle, même quand des petits paquets sont transmis. La performance des petits paquets a toujours été un problème pour Linux, c’est pourquoi c’est une amélioration importante. Ce travail est limité en portée, en particulier, il ne va marcher qu’avec les files d’attente uniques. Éric Dumazet a regardé le correctif et a réalisé que cela pouvait être encore plus poussé : le processus de validation des paquets pour la transmission pouvait être déplacé complètement en dehors de la section critique de verrouillage de la file d’attente, ce qui améliore la concurrence dans le système. Les résultats du correctif ont des avantages qu’Éric décrit comme impressionnants : atteinte du débit théorique de l’interface de 40 Gbit/s, et ce, même en l’absence de gestion matérielle de la segmentation. De petits changements peuvent avoir de grands effets quand ils sont appliqués aux bons endroits. ### Berkeley Packet Filter Le nouvel appel système au _Berkeley Packet Filter_, `bpf()`, a été inclus. Il ne sert pour l’instant pas à grand chose, car il manque l’intégration aux sous‐systèmes de traçage et de filtrage de paquets notamment. Seul le cœur a été intégré, et consiste en une « machine virtuelle universelle » qui est maintenant disponible dans le noyau. Plus de détails sont disponibles dans l’[article sur le site _LWN.net_](http://lwn.net/Articles/612878/) [correctifs: [[1](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=99c55f7d47c0dc6fc64729f37bf435abf43f4c60)], [[2](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=db20fd2b01087bdfbe30bce314a198eefedcc42e)], [[3](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=09756af46893c18839062976c3252e93a1beeba7)], [[4](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0a542a86d73b1577e7d4f55fc95dcffd3fe62643)], [[5](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=51580e798cb61b0fc63fa3aa6c5c975375aa0550)], [[6](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=cbd357008604925355ae7b54a09137dabb81b580)], [[7](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0246e64d9a5fcd4805198de59b9b5cf1f974eb41)], [[8](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=475fb78fbf48592ce541627c60a7b331060e31f5)], [[9](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=17a5267067f3c372fec9ffb798d6eaba6b5e6a4c)], [[10](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=3c731eba48e1b0650decfc91a839b80f0e05ce8f)], [documentation dans les sources du noyau](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/networking/filter.txt)]. ### Foo-over-UDP Le sous-système Foo‐over‐UDP a été fusionné. Il permet d’encapsuler arbitrairement n’importe quel protocole dans un tunnel UDP. Le choix s’est porté sur UDP, parce que beaucoup d’interfaces réseau disposent désormais d’une gestion matérielle pour UDP, qui gère notamment le calcul des sommes de contrôle des paquets. Le protocole UDP n’ajoute pas non plus trop d’informations, puisque seuls une adresse et un numéro de port sont nécessaires, ce qui n’augmente pas beaucoup la taille du paquet. Il est aussi possible de faire fonctionner UDP avec le [_Receive Side Scaling_ (RSS)](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/network-rss.html) et l’[_Equal-cost multipath routing protocol_ (ECMP)](http://en.wikipedia.org/wiki/Equal-cost_multi-path_routing) ([documentation du noyau : _Scaling in the Linux Networking Stack_](https://www.kernel.org/doc/Documentation/networking/scaling.txt)), ce qui permet d’augmenter les performances dans certaines configurations (forte redondance des connexions entre deux systèmes, par exemple). Les avantages des tunnels sur UDP sont si importants que certains développeurs pensent qu’ils vont devenir omniprésents dans les prochaines années. Plus de détails et un exemple de mise en place d’un tel tunnel sont disponibles dans l’[article sur _LWN.net_](http://lwn.net/Articles/614348/). ### DCTCP congestion control algorithm Un nouvel algorithme de gestion de la congestion pour le protocole TCP a été intégré. Nommé _Data Center TCP_ (DCTCP), il est, comme son nom l’indique, préposé à des cas d’utilisation fréquemment rencontrés dans les réseaux stables et fortement connectés des centres de données. Plus de détails sur le [site Web dédié](http://simula.stanford.edu/~alizade/Site/DCTCP.html) et le [_commit_ du correctif](http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=e3118e8359bb7c59555aca60c725106e6d78c5ce). ### Generic Network Virtualization Encapsulation (Geneve) protocol Le protocole _Generic Network Virtualization Encapsulation_ (_Geneve_) est désormais pris en charge. Plus d’informations sont disponibles dans le [brouillon IETF](http://tools.ietf.org/html/draft-gross-geneve-01). ## Sécurité L’appel système `prctl()` gère une nouvelle opération `PR_SET_MM_MAP`, qui permet de définir l’agencement d’un certain nombre d’éléments essentiels d’un processus : l’endroit où sont localisés les données et le code, l’emplacement auquel démarre la pile, etc. Cette fonctionnalité est nécessaire pour le projet [CRIU](http://criu.org/Main_Page), lorsqu’il est utilisé en combinaison avec les espaces de noms [[_correctif_](http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=f606b77f1a9e362451aca8f81d8f36a3a112139e)]. ### Cryptographie Le module effectuant les opérations cryptographiques peut tirer avantage des extensions matérielles permettant d’effectuer un même calcul sur plusieurs tampons simultanément. Pour commencer, l’infrastructure a été ajoutée, ainsi qu’une implémentation pour SHA1 utilisant les extensions AVX2 (correctifs : [[1](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=1e65b81a90df50bf450193065cc9073b706b8dda)], [[2](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=116177782392739f06868cfc2e6df5267aec4639)], [[3](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=2249cbb53ead12539c4ab7f422400e82263d174b)], [[4](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=12d2513d5fe23aed53872f9303d9cb4b61b60d80)], [[5](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=ad61e042e9151b55b393d5875e467e7fe0c7470c)], [[6](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4c1948fc471d444b15dfaca73ea0c9b77c2d5505)]). ### LSM De nombreux bogues liés à l’utilisation de SMACK et de IMA & EVM simultanément sont corrigés dans cette version. Comme les fonctions `security_file_set_fowner()`, `f_setown()` et `__f_setown()` retournaient toujours 0, elles n’ont maintenant plus de code de retour [[_correctif_](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=e0b93eddfe17dcb7d644eb5d6ad02a86fc41a977)]. #### IMA & EVM Les options liées à l’intégrité sont mieux présentées dans le menu _Kconfig_ (correctifs : [[1](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=1ae8f41c23ff6a75c1432faed7281aea5ce7c236)], [[2](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=7ef84e65ecc60289281e8e7e83a8bb6a97d7df5c)]). Un nouveau mode d’utilisation d’IMA a été ajouté : `log`. On l’utilise en précisant `ima_appraise=log` comme option au noyau. Les précédents modes (`off`, `enforce` et `fix`) n’étaient pas suffisants, car ils ne permettaient pas de voir l’ensemble des accès interdits sans les corriger automatiquement (mode `fix`). Le mode `log` laisse donc l’administrateur analyser le système en autorisant tous les accès, mais en écrivant toutes les erreurs dans le journal [[_correctif_](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=2faa6ef3b21152cc05b69a84113625dcee63176f)]. Une [situation de compétition](http://fr.wikipedia.org/wiki/Situation_de_comp%C3%A9tition) potentielle a été corrigée lors d’un accès à un même nœud d’index (_inode_) par deux processus simultanément [[_correctif_](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=f7a859ff7395c0ffe60f9563df5354473e5f9244)]. Une nouvelle variable a été introduite pour permettre de gagner en performance dans certains cas [[_correctif_](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a756024efea259282e65f3a00f512b094e805d76)]. Les violations d’intégrité faites à partir de correspondances mémoire d’un fichier sont maintenant correctement détectées dans tous les cas [[_correctif_](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=1b68bdf9cded82d37e443a20c5ed47bbb084d5dc)]. Correction de divers bogues (correctifs : [[1](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=9a8d289fbcb7dfd1fc74959e9930b406e76b2002)], [[2](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=23c19e2ca736722a9523b64b07cda7efab7b6c57)], [[3](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=27cd1fc3ae5374a4a86662c67033f15ef27b2461)], [[4](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=e7d021e28328e0cc47b21cb9c6d8885326b0c2f5)], [[5](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=1f1009791b2e81f106d4809007720495ba3ed90c)], [[6](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=b151d6b00bbb798c58f2f21305e7d43fa763f34f)], [[7](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=3dcbad52cf18c3c379e96b992d22815439ebbe53)], [[8](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=3034a146820c26fe6da66a45f6340fe87fe0983a)], [[9](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d9a2e5d788d39f7593e2af5e1a365e2b9300679f)], [[10](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=65d98f3be25f7ee96af655f97e153d3d8d3d8ef9)], [[11](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=f68c05f4d2d4e19c40f4ac1e769cc0a2f9f544a0)], [[12](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=3a8a2eadc4946ce3af39b3447c32532324538f75)], [[13](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=e4a9c5196566bd47ac92f6e5ef7f48412ded7176)], [[14](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=86f2bc024966d962d4d7575468e226e2269d198c)], [[15](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=17f4bad3abc7c09f42987d89ccccab02c03455a9)], [[16](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=b4148db51720a6b25a981ea72185312d4b6634fe)], [[17](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a2d61ed525f3458a913147fd02b1a5cf15e7551b)], [[18](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=31b70f66328e85517b159c786ab31f3fd9a7293c)], [[19](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=be39ffc2fec78ff80d50e4b7970e94a8b1583862)], [[20](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=594081ee7145cc30a3977cb4e218f81213b63dc5)], [[21](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a48fda9de94500a3152a56b723d0a64ae236547c)], [[22](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=3b1deef6b1289a99505858a3b212c5b50adf0c2f)]). #### SELinux SELinux ne tient pas particulièrement compte des espaces de noms (namespaces) lors des vérifications de contrôle d’accès. Mais dans le cadre des espaces de noms réseau, une petite amélioration de la gestion du cache a été faite pour que les interfaces virtuelles soient proprement associées à une interface réelle [[_correctif_](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=cbe0d6e8794f1da6cac1ea3864d2cfaf0bf87c8e)]. Jusqu’à présent, un processus avec les attributs `NO_NEW_PRIVS` ou `NOSUID` ne pouvait pas changer de contexte SELinux. Il le peut désormais, uniquement si le contexte de destination est plus restrictif que le contexte courant [[_correctif_](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=7b0d0b40cd78cadb525df760ee4cac151533c2b5)]. Correction de divers bogues (correctifs : [[1](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a7a91a1928fe69cc98814cb746d5171ae14d757e)], [[2](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=25db6bea1ff5a78ef493eefdcbb9c1d27134e560)], [[3](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=e173fb2646a832b424c80904c306b816760ce477)], [[4](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4093a8443941d7021c7f747474a87a56cf666270)], [[5](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=923190d32de4428afbea5e5773be86bea60a9925)], [[6](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d950f84c1c6658faec2ecbf5b09f7e7191953394)]). #### SMACK Le développeur de SMACK (Casey Schaufler) a toujours refusé de créer un mode permissif ressemblant à ce qui est fait avec SELinux, par peur de se retrouver dans la même situation (les administrateurs exécutant systématiquement `setenforce 0` ou passant la totalité du système en mode permissif, alors qu’une seule application pose problème). Il a donc créé un mode « mise en place » (_Bring‐up access mode_) qui permet d’enregistrer l’ensemble des permissions nécessaires à une application pour son bon fonctionnement. L’objectif étant que ce mode ne sera pas disponible sur les systèmes en production, mais uniquement sur les versions de développement. Les détails de l’utilisation de ce mode sont dans le message du [correctif](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d166c8024d620d654b12834fac354fb4203c6c22). Une étiquette SMACK vide ne causera plus de _kernel panic_ ! [[_correctif_](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=b862e561bad6372872f5bf98d95f4131d265b110)]. Correction de divers bogues (correctifs : [[1](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=fd5c9d230d2ac8a2594dfd15f0cca678fd7a64c7)], [[2](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=da1b63566c469bf3e2b24182114422e16b1aa34c)], [[3](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d83d2c26461d661384676a4eed935d925b0fcc34)], [[4](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=e95ef49b7f8f497bdb529f4cb1fe228e986b3255)], [[5](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d01757904d9deb619e23c9450218829943a46822)], [[6](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=21c7eae21a2100a89cfb8cebaf7b770271f32c6e)]). ### Trousseaux de clés Il n’est plus possible de créer de clés avec comme type un nom commençant par un point [[_correctif_](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=54e2c2c1a9d6cbb270b0999a38545fa9a69bee43)]. Correction de divers bogues (correctifs : [[1](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=8da79b6439f46a2bea71238ab2f0e84e3c16587d)], [[2](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=462919591a1791e76042dc5c1e0148715df59beb)], [[3](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=614d8c39014c185aa0f7254f0a470cc33fc1b284)], [[4](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=c06cfb08b88dfbe13be44a69ae2fdc3a7c902d81)], [[5](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0c903ab64feb0fe83eac9f67a06e2f5b9508de16)], [[6](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=aa9d4437893f7e015ce5b6d6c443a9ba92c8a2e7)], [[7](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=054f6180d8b5602b431b5924976c956e760488b1)], [[8](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0b0a84154eff56913e91df29de5c3a03a0029e38)]). ### Liste non exhaustive des vulnérabilités corrigées Touche principalement KVM et les espaces de noms utilisateur : * [CVE-2014-3610](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3610) [[_correctif_](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=854e8bb1aa06c578c2c9145fa6bfe3680ef63b23)] ; * [CVE-2014-3611](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3611) [[_correctif_](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=2febc839133280d5a5e8e1179c94ea674489dae2)] ; * [CVE-2014-3646](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3646) [[_correctif_](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a642fc305053cc1c6e47e4f4df327895747ab485)] ; * [CVE-2014-3647](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3647) (correctifs : [[1](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d1442d85cc30ea75f7d399474ca738e0bc96f715)] et [[2](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=234f3ce485d54017f15cf5e0699cff4100121601)]) ; * [CVE-2014-7970](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7970) [[_correctif_](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0d0826019e529f21c84687521d03f60cd241ca7d)] ; * [CVE-2014-7975](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7975) (correctifs : [[1](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a1480dcc3c706e309a88884723446f2e84fedd5b)] et [[2](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0ef3a56b1c466629cd0bf482b09c7b0e5a085bb5)]) ; * [CVE-2014-8480](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-8480) [[_correctif_](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=3f6f1480d86bf9fc16c160d803ab1d006e3058d5)] ; * [CVE-2014-8481](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-8481) [[_correctif_](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a430c9166312e1aa3d80bce32374233bdbfeba32)]. ## Systèmes de fichiers ### F2FS Le système de fichiers F2FS gère maintenant les écritures atomiques (où une série d’opérations réussissent ou échouent comme une seule action) via un `ioctl()` spécifique à F2FS. Il a aussi gagné la prise en charge de l’opération FITRIM (_discard_). ### OverlayFS Le système de fichiers OverlayFS (cousin de [UnionFS](http://en.wikipedia.org/wiki/UnionFS)) a été intégré au noyau. Ce n’est pas véritablement un système de fichiers au sens propre, mais il peut être vu comme une surcouche de ceux‐ci. Il faut l’appréhender comme un [système de calques](http://www.blaess.fr/christophe/2014/12/14/le-systeme-overlayfs-de-linux-3-18/) permettant de superposer différentes couches de fichiers. Il est utilisé sur les périphériques amorçables et autres systèmes en mémoires mortes (OpenWRT). Il est très utile pour les machines virtuelles répliquées.> UnionFS (_Union File System_) est un service du système de fichiers de Linux qui permet de fusionner plusieurs points de montage appelés « branches » : c’est une union de montages. L’utilisation habituelle de ce système est de fusionner une partition système en lecture seule avec une partition en écriture permettant d’enregistrer les nouveaux fichiers et fichiers modifiés, le système UnionFS se chargeant de ne présenter que la dernière version de chaque fichier [source : [_Union File System_](http://fr.wikipedia.org/wiki/Union_File_System)]. Voici les liens vers la [documentation dans les sources du noyau](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/overlayfs.txt), le [correctif principal](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=e9be9d5e76e34872f0c37d72e25bc27fe9e2c54c) et tous les [correctifs liés](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/log/?qt=grep&q=overlayfs). ### NFS Le système de fichiers réseau NFS gère maintenant l’opération SEEK de la spécification NFS 4.2 ([encore en cours de développement](http://tools.ietf.org/html/draft-ietf-nfsv4-minorversion2)), permettant l’utilisation des options `SEEK_HOLE` et `SEEK_DATA` de [`lseek(2)`](http://man7.org/linux/man-pages/man2/lseek.2.html). Ces options permettent de se déplacer dans des fichiers contenant des trous ([_sparse files_](http://en.wikipedia.org/wiki/Sparse_file)) (voir [_SEEK_HOLE and SEEK_DATA for sparse files_](https://blogs.oracle.com/bonwick/entry/seek_hole_and_seek_data)). ### Ceph Le composant [Rados chargé de la gestion des périphériques en mode bloc dans le projet Ceph](http://docs.ceph.com/docs/master/rbd/rbd/) gère désormais les requêtes [`discard`](http://lwn.net/Articles/293658/). Pour rappel, ces requêtes permettent d’augmenter les performances et la durée de vie des disques SSD ([TRIM](http://fr.wikipedia.org/wiki/TRIM)). ## Virtualisation ### KVM La [RC1](https://lkml.org/lkml/2014/10/6/189) a introduit plusieurs nouveautés pour les architectures de processeurs prises en charge : - l’architecture des ordinateurs centraux IBM (_mainframes_ s390) se prépare à prendre en charge les grandes pages mémoire pour l’hôte ; - pour les PowerPC, le débogage a été amélioré (à la fois à partir de l’invité, via des registres spécifiques, et à partir de l’hôte via _gdbstub_) ; il y a aussi la prise en charge de la virtualisation pour les processeurs e65000 ; - du côté de chez ARM(64), c’est la mémoire en lecture seule qui fait son apparition ; ceci permet d’émuler un micrologiciel dans [une mémoire Flash de type NOR](http://fr.wikipedia.org/wiki/M%C3%A9moire_flash#NOR) ; - et pour le x86(_64), outre les traditionnelles corrections, on retrouve des améliorations de la virtualisation imbriquée avec une meilleure gestion de celle‐ci pour les processeurs Intel sous Windows, et un début de prise en charge de l’hyperviseur [Jailhouse](https://github.com/siemens/jailhouse) pour les AMD ; le retrait de mémoire à chaud devrait aussi mieux fonctionner, et un bogue assez rare de la gestion du cache a été corrigé. Avec la RC2, est aussi venue [une correction assez grosse](https://lkml.org/lkml/2014/10/24/482) qui corrige un bogue pour la virtualisation imbriquée qui permettait à l’invité imbriqué de crasher l’hôte non imbriqué. ###Xen La [RC1](https://lkml.org/lkml/2014/10/9/235) a apporté les nouveautés suivantes : - ajout de pilotes SCSI para‐virtualisés (PVSCSI) ; - amélioration de la contiguïté mémoire pour la para‐virtualisation ; - prise en charge des gros _initrd_ pour les invités para‐virtualisés ; - adaptation des invités PVH en préparation de Xen 4.5 ; - les pilotes vont pouvoir utiliser les interruptions en _multi‐thread_. # Le bilan en chiffres En ce qui concerne les statistiques du cycle de développement du noyau 3.18, le site _LWN.net_ a publié son traditionnel [article récapitulatif](http://lwn.net/Articles/620827/). En nombre de modifications, on se situe à 11 186, soit environ 1 000 modifications de moins que la version précédente du noyau. Le nombre de contributeurs est, quant à lui, de 1 428. Ce nombre est resté relativement constant sur la dernière année. Le développeur ayant écrit le plus de modifications est H. Hartley Sweeten (237) pour son travail de nettoyage des pilotes [Comedi](http://www.comedi.org). Du côté des développeurs ayant le plus modifié de lignes, on trouve des mainteneurs tels que Greg Kroah‐Hartman, ayant supprimé des pilotes, ou d’autres, comme Martin Peres et Roy Spliet, qui ont modifié des microcodes, ce qui a généré beaucoup de lignes modifiées dans des fichiers d’en‐tête. Ce classement est donc à prendre avec des pincettes. Environ 200 entreprises ont participé à l’élaboration de ce noyau. En tête, on retrouve Intel, qui a effectué 10,9 % des changements que l’on peut trouver dans cette nouvelle version. En deuxième place, Red Hat a contribué 7,6 % des changements. Il est cependant important de noter que les développeurs sans affiliation ont effectué 11 % des modifications, soit juste un peu plus qu’Intel, alors que les personnes non identifiées ont écrit 7,3 % des modifications. On peut donc dire, bien que le noyau soit majoritairement écrit par des employés d’entreprises, que les contributeurs indépendants sont toujours les bienvenus et sont même une majorité ! # Appel à volontaires Cette dépêche est rédigée par plusieurs contributeurs dont voici la répartition : | | Mainteneur | Contributeur(s) ----------------------------- | -------------------------------------------------- | --------------- **La phase de test** | Aucun | [Davy Defaud](//linuxfr.org/users/davy78) **Arch** | [Romain Perier](//linuxfr.org/users/rperier) |[Mali](https://linuxfr.org/users/mali) **Développeurs** | [Romain Perier](//linuxfr.org/users/rperier) | **Pilotes graphiques libres** | [Martin Peres](//linuxfr.org/users/mupuf) | **Réseau** | Aucun | [Timothée Ravier](https://linuxfr.org/users/siosm) [BRULE Herman](//linuxfr.org/users/alpha_one_x86) **Systèmes de fichiers** | Aucun | [Timothée Ravier](https://linuxfr.org/users/siosm) **Sécurité** | [Timothée Ravier](//linuxfr.org/users/siosm) | **Virtualisation** | [Xavier Claude](//linuxfr.org/users/claudex) | **Édition générale** | Aucun | [Martin Peres](//linuxfr.org/users/mupuf), [Mali](//linuxfr.org/users/mali), [M5oul](//linuxfr.org/users/m5oul) et [Davy Defaud](//linuxfr.org/users/davy78) Un peu de vocabulaire : * le mainteneur d’une section de la dépêche est responsable de l’organisation et du contenu de sa partie, il s’engage également à l’être dans le temps jusqu’à ce qu’il accepte de se faire remplacer ; * un contributeur est une personne qui a participé à la rédaction d’une partie d’une section de la dépêche, sans aucune forme d’engagement pour le futur. Malgré cette équipe importante, beaucoup de modifications n’ont pas pu être expliquées par manque de temps et de volontaires.> Nous sommes particulièrement à la recherche de mainteneurs pour les sections _Systèmes de fichiers_ et _Réseau_, les précédents n’ayant pas donné de signes de vie pendant la rédaction des dernières dépêches. Si vous aimez ces dépêches et suivez tout ou partie de l’évolution technique du noyau, veuillez contribuer dans votre domaine d’expertise. C’est un travail important et très gratifiant qui permet aussi de s’améliorer. Il n’est pas nécessaire d’écrire du texte pour aider, simplement lister les _commits_ intéressants dans une section aide déjà les rédacteurs à ne pas passer à côté des nouveautés. Essayons d’augmenter la couverture sur les modifications du noyau !