Repository navigation
Description
User Story
As an OpenShell Maintainer I want the desktop drivers to exist in their own repository so that their ownership and maintenance can be considered separately to core OpenShell.
Problem Statement
The desktop compute drivers (Docker, Podman, and later the microVM driver) should live in their own ai-openshell/desktop repository with their own maintainers, CI, and releases, as RFC 0019 (#4426) proposes. They cannot move today because core is compiled against them.
OpenShell compiles the Docker and Podman compute drivers into the gateway binary. The gateway registers them through in-process factories behind the default in-tree-compute-drivers feature, and a few other crates depend on driver crates directly (for example openshell-supervisor-network on openshell-driver-vm, and openshell-driver-vm on openshell-driver-podman). The drivers also share a large amount of code with core through openshell-core and openshell-sandbox-backend.
As a result, the desktop drivers cannot be owned, tested, or released separately from core. RFC 0019 leaves the technical path and timing of the desktop migration open. The ai-openshell/desktop repository exists but only contains a README.
Related: #4425, the issue for RFC 0019. This issue covers the separately scoped migration work that #4425 defers until the repository layout is agreed.
Impact / Why This Matters
Desktop driver maintainers must work inside core's CI and release machinery, and core must build and qualify against every first-party driver. This blocks the repository split proposed in RFC 0019 and makes it harder for new maintainers to own the Docker, Podman, and microVM drivers.
The workaround today is to keep everything in one repository with shared ownership, which is the situation RFC 0019 is trying to change.
Proposed Design
Move Docker and Podman to ai-openshell/desktop, and the microVM driver after them. Because the gateway links Docker and Podman in-process today, the move first requires running them as separate driver processes that the gateway launches and talks to over the existing ComputeDriver gRPC contract.
From a user or operator point of view:
- Driver names, auto-detection order, and
driver_configtables keep working. Configuration is validated by the driver instead of the gateway. - A default laptop install still gets a working Docker or Podman gateway. The install paths (
install.sh, Homebrew, DEB, RPM, snap) deliver a single versioned bundle that pairs a core release with adesktoprelease. - The gateway refuses to use a driver whose protocol version it cannot speak, with an error that names both versions.
- Kubernetes-only deployments are unaffected.
For maintainers, the work is in two parts. Part A makes drivers external inside this repository: a generic launcher, a versioned startup document, probe and preflight commands, and a small driver SDK carved out of openshell-core. Part B moves the desktop drivers to their own repository and defines how core, desktop, and packages release together. The detailed design is in a draft RFC, which this issue asks maintainers to number.
Suggested UX (if applicable)
Notional driver commands, to be refined in the RFC:
openshell-driver-podman probe --config /run/openshell/driver-startup.json
# {"available": true, "executables": ["/usr/bin/podman"]}
openshell-driver-docker preflight --config /run/openshell/driver-startup.json
# {"valid": true, "executables": ["/usr/bin/docker"], "errors": []}Existing gateway configuration for selecting a driver and for driver_config is unchanged.
Acceptance Criteria
- Docker and Podman live in
ai-openshell/desktopwith named maintainers, CI, and release automation. - Core builds, tests, and releases without the Docker, Podman, or VM driver crates.
-
desktopCI runs the core conformance harness against its drivers on a pinned core release. - A laptop install through
packagesstill produces a working Docker or Podman gateway from pinned core anddesktopreleases. - Before the move, the gateway starts the Docker and Podman drivers as separate processes by default and passes the existing Docker and Podman e2e suites.
- A driver with an incompatible protocol or startup-document version is refused with an error naming both versions.
Alternatives Considered
- Keep one repository and delegate ownership with CODEOWNERS. Least work, but everyone still shares one repository and release machinery.
- A gateway binary built by
desktopthat links core's server crates and registers the drivers in-process. Avoids a launcher but makes the Rust factory trait a public API and produces two gateway binaries. - A proto-only contract with no shared Rust code. Keeps core's crates private but duplicates constants shared with the supervisor, so drift fails at runtime.
- Separate user-visible versions for core and
desktop. Simpler packaging, but moves the compatibility matrix onto users.
Agent Investigation
Findings from reading the repository:
openshell-gatewayregisters drivers ininstall_default_compute_drivers()behindcompute-driver-*features. The VM driver is already launched as a gateway-managed subprocess (crates/openshell-gateway/src/vm.rs,ManagedDriverProcess), and operator-managed external drivers are documented indocs/extensibility/drivers.mdx.proto/compute_driver.protoalready carries protocol negotiation (PeerMetadatainGetCapabilities) and the admission policy match. Two capability fields are missing for hooks that exist only as Rust factory methods today.- The drivers import about 23
openshell-coremodules (dominated bysandbox_env) plus a small slice ofopenshell-sandbox-backend. This count covers import paths only and has not been traced transitively. - No Rust crate is published from this repository today and
deny.tomlforbids git dependencies, sodesktopwould consume the driver SDK as a git dependency with an exception in its own configuration.
Activity
elezar commentedon Nov 3, 2026
Assigning RFC 0022 to this issue. The draft will live at
rfc/0022-desktop-driver-migration/.docs(rfc): link the RFC pull request
docs(rfc): mark the RFC ready for review