how to build an os in erlang: a whistle-stop tour of hydros€¦ · outline 1 why build an erlang...

34
How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS Sam Williams University of Kent June 9, 2017 Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOS June 9, 2017 1 / 34

Upload: others

Post on 28-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

How to Build an OS in Erlang:A Whistle-stop Tour of HydrOS

Sam Williams

University of Kent

June 9, 2017

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 1 / 34

Page 2: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Outline

1 Why Build an Erlang OS?

2 Existing Systems and Architectures

3 Uncharted Territory: Ideas for Novel Erlang OS Architectures

4 Building An Erlang OS: Challenges

5 General Lessons Learnt

6 Delving Into HydrOS

7 Demo

8 Acknowledgements

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 2 / 34

Page 3: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Why Build an Erlang OS?

Fault tolerance

Scalability

Native high-level execution environment with universal dataexchange format (even including complex terms like functions).

Machine independent programming environment – run the sameOS and program code on x86, ARM, etc.

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 3 / 34

Page 4: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Erlang Unikernel Hosting Systems

ErlangOnXen

Uses the Ling VM.

Targets paravirtualised Xen deployments (among others).

The most complete Erlang unikernel solution.

4mb deployable image sizes, with sub 250ms boot times.

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 4 / 34

Page 5: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Erlang Unikernel Hosting Systems (Cont.)

Erlang on RumpRun

BEAM on small ‘rump’ kernel.

Generates 6mb images.

Erlang on OSv

Erjang on OSv, a small linux-compatible OS.

Generates ‘fat’ unikernels.

Greater Linux compatibility, at the cost of image deployment size.

ErlOS

BEAM (on MiniOS) on Xen.

Proof of concept. No longer supported.

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 5 / 34

Page 6: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Embedded Erlang Platforms

GRiSP

Erlang on RTEMS (a small real-time OS).

Built as a platform for creating wireless IoT applications.

Targets ARM.

NERVES Project

Elixir/Erlang on a thin Linux layer.

Working to expose kernel functionality within the BEAM.

Erlang Embedded Initiative

erlang-mini packages for embedded devices.

Actor Library for Embedded (ALE).

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 6 / 34

Page 7: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

HydrOS: A General-Purpose Erlang OS

A general purpose operating system for server and desktopsystems.

Focuses on providing fault-tolerance and error recovery fortypically catastrophic OS and hardware events.

Written almost entirely in Erlang – from inter-node messagepassing and drivers, to GUI applications.

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 7 / 34

Page 8: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Open Areas in Erlang OS Design

Uninterpreted Erlang code on bare-metal via HiPE.

One unikernel per process?Unikernels that build and launch other unikernels when processesare spawned?

A tiny co-operative Erlang VM for many-core embedded devices(for example, the Paralella).

Support for platforms with hardware message passing?

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 8 / 34

Page 9: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Building An Erlang OS: Challenges

How will your Erlang code run?

Will it be ‘native’, interpreted, or interpreted within another VM?

Will it be BEAM compatible?

At what level? Instructions, AST, or BEAM code transpiler?

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 9 / 34

Page 10: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Erlang OS System Architectures

Hardware

Erlang Code

Hardware

VM

Erlang Code

Hardware

VM

Erlang Code

Monolithic OS

Hardware

VM

Erlang Code

VM VM VM

Erlang OnMetal

VM OS Multikernel OS Typical ErlangDeployment

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 10 / 34

Page 11: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Erlang OS System Architectures (Cont.)

Hardware

Unikernel Erlang

Hypervisor

VM

Erlang Code

Hardware

Distributed Unikernel Erlang

Hypervisor

Erlang Code

VM VM VM VM

Hardware

MultiunikernelErlang

ErlangCode

VM VM C C

ode

App

C C

ode

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 11 / 34

Page 12: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Language Responsibility Division

How much of the work of the OS will be performed in Erlang? Howmuch will be performed by native code?

Will drivers be written in Erlang?

What about performance critical GUI app code?

Will you expose an Erlang interface to malloc and free, allowingraw buffers?

HydrOS uses a system of layers:

Local kernel layer

Local OS layer

Global OS layer

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 12 / 34

Page 13: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Language Responsibility Division in HydrOS

Global OS Layer

Local OS Layer

Local Kernel

Interrupts BIFs

Inter-ProcessorCommunication

C Code

Erlang Code

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 13 / 34

Page 14: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Foreign Function Interfaces

How will your operating system incorporate native (C, assembly) code,if at all?

How will you load and execute libraries?

If you are using them, how will your native-code drivers interactwith the VM scheduling system? Could they be purely event(interrupt) driven?

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 14 / 34

Page 15: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Reaching a Secure Steady-State

How will your OS boot?

Will you use an existing bootloader likeGRUB/LILO/SYSLINUX?

Will you implement EFI boot?

Once the OS has loaded, how will you ensure its security?

Secure the perimeter, not the interior?

HydrOS style capabilities?

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 15 / 34

Page 16: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

General Lessons Learnt

There is a fault-tolerance–performance spectrum on which yourOS must be placed.

Native-code is fast, but failures are harder to recover from.This trade-off is particularly important for drivers and interrupthandlers.

You may not need SMP support – design your systemsappropriately.

‘This simplifies the implementation greatly and speeds things up.The philosophy is that you need more VMs to achieve truemulti-core parallelism. Hypervisor is the only ‘hardware’ scheduler,Erlang processes are green threads.’- Maxim Kharchenko, ErlangOnXen.

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 16 / 34

Page 17: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Delving Into HydrOS

Erlang OS design, by example.

Architecture

Implementation

Demonstration

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 17 / 34

Page 18: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Multikernel Architecture

HydrOS is built with a multikernel architecture.

Split the machine into multiple independent cores.

Each core gets a VM.

‘Single System Image’ layer unifies environment at Erlang level.

Hardware Cores

Apps

Unik

ern

el

Microkernels

OS Layers

IPC

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 18 / 34

Page 19: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Fault-Tolerance Through Isolation

Failures (even at the hardware level) in one core will not affectother cores.

OS subsystems and drivers are also isolated from one another.

Restartable on demand.

Potential for de-centralisation in the future.

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 19 / 34

Page 20: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Built-In Functions

HydrOS uses a library of BIFs to interact directly with the hardware.

Provides interfaces to CPU functionality.

Enabling and disabling interrupts, for example.

(Roughly) 24 functions, most with very short definitions.

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 20 / 34

Page 21: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Erlang Drivers

HydrOS currently uses Erlang-only drivers.

Sets of communicating processes that provide message-passinginterfaces for hardware interaction.

Can (should?) be spread across multiple nodes in a machine.

IOAPICs used to route interrupts to the correct core.

De-asserts interrupts after message is generated.

May be a problem for level-triggered interrupts.

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 21 / 34

Page 22: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Example HydrOS Driver

InterruptDispatcher

KeyboardHandler

KeyboardListener

KeyboardListener

Node Kernel

Int. 0x21

Int. 0x21

KeyboardEvents

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 22 / 34

Page 23: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

HydrOS Window Management

HydrOS provides a framework for building and organising graphicalterminal applications.

Composable window interfaces.

Necessarily multi-process apps.

Apps can be distributed across different Erlang VMs, but presentas if they are part of a single operating system.

Currently uses raw memory buffers.

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 23 / 34

Page 24: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

A Generic HydrOS WM App

KeyboardDriver Key

Events

AppInput Proc.

... wm_window

WindowBuffer

VGAText

Buffer

RenderCommands

If foregrounded,Draw to Output

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 24 / 34

Page 25: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

HydrOS Console App

AppInput

Server

wm_window

WindowBuffer

RenderCommands

WorkerProcess

Work Requestsand Responses

wm_terminal

StringPrint Requests

Kbd.Input

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 25 / 34

Page 26: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Getting in the MUK: HydrOS Multiunikernels

The HydrOS approach to native code hosting.

Dedicate a single core in the system to acheiving your task.

Run a unikernel program on this core directly, withoutintervention by any other part of the system.

Provide a library for communication with Erlang nodes.

HydrOS MUKs can be created by simply placing a C file in a directoryin the source tree.

The MUK generation system also accommodates more complex buildenvironments.

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 26 / 34

Page 27: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

HydrOS MUKs

Core 1

Micro-kernel

Core 2

Micro-kernel

Core 3

Micro-kernel

Core 4

Micro-kernel

BEAM

OSProcs.

Erlanglibs

BEAM

OSProcs.

Erlanglibs

BEAM

OSProcs.

Erlanglibs

BEAM

OSProcs.

Erlanglibs

Erlang application

Core 5 Core 6

C nodeunikernel

BasicC lib.

Mesg.library

GPUaccl.

renderserver

C nodeunikernel

BasicC lib.

Mesg.library

Net-workcacheserver

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 27 / 34

Page 28: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Orchestrated MUK Apps

Core 1

Core 2

Core 4

Core 3

Core 6

HydrOSNode

Core 5

HydrOSNode

NetworkControl

and WebServer

Unikernel

C UserAccount

DatabaseUnikernel

PrologSocialGraphSearch

Unikernel

FileStorage

Unikernel

OrchestratedUnikernel App

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 28 / 34

Page 29: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Securing BEAMs: HydrOS Capabilities

Create a tree of decreasingly capable processes.

Processes have the same or fewer capabilities than their parents.

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 29 / 34

Page 30: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Capability Mechanics

[{memory, disallow, {addr, 16#1500000, 16#1600000}}]

[{memory, allow, {addr, 16#100000, 16#1600000}}, {memory, disallow, all}]

[{memory, disallow, all}, {memory, allow, {addr, 16#1600000, 16#6400000}}]

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 30 / 34

Page 31: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Trees of Decreasingly Capable Processes

[]

[{ports, allow, [16#60, 16#64]}]

Keyboard Driver

[{ports, allow,

[16#60, 16#64]},

{memory, disallow, all}]

Limited Worker Process

[{memory, disallow, all}, {ports, disallow, all}]

'Sandboxed' Console

Malicious App

[{memory, disallow, all},

{ports, disallow, all}]

[{memory, disallow, all},

{ports, disallow, all},

{memory, allow,

{addr, 16#100000,

16#1500000}]

[{memory, disallow, all},

{ports, disallow, all},

{ports, allow, all}]

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 31 / 34

Page 32: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Demo!

Basic terminal usage.

Window and system management.

Killing and restarting a live HydrOS node.

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 32 / 34

Page 33: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Acknowledgements

Special thanks for help with this presentation:

Simon Thompson, University of Kent.

Maxim Kharchenko, Erlang on Xen.

Neeraj Sharma, Erlang on Rumprun

HydrOS Contributors:

George Bates

James Forward

Anton Thomasson

Thanks also go to the ESPRC for funding the research.

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 33 / 34

Page 34: How to Build an OS in Erlang: A Whistle-stop Tour of HydrOS€¦ · Outline 1 Why Build an Erlang OS? 2 Existing Systems and Architectures 3 Uncharted Territory: Ideas for Novel Erlang

Try it out!

Prebuilt images, sources, and build instructions are available athttp://hydros-project.org.

I can be contacted at secw2 [at] kent [dot] ac [dot] uk.

Sam Williams (University of Kent) How to Build an OS in Erlang:A Whistle-stop Tour of HydrOSJune 9, 2017 34 / 34