Linus Torvalds va faire passer le noyau de Linux à une version plus moderne du langage C

Featured

Le noyau Linux est fondé sur l’ancienne norme C89 du langage C. Mais Linus Torvalds aimerait passer à la norme C11, plus moderne, qui date de 2011.

Nous savons tous que Linux est écrit en C. Ce que vous ne savez peut-être pas en revanche, c’est que Linux est écrit dans un dialecte C dépassé depuis longtemps : la version 1989 de la norme du langage C, C89, également connue sous le nom de ANSI X3.159-1989, ou ANSI C. Pour le fondateur de Linux, Linus Torvalds, il est temps pour le noyau de faire passer son langage C officiel à la norme C11, qui date de 2011.

Reste que le C89 bénéficiera toujours d’un support quasi universel. Comme tout compilateur C est rétrocompatible avec les versions antérieures, vous n’aurez aucun problème pour compiler ou exécuter un programme C89. Ainsi, un compilateur conforme à C11 n’aura aucun problème avec le code C89 hérité. Alors, pourquoi s’en préoccuper ? D’autant que la modification apportée n’inclut pas les fonctionnalités utiles qui apparaissent dans les versions plus récentes.

La situation a été portée à l’attention de Linus Torvalds lorsque, pour corriger un problème de sécurité potentiel avec les fonctions primitives d’exécution spéculative de la liste liée du noyau, un autre problème a été révélé dans le patch. En corrigeant ce problème, Linus Torvalds a réalisé qu’en C99, l’itérateur passé aux macros de parcours de liste doit être déclaré dans une portée en dehors de la boucle elle-même.

C99 ou C11 ?

Pour le fondateur du noyau Linux, « la raison pour laquelle ce genre de bug non spéculatif peut se produire est que nous n’avons pas historiquement avec le style C99 « déclarer des variables dans les boucles ». Ainsi, list_for_each_entry() – et toutes les autres – laissent fondamentalement toujours échapper la dernière entrée HEAD de la boucle, simplement parce que nous ne pouvions pas déclarer la variable iterator dans la boucle elle-même ». La réponse ? Passer enfin du C89 à un C standard plus récent qui fait que ce genre de problème ne peut pas se produire.

Ainsi, « le temps était venu d’envisager le passage à la norme C99 – elle a toujours plus de 20 ans, mais elle est au moins assez récente pour permettre les déclarations de variables au niveau du bloc », fait valoir l’informaticien.

Arnd Bergmann, développeur du noyau Linux, convient que c’est faisable. Et d’ajouter qu’il devrait même être possible de passer à la norme C11 de 2011. Etant donné que C99 n’a jamais été très populaire et que C11 a introduit le support standardisé du multithreading et rendu le langage un peu plus sûr, cela semble être une bonne idée.

Un retard à combler

Ce serait également une décision facile à prendre. Le compilateur C minimum du noyau Linux, GCC version 5.1, supporte déjà C11. Cela fonctionne pour Linus Torvalds. « J’aimerais vraiment aller enfin de l’avant sur ce sujet, considérant que cela a été brassé pendant de nombreuses années. »

Puis, après s’être assuré que le nouveau standard C devrait fonctionner sans problème dans le noyau, Linus Torvalds a décidé d’appuyer sur la gâchette. « Essayons juste au début de la fenêtre de fusion 5.18. » Comme la fenêtre de fusion 5.18 est presque là, nous pourrions avoir du code C11 dans le noyau dès le mois de mars.

Ou pas. Pour Jonathan Corbet, développeur du noyau Linux et journaliste, « il faut cependant garder à l’esprit que beaucoup de choses peuvent se passer entre la fenêtre de fusion et la version 5.18. Le passage à une nouvelle version de la norme de langage pourrait révéler un certain nombre de surprises dans des endroits obscurs du noyau ; il n’en faudrait pas beaucoup pour que la modification soit annulée pour le moment. Mais, si tout va bien, le passage au C11 se fera dans la prochaine version du noyau ».

Source : zdnet.com