Bluefin DX#
Bluefin DX (Developer Experience) is the developer-focused variant of Bluefin, an atomic desktop built with container-native technology and designed for cloud-native development workflows. Described as "a Linux desktop for serious developers", it extends the base Bluefin image with approximately 67 additional development packages, totaling around 160 packages that include Docker, Podman, Incus, QEMU, libvirt, Visual Studio Code, and GPU compute tools.
The DX variant embraces a container-first development philosophy where all development happens in containers rather than directly on the host. This approach complements Bluefin's image-based architecture, where the system is delivered as OCI container images using bootc for atomic updates and rollbacks. Local package layering is locked by default, preventing mutation of the base system—development dependencies live in containers instead, keeping the system image pristine and making upgrades less problematic.
Bluefin was founded by three former Ubuntu/Canonical developers and is described as "an interpretation of the Ubuntu spirit built on Fedora technology" as part of the Universal Blue project. The DX variant specifically targets developers who need comprehensive containerization, virtualization, and debugging tools without sacrificing desktop usability or system stability.
History and Development#
Bluefin DX emerged as part of the Universal Blue project's effort to create developer-focused desktop environments that embrace cloud-native workflows. The project was founded by three former Ubuntu/Canonical developers who sought to bring "an interpretation of the Ubuntu spirit built on Fedora technology" to image-based Linux desktops.
The DX variant represents a specific response to the challenges developers face working on traditional package-based systems, where dependency conflicts and system degradation can interfere with productivity. By pre-installing comprehensive containerization and virtualization tooling, Bluefin DX enables developers to work entirely within containers while maintaining a stable, unchanging base system.
Architecture and Design Philosophy#
Image-Based System#
Bluefin DX uses an image-based architecture where the system is delivered as complete OCI container images using bootc for atomic updates and rollbacks. Updates are checked automatically every 6 hours and applied on reboot, ensuring the system stays current without manual intervention. Running rpm-ostree reset and rebooting always restores the system to pure image mode, providing a reliable recovery mechanism.
Container-First Philosophy#
The DX variant's architecture makes local package layering locked by default via LockLayering=true in /etc/rpm-ostreed.conf, which prevents mutation of the base OSTree commit. This design choice isn't a limitation—it's a feature. Development dependencies belong in containers, not polluting the base OS. This approach ensures the system image remains pristine, making upgrades less problematic with no package-based degradation over time.
The container-first development approach means workflows remain OS agnostic using podman, docker, and flatpak. Local development mirrors cloud deployment using the same containers in dev, test, and production.
Pre-Installed Developer Tools#
Bluefin DX includes approximately 67 additional packages beyond the base Bluefin image, creating a comprehensive development environment out of the box. The complete package list is defined in build_files/dx/00-dx.sh.
Container and Orchestration Tools#
Docker Stack (from official Docker repository):
- docker-ce, docker-compose-plugin, docker-buildx-plugin — Full Docker CE with Compose v2 and BuildKit
Podman Extensions:
- podman-compose, podman-machine, podman-tui — Extended Podman tooling for compose workflows and terminal UI
System Containers and Virtual Machines#
Incus and LXC:
- incus, incus-agent, lxc — System container and VM manager with clustering support
Virtualization Stack:
- qemu, qemu-system-x86-core, qemu-img — QEMU emulator and disk image tools
- libvirt, virt-manager, virt-viewer — KVM management with GUI tools
Integrated Development Environment#
Visual Studio Code is pre-installed from the official Microsoft repository with the Dev Containers extension already configured. Docker is set up as the default runtime for VS Code devcontainer workflows.
System Analysis and Debugging#
BPF/eBPF Tracing Tools:
- bcc, bpftrace, bpftop — Comprehensive eBPF tracing toolkit
Performance Profiling:
- sysprof, trace-cmd, tiptop — System profiling and performance analysis
GPU Compute Support#
AMD ROCm:
- rocm-hip, rocm-opencl, rocm-smi — AMD GPU compute stack for heterogeneous computing
Web-Based Management#
Cockpit Modules:
- cockpit-machines, cockpit-podman, cockpit-storaged — Web interface for managing VMs, containers, and storage
Additional Development Tools#
Base Bluefin packages also included in DX:
- gcc, make, python3-pip — Build toolchain and Python package installer
- git-credential-libsecret — Secure git credential storage
- tailscale — Mesh VPN for secure networking
- fish, tmux, zsh — Alternative shells and terminal multiplexer
- borgbackup, restic, rclone — Backup and cloud sync tools
Differences from Standard Bluefin#
| Feature | Bluefin (Standard) | Bluefin DX |
|---|---|---|
| Total Packages | ~93 base packages | ~160 total (+67 dev packages) |
| Docker | Install via brew install docker | Pre-installed from official repository |
| VS Code | Not included | Pre-installed with Dev Containers extension |
| Podman Extensions | Podman only | podman-compose, podman-machine, podman-tui |
| Virtualization | None | QEMU, libvirt, virt-manager, virt-viewer |
| System Containers | None | Incus, incus-agent, LXC |
| BPF Tracing | None | bcc, bpftrace, bpftop |
| AMD GPU Compute | None | rocm-hip, rocm-opencl, rocm-smi |
| Cockpit Management | None | cockpit-machines, cockpit-podman, cockpit-storaged |
| Target Audience | General users, casual developers | Developers needing containerized workflows |
Both variants are available with standard graphics or NVIDIA GPU support using proprietary drivers.
Container Development Approaches#
Bluefin DX supports four complementary approaches to containerized development, each optimized for different workflows:
1. Dev Containers#
Project-specific, reproducible development environments integrated with VS Code. Visual Studio Code comes pre-installed with the Dev Containers extension already configured, and Docker is set up as the default runtime for devcontainer workflows.
Three ways to start (from the official quickstart):
- Add to existing project: Command Palette →
Dev Containers: Add Dev Container Configuration Files... - Clone and open: Command Palette →
Dev Containers: Clone Repository in Container Volume... - Create from template: Command Palette →
Dev Containers: New Dev Container...
Dev Container CLI (for workflows without VS Code):
brew install devcontainer
devcontainer build .
devcontainer up .
devcontainer exec . bash
The ublue-os/devcontainer repository provides a specialized container for building Universal Blue projects, including Podman, Buildah, Skopeo, cosign for image signing, syft for SBOM generation, and bootc-base-imagectl.
2. Distrobox and Toolbox#
Traditional Linux distribution environments that integrate with your home directory. The ublue-os/toolboxes repository provides a centralized collection of containers designed for Toolbox/Distrobox with Ptyxis terminal as the recommended default experience.
Available toolbox variants:
| Toolbox | Description |
|---|---|
| ubuntu-toolbox | Ubuntu 24.04 with 123 pre-installed packages |
| fedora-toolbox | Fedora 43 with RPMFusion repositories for hardware acceleration |
| debian-toolbox | Debian Trixie base |
| arch-toolbox | Arch Linux with paru AUR helper |
| wolfi-toolbox | WolfiOS with developer variant (wolfi-dx-toolbox) |
| docker-distrobox | Ubuntu-based rootful distrobox with Docker-CE |
| incus-distrobox | Ubuntu-based rootful distrobox with Incus from Zabbly |
3. Docker and Podman#
Application containers for services and workloads.
Docker: Pre-installed on DX and set up as the default runtime for VS Code devcontainer workflows. On standard Bluefin, install via brew install docker. Homebrew includes containerd, enabling Docker installation from Homebrew.
Podman: The default container runtime on Bluefin, providing rootless container execution by default with Docker CLI compatibility and native systemd integration.
Podman Quadlets: systemd unit files that provide declarative container management, auto-starting on login with automatic updates and cleanup. Copy quadlet files to ~/.config/containers/systemd and enable podman-auto-update.timer for automatic midnight updates.
4. Incus#
Full system containers and virtual machines with enterprise features.
Incus is a modern system container and virtual machine manager included in Bluefin DX. It's a community-driven fork of LXD supporting:
- System containers — Full OS simulation sharing the host kernel, near-instant start, unprivileged by default
- VMs — QEMU-based with hardware isolation and full PCI passthrough
- Application containers — OCI-compatible images from Docker Hub
- Clustering up to 50 servers with live migration
Bluefin DX configuration: The bluefin-dx-groups service automatically creates the incus-admin group and adds wheel group members. Users can also run ujust dx-group for manual configuration. A dedicated incus-workaround.service fixes SELinux labels at boot.
Virtualization Support#
Bluefin DX includes a complete virtualization stack for running full virtual machines:
- qemu, qemu-system-x86-core, qemu-img — QEMU emulator and disk management tools
- libvirt, virt-manager, virt-viewer — KVM management daemon with GUI tools
The bluefin-dx-groups service automatically adds users to the libvirt group. cockpit-machines provides web-based VM management accessible via the Cockpit web interface.
Installation and Setup#
Fresh Installation#
Install directly from the Bluefin DX image:
- Standard graphics:
ghcr.io/ublue-os/bluefin-dx - NVIDIA GPU:
ghcr.io/ublue-os/bluefin-dx(nvidia-open variant)
Rebase from Standard Bluefin#
# Interactive rebase helper
ujust rebase-helper
# Or manually rebase to DX variant
sudo bootc switch ghcr.io/ublue-os/bluefin-dx:latest
System-wide Flatpaks and user Flatpak data are preserved during rebase.
Post-Installation Configuration#
# Enable developer mode (if not already on DX)
ujust devmode # then reboot
# Add yourself to developer groups (docker, incus-admin, libvirt)
ujust dx-group # not needed on Bluefin LTS
Update Streams and Versioning#
Bluefin DX is available across multiple update streams:
| Stream | Base | Kernel | Update Schedule |
|---|---|---|---|
| gts | Fedora 42 | Pinned | Weekly |
| stable | Fedora 43 | Pinned | Tuesdays |
| latest | Latest Fedora | Unpinned | Weekly |
| beta | Latest Fedora | Unpinned | As-needed |
System images check for updates automatically every 6 hours and apply them on reboot. Flatpak apps update daily at 4:00 AM via systemd timers with no reboot required.
GPU Support and Configuration#
NVIDIA GPUs#
The Bluefin DX NVIDIA image includes the NVIDIA Container Toolkit for GPU passthrough and sharing in containers. Configuration uses proprietary drivers with nouveau blacklisted.
Podman Quadlet configuration for NVIDIA:
[Container]
Image=pytorch/pytorch:latest
Nvidia=all
Environment=NVIDIA_VISIBLE_DEVICES=all
Volume=/home/user/models:/models
Do NOT use AddDevice=/dev/dri for NVIDIA.
AMD GPUs#
ROCm packages (rocm-hip, rocm-opencl, rocm-smi) are pre-installed in Bluefin DX for GPU compute workloads.
Intel and AMD GPU Containers#
Mount /dev/dri using AddDevice=/dev/dri:/dev/dri. If permission errors occur, run sudo setsebool -P container_use_devices=true.
Example Quadlet for Intel/AMD GPUs:
[Container]
Image=tensorflow/tensorflow:latest
AddDevice=/dev/dri:/dev/dri
Environment=DRINODE=/dev/dri/renderD128
Package Management#
Bluefin uses a three-layer package management strategy:
- System layer — Updated as complete OCI images via bootc
- Flatpak — GUI applications, auto-updated daily at 4AM
- Homebrew — CLI tools and developer utilities
Curated Development Bundles#
Bluefin provides curated Brewfile bundles installed via ujust bbrew:
| Bundle | Contents |
|---|---|
| ide.Brewfile | VS Code, VSCodium, JetBrains Toolbox, Neovim, Helix, Micro |
| k8s-tools.Brewfile | kubectl, helm, k9s, kind |
| cncf.Brewfile | Headlamp, OpenLens, Podman Desktop |
| ai-tools.Brewfile | aichat, mods, codex, gemini-cli |
| cli.Brewfile | General CLI utilities |
| swift.Brewfile | Swift development environment |
| fonts.Brewfile | Developer fonts (Caskaydia Mono, Fira Code, etc.) |
System Commands#
| Command | Description |
|---|---|
ujust update | Upgrade system using bootc upgrade, update Flatpaks |
ujust clean-system | Clean Podman/Docker images, volumes, Flatpaks |
ujust dx-group | Add user to docker, incus-admin, libvirt, dialout groups |
ujust bbrew | Interactive menu for curated app bundle installation |
ujust rebase-helper | Assist rebasing to different Bluefin variants |
ujust devmode | Enable developer mode (then reboot) |
ujust powerwash | Factory reset via bootc install reset (erases user data) |
SELinux Considerations#
When mounting host directories into containers, SELinux labeling can cause permission errors. Use --security-opt label=disable when mounting directories from your home folder:
podman run -d \
--name=myapp \
--security-opt label=disable \
-p 8080:8080 \
-v /var/home/username/myapp/data:/app/data \
docker.io/myorg/myapp
For GPU device access errors: sudo setsebool -P container_use_devices=true.
Target Audience and Use Cases#
Bluefin DX is "a Linux desktop for serious developers" targeting:
- Developers seeking cloud-native workflows and container-first development
- Teams needing reproducible, version-controlled dev environments via Dev Containers
- Developers working with AI/ML workloads requiring GPU container support
- Infrastructure and DevOps engineers needing local VMs and system containers
- Developers who want a near-zero-maintenance OS that stays out of the way
Common use cases:
- Full-stack development with project-specific containers
- Cloud-native application development mirroring production environments
- Kubernetes and container orchestration development
- AI/ML model development with GPU acceleration
- Multi-tenant infrastructure testing with Incus clustering
- Cross-platform development with OS-agnostic workflows
Relevant Code Files#
| File | Description | Repository |
|---|---|---|
build_files/dx/00-dx.sh | DX package installation script (~67 developer packages) | ublue-os/bluefin |
build_files/base/04-packages.sh | Base package installation (~93 packages) | ublue-os/bluefin |
build_files/shared/build-dx.sh | DX build script | ublue-os/bluefin |
system_files/dx/usr/bin/bluefin-dx-groups | Automatic group configuration (docker, incus-admin, libvirt) | ublue-os/bluefin |
system_files/dx/usr/lib/systemd/system/incus-workaround.service | Incus SELinux fix service | ublue-os/bluefin |
system_files/dx/usr/share/ublue-os/user-setup.hooks.d/10-vscode.sh | VS Code Dev Containers extension auto-install hook | ublue-os/bluefin |
system_files/bluefin/usr/share/ublue-os/just/system.just | System management justfile (ujust commands) | projectbluefin/common |
Related Topics#
- Bluefin — Base operating system
- Universal Blue — Parent project
- Dev Containers — Development container specification
- Incus — System container and VM manager
- Podman — Daemonless container engine
- Docker — Container platform
- Distrobox — Container-based development environments
- bootc — Bootable container technology
- Flatpak — Application distribution framework
- Homebrew — Package manager