poniamo di avere una macchina A, se io riesco a creare un servizio B diverso da A ma posso usare B al posto di A allora B si chiama macchina virtuale
La def di virtuale dipende dallo scopo
per essere una macchina virtuale deve parlare lo stesso linguaggio della macchina reale
La jwm e la wm di python non centrano niente con questa def di wm

Vantaggi:
- consentono di far coesistere so differenti (es progettare app per telefoni) Svantaggi:
- soluzione piu lenta di una reale (le istruzioni hw di virtualizzazione)
- difficile condividere risorse
ABI vs ISA

imma dx: virtualizzazione di sistema immagine a sx: virtualizzazione a liv di processo

Esempi di VM Quemu e' una piattaforma di transimulation Qemu: PMV o SVM
- cross emulation platform
- dynamic translation
Qemu + KVM: SVM
- usa le unita di io virtuali QEMU
- usa le istruzioni per virtualizzazione: intel VT-x e AMD SVM (velocita' praticamente uguali)
quemu non virtualizza ma traduce. Taduce brani di codice per un processore in brani per un altro processore (non traduce tutto il codice ma pezzi che poi salva in cache)
Velocita' 10-15 volte piu lento
quando si avvia un installazione del so viene avviato un piccolo linux (se devo installare linux)che serve solo per l'installazione
Namespace
I namespace isolano le risorse in modo che i processi posano vedere la propria versione del sistema. Ogni namespace isola un tipo di risorse. Es:
- PID namespace → separate process trees
- NET namespace → separate network interfaces and routing
- MNT namespace → separate filesystem mount points
- UTS namespace → separate hostname
- IPC namespace → separate shared memory/message queues
- USER namespace → separate user IDs
System call specifiche
- clone: crea un nuovo processo, con opportune flag vengono creati nuovi namespace e il processo creato fara parte di questi namespace (e.g. CLONE_NEWNET, CLONE_NEWPID…)
- Setns: connette il processo chiamante a namespace esistenti
- Unshare: muove il processo chiamante in un nuovo namespace