Aalbus

July 30, 2021 · View on GitHub

Aalbus

Aalbus

The master repository for the Aalbus distribution, a Linux distribution using musl libc, the LLVM tool chain and a mostly (Net)BSD-derived userland.

The name Aalbus comes from the fictional giant albino penguin Aptenodytes albus from the Lovecraft universe. The selection of the mascot is also a nod to Gentoo (a species of penguin), Tux (a penguin) and Beastie (a demonic mascot). The development of this new OS initally got inspired by early work on a musl/clang/libc++ based Gentoo stage 4, where I realized that working from that base limited the options for full customization (most notably, portage depends on bash, bash depends on readline).

The OS is not motivated by language or license fundamentalism or anti-GNU sentiments as such, but more a general desire to increase and explore the diversity in the Linux OS space, which often leads to selection of BSD and suckless alternative tools.

Contact and community

As Aalbus matures, one of the aims is naturally to recruit other interested people and to evolve the OS from a personal hobby project to one that is managed by a community as a real distro. Discussion can currently be done on the Github issue tracker, Reddit or Discord. Welcome!

Aims

Aalbus is an experimental base system which aims to be self-hosting and installable. The components of the base system are interesting (mostly) source-compatible alternative implementations of those typically found in a standard GNU/Linux distribution. Whenever possible, BSD utilities will be used.

The base system distribution includes the pkgsrc package manager, and the aim is to package the entire base distribution using custom mkfiles under a custom "Aalbus" sub-directory in pkgsrc. A problem that needs to be solved is that pkgsrc tends to pull in a lot of dependencies that the bootstrapped system has shown are not needed, which leads to a "bloating" of the system. Because of this, the migration will be gradual and at first will only packages that can be built cleanly in pkgsrc be migrated. The /usr/pkg directory is merged with / and /usr.

Components

As a warning for future users: This Linux distribution is built with alternative libraries, which means that it is source-compatible with most open source programs but not binary-compatible with GNU/Linux. You will thus most likely never be able to run closed source binaries intended for GNU/Linux on this OS. All sources (including modifications) used to bootstrap this base system are present as forked repositories under the Aalbus-Linux organization. The continued development strategy from inside the Aalbus system has changed from following -git to use a modified local fork of pkgsrc. Details will be found under /usr/local/scripts and /usr/pkgsrc/Aalbus with locally modified or generated packages specifically for Aalbus. Ultimately, all components will hopefully migrate to pkgsrc packages, which will mean that the base system can be managed and installed from a binary package repository. At a later stage, local modifications will be changed to external patches and directories so that most of the system can be maintained using vanilla upstream pkgsrc.

Overview of components:

With the migration to pkgsrc, the list below is not complete since pkgsrc pulls in several other dependencies. Initially this "fat" developer image with all the tools will be released. When things have matured, a minimal "user" image will be generated where only utilities needed to boot, run, partition and format disk, install and use the binary package manager to install programs (including all the developer tools present in the "fat" image).

Core componentImplementationBuiltmigrated to pkgsrc
Kernel:Linux +Filemon +ZFS
C compiler:LLVM/Clang
C++ compiler:LLVM/Clang++
Fortran compiler:LLVM/Flang
YACC:byacc
LEX:flex and RE-flex✅ ✅✅ ✅
M4:nbase (NetBSD)
Make:bmake as make, kati as gmake✅ ✅✅ x
Config:mk-configure
pkg-config:pkgconf
libtool:slibtool
Ninja:samurai
LibC:musl + llvm-crt-replacement✅ ✅✅ x
LibELF:elftoolchain
nss:nsss (static)
LibC++:LLVM/libc++
Curses:netbsd-curses
Readline:libedit
PamOpenPAM
libcaplibcap-ng
Coreutils:nbase (NetBSD)
util-linux:ubase (Suckless) (static)
grep:nbase (NetBSD) and ugrep✅ ✅✅ ✅
awk:onetrueawk
bc:BSD bc
sed:nbase (NetBSD)
zlib:zlib-ng
Archivers:libarchive + pigz✅ ✅✅ ✅
Init system:s6 init + s6-rc✅ ✅
udev:mdevd
Shell:mksh (static)
roff:heirloom-doctools
man:mandoc
pager:most
editor:vim (also installed as vi, nvi as backup)✅ ✅✅ ✅

Overview of regular standard components in base system

Core componentImplementationBuiltmigrated to pkgsrc
Extended file attributes:attr
Access contol list:acl
Magicfile
Shadowshadow
Bootloaderrefind
Initramfsdracut
dosfstoolsdosfstools
e2fs-toolse2fstools
f2fs-utilsf2fs-utils
xfstoolsxfstools
btrfs-progsbtrfs-utils
zfs-utilszfs-utils
fdiskgptfdisk
Curlcurl
Perlperl5
Version control:git
Version control:cvs
CMakeCMake
Package Managerpkgsrc

extra dependencies pulled in by above packages

PackageDependencyBuiltmigrated to pkgsrc
LLVMlibexecinfo
mostS-Lang
attrgettext-tinygettext
shadowlibcap-ng
shadowskey
s6-linux-initskalibs
s6-linux-inits6
s6-networkings6-dns
:s6-networking
s6-linux-initexecline
s6-linux-initutmps
dracutkmod
:libbsd + Alpine BSD compat headers✅ ✅✅ x
:libnl-tinygettext
:gnu-getoptx
:libglobx
libarchivebzip2
libarchivelibb2
libarchivelz4
libarchivezstd
libarchivexz
libarchivelzo2
libarchivelibxml2
libarchivelibexpat
libarchiveopenssl
ugreppcre2
mk-configurebmkdep
nbasemusl-fts
vislibtermkey
vislpeg
vistre
vislua
e2fs-toolslibuuid
e2fs-toolslibblkid
btrfs-toolslibmount
refindgnu-efi

TODO: investigate ways to replace gnu-efi with a more native compilation using efi-clang