Principles of Image Builder #7
Replies: 3 comments 5 replies
-
As image builder is mainly used to support the workflow and user-experience in RHEL and Fedora (golden) image creation and customization I was wondering if this is some kind of principle or just something that happens to be and to be changed. |
Beta Was this translation helpful? Give feedback.
-
I've restarted writing this post many times and decided to just have a bunch of slightly related sections with my random thoughts. Let me start with the questions asked at the beginning of the post as I understand it. Not necessarily how things are presented to the world. What even is Image Builder? Image Builder is a team that works on tooling to build operating system artifacts. Who is Image Builder for? Image Builder is for everyone that wants to produce, or needs to consume operating systems. The overarching vision of the Image Builder project. Provide the necessary tools for people that want to produce, or need to consume operating systems. First, let me start with some of my ideas surrounding the above. I feel that we're not doing a great job of presenting Image Builder. The stack we work with is large and varied, the public name we use is generally osbuild and not Image Builder. Are we a project, a tool, a team, a webservice? My thought on that is: we are a team that provides many tools. As for who is Image Builder for? For me we have two targeted 'demographics':
Historically we have focused mostly on the first part of this, however, the tooling we build has its uses for the second part as well. Lately we've been focusing on that as well but I'm very biased towards that group. The two groups are partially at odds with each other in the context of our team. Giving more flexibility to distribution maintainers has meant making things harder on system administrators. The presentation of Image Builder is not the greatest. Naming discussions are great so I'll bring one up: Why are we using the
We'd get a bit of hierarchy that way and have 3 clear and distinct areas: service, composer, osbuild. |
Beta Was this translation helpful? Give feedback.
-
I purposefully skipped any mention of a recent scenario that got me thinking about all this. I was afraid that bringing up specific features might influence the discussion to become too technical. I think I might have over-corrected though and perhaps it's not clear what I'm really on about. The following is a combination of real events (or my interpretation of them) with some imaginary yet plausible, in my opinion, outcomes. The real partWe've been getting requests to make partitioning more flexible. This goes beyond the recent requests for things like LVM naming customizations. Users have been asking for filesystem type customizations, control over LVM creation, etc, for years now. While addressing a recent user request, we decided that we can satisfy a lot of the issues and past requests (as well as anticipated future requests) by going "all in" and exposing configuration options for designing more-or-less the whole filesystem layout. This is a major shift from the existing filesystem customizations we support, which only allow adding mountpoints with a minimum size (no filesystem type selection) and a very recently added high-level switch for automatically creating LVM layouts vs plain partitioning. I think this decision and shift happened only semi-consciously. I'm sure everyone on the team would say they're on board with the whole thing if asked, but I also think that we're making a mistake by not having that conversation in the first place. Perhaps this conversation did happen, it might have been discussed by higher level decision makers without my knowledge. I doubt it, since I feel like the scope of the feature grew while we (myself and a couple of others on the team) were designing it, but maybe I'm interpreting events incorrectly. The imaginary partNow imagine this feature gets merged, added to osbuild-composer, it becomes a feature supported by the blueprints on-prem. Then when it comes time to add it to the service, different decisions are made. People in charge of the scope of features on the service, along with UI/UX designers, decide to address the underlying user request with a smaller scope, perhaps a set of high-level switches and options that translate internally to a small set of advanced partitioning customizations. This isn't a problem in itself. I do wonder how I would explain to a user the reason why there's a big difference in feature complexity between the two. We would probably say "the target audience for osbuild-composer is different from the audience of the service", for example. But the real reason in this case would be "well the backend people weren't talking to the service people when designing this"... and that's bad. Note that I don't think any of this will happen, just that it could, perhaps for a different feature in the future. That's fine, we're allowed to have differences in scope for different faces of the project, as long as it's done consciously and not in the ad-hoc, bottom-up way that I think it's done now. |
Beta Was this translation helpful? Give feedback.
-
Or:
First, a disclaimer
A lot of things I state as fact below are simply my own observations while working on these projects for the last few years. For context, almost all of my time is spent in images plus-and-minus one level, meaning osbuild-composer, images, and osbuild. It may very well be that I have a different view of things than others, whether they work on the same components or not. Please point out anything you feel is inaccurate or downright wrong in my statements. That's actually a big part of what this discussion is for.
Principles of $PROJECT
Last year we defined the principles of the component projects that make up Image Builder. You can find each list in the README for each project, osbuild, images, osbuild-composer, and image-builder-frontend. The purpose of this exercise was to make sure everyone was on the same page with respect to the rules we try to follow when working on the project. It was during a time when we had new people joining the team, as well as an increase in external contributors, and it became clear that, for some of us that had been around longer, these principles were somehow shared and agreed upon, but were never written down.
Principles, in this respect, are very different from things like code styles and contributor guides. The idea behind these is to communicate the role and nature of each project, the things users should expect from them (whether those are end users or developers). Statements like osbuild-composer's "If a blueprint can be built, it should also boot" serve to both guide development—if you add a new blueprint feature, you should think about how to validate it against all other possible customizations, image definitions, etc—and also define the user experience. Practically, it might be impossible to adhere to it completely—we can't control for strange interactions between user-defined packages for example—but it becomes a rule we can point to when deciding how tightly to control user inputs.
What even is Image Builder?
We are lacking this same idea for the broader Image Builder project. Unlike with each individual component, I feel that there's less implicit agreement about this. I suspect that a lot of us have different answers for the questions:
I'm certain the people who started the Image Builder project had answers for all of the above and maybe they all agreed on those answers as well. Most of them aren't working on the project any more (😢) but more importantly, things change. I do think it's important to revisit where it all started and why, we don't want to end up recreating the problem this project was meant to solve¹, but I also think it's worth reexamining them (or at least, answering them).
The drift
I think there are times when we drift away from things that might have been considered principles in the past. That's not bad, but it should be conscious. I feel like some of the things we're doing today would have been considered too much 2 or 3 years ago when the project was younger and the scope was smaller. That is also fine and perfectly normal.
Let's keep this under 1000 words
The crux of this whole post is:
Is there a drift in the principles and scope of Image Builder? Is this done consciously when designing features? Is everyone aware of this and are we all on the same page?
I think the answer to the last question there is "no". But as I mentioned in the disclaimer, maybe it's just me.
What do I want?
Whether it's just me or not, I think we would benefit from things like:
Footnotes
Beta Was this translation helpful? Give feedback.
All reactions