Skip to main content

Developer Mode (bluefin-dx)

The Bluefin Developer Experience (bluefin-dx) is a dedicated developer image with bundled tools. Unlike traditional Linux systems, the operating system and developer environment are explicitly and purposely separated. This means that tooling is not installed on the host, and is instead containerized, in a virtual machine, or scoped to the user's home directory. It is designed to meet the following use cases:

The Cloud Native Development Approach

Bluefin goes "all in" on cloud native development and is used differently than a traditional distribution such as Ubuntu:

  • Development is done in devcontainers
  • Command line applications are installed using homebrew
  • Preconfigured ad-hoc containers for Ubuntu, Fedora, and Wolfi. Use whichever distribution you want.

This differs from traditional distributions by making the development process operating system agnostic. There is no equivalent to apt install php on Bluefin, development is done with podman or docker directly via an IDE.

We picked the cloud native pattern because local development in containers translates to deployment of containers on modern infrastructure.

image

The pattern in bluefin-dx (and aurora-dx) is centered around devcontainers. Since the devcontainers live in the project's git repository, and they can deployed on any operating system, Linux, MacOS, or Windows (via WSL). This facilitates "distributed by default" development and avoids Linux users being "the odd one out" when working with developers on other operating systems.

Each project has a declarative environment that is intended to be start the user with a "best practice" cloud-native workflow out of the box. The Ultimate Guide to Dev Containers has a good write up of the advantages of using devcontainers. This means that the development environment is kept in version control instead of coupled to the host.

Homebrew can also be used for installation of development tools. However it is recommended to avoid that and declare the project's dependencies in version control. It's so easy sometimes, it's okay.

You can always use whatever you want, you do not need to use everything in here in order to be productive -- at the end of the day it's your computer, this is just a set of defaults.

Note: This is an opinionated developer workflow that differs from Fedora's use of toolbox. Toolbox is included for people who prefer the upstream approach.

Enabling Developer Mode

You can rebase to the dx image by using the following command:

Step 1: Turn it on

ujust devmode to enable or disable the dx mode, then reboot:

image

Step 2: Add yourself to the right groups

ujust dx-group - to add your user account to the right groups. Then log out and back in. This step only needs to be done once.

Like all Universal Blue images, switching is atomic, allowing for clean switching between modes depending on the use case.

Features

Visual Studio Code with Docker

Visual Studio Code is included on the image as the default IDE. It comes with the devcontainers extension already installed. It's the recommended developer experience, start here if you're new to containerized development!

The most current Docker Engine is included by default and is set up to be the default container runtime for vscode. Using docker compose is also a great way to get started in container development and is an option if devcontainers don't fit your style.

Devpod

DevPod is an open source tool used to create reproducible developer environments. Each developer environment runs in a separate container and is specified through a devcontainer.json. Codespaces but open-source, client-only and unopinionated: Works with any IDE and lets you use any cloud, kubernetes or just localhost docker.

Check out this talk from Rich Burroughs:

Container Management with Podman Desktop

Podman Desktop

Podman Desktop is included to provide container management. Check out the Podman Desktop documentation for more information.

Built in Performance Tooling

Sysprof is included as a systemwide performance profiler. As well as Brendan Gregg's recommended CLI tools:

  • bcc, bpftrace, iproute2, nicstat, numactl, sysprof, sysstat, tiptop, trace-cmd, and util-linux

Thanks to Ubuntu and Canonical for the detailed specification and rationale. We hope that the inclusion of performance tools will lead to better upstream software.

Quality of Life Improvements

  • Cockpit for local and remote management
  • A collection of well curated monospace fonts
  • Tailscale for VPN
  • Just task runner for post-install automation tasks
  • fish and zsh available as optional shells

Command Line Experience

bluefin-cli

ujust bluefin-cli will install Bluefin's opt-in command line experience. bluefin-cli comes with some fantastic command line tools:

  • atuin for shell history
  • direnv to load and unload environment variables depending on the current directory.
  • eza as a replacement ls
  • fd for find
  • fzf for command line fuzzy finding
  • ripgrep for search
  • tealdeer for tldr
  • trash-cli to manage the system trashcan. (Strongly recommended for new CLI users)
  • ugrep for grep
  • yq - for yaml, json, and xml processing
  • zoxide as cd

The community may add new tools over time, re-running ujust bluefin-cli will pull in the new tools.

image

Pet Containers

Pet containers are available as interactive terminals via distrobox. Manage these via the included BoxBuddy application, available via the logomenu in the top left corner of your desktop under "Containers":

image

Use BoxBuddy's interface to create your own pet containers from whichever distribution is on the list:

image

For CLI warriors you can manage your containers with Ptyxis's built in container support:

image

The included Terminal includes a host terminal so that you can quickly switch between containers and the host.

  • The default terminal is Ptyxis, which includes built in integration of distrobox containers. It is aliased as "Terminal" in the menu. It is mapped to Ctrl-Alt-Enter by default for quick launch
  • Podman Desktop - Containers and Kubernetes for application developers
  • Pods is also a great way to manage your containers graphically

Other Tooling

JetBrains

ujust jetbrains-toolbox will fetch and install the JetBrains Toolbox application, which will manage the installation of the JetBrains set of tools. This application will handle installation, removal, and upgrade of the JetBrains products, and is handled completely in your home directory, independent of the operating system image. We do not recommend using the JetBrains flatpaks.

The JetBrains blog also has more information on JetBrains Dev Containers support:

Devpod also has support for JetBrains

Neovim

brew install neovim devcontainer then follow these directions for a devcontainer setup:

Kubernetes and other Cloud Native Tooling

ujust k8s-dev-tools to get started:

  • kind - Run a Kubernetes cluster on your machine. Run kind create cluster on the host to get started!
    • kubectl - Administer Kubernetes Clusters
    • k9s, kubectx, and helm. If you feel there's a tool that should be included by default, send a PR to this file. But let's not overdo it. 😄

AI and Machine Learning

ujust ollama to get started.

See also: AI and Machine Learning

Virtualization and Container Runtimes

  • virt-manager and associated tooling (KVM, qemu)
  • Incus provides system containers
    • LXC and
    • LXD are also provided for compatibility reasons, however is deprecated and will be removed in Spring 2025

Podman Development

All the upstream podman tools are included. This is the default system container runtime, and is the recommended developer configuration that Fedora ships with.

Though we default to docker and vscode for development, all of the Fedora upstream tools are included for those that prefer that experience.