I diversi kernel Linux / Unix sono intercambiabili?


14

Posso prendere un kernel Linux e usarlo con, diciamo, FreeBSD e viceversa (kernel di FreeBSD, diciamo, in un Debian)? C'è una risposta universale? Quali sono i limiti? Quali sono gli ostacoli?


5
No, assolutamente no. Un buon esercizio sarebbe provarlo e vedere come si rompe. Non è nemmeno possibile sostituire in modo affidabile un kernel Linux con un kernel Linux molto più vecchio. La sostituzione degli strumenti di userland è sicuramente fattibile (se ricompilata).
Kusalananda


@Kusalananda per quanto riguarda la sostituzione degli strumenti per l'utente, passare da BSD a Linux può essere doloroso: alcuni strumenti BSD sono piuttosto difficili da costruire su sistemi non BSD ... Negli anni ho incontrato alcuni strumenti che mi sarebbe piaciuto portare , ma si è rivelato non banale: - /.
Stephen Kitt,

1
@StephenKitt È vero anche il contrario :-) Soprattutto quando il software fa ipotesi sulla possibilità di accedere /proco su altri campanelli e fischietti specifici di Linux.
Kusalananda

Quello che puoi fare è prendere un kernel x86_64 (linux) e installarlo forzatamente sulla distribuzione i386 a 32 bit (supponendo una CPU Intel a 64 bit e il supporto per i binari a 32 bit compilati). Questo è abbastanza noto, ma non immediatamente ovvio ...
Radovan Garabík

Risposte:


39

No, i kernel di diverse implementazioni di sistemi operativi in ​​stile Unix non sono intercambiabili, in particolare perché presentano tutti interfacce diverse con il resto del sistema (spazio utente) - le loro chiamate di sistema (compresi i ioctldettagli), i vari file system virtuali che usano. ..

Ciò che è intercambiabile in una certa misura, a livello di sorgente, è la combinazione del kernel e della libreria C, o meglio, delle API a livello utente che il kernel e le librerie espongono (essenzialmente, la vista a livello descritta da POSIX, senza considerando se si tratta effettivamente di POSIX). Esempi di questo includono Debian GNU / kFreeBSD , che costruisce un sistema Debian su un kernel FreeBSD, e Debian GNU / Hurd , che costruisce un sistema Debian su Hurd.

Questo non è abbastanza a livello di intercambiabilità del kernel, ma ci sono stati tentativi di standardizzare un'interfaccia binaria di applicazione comune, per consentire l'uso dei binari su vari sistemi senza necessità di ricompilazione. Un esempio è lo standard di compatibilità binaria Intel , che consente ai binari conformi ad esso di funzionare su qualsiasi sistema Unix che lo implementa, comprese le versioni precedenti di Linux con il livello iBCS 2. L'ho usato alla fine degli anni '90 per eseguire WordPerfect su Linux.

Vedi anche Come creare un chroot di FreeBSD all'interno di Linux .


1
Alcune persone hanno opinioni abbastanza forti su quanto sia importante mantenere sincronizzate le API del kernel e dell'utente :)
tonysdg

4
Effettivamente @tonysdg, e credetemi, so tutto al riguardo : - /.
Stephen Kitt,

@tonysdg Ottengo una pagina non trovata sul tuo link. (A meno che non sia uno scherzo che mi manca?)
mbrig

1
@mbrig: fino a ieri era lì - ecco una versione archiviata: web.archive.org/web/20171102142621/http://…
tonysdg

@StephenKitt: Ahi :( Mi dispiace !! Ma i miei migliori complimenti anche per avere il codice nel kernel per cominciare!
tonysdg

4

Alcuni kernel hanno compatibilità binaria che consente di mescolare programmi di spazio utente con diversi ABI (ad es. Freebsd può lavorare con i binari linux in una certa misura) - tuttavia, i binari principali (ad es. Il programma init, il caricatore di moduli, gli strumenti di configurazione del driver del dispositivo, la libreria C , gli strumenti necessari per configurare i filesystem ...) in pratica avranno troppe informazioni da conoscere sulle interfacce a livello di kernel per avviare correttamente un sistema con un kernel esterno.

Inoltre, i filesystem dovrebbero essere compatibili. Inoltre, le opzioni binarie di compatibilità dovrebbero essere compilate "duramente" nel kernel - qualsiasi cosa implementata come modulo del kernel vorrebbe fallire perché non è possibile eseguire il caricatore del modulo.

Come accennato, gli ambienti utente tendono ad essere in qualche modo portatili se si è disposti a ricompilare - come i sistemi debian basati su freebsd, o impostare il sistema netbsd pkgsrc su Linux (assolutamente non banale, ma supportato e possibile!).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.