Platform support

This page lists the systems DataMind Oda runs on, and the native pieces behind its process confinement and session file locking. It is for people who build, ship or debug Oda itself.

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

The confinement launcher on Linux

Linux releases carry a small executable that confines a command to the paths you grant, then starts it under those restrictions. It uses Landlock, the Linux kernel's confinement mechanism.

Session file locks

While a session log is open for writing, Oda holds an exclusive lock on it so only one writer appends at a time. The lock binding is a separate native piece; the messages a user sees when a chat is already being written are in Session log problems.

What a release carries

How a release is checked

Questions, answered

Is there a Windows on Arm build?

No. Windows is x64 only (Windows supports x64 only.), and the desktop app runs on Windows 10 and Windows 11, 64-bit. A system with no published package is refused rather than approximated.

The probe reports unusable. What does that mean?

Not necessarily a fault, and 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. Fix what you find, and treat a probe that still reports unusable as confinement being unavailable.

A 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 prefixed with landlock-run: , and in that case the wrapped command was not run.

Can a command run when the launcher cannot enforce the restrictions?

No. The launcher fails closed: when the ruleset cannot be created or the kernel does not enforce it, it exits with code 125 and the wrapped command is not run.

What does partial enforcement mean?

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 every access type must be governed, run on a host whose probe reports full.

Can an environment variable change which binary confines a process?

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

Does the file lock stop other programs from reading or writing the file?

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

When is a session lock released?

When the last descriptor for that open file is closed, 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 if the lock binding is missing on this system?

Acquisition rejects. Nothing compiles during installation, and an unprotected lock is never granted silently, so the failure is a refused attempt rather than a broken import. Use a system with a published package.

Is there a blocking wait or a shared lock?

No. The only lock on offer is exclusive and non-blocking: contention rejects with EAGAIN or EWOULDBLOCK straight away, and there is no shared or waiting variant.

Why did packing stop on a missing file?

Packing is the last gate before publishing, and it checks the files it is about to ship: a package whose built files are missing, or a platform package without its binaries or with binaries for the wrong architecture, is stopped instead of being published. Run the project build first, then pack again.