Bedrock Linux - The Freedom of Choice

"I am getting very excited while looking at bedrock" is a phrase I never thought I'd say before.

Bedrock Linux - The Freedom of Choice

Have you ever used a single Linux distribution for a prolonged period of time? If you answered 'yes', then it's more than likely at some point you've tried to install a package which is not natively supported by your distro's package manager.

This problem is obviously more common on Debian/Redhat/SUSE based systems and less likely to happen on Arch etc.; nevertheless - whenever it happens, it's very infuriating.

Recently, a solution to that problem has emerged on the Linux scene - the Bedrock Linux - a dsitro, which isn't a distro, but at the same time it's all distros combined.

Are you confused yet? Prepare for some more Linux magic incoming.

Bedrock Linux is a meta Linux distribution which allows users to utilize  features from other, typically mutually exclusive distributions.  Essentially, users can mix-and-match components and packages as desired  from multiple Linux distributions and have them work seamlessly  side-by-side.  

Bedrock Linux's goal of letting users enjoy features from other Linux distributions.  To achieve this, Bedrock provides a script which hijacks a given traditional Linux distribution install and converts it into a Bedrock Linux install.

Some Bedrock users like to refer to their installs as "Hijacked X" - for example, I could say (as I'm using Bedrock with Arch Linux as its "base") I'm using a "Hijacked Arch".

Installing (or hijacking distros with) Bedrock

Thus, the first step is to install a traditional Linux distribution.  Some considerations to help you decide which traditional Linux distribution to install include:

  • Bedrock Linux currently supports x86_64 and arm7vl.  Other architectures may work but will require you compile the installer and updates yourself.  They will also lack brl fetch functionality.
  • All of the initial install's distro-specific files may later be easily removed.  It may be best to think of the hijack install process as installing Bedrock under the initial install, not over it.  Bedrock becomes the base of the system, with the initial install's files a removable layer on top.  Hence Bedrock's name.

You can see the distro support page on the official Bedrock's page for distros which Bedrock is known to be able to hijack well.

After preparing the installed Linux system as you usually would, download the latest installer corresponding to your CPU architecture from here or build your own from here.

Having that done, run the script as root with the --hijack flag:

sh --hijack

Confirm at the prompt you understand what the script is doing, then allow it to convert the existing install into Bedrock Linux.  Finally, once it has completed successfully, reboot.

Do NOT attempt to install Bedrock on ANY Linux systems you are currently using for production or test (unless you're ready to lose it). Bedrock installation CANNOT be reverted without a third-party backup and it is NOT suitable for high-compute use cases (yet). I suggest you should firstly test it out on a new, clean VM before attemtping to convert an "old" system.

If you see a new init selection menu during the boot process, congratulations!  You're now running Bedrock Linux.

Before we'll move on to what can you do in Bedrock, we need to discuss some very important concepts first.

Glossary of Bedrock

Many Linux distributions are composed of packages, which are collections of related files.  In such distros most distro-specific files and processes are associated with some package.  For example, /usr/bin/vim may be provided by the vim package.  Packages are typically written with the expectation of interacting with other packages from the same Linux distribution release. For example, an executable from one package may utilize a library provided by another package.  This interaction expectation typically breaks down across packages from different Linux distributions, or even packages across different releases of the same distribution.  For example, two packages from different distributions may each expect a different build of a library at the same file path.

A Bedrock Linux system is composed strata.  Like packages, these are collections of related files.  Unlike packages, however, strata have a relatively high degree of tolerance for interacting with other files from other Linux distributions.  A Bedrock system may be composed of strata that each expect a different build of a library at the same file path but still work, and work together.

Strata are often one-to-one with traditional Linux distribution installs. One may have an Arch stratum, a Debian stratum, a Gentoo stratum, etc.  However, they do not have to be related to Linux distributions.  For example, one may have a stratum that is composed of a single man page.

Every process and every file on a Bedrock Linux system is associated with some stratum.  Global files (described below) are associated with the bedrock stratum.

Time to test some Bedrock commands

A Bedrock Linux system is composed of strata, which are collections of interrelated files.  These are often one-to-one with traditional Linux distribution installs: one may have an Arch stratum, a Debian stratum, a Gentoo stratum, etc.  Bedrock integrates these strata together creating a single, largely cohesive system.

To list the currently installed (and enabled) strata, run:

brl list

A fresh install will have two strata: Bedrock itself and the initial install. This, alone, is of little more immediate value than just the initial install. To benefit from Bedrock more strata are needed.  To list distros Bedrock knows how to acquire as strata, run:

brl fetch --list

Then to acquire new strata, run (as root):

brl fetch <distros>

That may fail if it auto-detects a bad mirror.  If so, manually find a good mirror for the distro and provide it to brl fetch with the --mirror flag.

You may remove strata with

brl remove <strata>

Once brl fetch has completed you may run commands from the new strata.  For example, the following series of commands make sense on a Bedrock system:

sudo brl fetch arch debian
sudo pacman -S mupdf && sudo apt install texlive
pdflatex file.tex && mupdf file.pdf

Bedrock's integration is not limited to the command line commands.  Other features which work across strata include:

  • Graphical application menus or launchers will automatically pick up applications across strata.  For example, Ubuntu's Unity will offer launching Gentoo's vlc.
  • Shell tab completion.  For example, Gentoo's zsh will tab complete Arch's pacman.
  • The Linux kernel will detect firmware across strata.
  • Xorg fonts work across strata.  For example, Arch's firefox will detect Gentoo's terminus font.
  • Various graphical theming information work across strata.
  • Man and info pages work across strata.  For example, Arch's man will display Void's xbps-install man page.

Bedrock FTW?

As  interesting as Bedrock seems to be right now, it will definitely have  to grow before it will be a reliable option for running Debian packages  on RedHat, RedHat's on Arch, Arch's on Ubuntu etc. etc.

I  wouldn't be sure if Bedrock ever matches the reliability of virtual  machines or containers, but definitely (even in its current state), it  is much more convenient. In my opinion, Bedrock is could be called "a  WINE for Linux Distros" while trying to explain what it is to a newbie.

What do you think? Are you going to test Bedrock out on a virtual machine or are you going to convert your "working" Linux to Bedrock? Let me know in the comments!

Related Article