Kwker

Kwker compatibility

What each Kwker package is built against and what it needs at run time. Measured on the build host: Ubuntu 24.04, glibc 2.39, GCC 13.3, Rust stable, CPython 3.11, torch 2.14.0+cpu, NumPy 2.4.

Versioning policy for 0.1.x

Kwker is pre-1.0: versions are 0.MINOR.PATCH. A patch release (0.1.0 -> 0.1.1) never breaks a caller; a minor release (0.1.x -> 0.2.0) may, and lists every break under "Breaking" in CHANGELOG.md with the replacement. From 1.0 on, semantic versioning applies to every surface below.

What "never breaks" means within 0.1.x, per surface (checked by ss abi against the committed snapshots in rust/abi/ before every release; ss release refuses a break):

Surface Stable within 0.1.x Not covered
C ABI (kwker.h) every exported kwker_* function keeps its name, signature, return codes and semantics; types, struct layouts and constants keep their values; new functions, enum values and flags are additions kwker_dev_* (dev builds only)
C++ header (kwker.hpp) header-only templates over the C ABI: the same rules; it adds no C++ ABI of its own names in detail namespaces
Rust crate kwker no public item removed, no signature changed (rustdoc JSON snapshot); new items, trait impls and enum variants of #[non_exhaustive] enums are additions __private, items marked #[doc(hidden)]
Python kwker every public name (rust/abi/python.txt, userdocs/reference-python.md) keeps its signature; new keyword arguments get defaults that keep the old behaviour names starting with _
PyTorch operators (torch.ops.kwker.*) operator schemas without a leading underscore; torch.compile(backend="kwker") keeps accepting every graph Inductor accepts _-prefixed operators, the kernels a self-check may turn off
Environment variables the ones in userdocs/cpu-runtime.md (KWKER_ISA, KWKER_HUGEPAGE, KWKER_NO_FAST, KWKER_SELF_CHECK, KWKER_TORCH_ISA, KWKER_AMX, KWKER_CACHE_DIR, KWKER_DECODE_CACHE) every other KWKER_* variable: development knobs (KWKER_CNN_*, KWKER_AMX_*, KWKER_RUNNER_*, ...) that can change or disappear in any release

Results are part of the contract: sorts, selections and stable key-value sorts return the same output on every engine and in every 0.1.x release (one total order per key type - API.md); index operations break ties by index. Unstable key-value sorts promise only that equal keys keep their values in some order. The CPU backend's reduced-precision modes (bf16, int8, int4) promise their documented error bounds, not bit-identical outputs across releases; its float32 paths and the bitwise torch overrides stay bitwise. Speed is not part of the contract, but a confirmed slowdown is a bug (ss regress gates releases on it).

Deprecation: a public name to be removed is first marked deprecated for at least one minor release. Rust uses #[deprecated(since, note)], C / C++ a KWKER_DEPRECATED("use ...") attribute on the declaration, Python a DeprecationWarning naming the replacement, and torch operators a warning at first call. The CHANGELOG entry names the release that removes it. Nothing is deprecated in 0.1.0.

Supported toolchains and runtimes for 0.1.x are the versions tested on every release. Older ones may work but are not tested.

Raising one of these minimums is a minor-release change, listed in the CHANGELOG.

The shared library's SONAME is libkwker_c.so today; from 0.1.0 it is planned to carry the minor version (libkwker_c.so.0.1, with the unversioned name as the development symlink), so programs linked against 0.1.x never load a 0.2 library by accident.

C library (libkwker_c.so / .a, kwker.h, kwker.hpp)

Python package (kwker)

PyTorch extensions (_torch_ops.so, _torch_gemm.so)

JAX (_jax_ffi.so)

Other bindings