On parlait de drivers et firmware dans la discussion. Est-ce que ce sont des cas particuliers de "modules" dont tu parles?
Habituellement ce qu'on appelle un module, c'est du code qui peut être chargé dynamiquement dans le kernel, et qui est dans un *.ko (comme les *.sys sous Windows).
Mais en fait un module dont les sources sont dans le kernel peut être compilé en module, intégré au kernel, ou désactivé (c'est dans la configuration).
Il y a des modules qui ne sont pas des drivers de périphériques, mais des parties du kernel : des bases communes à plusieurs drivers, des algos (crypto, protocoles réseau, fonctions du firewall, ...), ...
Les firmwares, c'est habituellement du code exécuté sur un microprocesseur embarqué (dans le CPU, le chipset, un périphérique, ...).
Ce sont des fichiers qui sont dynamiquement chargés par les drivers, et qui sont envoyés au périphérique (qui va les garder dans sa RAM).
Si oui, ça voudrait dire que Fedora n'installe que les firmware et drivers nécessaires pour chaque machine, alors que Ubuntu installe TOUT?
Non, il y a un découpage base/extra qui n'est pas forcément le même, mais il n'y a aucun cas où Fedora filtre à l'installation (le /lib/modules de la partition principale contient un grand nombre de modules).
En revanche, dracut (l'outil de génération d'initrd utilisé par Fedora) permet de générer un initrd spécifique à la machine, dans lequel il n'y aura que les modules nécessaires au boot.
Travail énorme que Microsoft fait déjà?
Oui, pour les drivers qui sont sur Windows Update (donc pas la totalité).
Mais le kernel Windows a une ABI stable, donc un driver n'a pas besoin d'être modifié (ou même recompilé) à chaque version du kernel.
On en revient à l'ABI Kernel linux instable entre les mises à jour. Est-ce qu'il faut comprendre que c'est le coeur du problème autour de Linux et des drivers? Qui oblige à embarquer les drivers avec le kernel? Si c'est confirmé, c'est quand même une sacrée contrainte, difficile à comprendre quand on vient d'un monde Windows.
Ca a aussi des avantages, notamment :
- le kernel peut évoluer plus facilement, en n'ayant pas besoin de versionner chaque changement et de garder d'anciennes APIs
- le kernel peut être plus optimisé, notamment pour l'embarqué : des parties peuvent être désactivées en fonction de la configuration, en simplifiant les structures de données
https://www.kernel.org/doc/Documentation/process/stable-api-nonsense.rstPour Android, Google a developpé KMI (
https://source.android.com/docs/core/architecture/kernel/stable-kmi) pour permettre de séparer d'un côté :
- les mises à jour de sécurité sur le kernel GKI (qui est fourni par Google, et doit être utilisé tel-quel), qui peuvent se mettre à jour sur les branches stable du kernel (par exemple 6.1.x => 6.1.y)
- les modules vendeur compilés par le fabricant (et dont les sources viennent souvent du vendeur du SoC)
Mais c'est avec beaucoup de contraintes : changements de configuration et de compilateur limités, listes de fonctions utilisables réduites (sur lequelles Google doit parfois adapter le code pour garder la compatibilité).