Skip to content

Commit a738332

Browse files
committed
docs: clarify two-image rationale around supply chain auditability
The deciding factor between upstream and system images is supply chain auditability, not features. The system image uses only Ubuntu apt packages with every binary built, signed, and distributed by Canonical. Updated messaging in README, USER_GUIDE, and both Dockerfile headers. Also marked macOS Docker tests as verified.
1 parent e274faa commit a738332

File tree

4 files changed

+48
-37
lines changed

4 files changed

+48
-37
lines changed

Dockerfile

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@
2020
# • ARM cross-compiler for embedded development
2121
#
2222
# Recommended for:
23-
#Developers who need the latest C++20/23/26 compiler features
23+
#Teams that want the latest C++20/23/26 compiler features and tooling
2424
# • Projects using vcpkg for dependency management
25-
# • Teams that want the newest static analysis tools (clang-tidy)
25+
#
26+
# For auditable supply chains with no third-party repositories, use
27+
# Dockerfile.system instead — every binary comes from Ubuntu's apt.
2628
#
2729
# For the alternate Dockerfile using only Ubuntu's apt packages,
2830
# see Dockerfile.system.

Dockerfile.system

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717
# No external package repositories are added.
1818
#
1919
# Recommended for:
20-
# • Teams that want compiler updates tied to Ubuntu's release cycle
20+
# • Organizations requiring auditable supply chains — every binary is
21+
# built, signed, and distributed by Canonical via Ubuntu's apt
2122
# • CI/CD pipelines that need stable, reproducible builds
22-
# • Developers who prefer minimal external dependencies
23+
# • Teams whose policies prohibit third-party package repositories
2324
#
2425
# For the default Dockerfile using upstream LLVM + Kitware CMake + vcpkg,
2526
# see Dockerfile.

README.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ Both images use Ubuntu 24.04 and support amd64 + arm64 multi-arch builds.
7070

7171
| Image | Ubuntu VM (amd64) | macOS Intel (amd64) | MacBook Pro (arm64) |
7272
|-------|:---:|:---:|:---:|
73-
| `dev-container-cpp` | Passed | Pending | Pending |
74-
| `dev-container-cpp-system` | Passed | Pending | Pending |
73+
| `dev-container-cpp` | Passed | Passed | Pending |
74+
| `dev-container-cpp-system` | Passed | Passed | Pending |
7575

7676
## Image Names
7777

@@ -89,11 +89,12 @@ This repository ships two Dockerfiles representing two valid toolchain strategie
8989
| `Dockerfile` (default) | Ubuntu 24.04 | LLVM repo Clang 20, Kitware CMake, vcpkg | amd64, arm64 | `dev-container-cpp` |
9090
| `Dockerfile.system` | Ubuntu 24.04 | Ubuntu apt packages only | amd64, arm64 | `dev-container-cpp-system` |
9191

92-
**Which should I use?** Start with the default (`Dockerfile`) for the latest
93-
C++20/23/26 compiler features, newest static analysis tools, and vcpkg package
94-
management. Use `Dockerfile.system` if you prefer everything from Ubuntu's apt
95-
repositories with no external dependencies. See USER_GUIDE §0 for detailed
96-
rationale.
92+
**Which should I use?** The deciding factor is **supply chain auditability**.
93+
The system image installs everything from Ubuntu's apt repositories — every
94+
binary is built, signed, and distributed by Canonical. Use it when your
95+
organization requires auditable supply chains with no third-party repositories.
96+
The default image adds LLVM, Kitware, and vcpkg repositories for the latest
97+
tooling. See USER_GUIDE §0 for detailed rationale.
9798

9899
## Why This Container Is Useful
99100

USER_GUIDE.md

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,33 @@
1818

1919
### 0.1 Why there are two Dockerfiles
2020

21-
C++ projects benefit from the latest compiler features (C++20/23/26 support),
22-
the newest static analysis tools (clang-tidy checks), and up-to-date build
23-
systems (CMake 4.x). The upstream image provides these by adding the official
24-
LLVM APT repository, Kitware's CMake repository, and vcpkg for package
25-
management.
26-
27-
At the same time, some teams prefer everything from Ubuntu's apt repositories
28-
with no external dependencies — fewer moving parts, predictable updates tied
29-
to Ubuntu's release cycle.
30-
31-
Rather than declare one approach wrong, this project ships both:
32-
33-
| Dockerfile | Base | Compiler source | Architectures | Image name |
34-
|------------|------|-----------------|---------------|------------|
35-
| `Dockerfile` (default) | Ubuntu 24.04 | LLVM repo Clang 20, Kitware CMake, vcpkg | amd64, arm64 | `dev-container-cpp` |
36-
| `Dockerfile.system` | Ubuntu 24.04 | Ubuntu apt packages only | amd64, arm64 | `dev-container-cpp-system` |
37-
38-
**Start with the default.** It gives you the latest C++ compiler features and
39-
vcpkg for dependency management. Switch to `Dockerfile.system` if you prefer
40-
Ubuntu's packaged compilers and want no external repository dependencies.
21+
The core difference is **supply chain auditability**, not features.
22+
23+
The **system image** installs every package from Ubuntu's apt repositories —
24+
no external sources. Every binary is built, signed, and distributed by
25+
Canonical. Organizations that require auditable supply chains, reproducible
26+
builds tied to a distribution's release cycle, or compliance with packaging
27+
policies that prohibit third-party repositories should use this image.
28+
29+
The **upstream image** adds three external repositories: LLVM's official APT
30+
repository (Clang 20), Kitware's APT repository (CMake 4.x), and vcpkg
31+
(Microsoft's C++ package manager). These provide the latest compiler features
32+
(C++23/26 support), the newest clang-tidy checks, and access to 2300+ C++
33+
libraries via vcpkg. The trade-off is that builds depend on sources outside
34+
Ubuntu's package pipeline.
35+
36+
Both images are functionally equivalent for C++20 development. Both support
37+
amd64 + arm64. Both include the same embedded toolchain, debuggers, and
38+
general developer tools.
39+
40+
| Dockerfile | Compiler source | External repos | Image name |
41+
|------------|-----------------|:--------------:|------------|
42+
| `Dockerfile` (default) | LLVM repo Clang 20, Kitware CMake 4.x, vcpkg | 3 | `dev-container-cpp` |
43+
| `Dockerfile.system` | Ubuntu apt packages only (Clang 18, CMake 3.28) | 0 | `dev-container-cpp-system` |
44+
45+
**Choose by policy, not preference.** If your organization requires that all
46+
binaries come from your distribution's package pipeline, use `Dockerfile.system`.
47+
Otherwise, start with the default for the latest tooling.
4148

4249
### 0.2 Supported architectures
4350

@@ -507,9 +514,9 @@ release. Remove or update entries as they are verified.
507514
| Area | Status | Notes |
508515
|-----------------------------------|--------------|--------------------------------------------------------------|
509516
| Rootless nerdctl (local) | Verified | Ubuntu 24.04 base, nerdctl. Build + smoke test passed. |
510-
| Docker rootful (macOS) | Pending | Not yet tested. |
511-
| GitHub Actions build workflow | Pending | Not yet tested (no push to GitHub yet). |
512-
| GitHub Actions publish workflow | Pending | Not yet tested (no push to GitHub yet). |
517+
| Docker rootful (macOS) | Verified | macOS Intel host, Docker. Build + smoke test passed. |
518+
| GitHub Actions build workflow | Pending | Not yet tested. |
519+
| GitHub Actions publish workflow | Pending | Not yet tested. |
513520
| Podman rootless (local) | Blocked | `--userns=keep-id` fails in Parallels VM (kernel restriction). |
514521
| Kubernetes deployment | Not tested | Image is designed to be compatible; no cluster available. |
515522

@@ -518,9 +525,9 @@ release. Remove or update entries as they are verified.
518525
| Area | Status | Notes |
519526
|-----------------------------------|--------------|--------------------------------------------------------------|
520527
| Rootless nerdctl (local) | Verified | Ubuntu 24.04 base, nerdctl. Build + smoke test passed. |
521-
| Docker rootful (macOS) | Pending | Not yet tested. |
522-
| GitHub Actions build workflow | Pending | Not yet tested (no push to GitHub yet). |
523-
| GitHub Actions publish workflow | Pending | Not yet tested (no push to GitHub yet). |
528+
| Docker rootful (macOS) | Verified | macOS Intel host, Docker. Build + smoke test passed. |
529+
| GitHub Actions build workflow | Pending | Not yet tested. |
530+
| GitHub Actions publish workflow | Pending | Not yet tested. |
524531
| Podman rootless (local) | Blocked | `--userns=keep-id` fails in Parallels VM (kernel restriction). |
525532
| Kubernetes deployment | Not tested | Image is designed to be compatible; no cluster available. |
526533

0 commit comments

Comments
 (0)