Disons que mon espace utilisateur (paquets) est compilé avec gcc 4.7
et libc6 2.13
(Debian Wheezy)
Puis-je compiler le noyau Linux sous un environnement de développement différent, tel que gcc 6.3
et libc6 2.24
(c'est-à-dire sous Debian Stretch) ?
Je sais que contrairement aux packages, le noyau n'est lié à aucune bibliothèque dynamique. Donc théoriquement, cela ne devrait faire aucune différence quel gcc
et libc
il a été compilé sous.
Est-ce vrai ?
Pourrais-je rencontrer des problèmes lorsque je fais cela ?
Pourrait-il y avoir des incompatibilités causées par différents gcc
version ?
D'autre part, le nouveau gcc
a quelques fonctionnalités intéressantes, une meilleure sécurité. Alors peut-être que le noyau devrait être compilé avec le plus récent gcc
?
Réponse acceptée :
Comme vous l'avez souligné, la bibliothèque C utilisée n'a aucun impact sur le noyau, le noyau n'utilise pas la bibliothèque C. (Il y a un impact indirect, car il est utilisé pour construire des outils que le noyau utilise pendant son processus de construction, mais il est extrêmement peu probable que cela affecte le résultat final.)
Le noyau peut être compilé avec différentes versions de compilateur; selon sa documentation, il n'a besoin que de GCC 3.2 ou version ultérieure. Vous constaterez également que cela peut prendre un certain temps pour que le noyau prenne officiellement en charge les dernières versions de GCC, et plus longtemps encore pour qu'un noyau de distribution l'utilise. Par exemple, le paquet du noyau Debian Linux utilise GCC 6, et a même des paquets dédiés pour fournir la bonne version du compilateur (linux-compiler-gcc-6-x86
sur amd64
et i386
). Il n'y a pas de lien entre le compilateur utilisé pour le noyau et le compilateur utilisé pour l'espace utilisateur (il n'est pas non plus nécessaire d'utiliser le même compilateur pour tout l'espace utilisateur - les anciens programmes construits avec GCC 3 ou même 2 fonctionnent toujours sur les systèmes modernes).
Les nouvelles versions du compilateur fournissent plus de fonctionnalités de sécurité, mais GCC 6 est assez bon pour la plupart sinon toutes les fonctionnalités de sécurité utilisées dans le noyau.