Source on Codeberg (opens in a new tab)

kern 1.2.0

Egress control, descriptor ownership, security hardening

The second minor release2,241 tests435 stdlib modules

Release notes

Strict egress mode

KERN_NET_POLICY=strict with a KERN_NET_ALLOW list means deny-all by default. Every dial, DNS lookup and UDP send to an unlisted destination is refused with a SIEM event. Becomes the default in 1.3.0.

Descriptor ownership (A38)

Every API that hands out a file descriptor now hands out a handle that names the open it came from. A close wakes blocked operations and the last one to finish performs the close; a handle used after close fails even once the number is reused. Eliminates the class of bug where closing a descriptor on one thread lets another thread's I/O land on a different connection.

Protocol-client ownership (A46)

MQTT, gRPC, NATS, SSH and WebSocket clients are now owned records. A close wakes a call blocked on the connection; a call on a closed value fails cleanly.

Shared list safety (A35)

Slot stores are now release-ordered, reader loads acquire, writers take the container lock, and sorts/shuffle/clear are locked.

Cap<Recon>

Port probes and banner grabs need their own capability; Cap<Net> for scanning is deprecated (W0004, E0422 under edition 2027).

UDP/NTP/mDNS/libpq egress

Now go through the allowlist and the SSRF screen; cloud metadata and link-local addresses are refused at default SSRF level.

KERN_NET_ALLOW hardened

No more truncation at 1024 bytes, no port misparse, malformed list refuses all traffic.

macOS VM proxy fix

A guest could redirect published-port traffic to another VM on the same host.

Async fixes

Async file/DNS calls inside routines returned wrong results; multiple multi-worker correctness fixes.

Cloud plane

Rescue mode (UR-102), power_cycle, per-instance events, cloud-init user_data for VMs (UR-108), volume resize in place (UR-110), container hostname best-effort (UR-109).

HTTP client deadline

Total deadline across connect, TLS, writes, reads, redirects and retries (default 120s).

Fuzz

Python parser fuzzers ported to Kern-native.

By the numbers

2,241 tests (1,669 conformance + 85 compat + 487 negative). 435 stdlib modules (310 core + 125 in 10 packages), 4,878 pub fns. 62K-line compiler, 74K C runtime (46,006-line audited TCB). 14 fuzz targets (8 C libFuzzer + 6 Kern-language).