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:
- Endeavors to be the world's most powerful cloud native developer environment
- Full virtualization support centered around KVM and QEMU
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.
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:
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!
- Dev Containers Documentation - you can skip most of the installation instructions and go directly to the tutorial
- Dev Containers Specification
- Beginner's Series to: Dev Containers - great introductory tutorial from the VS Code YouTube channel
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 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
, andutil-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
andzsh
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.
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":
Use BoxBuddy's interface to create your own pet containers from whichever distribution is on the list:
For CLI warriors you can manage your containers with Ptyxis's built in container support:
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.
- Check the JetBrains documentation for integrating those tools with the podman runtime.
- Check out how to setup JetBrains with devcontainers
- Uninstallation instructions
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
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.
- Install the Podman Desktop application for graphical use.
Though we default to docker and vscode for development, all of the Fedora upstream tools are included for those that prefer that experience.