Compatibility¶
Implementation¶
cl-process-kit targets SBCL only. It is not portable Common Lisp and does
not aim to be: sb-ext, sb-posix, sb-thread, and sb-alien are used
throughout, and the native spawn and PTY backends under native/ are
POSIX-specific C. Other Common Lisp implementations are out of scope.
Platforms¶
| Platform | Status |
|---|---|
x86_64-linux |
Verified on every push and pull request by CI |
aarch64-darwin |
Declared by the flake and exercised locally; not covered by CI |
Both platforms are declared in flake.nix's systems, but the check job in
.github/workflows/ci.yml runs on ubuntu-latest and does not pass
--all-systems, so only x86_64-linux is verified automatically. A change
that only builds on macOS can therefore still break Linux, and the reverse is
caught only when someone runs the suite on a Mac.
Running on both is worth the effort, because process semantics diverge exactly
where this library works: signal delivery, process-group reaping, and whether
closing a descriptor interrupts a thread already blocked reading it (macOS and
the BSDs do; Linux does not). Two defects shipped in 0.2.0 were invisible on
macOS and obvious on Linux — see 1.0.0's ### Correctness notes in the
changelog.
Seven process-group tests are it-skipped under #+linux; see
Development for why,
and for how to run the Linux suite locally in a container.
Stability¶
From 1.0.0 onward the exported API follows semantic versioning. The exported surface is unchanged from 0.2.0; what 1.0.0 added was evidence about behaviour on the platforms above rather than new API.
Symbols that are not exported from the process-kit package are internal and
may change in any release, including the %-prefixed helpers that appear in
backtraces.
The optional cl-process-kit/pty system depends on cl-tty-kit and on a
native shared library that is not built by default. It is versioned with the
core system but its API is younger and correspondingly less settled.