# Fedora Bootc Ecosystem: Top-Down Linear Flow

## Overview
This flowchart shows the complete Fedora bootc ecosystem from package sources to user deployment, in a linear top-down progression.

## The Complete Flow

```mermaid
graph TD
    %% Start: Package Sources
    A[Fedora Package Sources] --> B[Koji Build System]
    B --> C[Mock Build Environments]
    C --> D[RPM Packages in Koji]
    
    %% Configuration Management
    D --> E[workstation-ostree-config Repository]
    E --> F[Treefiles (YAML)]
    F --> G[Package Groups & Variants]
    G --> H[Fedora Comps Sync]
    
    %% Build Process (with ostree-importer step)
    D --> I[rpm-ostree compose tree]
    F --> I
    I --> J[OSTree Repository with Commits]
    J --> J1[ostree-importer to official repo]
    J1 --> K[rpm-ostree compose container-encapsulate]
    K --> L[Special bootc containers]
    
    %% Base Images Created
    L --> M[quay.io/fedora/fedora-bootc:42]
    L --> N[Fedora Silverblue]
    L --> O[Fedora Kinoite]
    L --> P[Other Atomic variants]
    
    %% User Customization Paths
    M --> Q[Users build FROM base images]
    Q --> R[Custom bootc containers]
    
    %% Path 1: Direct Containerfile
    Q --> S[Write Containerfile directly]
    S --> T[Container-First build path]
    
    %% Path 2: BlueBuild abstraction
    Q --> U[Write recipe.yml]
    U --> V[BlueBuild generates Containerfile]
    V --> T
    
    %% BlueBuild processing
    U --> W[BlueBuild CLI processes recipe.yml]
    W --> X[Generates Containerfile automatically]
    X --> T
    T --> Y[Custom Fedora Atomic Images]
    Y --> Z[ISO, QCOW2, RAW formats]
    
    %% Production conversion tools (clarified roles)
    R --> AA[bootc-image-builder]
    M --> AA
    AA --> BB[Standard bootable images]
    
    R --> CC[osbuilder/osbuild]
    M --> CC
    CC --> DD[Advanced custom images]
    CC --> DD1[OSTree composition]
    CC --> DD2[Package management]
    CC --> DD3[Complex build orchestration]
    
    %% Traditional Fedora path
    D --> EE[Pungi Compose System]
    EE --> FF[Traditional Fedora ISOs]
    
    %% User experience limitations
    Y --> GG[Steep Learning Curve]
    Y --> HH[Compatibility Gaps]
    Y --> II[Slow rpm-ostree Operations]
    Y --> JJ[Hardware/Driver Issues]
    
    %% User lifecycle operations
    M --> KK[rpm-ostree upgrade]
    M --> LL[rpm-ostree rollback]
    M --> MM[rpm-ostree rebase]
    
    %% These affect the user experience
    KK --> NN[System updates]
    LL --> OO[System rollbacks]
    MM --> PP[System rebasing]
```

## Key Components

### 1. Package Infrastructure
- **Input**: Fedora Package Sources
- **Output**: RPM Packages in Koji repository
- **Tools**: Koji Build System, Mock Build Environments

### 2. Configuration Management
- **Input**: RPM Packages + Fedora package groups
- **Output**: Treefiles (YAML) defining variants
- **Tools**: workstation-ostree-config repository, Fedora Comps Sync

### 3. Build Process
- **Input**: RPM Packages + Treefiles
- **Output**: Special bootc containers
- **Tools**: rpm-ostree compose tree → ostree-importer → rpm-ostree compose container-encapsulate

### 4. Base Images
- **Input**: Special bootc containers
- **Output**: Official Fedora bootc containers and variants
- **Examples**: quay.io/fedora/fedora-bootc:42, Fedora Silverblue, Kinoite

### 5. User Customization
- **Input**: Base bootc images
- **Output**: Custom bootc containers
- **Paths**: 
  - Direct: Containerfile → Custom container
  - BlueBuild: recipe.yml → BlueBuild → Containerfile → Custom container

### 6. Production Tools
- **Input**: Custom bootc containers
- **Output**: Bootable disk images
- **Tools**: 
  - bootc-image-builder: Standard bootable images
  - osbuilder/osbuild: Advanced customization, OSTree composition, package management, complex build orchestration

### 7. Traditional Fedora
- **Input**: RPM Packages
- **Output**: Traditional Fedora ISOs
- **Tools**: Pungi Compose System

### 8. User Limitations
- **Input**: Custom Fedora Atomic Images
- **Output**: User experience challenges
- **Issues**: Learning curve, compatibility gaps, slow operations, hardware limitations

### 9. User Lifecycle Operations
- **Input**: Base bootc images
- **Output**: System management operations
- **Operations**: rpm-ostree upgrade, rollback, rebase
- **Purpose**: Fundamental to the "atomic" nature of the system

## What Each Step Produces

| Step | Input | Output | Tool |
|------|-------|--------|------|
| Package Sources | Source code | RPM Packages | Koji + Mock |
| Configuration | RPMs + package groups | Treefiles (YAML) | workstation-ostree-config |
| Build Process | RPMs + Treefiles | OSTree commits | rpm-ostree compose tree |
| Import | OSTree commits | Official repo | ostree-importer |
| Encapsulate | OSTree commits | bootc containers | rpm-ostree compose container-encapsulate |
| Base Images | bootc containers | Official variants | Container registry |
| User Customization | Base images | Custom containers | Containerfile or BlueBuild |
| Production Tools | Custom containers | Bootable images | bootc-image-builder/osbuilder |
| Traditional Fedora | RPMs | ISOs | Pungi |
| User Lifecycle | Base images | System operations | rpm-ostree commands |

## What This Shows

This flowchart demonstrates that Fedora bootc requires:
- Complete package infrastructure
- Configuration management system
- Specialized build tools
- User abstraction layers
- Multiple production conversion options
- User lifecycle management

For Debian Atomic to work similarly, it needs equivalent infrastructure and tools.
