SlideShare a Scribd company logo
Oscon 2016
System software goes weird
Justin Cormack
Justin Cormack
Cambridge, UK based developer at Docker @justincormack
 
2
Co-author of Docker in the Trenches: Successful Production Deployment
3
Hi I am Justin,
I was a C
programmer
5
Systems Software
TCP scheduling
UDP threading
SCSI filesystems
virtualisation
the Cathedral and
the Teahouse
9
Currently Linux has over 25 million lines of code...
... and Windows has 50 million.
10
25 million lines
of C code
do one thing really well
small enough and no smaller
Microservices
“
“
13
Github repositories...
14
15
where are the
microservices and
libraries for system
software?
Let’s write system
software for a
microservice world
Snabb: 10 gigabit
ethernet scripting
in Lua
19
Why networking?
•  10Gb networking has shown the limitations of context switching from
kernel
•  Now 40Gb and 100Gb in servers is becoming standard
•  10Gb line rate is 67.2 ns per packet (smallest packets)
•  A cache miss takes 32 ns
•  A system call takes around 40 ns (audit disabled)
•  When the going gets weird...
20
Hardware now presents higher level interfaces
•  Ring buffers
•  Multiple rings (per CPU, virtual CPU or process) so no locking needed
•  Virtual functions (SR-IOV) so hardware not shared between applications
•  Higher level interfaces in firmware eg NVMe
•  More standardisation, single interface for ranges of hardware eg 10Gb-
100Gb ethernet
•  Open specifications and data sheets
21
Makes it realistic to write drivers in a language that has:
•  Direct access to memory
•  Enough performance that modern hardware eg 10Gb+ is realistic
•  Avoid memory allocation in inner loops to avoid GC
•  Ability to write some code in assembly eg AVX/SSE for checksums as
compilers generally do not do a good job
•  Access to low level performance debugging tools
22
foreign function interfaces (ffi)
•  Simple interface to C ABI
•  Where you still have some C code
•  Or to interface with system calls
•  Go, Lua, Ocaml, Rust all have really easy ffi
•  Makes interop really trivial
23
Pretty much declare your C header then use the C code directly
ffi.cdef "int open(const char *pathname, int flags);"
function open(path, flags) return C.open(path, flags) end
01.
02.
24
LuaJIT
•  Very high performance JIT compiled implementation of Lua
•  Zero cost FFI interface to C code or system calls
•  Terminates all traffic at Cloudflare for DDoS protection
•  Transitioning from an amazing single person project to a community
project
25
Snabb
•  Toolkit for building packet processing applications
•  tunnelling
•  filtering
•  routing
•  DDoS protection
26
pflua
•  Fastest implementation of same pf language used by Linux, tcpdump
•  LuaJIT trace compilation results in machine code that reflects the actual
traffic that your application sees
•  Pflua takes advantage of LuaJIT's register allocator and excellent
optimizing compiler, whereas e.g. the Linux kernel JIT has a limited
optimizer
•  Optimises bounds checks by hoisting out of loop
27
function PcapFilter:push ()
local i = assert(self.input.input or self.input.rx, "input port not found")
local o = assert(self.output.output or self.output.tx, "output port not found")
while not link.empty(i) do
local p = link.receive(i)
local spec = self.state_table and conntrack.spec(p.data)
if spec and spec:check(self.state_table) then
link.transmit(o, p)
elseif self.accept_fn(p.data, p.length) then
if spec then spec:track(self.state_table) end
link.transmit(o, p)
else
packet.free(p)
end
end
end
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
28
Ongoing work
•  100Gb ethernet drivers for Intel and Mellanox
•  Multiple processes for single interface
•  Simplification - do not use hardware offload, optimise for worst case
29
MirageOS:
the full stack
Unikernels
•  Full application that contains all its system dependencies
•  Its own TCP stack
•  Its own threading and scheduling, as needed
•  Its own memory allocation
•  Talk to hardware or virtualised hardware via a VM
•  Built as libraries, not trying to remake Linux or Windows style monoliths
31
A security hardened container
•  No large OS attack surface
•  Just what you need, no extra shell or other executables, so small attack
surface
•  Can run inside virtual machine for sandboxing
•  Language guarantees, like type safety and memory safety
•  Can use additional sandboxing techniques: ASLR, NaCl etc
•  Whole system hardening
•  Ideal for embedded systems
32
module Ethif1 = Ethif.Make(Netif)
module Arpv41 = Arpv4.Make(Ethif1)(Clock)(OS.Time)
module Ipv41 = Ipv4.Make(Ethif1)(Arpv41)
module Udp1 = Udp.Make(Ipv41)
module Tcp1 = Tcp.Flow.Make(Ipv41)(OS.Time)(Clock)(Random)
module Tcpip_stack_direct1 = Tcpip_stack_direct.Make(Console_
(Random)(Netif)(Ethif1)(Arpv41)(Ipv41)(Udp1)(Tcp1)
01.
02.
03.
04.
05.
06.
07.
33
Examples of unikernels
•  Mirage (OCaml)
•  HalVM (Haskell)
•  Ling (Erlang)
•  runtime.js (JavaScript)
•  IncludeOS (C++)
34
Go Rust Swift Lua
OCaml JavaScript
Haskell Elixir C++
K Forth Lisp Nim D
What language features are useful?
•  “Zero cost abstractions”– no point having abstractions if you can‘t use
them
•  Related, reliable compiler optimisation.
•  Predicatability.
•  ffi for interfacing with other code.
36
Garbage collection
•  It has long been said that garbage collection is fatal for system software
•  In practise not necessarily true. Do not generate vast emounts of garbage,
especially in main loop
•  Very few things are actually real time; these need special treatment
anyway.
•  OCaml and LuaJIT applications manage fine.
•  Swift and Rust are the other options...
37
The Rust promise
•  Ownership types - can show in the type system that gc is not needed
•  No GC
•  No Runtime required
•  threads without data races
•  As well as zero cost abstractions
38
Systems
programming at
Docker
40
41
Go hack on
systems software!
43
Questions?
•  @justincormack
•  justin.cormack@docker.com
•   docker run -d -P justincormack/oscon2016
 
44

More Related Content

PDF
Docker 1.11 Meetup: Containerd and runc, by Arnaud Porterie and Michael Crosby
PDF
OSCON: Unikernels and Docker: From revolution to evolution
PDF
Unikernels: the rise of the library hypervisor in MirageOS
PDF
Unikernels and docker from revolution to evolution — unikernels and docker ...
PDF
Advanced Docker Developer Workflows on MacOS X and Windows
PDF
Sharding Containers: Make Go Apps Computer-Friendly Again by Andrey Sibiryov
PDF
Production Ready Containers from IBM and Docker
PPTX
Docker Networking : 0 to 60mph slides
Docker 1.11 Meetup: Containerd and runc, by Arnaud Porterie and Michael Crosby
OSCON: Unikernels and Docker: From revolution to evolution
Unikernels: the rise of the library hypervisor in MirageOS
Unikernels and docker from revolution to evolution — unikernels and docker ...
Advanced Docker Developer Workflows on MacOS X and Windows
Sharding Containers: Make Go Apps Computer-Friendly Again by Andrey Sibiryov
Production Ready Containers from IBM and Docker
Docker Networking : 0 to 60mph slides

What's hot (18)

PPTX
The Good, the Bad and the Ugly of Networking for Microservices by Mathew Lodg...
PPTX
Windows Server and Docker - The Internals Behind Bringing Docker and Containe...
PDF
DockerCon EU 2015: Docker Networking Deep Dive
PDF
PaaSTA: Running applications at Yelp
PDF
Container Performance Analysis
PPTX
Introducing LinuxKit
PDF
Unikernels: Rise of the Library Hypervisor
PDF
Docker Orchestration at Production Scale
PDF
Docker Online Meetup #22: Docker Networking
PDF
DockerCon EU 2015: The Latest in Docker Engine
PDF
DockerCon US 2016 - Extending Docker With APIs, Drivers, and Plugins
PPTX
DockerCon US 2016 - Docker Networking deep dive
PDF
What's New in Docker 1.12 (June 20, 2016) by Mike Goelzer & Andrea Luzzardi
PPTX
containerd the universal container runtime
PDF
Getting Deep on Orchestration: APIs, Actors, and Abstractions in a Distribute...
PPTX
Intro to Docker at the 2016 Evans Developer relations conference
PDF
Effective Data Pipelines with Docker & Jenkins - Brian Donaldson
PPTX
DockerCon EU 2015: What's New with Docker Trusted Registry
The Good, the Bad and the Ugly of Networking for Microservices by Mathew Lodg...
Windows Server and Docker - The Internals Behind Bringing Docker and Containe...
DockerCon EU 2015: Docker Networking Deep Dive
PaaSTA: Running applications at Yelp
Container Performance Analysis
Introducing LinuxKit
Unikernels: Rise of the Library Hypervisor
Docker Orchestration at Production Scale
Docker Online Meetup #22: Docker Networking
DockerCon EU 2015: The Latest in Docker Engine
DockerCon US 2016 - Extending Docker With APIs, Drivers, and Plugins
DockerCon US 2016 - Docker Networking deep dive
What's New in Docker 1.12 (June 20, 2016) by Mike Goelzer & Andrea Luzzardi
containerd the universal container runtime
Getting Deep on Orchestration: APIs, Actors, and Abstractions in a Distribute...
Intro to Docker at the 2016 Evans Developer relations conference
Effective Data Pipelines with Docker & Jenkins - Brian Donaldson
DockerCon EU 2015: What's New with Docker Trusted Registry
Ad

Viewers also liked (20)

PDF
OSCON: Better Collaboration through Tooling
PDF
OSCON: Incremental Revolution - What Docker learned from the open-source fire...
PPTX
Open Standards in the Walled Garden
PPT
Kevin Kelly
PPT
Demand Media
PDF
Smaller, Flatter, Smarter
KEY
Kobo: What Do eBook Customers Really, Really Want? (Tools of Change 2011)
PPTX
Social Gold: The Design of FarmVille and Other Social Games (Web2Expo 2010)
PDF
Mobilising the world's Natural History - Open Data + Citizen Science
KEY
(Short version) Building a Mobile, Social, Location-Based Game in 5 Weeks
PPT
Data Science and Smart Systems: Creating the Digital Brain
PPTX
Web 2.0 Expo Speech: Open Leadership
PPTX
Hadoop's Impact on the Future of Data Management | Amr Awadallah
PDF
Locked Out in London (and tweeting about it) - version with my notes
PPTX
Did Social Media Hijack My Communications Strategy
KEY
Kobo: What Do eBook Customers Really, Really Want? (Michael Tamblyn at Tools ...
PDF
The Laws of User Experience: Making it or Breaking It with the UX Factor
PPTX
Securing Application Deployments in CI/CD Environments (Updated slides: http:...
PDF
Forking Successfully - or is a branch better?
PPTX
Advanced Caching Concepts @ Velocity NY 2015
OSCON: Better Collaboration through Tooling
OSCON: Incremental Revolution - What Docker learned from the open-source fire...
Open Standards in the Walled Garden
Kevin Kelly
Demand Media
Smaller, Flatter, Smarter
Kobo: What Do eBook Customers Really, Really Want? (Tools of Change 2011)
Social Gold: The Design of FarmVille and Other Social Games (Web2Expo 2010)
Mobilising the world's Natural History - Open Data + Citizen Science
(Short version) Building a Mobile, Social, Location-Based Game in 5 Weeks
Data Science and Smart Systems: Creating the Digital Brain
Web 2.0 Expo Speech: Open Leadership
Hadoop's Impact on the Future of Data Management | Amr Awadallah
Locked Out in London (and tweeting about it) - version with my notes
Did Social Media Hijack My Communications Strategy
Kobo: What Do eBook Customers Really, Really Want? (Michael Tamblyn at Tools ...
The Laws of User Experience: Making it or Breaking It with the UX Factor
Securing Application Deployments in CI/CD Environments (Updated slides: http:...
Forking Successfully - or is a branch better?
Advanced Caching Concepts @ Velocity NY 2015
Ad

Similar to OSCON: System software goes weird (20)

PPTX
A Science Project: Swift Serial Chat
PDF
Network Stack in Userspace (NUSE)
PDF
Linux rumpkernel - ABC2018 (AsiaBSDCon 2018)
PDF
Docker for Mac and Windows: The Insider's Guide by Justin Cormack
PPT
PDF
Running Applications on the NetBSD Rump Kernel by Justin Cormack
PDF
Ham radio-without-a-radio
PDF
Building Embedded Linux Full Tutorial for ARM
PPTX
Dataplane programming with eBPF: architecture and tools
PDF
Module 4 Embedded Linux
PDF
BPF & Cilium - Turning Linux into a Microservices-aware Operating System
PDF
A Reimplementation of NetBSD Based on a Microkernel by Andrew S. Tanenbaum
PPTX
Noah - Robust and Flexible Operating System Compatibility Architecture - Cont...
PDF
#Include os - From bootloader to REST API with the new C++
PDF
Common technique in Bypassing Stuff in Python.
PPTX
BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...
PDF
Linux Distribution Collaboration …on a Mainframe!
PDF
Ceph in the GRNET cloud stack
PDF
C# on a CHIPs
KEY
A Science Project: Swift Serial Chat
Network Stack in Userspace (NUSE)
Linux rumpkernel - ABC2018 (AsiaBSDCon 2018)
Docker for Mac and Windows: The Insider's Guide by Justin Cormack
Running Applications on the NetBSD Rump Kernel by Justin Cormack
Ham radio-without-a-radio
Building Embedded Linux Full Tutorial for ARM
Dataplane programming with eBPF: architecture and tools
Module 4 Embedded Linux
BPF & Cilium - Turning Linux into a Microservices-aware Operating System
A Reimplementation of NetBSD Based on a Microkernel by Andrew S. Tanenbaum
Noah - Robust and Flexible Operating System Compatibility Architecture - Cont...
#Include os - From bootloader to REST API with the new C++
Common technique in Bypassing Stuff in Python.
BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...
Linux Distribution Collaboration …on a Mainframe!
Ceph in the GRNET cloud stack
C# on a CHIPs

More from Docker, Inc. (20)

PDF
Containerize Your Game Server for the Best Multiplayer Experience
PDF
How to Improve Your Image Builds Using Advance Docker Build
PDF
Build & Deploy Multi-Container Applications to AWS
PDF
Securing Your Containerized Applications with NGINX
PDF
How To Build and Run Node Apps with Docker and Compose
PDF
Hands-on Helm
PDF
Distributed Deep Learning with Docker at Salesforce
PDF
The First 10M Pulls: Building The Official Curl Image for Docker Hub
PDF
Monitoring in a Microservices World
PDF
COVID-19 in Italy: How Docker is Helping the Biggest Italian IT Company Conti...
PDF
Predicting Space Weather with Docker
PDF
Become a Docker Power User With Microsoft Visual Studio Code
PDF
How to Use Mirroring and Caching to Optimize your Container Registry
PDF
Monolithic to Microservices + Docker = SDLC on Steroids!
PDF
Kubernetes at Datadog Scale
PDF
Labels, Labels, Labels
PDF
Using Docker Hub at Scale to Support Micro Focus' Delivery and Deployment Model
PDF
Build & Deploy Multi-Container Applications to AWS
PDF
From Fortran on the Desktop to Kubernetes in the Cloud: A Windows Migration S...
PDF
Developing with Docker for the Arm Architecture
Containerize Your Game Server for the Best Multiplayer Experience
How to Improve Your Image Builds Using Advance Docker Build
Build & Deploy Multi-Container Applications to AWS
Securing Your Containerized Applications with NGINX
How To Build and Run Node Apps with Docker and Compose
Hands-on Helm
Distributed Deep Learning with Docker at Salesforce
The First 10M Pulls: Building The Official Curl Image for Docker Hub
Monitoring in a Microservices World
COVID-19 in Italy: How Docker is Helping the Biggest Italian IT Company Conti...
Predicting Space Weather with Docker
Become a Docker Power User With Microsoft Visual Studio Code
How to Use Mirroring and Caching to Optimize your Container Registry
Monolithic to Microservices + Docker = SDLC on Steroids!
Kubernetes at Datadog Scale
Labels, Labels, Labels
Using Docker Hub at Scale to Support Micro Focus' Delivery and Deployment Model
Build & Deploy Multi-Container Applications to AWS
From Fortran on the Desktop to Kubernetes in the Cloud: A Windows Migration S...
Developing with Docker for the Arm Architecture

Recently uploaded (20)

PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Electronic commerce courselecture one. Pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
NewMind AI Weekly Chronicles - August'25 Week I
sap open course for s4hana steps from ECC to s4
Per capita expenditure prediction using model stacking based on satellite ima...
Diabetes mellitus diagnosis method based random forest with bat algorithm
Programs and apps: productivity, graphics, security and other tools
Agricultural_Statistics_at_a_Glance_2022_0.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”
The Rise and Fall of 3GPP – Time for a Sabbatical?
Understanding_Digital_Forensics_Presentation.pptx
Network Security Unit 5.pdf for BCA BBA.
Electronic commerce courselecture one. Pdf
The AUB Centre for AI in Media Proposal.docx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
MIND Revenue Release Quarter 2 2025 Press Release
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Advanced methodologies resolving dimensionality complications for autism neur...

OSCON: System software goes weird

  • 2. Justin Cormack Cambridge, UK based developer at Docker @justincormack   2
  • 3. Co-author of Docker in the Trenches: Successful Production Deployment 3
  • 4. Hi I am Justin, I was a C programmer
  • 5. 5
  • 7. TCP scheduling UDP threading SCSI filesystems virtualisation
  • 9. 9
  • 10. Currently Linux has over 25 million lines of code... ... and Windows has 50 million. 10
  • 12. do one thing really well small enough and no smaller Microservices “ “
  • 13. 13
  • 15. 15
  • 16. where are the microservices and libraries for system software?
  • 17. Let’s write system software for a microservice world
  • 18. Snabb: 10 gigabit ethernet scripting in Lua
  • 19. 19
  • 20. Why networking? •  10Gb networking has shown the limitations of context switching from kernel •  Now 40Gb and 100Gb in servers is becoming standard •  10Gb line rate is 67.2 ns per packet (smallest packets) •  A cache miss takes 32 ns •  A system call takes around 40 ns (audit disabled) •  When the going gets weird... 20
  • 21. Hardware now presents higher level interfaces •  Ring buffers •  Multiple rings (per CPU, virtual CPU or process) so no locking needed •  Virtual functions (SR-IOV) so hardware not shared between applications •  Higher level interfaces in firmware eg NVMe •  More standardisation, single interface for ranges of hardware eg 10Gb- 100Gb ethernet •  Open specifications and data sheets 21
  • 22. Makes it realistic to write drivers in a language that has: •  Direct access to memory •  Enough performance that modern hardware eg 10Gb+ is realistic •  Avoid memory allocation in inner loops to avoid GC •  Ability to write some code in assembly eg AVX/SSE for checksums as compilers generally do not do a good job •  Access to low level performance debugging tools 22
  • 23. foreign function interfaces (ffi) •  Simple interface to C ABI •  Where you still have some C code •  Or to interface with system calls •  Go, Lua, Ocaml, Rust all have really easy ffi •  Makes interop really trivial 23
  • 24. Pretty much declare your C header then use the C code directly ffi.cdef "int open(const char *pathname, int flags);" function open(path, flags) return C.open(path, flags) end 01. 02. 24
  • 25. LuaJIT •  Very high performance JIT compiled implementation of Lua •  Zero cost FFI interface to C code or system calls •  Terminates all traffic at Cloudflare for DDoS protection •  Transitioning from an amazing single person project to a community project 25
  • 26. Snabb •  Toolkit for building packet processing applications •  tunnelling •  filtering •  routing •  DDoS protection 26
  • 27. pflua •  Fastest implementation of same pf language used by Linux, tcpdump •  LuaJIT trace compilation results in machine code that reflects the actual traffic that your application sees •  Pflua takes advantage of LuaJIT's register allocator and excellent optimizing compiler, whereas e.g. the Linux kernel JIT has a limited optimizer •  Optimises bounds checks by hoisting out of loop 27
  • 28. function PcapFilter:push () local i = assert(self.input.input or self.input.rx, "input port not found") local o = assert(self.output.output or self.output.tx, "output port not found") while not link.empty(i) do local p = link.receive(i) local spec = self.state_table and conntrack.spec(p.data) if spec and spec:check(self.state_table) then link.transmit(o, p) elseif self.accept_fn(p.data, p.length) then if spec then spec:track(self.state_table) end link.transmit(o, p) else packet.free(p) end end end 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 16. 28
  • 29. Ongoing work •  100Gb ethernet drivers for Intel and Mellanox •  Multiple processes for single interface •  Simplification - do not use hardware offload, optimise for worst case 29
  • 31. Unikernels •  Full application that contains all its system dependencies •  Its own TCP stack •  Its own threading and scheduling, as needed •  Its own memory allocation •  Talk to hardware or virtualised hardware via a VM •  Built as libraries, not trying to remake Linux or Windows style monoliths 31
  • 32. A security hardened container •  No large OS attack surface •  Just what you need, no extra shell or other executables, so small attack surface •  Can run inside virtual machine for sandboxing •  Language guarantees, like type safety and memory safety •  Can use additional sandboxing techniques: ASLR, NaCl etc •  Whole system hardening •  Ideal for embedded systems 32
  • 33. module Ethif1 = Ethif.Make(Netif) module Arpv41 = Arpv4.Make(Ethif1)(Clock)(OS.Time) module Ipv41 = Ipv4.Make(Ethif1)(Arpv41) module Udp1 = Udp.Make(Ipv41) module Tcp1 = Tcp.Flow.Make(Ipv41)(OS.Time)(Clock)(Random) module Tcpip_stack_direct1 = Tcpip_stack_direct.Make(Console_ (Random)(Netif)(Ethif1)(Arpv41)(Ipv41)(Udp1)(Tcp1) 01. 02. 03. 04. 05. 06. 07. 33
  • 34. Examples of unikernels •  Mirage (OCaml) •  HalVM (Haskell) •  Ling (Erlang) •  runtime.js (JavaScript) •  IncludeOS (C++) 34
  • 35. Go Rust Swift Lua OCaml JavaScript Haskell Elixir C++ K Forth Lisp Nim D
  • 36. What language features are useful? •  “Zero cost abstractions”– no point having abstractions if you can‘t use them •  Related, reliable compiler optimisation. •  Predicatability. •  ffi for interfacing with other code. 36
  • 37. Garbage collection •  It has long been said that garbage collection is fatal for system software •  In practise not necessarily true. Do not generate vast emounts of garbage, especially in main loop •  Very few things are actually real time; these need special treatment anyway. •  OCaml and LuaJIT applications manage fine. •  Swift and Rust are the other options... 37
  • 38. The Rust promise •  Ownership types - can show in the type system that gc is not needed •  No GC •  No Runtime required •  threads without data races •  As well as zero cost abstractions 38
  • 40. 40
  • 41. 41
  • 42. Go hack on systems software!
  • 43. 43