origin-stdio is an alternative [std
]-like implementation built on [origin
].
At this time, it only works on Linux (x86-64, aarch64, riscv64, and perhaps
even 32-bit x86 and arm), requires Rust nightly, lacks full std
compatibility, and is overall experimental. But it supports threads and stuff.
Quick start:
In an empty directory, on Linux, with Rust nightly, run these commands:
sh
cargo init
cargo add origin_studio
cargo add compiler_builtins --features=mem
echo 'fn main() { println!("cargo:rustc-link-arg=-nostartfiles"); }' > build.rs
sed -i '1s/^/#![no_std]\n#![no_main]\norigin_studio::no_problem!();\n\n/' src/main.rs
cargo run --quiet
This will produce a crate and print "Hello, world!".
Yes, you might say, I could have already done that, with just the first and
last commands. But this version uses origin
to start and stop the program,
and [rustix
] to do the printing.
And beyond that, origin-studio uses origin
to start and stop threads,
[rustix-futex-sync
] and [lock_api
] to do locking for threads,
[rustix-dlmalloc
] to do memory allocation, and [unwinding
] to do stack
unwinding, so it doesn't use libc at all.
Other alternative implementations of std include [steed], [tiny-std] and [veneer].
[mustang] is a crate that uses origin to build a libc implementation that can slide underneath existing std builds, rather than having its own std implementation.
Right now, this is a demo of how to use origin
. If you're interested in
seeing this grow into something specific, or interested in seeing projects
which might be inspired by this, please reach out!