Lecture Topic: Virtualization

|                   | Windows        | Linux                 |
| ----------------- | -------------- | --------------------- |
| Executable Format | .exe .bat .ps1 | .sh ELF standard .out |
| Library Format    | .dll           | ELF .o .so            |

Executables tend to not be portable, on Linux usually due to differences in the flavor of Linux, and even on windows due to different platform architecture. Interoperability is not guaranteed.

The differences between simulation and emulation
Simulation: getting the result
Emulation: mimicking the behavior

Virtualization: 
Alternative to emulation and simulation: allows access to hardware by generating appropriate machine code

Why Virtualization?
- Access to hardware
- Safety, sandboxed, controlled environment
- Multiple Users

Kinds of VMs

Type 1 virtual machine: manages the VMs directly, with no interaction with a base kernel
Type 2 virtual machine: manages the VMs through interactions with the hardware with a main kernel

Process VM
- One purpose functionality VM
- Java VM as an example

OS VM
- Virtual machine that emulates entire OS/machine functionality

Example VM stack
- VirtualBox VM
- VirtualBox VMM
- Windows
- Hyper-V
- Hardware

| Virtualbox       | Hyper-V        |
| ---------------- | -------------- |
| OS VM, Type 2 VM | VMM, Type 1 VM |

| WSL                                           | Docker                           |
| --------------------------------------------- | -------------------------------- |
| Uses Hyper-V, Reuses system calls if possible | Containers, minimal dependencies |