Programming Unikernels in the Large via Functor Driven Development

05/07/2019
by   Gabriel Radanne, et al.
0

Compiling applications as unikernels allows them to be tailored to diverse execution environments. Dependency on a monolithic operating system is replaced with linkage against libraries that provide specific services. Doing so in practice has revealed a major barrier: managing the configuration matrix across heterogenous execution targets. A realistic unikernel application depends on hundreds of libraries, each of which may place different demands on the different target execution platforms (e.g., cryptographic acceleration). We propose a modular approach to structuring large scale codebases that cleanly separates configuration, application and operating system logic. Our implementation is built on the unikernel framework, using the language's powerful abstraction and metaprogramming facilities. Leveraging modules allows us to build many components independently, with only loose coupling through a set of standardised signatures. Components can be parameterized by other components and composed. Our approach accounts for state, dependency ordering, and error management, and our usage over the years has demonstrated significant efficiency benefits by leveraging compiler features such as global link-time optimisation during the configuration process. We describe our application architecture and experiences via some practical applications of our approach, and discuss how library development in can facilitate adoption in other unikernel frameworks and programming languages.

READ FULL TEXT

page 1

page 2

page 3

page 4

research
03/27/2018

Live Multi-language Development and Runtime Environments

Context: Software development tools should work and behave consistently ...
research
12/15/2021

Next-generation Web Applications with WebAssembly and TruffleWasm

In modern software development, the JavaScript ecosystem of various fram...
research
05/12/2018

Compiler Construction with Basic Programming Languages Constructs and Generalized Interpreting Automata

We have been developing and applying an approach to teach compiler const...
research
05/06/2019

Parsl: Pervasive Parallel Programming in Python

High-level programming languages such as Python are increasingly used to...
research
07/24/2018

Racets: Faceted Execution in Racket

Faceted Execution is a linguistic paradigm for dynamic information-flow ...
research
02/25/2020

MLIR: A Compiler Infrastructure for the End of Moore's Law

This work presents MLIR, a novel approach to building reusable and exten...
research
03/22/2022

Dozer: Migrating Shell Commands to Ansible Modules via Execution Profiling and Synthesis

Software developers frequently use the system shell to perform configura...

Please sign up or login with your details

Forgot password? Click here to reset