Status - HyperOS is very new, recommended for early adopters only. You can npm install linux -g
today to get HyperCore on OS X, but we are still working on additional CLI tools that incorporate the rest of the HyperOS components. Have an idea for a use case? You can chat with us in freenode/#dat
or in gitter.
HyperOS is a set of components that make it easy to quickly download and run containerized software on top of version controlled data in a reproducible way without sacrificing performance.
It's made and maintained by the team that works on dat, a dataset version control tool. We build tools to improve scientific research reproducibility and working on ways to make container runtime tools accessible to scientific use cases like sharing and running version controlled code + data pipelines.
HyperOS supports Linux, Mac and soon Windows and is intended to be used primarily as a end-user CLI tools on workstations.
Components
- hyperfs - content-addressable userspace union file system
- hyperlog - merkle DAG that replicates based on scuttlebutt logs and causal linking
- hyperfuse - expose a filesystem over tcp or stdio
- hyperfused - mount a remote hyperfuse drive over tcp or stdio (C daemon)
- hypercore - a distribution of tinycore linux that includes hyperfused
- linux - a node wrapper around the Mac OS (and eventually Windows) hypervisor that can download and run the hypercore linux VM
- mini-container - a minimal container runtime that does very few things
- dat - a dataset version control tool, which will eventually incorporate the above components into its workflows
Technical Features
- runs hypercore, a tiny ramdisk linux VM (~13mb custom tinycore linux)
- can run hypercore in OS hypervisors on OS X and eventually Windows (xhyve, hyper-v)
- can run user supplied OS images inside hypercore (containers, either chroot or runc)
- filesystem in the host is actually a userspace filesystem (hyperfuse) that proxies fs over local network to/from host OS
- hyperfs is a content-addressable union userspace file system build on top of fuse, hyperlog, leveldb and node
- thanks to hyperfs files are deduplicated across images, and images are versioned (git-like)
- can 'lazy boot' images, fetching the files on demand needed to execute users code quickly
- tinycore VM only contains a networking stack and a network fuse daemon (hyperfuse) for mounting data from external hyperfuse
Design Goals
- encourage code reproducibility by making a cross platform container host environment with a content addressable filesystem easy to use
- be container runtime agnostic, e.g. support runc, mini-container and any others depending on the use case
- secure code sandboxing is not a goal of this project, we instead delegate that responsibility to the container runtime
- support mac, linux, and windows without any heavy dependencies (e.g. no kernel extensions or user compilation)
- don't sacrifice performance (e.g. use fast kernel level hypervisors)
- no large dependencies, making it fast to install and run (e.g. no virtualbox)
- unix philosophy: be composable by focusing on one thing: removing software dependency conflict issues