Non, les noyaux de différentes implémentations de systèmes d'exploitation de type Unix ne sont pas interchangeables, notamment parce qu'ils présentent tous des interfaces différentes avec le reste du système (espace utilisateur) — leurs appels système (y compris ioctl
spécificités), les différents systèmes de fichiers virtuels qu'ils utilisent...
Ce qui est interchangeable dans une certaine mesure, au niveau source, est la combinaison du noyau et de la bibliothèque C, ou plutôt, les API au niveau utilisateur que le noyau et les bibliothèques exposent (essentiellement, la vue au niveau de la couche décrite par POSIX, sans considérer si c'est l'est en fait POSIX). Par exemple, Debian GNU/kFreeBSD, qui construit un système Debian sur un noyau FreeBSD, et Debian GNU/Hurd, qui construit un système Debian sur le Hurd.
Ce n'est pas tout à fait au niveau de l'interchangeabilité du noyau, mais il y a eu des tentatives de standardiser une interface binaire d'application commune, pour permettre aux binaires d'être utilisés sur divers systèmes sans avoir besoin de recompilation. Un exemple est la norme de compatibilité binaire Intel, qui permet aux binaires qui s'y conforment de s'exécuter sur n'importe quel système Unix qui l'implémente, y compris les anciennes versions de Linux avec la couche iBCS 2. Je l'ai utilisé à la fin des années 90 pour exécuter WordPerfect sous Linux.
Voir aussi Comment construire un chroot FreeBSD sous Linux.
Certains noyaux ont une compatibilité binaire vous permettant de mélanger des programmes d'espace utilisateur avec différents ABI (par exemple, freebsd peut fonctionner avec des binaires Linux dans une certaine mesure) - cependant, les binaires de base (par exemple, le programme init, le chargeur de modules, les outils de configuration des pilotes de périphériques, la bibliothèque C , les outils nécessaires pour configurer les systèmes de fichiers... ) auront en pratique trop besoin de connaître les interfaces au niveau du noyau pour démarrer avec succès un système avec un noyau étranger.
De plus, les systèmes de fichiers devraient être compatibles. De plus, les options de compatibilité binaire devraient être compilées "en dur" dans le noyau - tout ce qui est implémenté en tant que module du noyau échouerait car vous ne pourriez pas exécuter le chargeur de module.
Comme mentionné, les environnements utilisateur ont tendance à être quelque peu portables si vous êtes prêt à recompiler - comme les systèmes debian basés sur freebsd, ou la configuration du système netbsd pkgsrc sur linux (absolument non trivial, mais pris en charge et possible !).