Les différents noyaux Linux / Unix sont-ils interchangeables?

14

Puis-je prendre un noyau Linux et l'utiliser avec, disons, FreeBSD et vice versa (noyau FreeBSD dans, disons, un Debian)? Y a-t-il une réponse universelle? Quelles sont les limitations? Quelles sont les obstructions?

RonJohn
la source
5
Non, absolument pas. Un bon exercice serait de l'essayer et de voir comment il se casse. Vous ne pouvez même pas remplacer de manière fiable un noyau Linux par un noyau Linux beaucoup plus ancien. Le remplacement des outils de l'espace utilisateur est cependant faisable (s'il est recompilé).
Kusalananda
3
debian.org/ports/kfreebsd-gnu et debian.org/ports/hurd pourraient vous intéresser
muru
@Kusalananda concernant le remplacement des outils utilisateur, passer de BSD à Linux peut être pénible: certains outils BSD sont assez difficiles à construire sur des systèmes non BSD ... J'ai rencontré au fil des années quelques outils que j'aurais aimé porter , mais il s'est avéré non trivial: - /.
Stephen Kitt
1
@StephenKitt L'inverse est vrai aussi :-) Surtout quand le logiciel fait des suppositions sur la possibilité d'accéder à d' /procautres cloches et sifflets spécifiques à Linux.
Kusalananda
Ce que vous pouvez faire est de prendre un noyau x86_64 (linux) et de l'installer de force sur la distribution i386 32 bits (en supposant un processeur Intel 64 bits et la prise en charge des binaires 32 bits compilés). C'est assez bien connu, mais pas immédiatement évident ...
Radovan Garabík

Réponses:

39

Non, les noyaux de différentes implémentations de systèmes d'exploitation de style 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 les ioctlspé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, des API de niveau utilisateur que le noyau et les bibliothèques exposent (essentiellement, la vue à la couche décrite par POSIX, sans considérant que c'est en fait Posix). Des exemples de cela incluent Debian GNU / kFreeBSD , qui construit un système Debian au-dessus d'un noyau FreeBSD, et Debian GNU / Hurd , qui construit un système Debian au-dessus de 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 l'Intel Binary Compatibility Standard , qui permet aux binaires qui s'y conforment de s'exécuter sur n'importe quel système Unix l'implémentant, 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 sur Linux.

Voir aussi Comment construire un chroot FreeBSD à l'intérieur de Linux .

Stephen Kitt
la source
1
Certaines personnes ont des opinions assez fortes sur l'importance de garder le noyau et les API utilisateur synchronisés :)
tonysdg
4
En effet @tonysdg, et croyez-moi, je sais tout à ce sujet : - /.
Stephen Kitt
@tonysdg J'obtiens une page introuvable sur votre lien. (Sauf si c'est une blague qui me manque?)
mbrig
1
@mbrig: Jusqu'à hier, il était là - voici une version archivée: web.archive.org/web/20171102142621/http://…
tonysdg
@StephenKitt: Ouch :( Désolé !! Mais félicitations majeures pour avoir même du code dans le noyau pour commencer!
tonysdg
4

Certains noyaux ont une compatibilité binaire vous permettant de mélanger des programmes de l'espace utilisateur avec différents ABI (par exemple, freebsd peut fonctionner avec les binaires linux dans une certaine mesure) - cependant, les binaires de base (par exemple le programme init, le chargeur de module, les outils de configuration du pilote de périphérique, la bibliothèque C , les outils nécessaires à la configuration des systèmes de fichiers ...) auront en pratique trop de connaissances sur les interfaces au niveau du noyau pour démarrer un système avec un noyau étranger avec succès.

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 voudrait échouer parce que 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 à configurer le système netbsd pkgsrc sur linux (absolument non trivial, mais pris en charge et possible!).

rackandboneman
la source