Le bon code selon Linus Torvalds
mar, 03/11/2015 - 13:51
Le code du noyau Linux 4.3 vient d'être validé. Une validation précédée par un échange au langage fleuri dont Linus Torvalds a le secret.
Sur LKLM, la liste de diffusion du noyau Linux, Linus écrit ce qu'il pense d'un morceau de code qui devait venir dans cette nouvelle version du noyau. Un tout petit bout de code qui aurait pu tout à fait passer inaperçu. Seulement voilà, Linus l'a vu, et il ne pouvait pas le laisser passer, dit-il.
Ce code vient apporter une correction à net/ipv6/ip6_output.c:
mtu -= hlen + sizeof(struct frag_hdr);
Voici le nouveau code incriminé :
if (overflow_usub(mtu, hlen + sizeof(struct frag_hdr), &mtu) ||
mtu <= 7)
goto fail_toobig;
C'est juste de la m* et il génère un code de m*, il est laid, et il n'y a aucune raison pour qu'il soit là, dit Linus.
Comme Linus a en plus rencontré un problème de compilation sur ce code, il ajoute que ce code ne devrait pas utiliser des fantaisies qui nécessitent un compilateur intégrant le support de fonctionnalités magiques.
Pour lui tous ceux qui pensent que le code ci-dessus est :
(a) lisible
(b) efficace (même avec le compilateur magique)
(c) particulièrement sûr
sont incompétents et à côté de la plaque, écrit-il.
Pour Linus, le code ci-dessus n'a pour seul raison d'être que d'utiliser overflow_usub et c'est une très mauvaise excuse : it's a f*cking bad excuse for that braindamage.
Voilà pour l'essentiel du pittoresque message de Linus, qu'il est intéressant de lire en entier.
Bien sûr, il y a la manière Linus Torvalds, contestable et souvent contestée. Cela a même donné lieu à un fork du noyau récemment. Il y a également le langage qui pourrait être un peu plus châtié.
Mais il y a aussi que Linux est un super noyau, et que cela ne s'obtient pas sans écrire du bon code. Linus propose le sien. 3 lignes en remplacement des 3 lignes de m* :-)
if (mtu < hlen + sizeof(struct frag_hdr) + 8)
goto fail_toobig;
mtu -= hlen + sizeof(struct frag_hdr);
Il faut bien reconnaître, de l'humble avis de votre serviteur, que ce code est beaucoup plus lisible, maintenable et sain.
N'est-ce pas ?