BOOTC-RELATIONSHIPS(7)
๐ BOOTC-RELATIONSHIPS(7) ๐
okay bestie, so this is a page from the Miscellaneous Information Manual and it's all about how bootc ~relates~ to other projects. grab a boba, we're doing lore. ๐งโจ
โจ NAME โจ
bootc-relationships โ the whole "who are we to each other" situation with other projects ๐
๐ DESCRIPTION ๐
So bootc is the main character in a bigger mission: bootable containers (the whole thing lives at https://containers.github.io/bootable/). And here's how it vibes with all the other moving parts. ๐ฆ
๐ธ Relationship with podman ๐ธ
okay so talking about shipping bootable operating systems inside container images gets confusing, lowkey. Let's be crystal clear: we're reusing container images as
- a build mechanism (which includes running as a standard OCI container image) ๐๏ธ
- a transport mechanism ๐
BUT. Here's the tea โ: when a bootc container actually gets booted, podman (or docker, etc.) is not involved at all. The storage used for the operating system content is separate from /var/lib/containers. So podman image prune --all will not delete your operating system. like, it literally can't touch it. ๐๐ซ
That being said, a toplevel goal of bootc is alignment with the https://github.com/containers ecosystem, which does include podman. But on a more technical level, specific to today: bootc uses skopeo (https://github.com/containers/skopeo/) and therefore indirectly containers/image (https://github.com/containers/image) as its way to fetch container images. ๐
Which means bootc automatically honors a ton of the knobs available in /etc/containers โ specifically stuff like containers-registries.conf (https://github.com/containers/image/blob/main/docs/containers-registries.conf.5.md). ๐
In other words: if you configure podman to pull images from your local mirror registry, bootc will automatically honor that too. no extra work, it just gets it. ๐ซถ
The simple way to say it: a goal of bootc is to be the bootable-container analogue for podman, which runs application containers. Everywhere you might run podman, you could also consider using bootc. periodt. ๐
๐๏ธ Relationship with Image Builder (osbuild) ๐๏ธ
There's a new bootc-image-builder project (https://github.com/osbuild/bootc-image-builder) that is entirely dedicated to the intersection of these two!! it's giving collab. it's giving crossover episode. ๐ฅ
โธ๏ธ Relationship with Kubernetes โธ๏ธ
Just like podman doesn't depend on a Kubernetes API server, bootc will not depend on one either. independent icon behavior. โจ
However! There are also plans for bootc to also understand Kubernetes API types. See the configmap/secret support (https://github.com/bootc-dev/bootc/issues/22) for example. ๐
And maybe, in the future, we might actually support some kind of Pod analogue for representing the host state. Or we may define a CRD (https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) which can be used inside and outside of Kubernetes. versatile queen. ๐
๐ณ Relationship with ostree ๐ณ
OSTree provides so many things, bestie, a whole bundle:
- a git-like repo for OS data from which you can check out an entire rootfs ๐ฆ
- a bootloader integration layer ๐ฅพ
- a transport layer for pulling content over HTTP ๐
With bootc, the OSTree transport layer is not used. Instead, content is pulled as OCI containers using skopeo, as mentioned above. However, this content is then imported into the local OSTree repo to perform a deployment checkout. The role of OSTree may further shrink in the future, especially as tighter integration with podman and composefs occurs โ but it will remain an important part of the bootc stack (in particular the bootloader integration layer and management of deployment roots). so like, glow-down later maybe, but never fully leaving the group chat. ๐
๐ Relationship with rpm-ostree ๐
As mentioned above, bootc uses OSTree as a backing model, and so does rpm-ostree. Hence, when using a container source, rpm-ostree upgrade and bootc upgrade are effectively equivalent โ you can use either command. pick your fave, no wrong answer. ๐
๐ Differences from rpm-ostree ๐
- The ostree project never tried to have an opinionated "install" mechanism, but
bootcdoes withbootc install to-filesystem. it has OPINIONS. โ bootchas additional features such as/usr/lib/bootc/kargs.dand logically bound images (seebootc-logically-bound-images(7)). extra content, we ate. ๐ฝ๏ธ
๐ง Client side changes ๐ง
Currently, all functionality for client-side changes such as rpm-ostree install or rpm-ostree initramfs --enable continues to work, because of the shared base. ๐ซถ
However โ and this is the important part, bestie โ as soon as you mutate the system in this way, bootc upgrade will error out, because it will not understand how to upgrade the system. The bootc project currently takes a relatively hard stance that system state should come from a container image. so like. don't be doing that. ๐ญ
The way kernel arguments work also uses ostree on the backend in both cases, so using e.g. rpm-ostree kargs will also work on a system updating via bootc. so that one's chill. ๐
Overall, rpm-ostree is used in several important projects and will continue to be maintained for many years to come. respect the elders. ๐
However, for use cases which want a "pure" image based model, using bootc will be more appealing. bootc also does not, e.g., drag in dependencies on libdnf and the RPM stack. lightweight queen behavior, honestly. ๐ชถ
bootc also has the benefit of starting as a pure Rust project; and while it doesn't have an IPC mechanism today (https://github.com/bootc-dev/bootc/issues/4), the surface of such an API will be significantly smaller. small API = clean API, we love that for us. โจ
Further, bootc does aim to include some of the functionality of zincati (https://github.com/bootc-dev/bootc/issues/5). ๐ฏ
But all this said: it will be supported to use both bootc and rpm-ostree together โ they are not exclusive. For example, bootc status at least will still function even if packages are layered. besties can coexist!! ๐ซถ๐
๐ฎ Future bootc <-> podman binding ๐ฎ
All the above said, it is likely that at some point bootc will switch to hard binding with podman (https://github.com/bootc-dev/bootc/pull/215).
โ ๏ธ Heads up, this has consequences: it will reduce the role of ostree, and hence break compatibility with rpm-ostree. When such work lands, we will still support at least a "one way" transition from an ostree backend. But once this happens, there are no plans to teach rpm-ostree to use podman too. so like, it's a one-way door, not a revolving one. ๐ฌ
๐ง Relationship with Fedora CoreOS (and Silverblue, etc.) ๐ง
Per above, it is a toplevel goal to support a seamless, transactional update from existing OSTree based systems, which includes these Fedora derivatives. slick transition, no drama. ๐
For Fedora CoreOS specifically, see this tracker issue (https://github.com/coreos/fedora-coreos-tracker/issues/1446). ๐
See also OstreeNativeContainerStable (https://fedoraproject.org/wiki/Changes/OstreeNativeContainerStable). ๐
๐ SEE ALSO ๐
bootc(8), bootc-docs(7), bootc-logically-bound-images(7)
go read those too, bestie, i'm not kidding, they're relevant ๐ซถโจ
โญ VERSION โญ
v1.17.1
okay that's the whole page, you're officially caught up on the bootc extended universe ๐ธ tysm for reading, this was the Miscellaneous Information Manual's BOOTC-RELATIONSHIPS(7) page, version v1.17.1, and yes i am obsessed with it. mwah, slay, go boot something. ๐๐๐ฆ
๐ฆ where this page comes from
- fedora 43: bootc 1.17.1-1.fc43 ยท Apache-2.0 AND BSD-3-Clause AND MIT AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR MIT) AND (Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT) AND (Unlicense OR MIT)
- fedora 44: bootc 1.17.1-1.fc44 ยท Apache-2.0 AND BSD-3-Clause AND MIT AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR MIT) AND (Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT) AND (Unlicense OR MIT)
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms