5.3 KiB
Compatibility roadmap
This document records compatibility observations and possible future work. It is not an implementation plan. The current Linux-first behavior remains acceptable; these items can be prioritized when broader host support becomes useful.
Target architecture
olliesrv
agent runtime, orchestration, and 9P service
preferably host-neutral
│
└── toolsrv
host-dependent tool execution boundary
execution, filesystem, process, networking, sandbox
toolsrv should be extensible to other host systems so Ollie tools remain useful to as many people as possible. olliesrv may remain Linux-specific if that keeps the agent runtime simpler, but its current implementation has only a small set of host-specific assumptions and may be portable with limited work.
olliesrv
Current status
olliesrv is primarily implemented with portable Go facilities:
- 9P protocol handling over
net.Conn. - Unix and TCP listeners.
- Filesystem persistence and configuration.
- Context cancellation, goroutines, and process supervision.
- Provider and agent runtime logic.
The Plan 9 client dependency is a Go 9P implementation. olliesrv does not require an external namespace service. The default namespace lookup follows the standard $NAMESPACE convention, with a derived /tmp/ns... fallback; the service creates the directory when needed and removes it only when empty.
Compatibility observations
cmd/olliesrv/internal/toolclient/spawn.gosetssyscall.SysProcAttr.Pdeathsigfor local toolsrv and remote SSH processes.Pdeathsigis available on Linux and FreeBSD but not macOS. Its use currently prevents builds on macOS and other systems whoseSysProcAttrlacks that field.- The same file uses
Setpgidfor remote SSH process management. This is also OS-specific and should be isolated if process-group behavior is retained. - Existing context cancellation, explicit process killing, waiting, and toolsrv idle timeouts already provide most lifecycle management. Removing
Pdeathsigis therefore a viable future option. - A portable parent-death pipe is another possible option if orphan cleanup must remain consistent across hosts.
- Local session metadata hard-codes
Platform: "linux"in session setup and local process metadata. It should eventually useruntime.GOOSor host-provided metadata. - Remote deployment currently assumes
bash,tar,ssh, and a Linux toolsrv binary. Remote host detection and platform-specific toolsrv artifacts will be needed for non-Linux remote hosts. - D-Bus desktop notifications are optional at runtime, but the dependency is currently compiled into
olliesrv. The notification integration could later be isolated or replaced with a host/frontend-specific notifier.
Possible future directions
- Remove
PdeathsigandSetpgidfrom common code and rely on existing lifecycle cleanup. - Keep stronger process attributes in OS-specific files for Linux and FreeBSD.
- Add a portable parent-death pipe when consistent orphan cleanup is required.
- Add explicit socket/listen configuration so the service does not depend on an implicit Plan 9 namespace directory.
- Detect and propagate local and remote platform metadata.
- Separate remote deployment from the assumption that the host runs Linux.
toolsrv
Current status
toolsrv is currently Linux-specific. Restricted execution uses native Landlock system calls in a short-lived helper process. The installed sandbox policy and execution path assume Linux Landlock semantics.
The toolsrv protocol and namespace are more portable than the execution implementation. olliesrv communicates with toolsrv through authenticated 9P over a Unix socket, and remote execution already treats toolsrv as a separately deployed process.
Compatibility areas
Supporting other hosts will require platform-specific implementations for more than sandboxing:
- Tool process creation and lifecycle.
- Process groups, signals, and cancellation.
- Filesystem policy enforcement.
- Network policy enforcement.
- Environment and path handling.
- Resource limits and process supervision.
- Host metadata and capability reporting.
- Local and remote binary deployment.
Possible sandbox mechanisms include Capsicum and jails on FreeBSD, and the platform sandbox facilities on macOS. These mechanisms do not necessarily express the same path-based policy as Landlock, so each backend must declare its enforcement limits rather than silently weakening policy.
Possible future directions
- Keep the generic sandbox interface and add OS-specific implementations behind it.
- Define a host capability model for filesystem, process, network, and sandbox features.
- Make tool execution report unsupported or degraded policy enforcement explicitly.
- Build and deploy toolsrv artifacts per target host and architecture.
- Add host-specific tests without making Linux behavior conditional at runtime.
WSL2
WSL2 provides a Linux kernel in a VM. It should use the existing Linux olliesrv and toolsrv implementations, subject to the kernel and distribution providing the required Linux features, including Landlock support.
Decision status
No compatibility work is scheduled now. This roadmap records the design boundary and observations for later prioritization.