Platform support

DataMind Oda ships small native pieces behind its command confinement and the write locking of its session logs. This page lists which systems carry those pieces, how the confinement and locking behave, and how to use them from your own programs.

The desktop app and the SDK packages have their own system requirements: see Install and sign in for the app, and Oda SDK: Python reference for the Python packages.

Which systems carry the native pieces

SystemConfinement launcherFile locking
Linux, x64 and arm64Yes, a statically linked launcherYes, built for both common C libraries, glibc and musl
macOS, x64 and arm64NoYes, built for macOS 11 and later
WindowsNoNo; Oda uses its own locking implementation
Any other systemThe probe reports unusableLock attempts are refused

How commands are confined on Linux

On Linux, a small executable confines a command to the paths you grant and then starts it. It uses Landlock, the Linux kernel's confinement mechanism, and the restrictions cover the command and every process it starts.

Locking session logs

While a session log is open for writing, Oda holds an exclusive lock on it so that only one writer appends at a time. The messages you see when a chat is already being written are in Session log problems.

Use the native pieces in your own programs

Questions, answered

What happens on a system with no published native piece?

Confinement and locking are refused rather than approximated: the launcher's probe reports unusable, lock attempts are refused, and nothing falls back to another system's build. Nothing compiles during installation either, so a missing piece surfaces as a refusal.

Why is there no confinement launcher on macOS or Windows?

The launcher is built on a Linux kernel mechanism, so it ships for Linux systems only. On macOS the pieces provide locking only, and on Windows Oda uses its own locking implementation.

A confined command exited with 125. Did the launcher fail?

Maybe. 125 is the launcher's failure code, but a wrapped command may also exit 125 on its own. Check standard error: a launcher failure always prints a fatal line that starts with landlock-run: , and in that case the wrapped command was not run.

Will a command run when the kernel cannot enforce the restrictions?

No. The launcher fails closed: when it cannot enforce, it exits with code 125 and the wrapped command is not run, with the refusal landlock is not enforced by this kernel (ABI unsupported or disabled) on standard error.

What does partial enforcement change for a run?

The kernel enforces an older version of the mechanism, so the access types added later are not covered. Runs continue, and each prints landlock-run: partial enforcement (older Landlock ABI) on standard error. Where everything must be governed, run on a machine whose probe reports full.

Is the file lock a protection against other programs?

No. It is an advisory lock: it coordinates writers that take it, and another program can still read or write the file directly. It is not a way to protect a file from other programs.

What releases a session lock?

Closing the last descriptor for that open file, including when the process holding it exits or is killed. There is no stale-lock timeout, and closing one descriptor does not release the lock while another still refers to the same open file.

What happens when there is no locking build for my system?

The attempt is refused with flock is not supported on <platform>-<arch>. Nothing compiles during installation, and a lock is never granted silently, so the failure is a refused attempt rather than a broken import.

Can an environment variable change which binary confines a process?

No, by design. The launcher takes its instructions only from its own arguments, and nothing the calling process exports changes what is confined.

How do I know whether confinement works on this machine?

Run the probe. It is the single availability signal: it waits up to two seconds for an answer, and a hang counts as unusable. The presence of a launcher path is deliberately not checked; the probe decides.