Un Unikernel è un tipo speciale di sistema operativo della libreria. Un sistema operativo di libreria offre tutte le sue funzionalità come librerie, generalmente collegate al tempo di compilazione dell'applicazione.
La distinzione non è chiara, ma originariamente quando Anil Madhavapeddy coniò il termine Unikernel intendeva una singola applicazione con thread, con tutto ciò che girava nello spazio di un singolo indirizzo, usando un sistema operativo di libreria creato in un linguaggio di alto livello, sicuro dal tipo, in esecuzione su un hypervisor.
Va notato che il progetto IncludeOS non aderisce rigorosamente alla definizione. È scritto in C ++ che non è sicuro per il tipo, supporta più core CPU, thread e boot su hardware bare metal.
Ho sentito Anil che caratterizza IncludeOS come un Unikernel, quindi suppongo che non sia troppo severo al riguardo.
Le motivazioni che scrivono la tua applicazione usando un Unikernel variano, ma per lo più sono footprint (unikernels è piccolo), performance (chiamate di funzione sono più veloci delle chiamate di sistema) e sicurezza.
I vantaggi in termini di sicurezza derivano dalla natura di Unikernels. Gli Unikernel sono costruiti come immutabili. Quindi, se stai costruendo un dispositivo firewall virtuale con un Unikernel, le regole del firewall dovrebbero essere il codice e il firewall hardcoded per eseguire esattamente quel set di regole. Questo a differenza di un kernel monolitico tradizionale in cui tutta la configurazione è dinamica.
Gli Unikernel non sono pensati per essere riconfigurati. Sono destinati a essere sostituiti. Quindi non hanno le caratteristiche per supportare la riconfigurazione che li rende difficili da sfruttare.