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.
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!
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.
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.
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 component | Implementation | Built | migrated 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 | ✅ | ✅ |
Pam | OpenPAM | ✅ | ✅ |
libcap | libcap-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) | ✅ ✅ | ✅ ✅ |
Core component | Implementation | Built | migrated to pkgsrc |
---|---|---|---|
Extended file attributes: | attr | ✅ | ✅ |
Access contol list: | acl | ✅ | ✅ |
Magic | file | ✅ | ✅ |
Shadow | shadow | ✅ | ✅ |
Bootloader | refind | ||
Initramfs | dracut | ✅ | ✅ |
dosfstools | dosfstools | ✅ | ✅ |
e2fs-tools | e2fstools | ✅ | ✅ |
f2fs-utils | f2fs-utils | ✅ | ✅ |
xfstools | xfstools | ✅ | ✅ |
btrfs-progs | btrfs-utils | ✅ | ✅ |
zfs-utils | zfs-utils | ✅ | ✅ |
fdisk | gptfdisk | ✅ | ✅ |
Curl | curl | ✅ | ✅ |
Perl | perl5 | ✅ | ✅ |
Version control: | git | ✅ | ✅ |
Version control: | cvs | ✅ | ✅ |
CMake | CMake | ✅ | ✅ |
Package Manager | pkgsrc | ✅ | ✅ |
Package | Dependency | Built | migrated to pkgsrc |
---|---|---|---|
LLVM | libexecinfo | ✅ | ✅ |
most | S-Lang | ✅ | ✅ |
attr | gettext-tiny | ✅ | gettext |
shadow | libcap-ng | ✅ | ✅ |
shadow | skey | ✅ | ✅ |
s6-linux-init | skalibs | ✅ | ✅ |
s6-linux-init | s6 | ✅ | ✅ |
s6-networking | s6-dns | ✅ | ✅ |
: | s6-networking | ✅ | |
s6-linux-init | execline | ✅ | ✅ |
s6-linux-init | utmps | ✅ | ✅ |
dracut | kmod | ✅ | ✅ |
: | libbsd + Alpine BSD compat headers | ✅ ✅ | ✅ x |
: | libnl-tiny | ✅ | gettext |
: | gnu-getopt | ✅ | x |
: | libglob | ✅ | x |
libarchive | bzip2 | ✅ | ✅ |
libarchive | libb2 | ✅ | ✅ |
libarchive | lz4 | ✅ | ✅ |
libarchive | zstd | ✅ | ✅ |
libarchive | xz | ✅ | ✅ |
libarchive | lzo2 | ✅ | ✅ |
libarchive | libxml2 | ✅ | ✅ |
libarchive | libexpat | ✅ | ✅ |
libarchive | openssl | ✅ | ✅ |
ugrep | pcre2 | ✅ | ✅ |
mk-configure | bmkdep | ✅ | ✅ |
nbase | musl-fts | ✅ | ✅ |
vis | libtermkey | ✅ | ✅ |
vis | lpeg | ✅ | |
vis | tre | ✅ | ✅ |
vis | lua | ✅ | ✅ |
e2fs-tools | libuuid | ✅ | ✅ |
e2fs-tools | libblkid | ✅ | ✅ |
btrfs-tools | libmount | ✅ | ✅ |
refind | gnu-efi |
TODO: investigate ways to replace gnu-efi with a more native compilation using efi-clang