···11---
22dimension:16:9
33---
44+55+<style>
66+table, td, th {
77+ border: 1px solid black;
88+}
99+td, th {
1010+ padding: 0.5rem;
1111+}
1212+table {
1313+ border-collapse: collapse;
1414+}
1515+</style>
1616+1717+{#title}
1818+# Our first Unikernels in OCaml — _for fun and profit_!
1919+2020+{pause .intro #punchline-intro up=title}
2121+2222+Hello! In this **interactive presentation** (_a workshop_), we’ll get
2323+started with creating **unikernels** using the wonderful
2424+[OCaml](https://ocaml.org) language.
2525+2626+_A relatively impractical way to get started with OCaml programming_!
2727+2828+---
2929+3030+{pause .plan #plan}
3131+# Plan
3232+3333+- Understanding **What Unikernels Are** {pause up=plan}
3434+ - Understanding **what they solve** {pause}
3535+ - Understanding the approaches offered by OCaml {pause}
3636+3737+3838+- Get familiar with the OCaml toolchain (specifically for building
3939+ OCaml Unikernels) {pause}
4040+ - Build System/Package Manager {pause}
4141+ - Set up a project (and understand its components) {pause}
4242+ - Understanding the Challenges Associated with Unikernel Development {pause}
4343+4444+- **Developing multiple small unikernels** {pause}
4545+4646+{.block}
4747+By the end of this presentation, I hope you’ll have
4848+**successfully built a Unikernel**, and that this will potentially
4949+open your eyes to using **them when appropriate** (in OCaml, obviously).
5050+5151+This presentation was made possible by [the
5252+work](https://robur-coop.github.io/mnet/) of the [Robur
5353+cooperative](https://blog.robur.coop/), and specifically thanks to
5454+[Romain (Dinosaure)](https://github.com/dinosaure)!
5555+5656+{pause up=plan down=unikernel-what}
5757+5858+{#unikernel-what}
5959+# What Unikernels Are
6060+6161+{blockquote} A unikernel is **a single-application VM** image where
6262+the application and **minimal operating system** are compiled into one
6363+optimized binary.
6464+6565+{pause up=unikernel-what #what-regular-vm}
6666+## Regular VM
6767+6868+- **Full Linux Kernel**
6969+- Shell tools
7070+- Package Manager
7171+- A lot of drivers
7272+- Multiple processus
7373+- Multiple users
7474+- **Finally your API process**
7575+7676+{pause up=what-regular-vm #what-unikernel}
7777+## Unikernel
7878+7979+- **Your API**
8080+- Compiled into one **sealed image**
8181+- Boots **directly** as a VM guest (using the _Hypervisor_)
8282+8383+{pause up=what-unikernel #what-container}
8484+### Container VS Unikernels
8585+8686+| Container | Unikernel |
8787+|-------------------------------|--------------------------------------|
8888+| Shares the host Linux kernel | Has its **own** minimal kernel image |
8989+| Lightweight process isolation | Stronger isolation |
9090+| | Even smaller runtime surface |
9191+| Great tooling ecosystem | |
9292+| isolated process | isolated single-purpose mini-OS |
9393+9494+