Aalbus-linux / Aalbus

The master repository for the Aalbus distribution
Other
23 stars 0 forks source link

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 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) ✅ ✅ ✅ ✅

Overview of regular standard components in base system

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

extra dependencies pulled in by above packages

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