# VirtualBox

Oracle VirtualBox (precedentemente noto come Sun VirtualBox, Sun xVM VirtualBox e Innotek VirtualBox) è un software gratuito e open source per l'esecuzione di macchine virtuali (con una versione ridotta distribuita secondo i termini della GNU General Public License) per architettura x86 e x64 che supporta Windows, GNU/Linux e macOS come sistemi operativi host, ed è in grado di eseguire Windows, GNU/Linux, OS/2 Warp, BSD come ad esempio OpenBSD, FreeBSD e infine Solaris e OpenSolaris come sistemi operativi guest.

## Storia

Nel gennaio 2007 è stata distribuita una versione ridotta.
Il 12 febbraio 2008 Sun Microsystems ha acquistato Innotek GmbH, l'azienda tedesca sviluppatrice di VirtualBox.
Il 27 gennaio 2010 è stata perfezionata l'acquisizione di Sun da parte di Oracle Corporation.

## Descrizione

Con VirtualBox l'utente può configurare, creare e usare più sistemi operativi detti "ospiti" o "guest", nel proprio PC usando un solo sistema operativo (host), nelle cosiddette "macchine virtuali". Ciascuna macchina virtuale può essere configurata in modo indipendente, scegliendo quale hardware e periferiche configurare. È anche possibile scegliere quanti dei core del processore dell'host allocare al funzionamento di ciascuna macchina virtuale, la porzione di memoria RAM presente nel sistema host, quali cartelle condividere tra l'host e la macchina virtuale (installando il pacchetto proprietario VirtualBox Extensions) e altro.
Ciascuna macchina virtuale può essere avviata, fermata o chiusa in modo indipendente. Un'intera applicazione virtuale e il suo stato al momento dello spegnimento può essere esportata (salvata) su file. Un file di macchina virtuale può essere caricato ed eseguito in altre macchine host anche se hanno sistemi operativi differenti da quello dove è stata creata.
VirtualBox supporta la soluzione per la virtualizzazione hardware di Intel VT-x e la soluzione di AMD, AMD-V. Ovvero, tenta di eseguire quanto più codice guest possibile in maniera nativa (vale a dire sul processore host). Questo va bene per il codice in modalità utente che funziona nel "ring 3" (nel contesto dell'architettura ring di Intel). Tuttavia, il codice "ring 0" del sistema guest, che contiene di solito decine di istruzioni privilegiate, dovrà essere gestito in modo particolare. VirtualBox usa un approccio abbastanza inconsueto per risolvere il problema: convince il sistema operativo guest ad eseguire il codice ring 0 nel "ring 1", normalmente non utilizzato sull'architettura Intel.
Se dovessero sorgere problemi di compatibilità, VirtualBox dispone di un ricompilatore dinamico, come altri software di virtualizzazione, per codice reale o protetto. Il ricompilatore di VirtualBox si basa su QEMU. Inoltre, VirtualBox disassembla e, in alcuni casi, aggiunge delle patch al codice guest per evitare ricompilazioni future, dal momento che sono abbastanza onerose. In questo modo, sia il codice a ring 3 che quello a ring 0 può essere eseguito in maniera nativa nella maggior parte delle occasioni e con questa combinazione di ricompilazione tradizionale e patch per il codice VirtualBox raggiunge una velocità simile a quella di VMware Workstation.

### Dischi virtuali

Per la creazione, lettura e scrittura di device virtuali il programma supporta i formati:
* VDI: formato nativo di VirtualBox, dove il disco è rappresentato da un file con suffisso .vdi;
* VMDK: formato di tipo open source usato anche da VMWare, dove il disco può essere rappresentato da uno o più file differenti con suffisso .vmdk;
* VHD: formato usato da Windows VirtualPC e HyperV di Microsoft, nativo per dischi virtuali sin da Windows 7 e Windows Server 2008 R2, dove il disco è rappresentato da un solo file con suffisso .vhd;

### Hardware supportato

VirtualBox emula i seguenti componenti hardware:
* Gli hard disk vengono emulati con uno speciale formato contenitore chiamato "Virtual Disk Images" (file VDI), che è, al momento, incompatibile con i formati utilizzati dalle altre soluzioni di virtualizzazione. Sono comunque supportati i file VMDK (VMware ed altri) e VHD (Microsoft). Inoltre, VirtualBox consente di collegarsi a supporti iSCSI e di poterli utilizzare come dischi virtuali.
* Come scheda grafica, per impostazione predefinita VirtualBox fornisce una periferica VESA con 12 MB di RAM configurabili. Un driver video speciale viene fornito dalle Guest Additions (per sistemi guest Windows, GNU/Linux e Solaris): questo driver conferisce maggiore performance e la possibilità di regolare la risoluzione del sistema guest quando la finestra della macchina virtuale viene ridimensionata. Dalla versione 2.1.0 è inoltre possibile eseguire applicazioni che utilizzano le librerie OpenGL sulla macchina client sfruttando direttamente la scheda video del computer host ad eccezione di Windows 98, 98SE ed Me.
Come schede di rete Ethernet, VirtualBox fornisce le seguenti NIC:
* AMD PCnet PCI II (Am79C970A);
* AMD PCnet-Fast III (Am79C973) (default);
* Intel PRO/1000 MT Desktop (82540EM);
* Intel PRO/1000 T Server (82543GC);
* Intel PRO/1000 MT Server (82545EM).
* Rete paravirtualizzata (virtio-net).
Come schede audio, VirtualBox mette a disposizione le schede:
* Intel ICH AC'97;
* Intel HD Audio;
* SoundBlaster 16.
Per quanto concerne le USB, installando il pacchetto proprietario di estensioni per VirtualBox, viene emulato un controller USB, così che qualunque periferica USB collegata al sistema host possa essere vista dal guest. Se VirtualBox svolge il ruolo di server RDP, può anche utilizzare periferiche USB connesse al client RDP remoto come se fossero connesse all'host.