"Model the world as data. Treat bugs as fatal."
FreedomLang is a small AOT systems language that lowers source through a compact IR to libc/CRT-free native x86-64. Linux emits ELF64 machine-code bytes directly; macOS and Windows emit platform assembly. Jobs are real OS processes with filesystem-visible state.
No VM, JIT, LLVM IR path, or libc/CRT in generated programs. The compiler is readable JavaScript lowering through a compact IR.
Bad tags, bad field access, and impossible states terminate immediately. No exception soup pretending bugs are data.
Missing files, permission failures, and network timeouts are explicit states, not hidden recovery paths.
Linux emits ELF64 machine code directly. macOS emits x86-64 AT&T assembly. Windows emits x86-64 assembly for PE/COFF.
Linux/macOS use fork; Windows uses CreateProcessA. FSABI inbox/outbox paths make job state inspectable.
First-class byte arrays and UTF-8 string conversion. Handle binary protocols naturally.
Native x86-64 without libc. Concurrency as inspectable OS processes.
Generated programs are libc/CRT-free. There is no VM, JIT, or LLVM IR path. Linux writes ELF64 machine code directly, macOS emits AT&T assembly, and Windows emits assembly linked into PE/COFF.
Process-per-job concurrency is heavier than goroutines or async tasks. The point is a smaller story: job state you can inspect on disk, failure boundaries the OS understands, and execution that humans and AI agents can reason about.
These are the backend paths in the current compiler source. There is no bytecode VM: Linux emits x86-64 machine-code bytes directly, while macOS and Windows emit platform assembly for native linkers.
| Target | Code output | Process backend | Concurrency state |
|---|---|---|---|
| Linux x86-64 | Direct ELF64 with raw x86-64 machine code and kernel syscalls. | fork syscall; wait4/waitpid for joins. |
FSABI tree under /tmp/freelang/jobs. |
| macOS x86-64 | AT&T x86-64 assembly linked as Mach-O with -nostdlib. |
Darwin fork syscall; wait4 for joins. |
FSABI tree under /tmp/freelang/jobs. |
| Windows x86-64 | x86-64 assembly linked into PE/COFF without CRT default. | CreateProcessA self re-exec with worker flags; WaitForSingleObject for joins. |
FSABI tree under %TEMP%\freelang\jobs. |
The cost is that process-per-job concurrency is heavier than goroutines or green threads. The benefit is containment and auditability: job boundaries are OS process boundaries, and values cross those boundaries through files you can inspect.
FreedomLang is early, but its core claims are implementation-backed. The table separates what is solid today from surfaces that are still being hardened.
| Domain | Status | What exists now | Honest note |
|---|---|---|---|
| Native compiler pipeline | ✅ covered | Parser, IR lowering, and x86-64 backends live in the repo. | No serious optimizer yet; the compiler is pre-1.0. |
| Node-readable compiler | ✅ covered | The compiler is JavaScript source run with Node.js, not a sealed project-specific compiler binary. | Node.js is still a binary dependency; the claim is about the FreedomLang compiler distribution. |
| Native targets | ✅ covered | Linux ELF64 machine code, macOS Mach-O via AT&T assembly, and Windows PE/COFF via native x86-64 assembly. | Windows is native assembly for the Microsoft ABI, not a VM or transpiler path. |
| Small binaries, no libc/CRT default | 🟡 bounded | Generated programs are libc/CRT-free across the supported backend paths and emit helper code only as needed. | Smaller dependency surface is not a security proof; OS APIs and runtime helpers still matter. |
| Bounds, shape, and fast-fail checks | ✅ covered | Array/object access checks, fatal invalid-state paths, fall, assert, and expect_eq. |
Runtime checking, not static memory safety or formal verification. |
| Custom operators | ✅ covered | Positional, object-shaped, infix, shaped infix, and value-shape operator forms. | The syntax is unusual and will need careful examples and restraint. |
| FSABI concurrency | ✅ covered | Fork blocks, handles, wait, blocking fork sugar, job directories, and inbox/outbox paths. Linux/macOS use fork; Windows uses CreateProcessA. |
Favors explicit process/job semantics over lightweight in-process concurrency. |
| Chaos/world-state modeling | 🟡 hardening | with chaos and chaos tags model external outcomes as explicit data. |
Strongest on macOS today; Linux and Windows parity are still moving. |
| Heap and GC | 🟡 hardening | Heap allocation exists across targets; macOS has the strongest generated GC path today. | No-heap/no-GC mode is an aspiration, not a stable flag yet. |
| AI-agent ergonomics | 🟡 thesis | Small compiler, explicit jobs, behavior tests, and visible failure boundaries. | Promising design direction, not a benchmarked claim. |
FreedomLang is not a direct descendant of one language. It combines older ideas in a small AOT compiler: native-output systems languages, Unix job control, tagged result values, object-shaped calls, and agent-readable implementation practice.
FreedomLang ├─ C / Zig / Go family │ ├─ AOT compilation to native artifacts │ ├─ operational tools as a serious target │ └─ explicit release binaries instead of a VM or JIT ├─ Unix process model and shell job control │ ├─ fork blocks │ ├─ wait points │ └─ filesystem-visible job inbox/outbox state through FSABI ├─ ML / Rust Result / tagged-union thinking │ ├─ external world states represented as explicit values │ └─ recoverable outcomes separated from bugs ├─ Erlang-style fault-boundary intuition │ ├─ jobs as failure boundaries │ └─ fatal invariants handled by containment, not local exceptions ├─ JavaScript/object-record ergonomics │ ├─ object-shaped calls │ └─ field-oriented runtime shapes ├─ Operator-rich languages │ ├─ custom positional and object-shaped operators │ └─ infix and value-shape overloads for domain notation └─ Agent-readable implementation practice ├─ compiler distributed as Node.js-readable JavaScript source ├─ behavior tests as executable claims └─ explicit effects, waits, and fatal paths for debugging
FreedomLang makes a sharp distinction between world conditions (things that can happen) and bugs (things that shouldn't).
A missing file isn't an error—it's a world state you handle explicitly. An out-of-bounds access isn't a world state—it's a bug that terminates execution.
This separation keeps your logic deterministic while acknowledging that the world outside your program is inherently chaotic.
has chaos / with chaos
fall
These examples compile, link, and run on macOS from the current repository.
credits: <f/operators>; op describe {name, role} ( print "user: " + name + " (" + role + ")"; ) describe {role: "admin", name: "alice"}; let result <= ( ( let child_value = 42; child_value >value; => 0; ) )& print result;
credits: <f/net>; let listener = tcp_listen_auto[4] with chaos { _ => -1 }; let port = listener\port; let client = tcp_connect["127.0.0.1", port] with chaos { Refused(_, _) => retry 50 _ => -4 }; let conn = tcp_accept[listener\sock] with chaos { _ => -2 }; let msg = %[1, 2, 3, 4]; let sent = tcp_send[client, msg] with chaos { _ => -5 }; let data = tcp_recv[conn\sock, 4] with chaos { Closed(_) => %[] _ => %[] }; let echoed = tcp_send[conn\sock, data] with chaos { _ => -3 }; let reply = tcp_recv[client, 4] with chaos { Closed(_) => %[] _ => %[] }; tcp_close[client] with chaos { _ => 0 }; tcp_close[conn\sock] with chaos { _ => 0 }; tcp_close[listener\sock] with chaos { _ => 0 }; print sent; print echoed; print _intrinsic_bytes_len[reply];
FreedomLang is aimed at places where hidden failure behavior, hidden dependencies, and hidden concurrency make small tools hard to trust.
If you need a language where you can audit syntax-to-machine-code lowering and filesystem-visible process concurrency, let's talk.