62 lines
5.8 KiB
Markdown
62 lines
5.8 KiB
Markdown
# Changelog
|
|
|
|
**Docs:** [README](README.md) · [SPEC](SPEC.md) · [ARCHITECTURE](docs/ARCHITECTURE.md) · [RESEARCH](docs/RESEARCH.md) · [COMPARISON](COMPARISON.md) · [AGENTS](AGENTS.md) · [CHANGELOG](CHANGELOG.md)
|
|
|
|
## 1.1.5 - 2026-10-23
|
|
- `audit/`: 8 named, sourced CVEs relevant to doos's own mechanisms (overlay writes, tar extraction, mount/directory creation, net namespace sharing, the mount-family seccomp denylist, kernel user-namespace exposure), each with its own `README.md`, `Makefile` and non-destructive `reproduce.sh` against `build/doos`. `make audit` runs them concurrently (`-j8`, recursive make); `make -C audit list|report` also available. Kernel memory-corruption CVEs (Dirty Pipe, Dirty COW, `legacy_parse_param`) are checked by kernel version only, no exploit code.
|
|
- Found by the audit and disclosed: `fsutil::mkdirs` follows a symlink planted at a container's path, so a symlink under `$DOOS_HOME/containers/<name>` redirects where that container's state is written (low severity: needs write access to the caller's own `$DOOS_HOME`). Tracked as gap G8 in [RESEARCH](docs/RESEARCH.md) and in [COMPARISON](COMPARISON.md); not yet fixed.
|
|
- Docs: `scripts/check-docs.sh` excludes `audit/*.md` (a separate, self-contained doc set); `README.md` and `AGENTS.md` link to `audit/README.md`.
|
|
|
|
## 1.1.4 - 2026-10-23
|
|
- Docs: [COMPARISON](COMPARISON.md) section 6.1 answers whether doos is a security-wise Docker replacement (same class as rootless Podman, not for untrusted code), summarized in the README safety summary.
|
|
|
|
## 1.1.3 - 2026-10-23
|
|
- Charts: startup time, executable size and CPU limit as SVG (light and dark palettes, doos highlighted), embedded in [COMPARISON](COMPARISON.md) and [RESEARCH](docs/RESEARCH.md).
|
|
- Reproducible measurements: `scripts/bench.sh` writes `docs/charts/bench.json`; `docs/charts/make_charts.py` builds the charts and rewrites every generated number and table in the documents from it, so text, tables and charts cannot drift apart.
|
|
- `Makefile` wrapper (`make help`), expanded `.gitignore`.
|
|
|
|
## 1.1.2 - 2026-10-23
|
|
- Docs: new [COMPARISON](COMPARISON.md) (doos against Docker, rootless Docker, Podman, bubblewrap, systemd-nspawn, LXC/Incus, Apptainer, Distrobox/Toolbx, gVisor, Kata/Firecracker) with sourced pros and cons, startup and disk measurements against Docker, Podman and bubblewrap on the same machine, a gaps list tied to code, and a conclusion.
|
|
- Docs: every document now has a navigation line and links to every other document. `scripts/check-docs.sh` enforces it (and that relative links resolve) and runs inside `scripts/release.sh`.
|
|
|
|
## 1.1.1 - 2026-10-23
|
|
- `doos apparmor` prints a profile for the exact path of the running binary (own profile name per path, so several installs coexist). A start that fails because of AppArmor now prints the install command instead of only `mount bind /: Permission denied`. Verified with a copy in `~/.local/bin`.
|
|
- `apparmor/doos` (packaging) covers more standard install paths.
|
|
- Docs: Networking section with a verified example per mode (slirp, pasta, host, none), the inbound/loopback behavior of each, and the pasta port-detection delay.
|
|
- Tests: 86 checks (adds apparmor output, `none`, slirp has no inbound path, pasta container to container).
|
|
|
|
## 1.1.0 - 2026-10-23
|
|
- Limits: `--memory`, `--pids`, `--cpus` (cgroup v2; whole-container OOM kill; reports OOM kills and pid-limit hits). Later attaches run in their own cgroup leaf with the same limits.
|
|
- Hardening (default): Docker's default capability set, a seccomp filter (arch check, x32 guard, clone3 ENOSYS, no nested user namespaces, no mounts/keyrings/bpf/perf/io_uring/...), host `/etc` allowlist. `--hardening relaxed` turns it off per container.
|
|
- Networking: `--net pasta` (host-like reachability, private namespace and abstract sockets). `--net host` now prints a note.
|
|
- Size cap: measured from inside the id map (counts other uids), paced by scan cost (2 s floor), `RLIMIT_FSIZE` bounds single files.
|
|
- Images: Debian in the catalog (`debian`, `debian-RELEASE`); Alpine and Ubuntu signatures verified against pinned key fingerprints.
|
|
- Fix: a failed `get_or_create` no longer leaves an unreadable container directory behind.
|
|
- Tests: 83 end-to-end checks.
|
|
|
|
## 1.0.0 - 2026-10-23
|
|
Breaking: state layout changed (private `/etc`, `meta` keys). Containers from 0.x must be deleted and recreated.
|
|
- Images: `doos image list|add|delete`, `--image NAME` on `get_or_create`/`attach` (fetched on demand). Catalog: `alpine`, `ubuntu`, `ubuntu-VERSION`; also https URL with `--sha256`, or a local tarball. sha256 verified before extraction.
|
|
- `--size`: cap for what a container writes (default 4g). Warns at 80%, freezes at 100% via cgroup v2, thaws below 95%.
|
|
- `--ids`: subuid mapping through newuidmap/newgidmap by default (chown, su and apt's `_apt` work); falls back to one id.
|
|
- Host mode fixes: directory skeleton so host-owned directories are writable, private copy of `/etc`, pre-seeded `/var` and dpkg state. `apt-get install` now completes.
|
|
- Deleting trees with subuid-owned files works (runs inside the id map).
|
|
- Usage measurement counts hard links once.
|
|
- Tests: 56 end-to-end checks, including real image downloads, apt/apk installs and the size freeze.
|
|
|
|
## 0.1.3 - 2026-10-23
|
|
- Docs: field trial of apt and common tools, new gap G7 (host-owned lower layer), README limits section. No code change.
|
|
|
|
## 0.1.2 - 2026-10-23
|
|
- Docs: researched solutions for all known gaps (G1 to G6) in `docs/RESEARCH.md`, with measurements. Nothing implemented yet.
|
|
|
|
## 0.1.1 - 2026-10-23
|
|
- Docs: AGENTS.md release workflow, ARCHITECTURE.md, expanded README, this changelog.
|
|
- Tooling: `scripts/release.sh` (bump, build, test, commit, tag).
|
|
|
|
## 0.1.0 - 2026-10-23
|
|
- First release: `list`, `get_or_create`, `attach`, `delete`.
|
|
- overlayfs over host `/usr /etc /opt`, user/mount/pid/uts/ipc/net namespaces.
|
|
- Networking: slirp4netns (default), `host`, `none`.
|
|
- End-to-end test suite and AppArmor profile for Ubuntu 24.04+.
|