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