# Rappels & historique

## Rappels sur la virtualisation classique

### Prémices

#### Au départ

Exécuter simultanément plusieurs environnements distinct sur un
mainframe IBM.

#### IBM System/370

* Virtualisation grâce au système CP/CMS ;
* permis par la présence d'une MMU et par l'ajout d'un mode
  *supervisor* au processeur.

### Vocabulaire

* Machine hôte/host machine
* Machine invité/guest machine

#### Virtualisation vs. émulation

* Émulation : simulation logiciel de matériel (potentiellement une architecture différente) : pas d'accès direct au matériel ;
* Virtualisation : accès direct, mais restrint, au matériel.

#### Technologies de virtualisation matérielle

* Intel VT-x/AMD-V/ARM Virtualization Extensions
* partitionne le processeur pour exécuter plusieurs système d'exploitation via le même processeur.


### Comment virtualiser ?

* Full virtualisation : hyperviseurs ;
* Paravirtualisation ;
* Isolateurs/conteneurs ;
* Conteneurs applicatifs.

### Hyperviseurs

![](hyperv.png)

### Hyperviseurs

Contrôlent l'utilisation faite des ressources de la machine hôte par les
machines virtuelles.

#### Type 1

* L'hyperviseur contrôle directement le matériel ;
* Tous les systèmes lancés par la suite passent par l'hyperviseur.

* Microsoft Hyper-V, XenServer, VMware ESX, ...

#### Type 2

* L'hyperviseur s'appuie sur le système d'exploitation déjà lancé pour accéder
  au matériel ;

* Linux KVM, VirtualBox, BHyVe, ...


### Paravirtualisation

#### Caractéristiques

* Nécessite un noyau patché ;
* l'hôte expose une API accessible aux invités ;
* les invités accèdent au matériel via l'API de l'hôte.

#### Exemple

* Xen


## Virtualisation légère

### Conteneur

![](cntnr.png)

### Conteneur

#### Caractéristiques

* Isolation faite par le noyau de l'hôte ;
* le noyau est partagé entre tous les invités ;
* les périphériques sont déjà en place (pas besoin d'en émuler) ;
* l'invité démarre à partir de `/sbin/init`.


### Conteneurs applicatifs

![](cntrapp.png)

### Conteneurs applicatifs

#### Caractéristiques

* Noyau est partagé avec l'hôte ;
* on utilise tout en place : fs, sockets, périphériques ;
* lance directement une application, pas `init`.

#### Versus chroot

* Simple isolation d'une partie du système de fichiers ;
* pas de limitation sur les ressources utilisés ;
* pas d'isolation de l'arbre des processus ;
* implémentations douteuses (GrSecurity !).


## Différentes implémentations

### Points communs

#### Environnement virtualisé

* Arborescence de fichiers séparée ;
* arbre de processus isolé ;
* comptes utilisateurs distincts ;
* pile réseau et nom de machine propre.

### Diversité

#### Unix

* **FreeBSD :** Jails lancées en 1998 ;
* **Solaris :** Zones lancées en 2005 ;

#### GNU/Linux

* **OpenVZ :** 2005, nécessite de patcher son kernel ;
* **Linux Containers (LXC) :** 2008, basé sur les namespaces et les cgroups ;
* **Docker :** 2013, en pleine croissance !

### Et Windows ?

#### Isolation

* Parallels Virtuozzo Containers ;
* Sandboxie.

#### Dérivés

* **Boot2Docker :** Docker dans une VM.
