Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

La base de code du noyau Linux compte plus de 3000 sections de commentaires TODO dont certaines datent de plus d'une décennie
De quoi conclure de sa mauvaise qualité ?

Le , par Patrick Ruiz

117PARTAGES

21  6 
Après plus d’un quart de siècle d’existence, le noyau Linux est de plus en plus important dans le monde de la technologie. La dernière parution (il y a 2 ans) de l’état de développement du noyau par la Linux Foundation dresse un tableau des chiffres clés…

Le rapport qui couvrait le développement du noyau Linux jusqu’à la version 4.13 faisait état de ce qu'en dehors du marché des PC où il a du mal à se frayer un chemin, Linux domine presque tous les marchés, y compris le cloud, le mobile, l'embarqué et celui des supercalculateurs. « En 2017, le système d'exploitation Linux exécute 90 % des charges de travail du cloud public, détient 62 % de part sur le marché de l'embarqué et 99 % de part de marché en ce qui concerne les supercalculateurs. Linux gère 82 % des smartphones dans le monde et neuf des dix premiers clouds publics », y était-il indiqué par Jonathan Corbet (développeur Linux et éditeur de LWN.net) et Greg Kroah-Hartman de la fondation Linux.

« Cependant, la croissance soutenue de cet écosystème open source et l'incroyable succès de Linux en général ne serait pas possible sans le développement continu du noyau Linux. De nouvelles versions livrées régulièrement toutes les neuf ou dix semaines fournissent des mises à jour stables aux utilisateurs de Linux, chacune avec de nouvelles fonctionnalités significatives, une prise en charge améliorée des périphériques et des performances améliorées. Le taux de changement dans le noyau est élevé et augmente, avec plus de 12 000 correctifs dans chaque nouvelle version du noyau. Chacune de ces versions contient le travail de plus de 1600 développeurs représentant plus de 200 sociétés », pouvait-on y lire.

En 2018, le dépôt du noyau Linux était rendu à 782 487 commits au total et comptait un peu plus de 19 000 auteurs différents. Le référentiel pour sa part était constitué de 61 725 fichiers soit environ 25 584 633 lignes. Ceci c’était sans compter la documentation, les fichiers de construction Kconfig et autres assistants/utilitaires. En 2018, 49 647 commits ont ajouté 2 229 836 lignes de code et 2 004 759 lignes de code ont été perdues, soit un gain net de seulement 225 077 lignes.

Les chiffres parlent d’eux-mêmes : le noyau Linux c’est du costaud ; c’est même « l’un des plus grands projets logiciels au monde » si l’on se réfère à une affirmation de Greg Kroah-Hartman lors d’une présentation au Festival CoreOS de Berlin en 2016.

Ce qu’il faudra aussi retenir à propos de Linux est qu’à date le projet représente « plus de 3000 sections de commentaires dont certains datent de plus de 10 ans. »

Une section TODO qui date de plus de 10 ans


Que l’on retrouve des sections de commentaires TODO vieilles de plus d’une dizaine d’années (personne n’a revu ces sections pendant cette période) au sein d’une base de code qui continue de faire ses preuves au quotidien peut être interprété comme un signe de qualité. De l’autre côté, le fait pour lesdites sections de ne pas encore avoir été revu soulève des questionnements. En effet, une base de code fonctionnelle n’est pas parfaite ; c’est la raison pour laquelle un développeur fera apparaître une section de commentaire TODO, mais c’est bien là le signe qu’il y a un détail qui coince et qui, sur le long terme, pourrait être à l’origine d’une catastrophe surtout pour ce qui est des systèmes critiques. L’analogie est peut-être mal choisie, mais la situation s’apparente à celle d’un ascenseur laissé des décennies sans surveillance parce qu’il joue encore son rôle et personne n’a remarqué de défaillance.

Source : GitHub

Et vous ?

Qu’en pensez-vous ?
plus de 3000 sections de commentaires TODO : peu ou pas pour un projet comme le noyau Linux ?
Avez-vous vous aussi énormément de TODO dans le code source de vos applications ? Si oui, quelle est votre politique en la matière ?

Voir aussi :

Google découvre des centaines de situations de compétition dans le noyau Linux en se servant de KCSAN, son nouveau détecteur de courses critiques pour le noyau Linux
Un nouveau contrôleur de mémoire pour le noyau Linux promet des économies de mémoire significatives, notamment au niveau de la RAM, pour toutes les plateformes Linux
Personne, ni même Microsoft, ne peut prendre le contrôle à lui tout seul du projet Linux, a déclaré Linus Torvalds
La version 5.3 du noyau Linux est disponible avec la prise en charge des GPU AMD Navi et d'autres nouvelles fonctionnalités
Le noyau Linux 4.19 est disponible : Tour d'horizon des nouveautés qui accompagnent cette version LTS

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de magnatux
Membre du Club https://www.developpez.com
Le 02/01/2020 à 7:42
Étudier la qualité du noyaux sur la base de commentaires et d'analogie d’ascenseur douteuse c'est de mauvaise foi.

Par sa nature open source, le noyaux linux permet à toute personne qui nécessiterait la portion ou la fonctionnalité manquante de concevoir un patch.

Par la suite, la question de savoir s'il est normal que certains TODO n'aient pas été traités depuis 10 ans devrait plutôt être abordée selon l'âge des TODO en fonction de leur importance relative.
Puisqu'il faut le rappeler, c'est une question de priorisation. Je suis convaincu que l'étude des fréquences démontrerait que les commentaires ne concernent pas, pour la vaste majorité, des failles de sécurité qui pourraient mettre en péril l'intégrité d'un système.

Donc oui, il est normal que certaines sections n'ont pas été revues depuis plus de 10 ans.
Je me permets d'ailleurs de rappeler le principe de Pareto, 20% de l'effort, 80% des résultats.
20  3 
Avatar de ok.Idriss
Rédacteur https://www.developpez.com
Le 02/01/2020 à 8:00
C'est drôle de pouvoir émettre des critiques sur un kernel open-source depuis sa création quand on a aucun élément de comparaison avec les autres gros OS historiques et populaires vu qu'eux ne le sont pas open-source...

Après pour ma part je ne considère pas les TODO comme un risque, et si on veux qu'ils soient traités efficacement il faudrait plutôt les associer à des issues qui feraient l'objet d'une priorisation plus contrôlée et pragmatique. C'est peut-être déjà le cas. La lecture du code, à mon sens, ne suffit pas pour émettre un jugement sur le workflow de suivi des tâches.
15  1 
Avatar de Neckara
Inactif https://www.developpez.com
Le 02/01/2020 à 10:44
Code : Sélectionner tout
/* TODO: go buy some coffee next week */
Mais c'est un code d'une qualité pourrie, 20 ans qu'il est dans le code de mon projet.
Faut jeter tout le projet à la poubelle vue sa médiocrité.

Plus sérieusement, le TODO montré ressemble plus à une indication pour les développeurs qui souhaiteraient implémenter une fonctionnalité pour un matériel donné, qu'une réelle tâche à faire pour le noyau.

C'est comme si je définissais une interface/squelette, et que je mettais des TODO pour montrer au développeur qui souhaiterait créer sa propre implémentation, ce qu'il doit faire. C'est au contraire une preuve de la grande qualité du code.
14  0 
Avatar de SimonDecoline
Expert confirmé https://www.developpez.com
Le 02/01/2020 à 10:52
Citation Envoyé par Patrick Ruiz Voir le message
La base de code du noyau Linux compte plus de 3000 sections de commentaires TODO dont certaines datent de plus d’une décennie

De quoi conclure de sa mauvaise qualité ?
Non.
Troll suivant.
14  0 
Avatar de darklinux
Membre éclairé https://www.developpez.com
Le 02/01/2020 à 12:21
J 'espere avoir mal lut , le noyau Linux est l ' un des logiciel le plus complexe qui soit , documenté , expliqué debout en bout et maintenant on en fait , ou plutôt , on ose en faire le reproche ? Sérieusement ?
10  1 
Avatar de Aurelien.Regat-Barrel
Expert éminent sénior https://www.developpez.com
Le 02/01/2020 à 10:27
Tiens c'est marrant, ça fait précisément 1 an que j'ai introduit une macro TODO_BEFORE() dans le cadre de la rédaction de cet article:
https://www.fluentcpp.com/2019/01/01...codebase-2019/

et ce matin je suis en train de fixer les TODO qui pètent pour ce mois-ci

Au bout d'1 an d'utilisation de cette macro c'est un succès : on est passé de 153 TODO dans le code à 45 (et ça continue de descendre)
8  0 
Avatar de emixam16
Membre expérimenté https://www.developpez.com
Le 02/01/2020 à 13:38
Complétement d'accord avec les interventions qui ont été faites ici.

Dans le kernel, on ne trouvera pas de todo du style
Code c : Sélectionner tout
 // TODO: Fix this critical vulnerability

Mais plutot des todos informatifs sur des possibles évolutions du noyau.

Par exemples certains todos indiquent le statut de développement d'une feature, par exemple ici
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 
# Feature name:          kprobes 
#         Kconfig:       HAVE_KPROBES 
#         description:   arch supports live patched kernel probe 
# 
    ----------------------- 
    |         arch |status| 
    ----------------------- 
    |       alpha: | TODO | 
    |         arc: |  ok  | 
    |         arm: |  ok  | 
    |       arm64: |  ok  | 
    |         c6x: | TODO | 
    |        csky: | TODO | 
    |       h8300: | TODO | 
    |     hexagon: | TODO | 
    |        ia64: |  ok  | 
    |        m68k: | TODO | 
    |  microblaze: | TODO | 
    |        mips: |  ok  | 
    |       nds32: | TODO | 
    |       nios2: | TODO | 
    |    openrisc: | TODO | 
    |      parisc: |  ok  | 
    |     powerpc: |  ok  | 
    |       riscv: |  ok  | 
    |        s390: |  ok  | 
    |          sh: |  ok  | 
    |       sparc: |  ok  | 
    |          um: | TODO | 
    |   unicore32: | TODO | 
    |         x86: |  ok  | 
    |      xtensa: | TODO | 
    -----------------------
Dans ce cas on voit clairement que les todos n'indiquent pas un mauvaise qualité de code, bien au contraire.

Dans d'autres cas, les todo sont la pour indiquer des pistes pour faire une amélioration ou une vérification. Mais souvent, si les todos restent c'est généralement que cette fonctionnalité n'a pas été jugée suffisamment importante pour qu'on y accorde trop de temps développeur ou que le développement est parti dans une autre direction mais que cette piste reste cohérente pour un futur à plus ou moins long terme donc le todo n'a pas été supprimé. Là aussi, ça n'indique pas spécialement que le code soit de mauvaise qualité.

Il y a aussi des cas ou todo est juste un nom de variable quelconque, comme ici.

Bref, croire qu'on peut juger la qualité d'un code simplement en comptant les todos est non seulement illusoire mais montre aussi une ignorance de la manière dont fonctionne le développement Linux...
8  0 
Avatar de Ithildine
Membre régulier https://www.developpez.com
Le 13/01/2020 à 12:26
... mais c’est bien là le signe qu’il y a un détail qui coince et qui, sur le long terme, pourrait être à l’origine d’une catastrophe surtout pour ce qui est des systèmes critiques.
Bonjour, je ne réponds que rarement aux article mais je dois bien avouer que lire un truc pareil m'a fait sauter de ma chaise...
Quand je code, il m'arrive très souvent d'avoir plein d'idées pour améliorer les choses, gèrer des cas potentiels, affiner un algorithme, optimiser une structure, faire les choses un peu différement pour gagner en simplicité et/ou en élégance, etc... A chaque fois, il est difficile de faire un choix et les choses sont loin d'être simple : est-ce vraiment nécessaire ? Est-ce vraiment nécessaire maintenant ? Est-ce que cette idée trop imprécise maintenant représente un réel potentiel. Autant de TODO que j'écris systématiquement dans mon code personnel autant que dans mon code professionel mais si dans ce dernier cas, le seuil d'acceptation du TODO est alors bien plus élevé...
Un TODO ne signifie pas forcément que quelque chose manque, sauf dans les premières phases de développement du code, évidement. Je doute que le noyau Linux puisse être considéré en phase initiale de développement alors je ne comprends pas très bien ni le but de cet article ni sa conclusion.
4  0 
Avatar de CaptainDangeax
Membre éprouvé https://www.developpez.com
Le 02/01/2020 à 11:37
Bonjour à tous.
D'après ce que je comprends dans l'exemple donné, c'est un TODO pour initialiser un autre type de carte que celle que le développeur a utilisé initialement. Et là depuis 10 ans, personne n'a eu besoin de ce module avec un nouveau modèle de carte à initialiser. Personnellement, je trouve ça un peu moisi.
Tiens un autre exemple. Il y a des années, j'ai récupéré un lot de PC IBM/Lenovo que j'ai voulu installer dans l'école primaire de mon village. Problème, les chips graphiques c'était du SIS intégré à la carte mère, de sinistre mémoire. Incompatibles avec Windows 7, c'est la raison pour laquelle les PC avaient été donnés. Ils étaient aussi incompatibles avec le driver X11 pour chip Sis. Je n'espérais pas de nouveau développement ni même un debug de la part de l'auteur, donc les machines sont restées dans leur carton. J'ai juste récupéré les mémoires , les processeurs (plus puissants) et les disques pour améliorer un peu l'existant.
J'ai changé de société fin 2006 et la société que j'ai quitté venait de signer un accord avec Fujistu pour le renouvellement complet de l'informatique. Ils ont acheté des minitour Fujistu avec du chipset SIS. J'ai dit à une responsable que je prenais le pari que dans 5 ans, aucune des machines neuves ne serait encore en service. J'y suis repassé 5 ans plus tard, et j'avais raison.
Du chipset SIS, non mais vraiment des baffes se perdent...
Mais je digresse, tout ça pour dire que si le TODO concerne un matériel exotique, obsolète, ou tellement bas de gamme comme dans mes exemples, ça n'a pas vraiment d'importance.
C'est sûr qu'un TODO qui traîne sur une faille de sécurité majeure, c'est plus ennuyeux. Mais l'étude ne fait pas dans le qualitatif, elle se contente de donner un chiffre...
4  1 
Avatar de atha2
Membre éprouvé https://www.developpez.com
Le 02/01/2020 à 16:38
TODO signifie : "à faire" non ? On les utilise pour avoir une vue d'ensembles des taches à faire (via l'IDE).
Donc j'ai tendance à penser que soit les TODO sont "mal" utilisées au sein du noyau (un HOWTO serait plus indiqué dans les exemples présentés ici), soit on est mal^^.
Après je doute que linus torvald se prenne la tête avec ce genre de futilité linguistique.
3  0