Forward-looking design proposals for things OwnLang does not do yet. The
counterpart to spec/: the spec is normative (what is true today,
pinned by tests); proposals are exploratory (options for tomorrow, no code
commitment). Keeping them apart stops aspirational docs from lying about the
code.
Each proposal is numbered P-NNN and has the same shape:
- Status —
draft/accepted/in progress/done/rejected. - Motivation — the real pain it solves.
- Scope and Non-goals — what it is not (the most important section; the whole project's discipline is refusing the soul-eating version).
- Sketch — enough design to judge feasibility, not a full spec.
- Open questions — what must be decided before building.
When a proposal is built, its behaviour moves into spec/ (normative) and the
proposal is marked done with a pointer.
| # | Title | Status |
|---|---|---|
| P-001 | C# → OwnIR extractor (the WPF leak spike) | in progress (well past v0: WPF001–005 + DI + pool + flow + semantic resolution) |
| P-002 | Verification backend (Boogie/Dafny) | draft |
| P-003 | Lifetime visualization (RustOwl-style) | draft |
| P-004 | WPF / UI lifetime leak profile | in progress (WPF001–005 built) |
| P-005 | IDisposable ownership profile |
in progress (D1/D2 built; D3/D4 via --flow-locals) |
| P-006 | DI lifetime / captive dependency | in progress (DI001–DI005 end-to-end) |
| P-007 | ArrayPool / Span borrow-view | in progress (POOL001–003 built; 004/005 first slices) |
| P-008 | Effects & resources (Own.Effects) |
draft |
| P-009 | No-GC / allocation-free regions | draft |
| P-010 | Richer type disciplines (Own.Types) |
draft |
| P-011 | Editor tooling & syntax highlighting | draft |
| P-012 | Real-world bug corpus & mining | in progress (corpus benchmark + real-world cases, CI-gated) |
| P-013 | Distribution surface (how people run Own.NET) | v0 built (CI/Action + dotnet tool) |
| P-014 | Project-local semantic resolution (kills += false positives) |
in progress (Tier A default-on + Tier B light path --ref-dir; full MSBuild closure deferred) |
| P-015 | Configuration surface (check selection & per-category severity) | draft (stub) |
| P-016 | Deep C# fact extraction (CFG + flow lowering; loops) | in progress (B0a/B0b/B2/A1 via --flow-locals) |
| P-017 | Multi-stack frontends (OwnTS / OwnJVM: OwnJava + OwnKotlin) | draft |
| P-020 | OwnTS React effects profile (Own.React) — the effect-storm angle |
draft |
| P-021 | Async audit pack (Own.Async) |
draft |
For priorities, milestones, the framing, and the design philosophy across all of these, see the strategy hub:
docs/ROADMAP.md. P-004 … P-016 capture ideas raised in design discussion — they are on the record for consideration, drafts, not commitments.
OwnLang today is a sound, tested resource/borrow/lifetime checker for a small
.own DSL that lowers to C# (see spec/). The arc from here:
(1) retro-document and pin behaviour with the spec ✅;
(2) ingest real C# via a narrow Roslyn extractor that emits OwnIR facts in
the spec's vocabulary (P-001) — the first time the tool bites real code;
(3) optionally export proof obligations to a verification backend for the
core soundness theorem (P-002);
(4) surface lifetimes/loans visually (P-003).
The core stays the same checker throughout; everything else produces or consumes
OwnIR facts. We resist the boil-the-ocean versions of each (full C# frontend,
proving all of unsafe, XAML engine) — boredom keeps projects alive.