Aurae is on a mission to be the most loved and effective way of managing workloads on a node. Our hope is that by bringing a better set of controls to a node, we can unlock brilliant higher order distributed systems in the future.
Aurae deploys a memory-safe 1 runtime daemon, process manager, and PID-1 initialization system to remotely schedule processes, containers, and virtual machines as well as set node configurations (e.g., like networking storage).
Through system proportioning and enterprise workload isolation techniques, the Aurae open-source project can complement higher order schedulers and control planes (such as Kubernetes) as Aurae supports the usage of multi-tenant workloads and enterprise identities all the way down to the socket layer.
STILL IN EARLY DEVELOPMENT!
The Aurae project and API can change without notice.
Do not run the project in production until further notice!
- The Aurae project welcomes contributions of all kinds and sizes.
- Please read the "getting involved" documentation before contributing to the project.
- You do not have to know Rust to join the project.
By joining the project in its early stages, you will help to create a milestone contender for corporate distributed systems and automation that will remain accessible to anyone.
By introducing Aurae cells on top of a Linux kernel the control of each internal runtime process on a given node becomes possible. The auraed runtime maintains ownership of every process by managing everything from PID-1 to nested processes.
Maintainable and predefined .proto-files contribute to the core definition of the distributed systems runtime and the standard library. During the build process, these .proto-files can allow for greater customization possibilities. The TypeScript file format replaces static manifests (like the YAML file format) for direct interactions with a running system.
Auraed | To ensure memory safety, Aurae serves the generic system's runtime daemon ([auraed]). |
AuraeScript | The AuraeScript (a Turing-complete scripting language built on TypeScript) library automatically generates itself from the pre-defined .proto files defined in the Aurae standard library. It also directly embeds Deno source code to provide an SDK and the functionality to attach remote clients for the direct remote communication with Aurae. |
#!/usr/bin/env auraescript
let cells = new runtime.CellServiceClient();
let allocated = await cells.allocate(<runtime.AllocateCellRequest>{
cell: runtime.Cell.fromPartial({
name: "my-cell",
cpus: "2",
}),
});
let started = await cells.start(<runtime.StartExecutableRequest>{
executable: runtime.Executable.fromPartial({
cellName: "my-cell",
command: "sleep 4000",
description: "Sleep for 4000 seconds",
name: "sleep-4000",
}),
});
Authentication | Aurae extends SPIFFE/SPIRE (x509 mTLS)-backed identity, authentication (authn), and authorization (authz) in a distributed system down to the Unix domain socket layer. |
Principle of Least Awareness | A single Aurae instance has no awareness of higher order scheduling mechanisms such as the Kubernetes control plane. |
Runtime Workloads | The Aurae runtime API can manage virtual machines, executables, cells, pods, and other spawned Aurae instances. |
The Aurae Standard Library | The Aurae project exposes its functionality as a gRPC API through the Aurae standard library. The V0 API reference contains the current library definition. |
Footnotes
-
The reliability and effectiveness of the Rust systems language make it an excellent choice for the development of the Aurae project. Learn more about Rust ↩