Loading the documentation…

Platform support

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

Which systems Oda runs on

SystemDesktop appReleased runtime
Windows, x64YesYes
Windows on ArmNoNo
Linux, x64 and arm64NoYes
macOS, x64 and arm64NoYes, on macOS 14 or later

What a release carries

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. Before it restricts anything, the launcher stops the command from gaining privileges through setuid or setgid binaries.

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 lock binding is a separate native piece. The messages you see when a chat is already being written are in Session log problems and what they mean.

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.

Is there a Windows on Arm build?

Not for the desktop app or the released runtime: Windows is x64 only, and the desktop app runs on Windows 10 and Windows 11, 64-bit. The VS Code and Cursor extension has a Windows on Arm package that runs the x64 runtime through Windows 11's x64 emulation.

The probe reports unusable. What does that mean?

The verdict does not say which of three causes it is: a kernel without the mechanism, a disabled security module, or a missing binary. The answer is the same in each case: do not trust this launcher to confine anything, and treat confinement as unavailable until the probe reports otherwise.

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.

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.