Releasing v0.1.9 — FreeBSD Support

· 2 min read
v0.1.9

This is a platform release — no new language features, just making Hew run somewhere it didn’t before.

kqueue I/O poller for FreeBSD and macOS. The runtime’s async I/O was epoll-only, which meant Linux-only. kqueue (BSD’s kernel event notification system, the equivalent of Linux’s epoll) was the prerequisite for everything else in this release. The poller interface is now a trait with epoll and kqueue backends, selected at compile time. macOS was technically using a compatibility shim before — now it uses native kqueue, which is what it should have been doing all along.

Full FreeBSD platform support. The compiler, runtime, stdlib, and test suite all build and pass on FreeBSD. Most of the work was in the linker integration and signal handling, not the language itself. FreeBSD’s ld has slightly different flag semantics than Linux’s, and the runtime’s signal recovery needed FreeBSD-specific siginfo_t field access.

FreeBSD CI and release pipelines. FreeBSD builds now run in CI alongside Linux and macOS. Release artifacts include FreeBSD tarballs. (No package manager integration yet — FreeBSD ports are their own adventure and I haven’t started that conversation.)

Linker unification. Linux and FreeBSD both use ELF, so their linker flags were almost identical — close enough to share, different enough to cause subtle bugs when they didn’t. Consolidated the ELF linker flags into a shared path with platform-specific overrides. Extracted exe_suffix() and signal recovery helpers into shared utilities. Linker detection is now unified across all platforms.

Audit remediation integration and a fix for the wasm runtime’s HewError import path, which had drifted during the LLVM 22 upgrade.

Part 31 covers the kqueue poller and distributed actors.