Open Collective
Open Collective
Loading

SaberVM

SaberVM is an abstract machine for making code portable, safe, and reliable while staying very small and lightweight.

Contribute


Become a financial contributor.

Financial Contributions

Recurring contribution
Backer

Become a backer for $5.00 per month and support us

Starts at
$5 USD / month
Recurring contribution
Sponsor

Become a sponsor for $100.00 per month and support us

Starts at
$100 USD / month
Custom contribution
Donation
Make a custom one-time or recurring contribution.

SaberVM is all of us

Our contributors 1

Thank you for supporting SaberVM.

About


SaberVM is a computing platform for running code in a portable, safe, reliable, and lightweight way. It takes inspiration from WebAssembly, the BEAM, Uxn, and Cyclone. SaberVM primarily hopes to host Continuation-Passing Style ("CPS")-based functional languages, since LLVM has poor support for this. The intention is to land on (and freeze) a specification of an abstract machine that can be implemented on many platforms and used for AOT compilation into native binaries. This frozen specification should be very minimal due to a Uxn-inspired philosophy of permacomputing. SaberVM uses a stack-based instruction set designed to be very compact for small binaries, which includes annotations for static analysis before executing the bytecode. The static analysis is fast, typechecking stack operations and memory management, in an expressive variation of Rust's borrowchecking inspired by Cyclone's regions. The region system is faster, safer, or more lightweight than other VMs. Objects within regions can be freed (unlike arenas), with safety from runtime checks. Runtime errors result in microreboots like the BEAM, but with a much more lightweight implementation using the CPS-based structure of SaberVM code. Lastly, SaberVM is designed so that deallocation is explicit and pointer arithmetic is impossible, meaning that if a user trusts a SaberVM executable they could compile or execute it without the runtime checks or memory tagging for a more performant experience.

A naive VM is under construction in the linked repository, reflecting the current state of the specification for the purposes of experimentation and design, as well as adoption until better VMs and AOT compilers are made. All the compiletime and runtime memory safety stuff is working great. There's stack and heap allocation of nonuniform sizes for both structs and arrays. I've written a working factorial calculator with it, using a simple concatenative language targeting SaberVM, called Sabercat. I'm also developing a lambda calculus compiler that is much higher level than sabercat, called SaberLC, to prove the ergonomics and viability of SaberVM as a target for traditional CPS-based compiler techniques, in a described almost entirely by the wonderful paper "From System F to Typed Assembly Language". SaberVM regions change very little (by design) and the stack-based ISA makes things even easier. Both projects are on my GitHub.

What I really need is funding and contributors: as sole developer with a day job, progress is still unacceptably slow. My job gives me flexible hours, but I don't make nearly enough from donations to reduce my hours yet. While I truly believe SaberVM can be a fantastic reliable computing platform, it's very hard to monetize a project like this. I need publicity and corporate sponsorships, ideally, or just a lot more donations. Having a larger team of people working on this would also help a ton!

Our team