Initial scoping: architecture + Asterisk→Rust port plan
Establish rutster — a memory-safe, API-first, security-first telephony platform; spiritual successor to Asterisk for the WebRTC/microservices era. - README: project framing, design pillars, open decisions - docs/ARCHITECTURE.md: three-plane (control/media/app) model - docs/PORT_PLAN.md: every Asterisk subsystem mapped to a disposition (core / WASM-plugin / service / edge-FFI / dropped / replaced) with rationale Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C2bfD7MkqEdfnMXxXBu456
This commit is contained in:
50
README.md
Normal file
50
README.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# Rutster
|
||||
|
||||
A memory-safe, API-first, security-first telephony platform — a spiritual successor
|
||||
to Asterisk for the WebRTC/microservices era, written in Rust.
|
||||
|
||||
> Not a port of Asterisk. A reimagining that keeps the *power* — era-bridging breadth,
|
||||
> "wire anything to anything," a deep feature library — while dropping the legacy
|
||||
> hardware/dead-protocol half and fixing Asterisk's two chronic wounds:
|
||||
> memory-safety CVEs and toll fraud, at the design level.
|
||||
|
||||
## What it is / isn't
|
||||
|
||||
- **Is:** SIP (TLS-only) + WebRTC signaling, a real-time media plane (transcode / mix /
|
||||
DSP), a programmable call model exposed as a REST/gRPC API + event stream, a
|
||||
WASM-sandboxed plugin runtime, and a library of telephony features delivered as
|
||||
isolated services.
|
||||
- **Isn't:** A TDM/PSTN-hardware PBX. No DAHDI, no Sangoma/Digium cards, no ISDN/SS7,
|
||||
no IAX2/H.323/SCCP/MGCP/Unistim. PSTN reach is via SIP trunks / SBC only.
|
||||
|
||||
## Core design pillars
|
||||
|
||||
1. **Memory-safe by construction** — Rust everywhere on the hot path; fuzzed, sans-IO
|
||||
protocol parsers. Eliminates the buffer-overflow/RCE CVE class.
|
||||
2. **Isolation over in-process modules** — extensions run in a **WASM sandbox**, not as
|
||||
`.so` files in the daemon's address space. One bad plugin can't crash the box or
|
||||
read another tenant's media. (The Asterisk `core show locks` era ends here.)
|
||||
3. **Secure & deny-by-default** — mandatory TLS/SRTP, deny-by-default routing,
|
||||
built-in toll-fraud controls, mTLS gRPC admin (no plaintext AMI), hard multi-tenancy.
|
||||
4. **Three planes, scaled independently** — control / media / app. The media datapath
|
||||
stays tight; business logic is microservices and plugins around it.
|
||||
5. **Observable & declarative** — OpenTelemetry call traces across services;
|
||||
config-as-data, not imperative `.conf` files edited on a box.
|
||||
|
||||
## Layout
|
||||
|
||||
- [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) — the three-plane model and pillars.
|
||||
- [`docs/PORT_PLAN.md`](docs/PORT_PLAN.md) — **the spine**: every Asterisk subsystem mapped
|
||||
to a disposition (core / plugin / service / edge-FFI / dropped) with rationale.
|
||||
|
||||
## Status
|
||||
|
||||
Scoping. No code yet — the port plan defines the crate/service boundaries that the
|
||||
workspace will be scaffolded from next.
|
||||
|
||||
## Open decisions
|
||||
|
||||
- **License** — undecided (Asterisk is GPLv2+commercial; rutster's model is TBD).
|
||||
- **SIP stack** — FFI to pjproject vs. front with an SBC (Kamailio/drachtio) vs. a
|
||||
long-term pure-Rust stack. See port plan §1.
|
||||
- **WASM runtime** — `wasmtime` is the presumptive default (component model).
|
||||
Reference in New Issue
Block a user