When we published the Dragon SDK, one seam was still borrowed. Your frontend built against a header and an archive and nothing else — but the programs it produced linked the Mica standard library, because the low-level floor every emitted program needs — the heap, the failure road, strings, tasks — lived inside that archive. Your language depended on ours one link line after it stopped needing to. 7.1 finishes the cut.
The runtime is its own package now
The floor is now the Dragon runtime: libmicadragon-rt-<arch>.a, four
deployment flavours, shipped as the package mica-dragon-rt beside the SDK.
The Mica standard library — WriteLn, strings, maps, files, all of it — stays
where it belongs, with the Mica compiler, and no longer appears anywhere in a
foreign program’s link. A program emitted by your compiler links exactly two
things beneath your own code:
gcc -no-pie program.s program.rt.s your-stdlib.o /usr/lib/libmicadragon-rt-<arch>.aThat your-stdlib.o is the interesting part.
Bring your own standard library
What a program can print — what it can do at the surface — is its language’s
decision, not the backend’s. The Dragon runtime deliberately supplies no
user-facing functions, so a frontend brings its own standard library the way
it brings its own grammar. The shipped PL/0 example now does exactly that: its
entire standard library is one printf-shaped line writer, pl0-stdlib.c,
thirty lines beside the seven compiler units, and the emitted code names
pl0_write_line as a plain external symbol.
The other road is even shorter: import from libc directly. The smaller SDK
examples print through wprintf — an external symbol like any other, resolved
by the C library every link already carries — and ship no library file at all.
Both roads are the same mechanism: the unit names a symbol, and whatever
archive or object you line up before the runtime resolves it.
Install it without the compiler
The SDK now installs and works on a machine that has never seen the Mica compiler:
sudo apt install ./mica-dragon-sdk_<version>_<arch>.deb ./mica-dragon-rt_<version>_<arch>.debTwo packages, five files that matter: the engine archive, the runtime archives,
one header. A C frontend builds, emits, links and runs from that pair alone.
The Mica compiler is what you install additionally if you want to write your
frontend in Mica — the dragon import surface travels inside it — and when it
is present, its programs link the very same runtime package. One floor, every
road.
A licence written for toolchains
The split let us say the licensing cleanly, because the three artifacts do three different jobs:
| Package | Licence | In one sentence |
|---|---|---|
mica | Mica Compiler License 1.0 | free for any purpose, commercial work included |
mica-dragon-rt | Mica Runtime License 1.0 — new | free for any purpose; binaries linked against it carry no terms from it; a toolchain you build may ship the unmodified archives |
mica-dragon-sdk | PolyForm Noncommercial 1.0.0 | free for noncommercial use; commercial use by written agreement |
The new runtime licence answers the question every toolchain author asks first: what lands on my users? Nothing. Code from the runtime archives is copied into every binary a Dragon-based compiler produces, so the licence says in plain words that no term follows it there — your users’ programs are theirs, and if you distribute a compiler built on the SDK, you ship the runtime archives with it so your users can link. The commercial conversation is about the SDK — the engine you build your product on — never about what your product’s users run.
Vendored layouts resolve the way you’d expect
A toolchain that vendors its archives — its own standard library, the runtime
beside it — can name them with --stdlib, and the resolution order now honours
that trust all the way down: the compiler’s own directory first, then the
directory of the named archive, then the system install. A vendored runtime is
never silently shadowed by whatever happens to sit under /usr/lib, and every
link says which runtime it chose:
Using standard library '/opt/yourlang/lib/yourlang-stdlib-arm64.a'
Using Dragon runtime '/opt/yourlang/lib/libmicadragon-rt-arm64.a'What did not change
Everything is still static, and a linked binary is still one self-contained file: the machines your programs — or your users’ programs — run on need no package from us at all. The API remains a preview that may change between releases; the install page has the download, the licence text, and the smallest check that it works, and Build a compiler with Mica walks the whole road on the PL/0 example, vendor standard library included.