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.
| System | Confinement launcher | File locking |
|---|---|---|
| Linux, x64 and arm64 | Yes, a statically linked launcher | Yes, built for both common C libraries, glibc and musl |
| macOS, x64 and arm64 | No | Yes, built for macOS 11 and later |
| Windows | No | No; Oda uses its own locking implementation |
| Any other system | The probe reports unusable | Lock attempts are refused |
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.
--ro <path> grants read and execute under a path, and --rw <path> grants full access under a path.landlock: fully enforced: the kernel enforces everything the launcher asks of it.landlock: partially enforced (older ABI): the kernel enforces an older version of the mechanism, so the access types added later are not covered. Runs continue, and each one prints landlock-run: partial enforcement (older Landlock ABI) on standard error.landlock is not enforced by this kernel (ABI unsupported or disabled).landlock-run: appears on standard error.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.
EAGAIN or EWOULDBLOCK, so a busy file surfaces as a refusal, never as a stall. A failed attempt names its code, for example EAGAIN: flock failed.flock is not supported on <platform>-<arch>.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.
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.
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.
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.
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.
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.
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.
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.
No, by design. The launcher takes its instructions only from its own arguments, and nothing the calling process exports changes what is confined.
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.