• # Le noyau est moins spécial ou complexe qu'on ne le pense

    Posté par (site web personnel) . En réponse au journal Contribuer au noyau Linux, tu peux le faire!. Évalué à 10 (+10/-0).

    J'utilise GNU/Linux depuis 1999 et, durant toutes ces années, j'ai contribué à beaucoup de logiciels libres (Owncloud, KDE, GNOME, LineageOS...) et travaillé sur plusieurs projets perso (Lollypop, Mobile Power Saver...). Mais un composant m'a toujours fait peur : le noyau Linux. Dans ce journal, je vais montrer comment j'ai fini malgré moi par mettre le nez dedans, et pourquoi, pour du débogage, il n'est pas forcément nécessaire d'être une brute en programmation.

    La noyau Linux est gros et un peu spécifique mais c'est loin d'être si complexe d'y contribuer, il ne faut clairement pas avoir peur d'y mettre son nez dedans. Il y a certainement des projets plus complexes fondamentalement selon la zone qui nous intéresse comme un navigateur web ou un compilateur.

    Une partie de la difficulté du noyau c'est sa compilation, ça reste plus difficile de compiler et tester que la plupart des logiciels mais avec un peu de lecture et de connaissance générique en programmation ça n'est pas réellement un obstacle. Le test peut être plus difficile aussi, mais il y a maintenant beaucoup d'outils efficaces ou la possibilité d'utiliser des machines virtuelles par exemple pour s'en sortir. Je pense que la plupart des programmeurs même non experts du C ou C++ peuvent aborder cela avec un peu de lecture préalable.

    Après niveau code, une bonne partie du noyau sont des pilotes de périphériques et c'est ce qui intéresse la plupart des personnes d'ailleurs. Nombre d'entre eux sont assez simples et se ressemblent ce qui aide à en écrire ou à corriger. Y toucher est relativement facile pour ceux là et ne sont pas plus complexes que beaucoup de code orienté objet qu'on peut croiser.

    Pour les composants plus complexes (type carte graphique) ça peut être effectivement délicat, mais c'est souvent plus le périphérique lui même qui est complexe que le code noyau associé en tant que tel. Toucher aux sous systèmes entiers peut être aussi difficile car notamment le code est générique et couvre des sujets complexes, avec des optimisations et doit gérer des cas d'usage très variés. En général la meilleure approche c'est de se familiarisé par étape, par exemple si on veut toucher à la partie générique du système de fichiers (VFS), il peut être judicieux de d'abord s'attaquer à un système de fichiers simple avant de regarder le code générique qu'il appelle pour comprendre les contextes d'utilisation. Regarder l'historique des changements est aussi utile.

    Par contre je pense que maintenir ces sous systèmes génériques est un grand challenge car il faut prendre en compte cette variété de cas d'usage et en avoir conscience des impacts potentiels de chaque changement ce qui n'est pas trivial du tout.

    En tout cas n'hésitez pas à bidouiller un peu, si vous avez déjà programmé le noyau Linux n'est pas si spécial que ça, il n'a jamais été aussi facile de tester des changements rapidement et sans grandes conséquences. Le code est pour une bonne part pas si complexe qu'on pourrait le croire.