> Cinder 0.1.0 documentation: ADR-0007: Development host is a Linux container; Windows host is a file server
> Canonical page: https://cinder.ash10.dev/docs/adr/0007-dev-environment-container/ · Source: `docs/adr/0007-dev-environment-container.md` in the engine repository (engine commit 47c9352, imported 2026-11-09)
> Index of every page for agents: https://cinder.ash10.dev/llms.txt

# ADR-0007: Development host is a Linux container; Windows host is a file server

Status: Accepted, 2026-11-08

## Context

Work started on a Windows 11 machine. Mojo 1.2.0 has no Windows build; the mission excludes Windows as a
target. The machine has Docker Desktop (WSL2 backend, Linux x86-64, 12 logical cores, 15 GB RAM) and
network access. No GPU is exposed to containers, so Vulkan is Mesa lavapipe (software), which is exactly
the Linux CI configuration the mission prescribes for golden-image tests.

Two Windows-specific hazards were hit on day one and are recorded here so they are not re-discovered:

1. The app's session workspace path is ~200 characters. Git submodule clones failed with "Filename too
   long" and "'$GIT_DIR' too big" because Git's remote helper and loose-object paths exceeded `MAX_PATH`.
   Fix: map the folder to a drive letter (`subst X: <path>`) and run git from `X:\`. No files move.
2. MSYS bash rewrites arguments that look like POSIX paths (`-w /work` became `C:/Program Files/Git/work`).
   Fix: `MSYS_NO_PATHCONV=1` for docker invocations.

## Decision

- All compilation, tests and benchmarks run inside `cinder-toolchain:0` (`docker/Dockerfile.toolchain`,
  Ubuntu 24.04 + pixi `v0.63.2` + clang/cmake/ninja + Mesa Vulkan + X11/Wayland dev headers). The
  project folder is bind-mounted at `/work`.
- `pixi` inside the container installs Mojo `1.2.0` from `https://conda.modular.com/max/`.
- The same `pixi.toml` tasks run unchanged on native Linux and macOS, so nothing in the repository
  depends on the container.
- macOS (Metal) verification is **not possible on this host**. It is an open CI requirement, see
  `docs/STATUS.md` and the Blockers section of `REPORT.md`.

## Consequences

- Benchmarks measured here are software-rasteriser numbers and do not satisfy section 8's reference
  hardware; they are reported as such, never as budget results.
- Build caches (`.pixi/`, `native/build/`) live on the bind mount; this is slower than a native volume but
  keeps everything visible on the host. If it becomes a bottleneck, a named Docker volume for
  `native/build` is the first thing to try.
