arctic

a bsd userland, built on glibc

pages:

                   .xx
                   xxxx
                  xxxxxx
                 xxxxxxx
                xxxxxxxxx
               .xx ;xxxxxx
               xx   xxxxxxx
              xx+    xxxxxx+
             xxx      xxxxxx
            xxx        xxxxxx
           .xx         ;xxxxxx
           xx           xxxxxxx
          xx+            xxxxxx;
         xxxxxxxxxxxxxxxxxxxxxxx
        xxx                xxxxxx
       .xx                 +xxxxxx
       xx                   xxxxxxx
      xx+                    xxxxxx:
     xxx                      xxxxxx
    xxxx                      xxxxxxx
 xxxxxxxxx;:              :xxxxxxxxxxxxx:

arctic is a linux distribution built from source, pairing a BSD userland (toybox, zsh, doas, netbsd-curses, bmake) with glibc and an LLVM toolchain underneath. busybox handles init. packages install through alpm, its own package manager, with per-file verification and one-command rollback built in. a musl libc port is currently underway as an alternative base.

features

STATUS: arctic-minimal boots and installs end to end — Limine → kernel → initramfs → busybox init → zsh, with alpm installing from the repository carried on the medium. no desktop image exists yet, by design.

install

# wired is automatic, for wireless:
iwctl station wlan0 connect YOUR-NETWORK

mount /dev/nvme0n1p1 /mnt

# arctic-conf asks the questions and writes an answer file
# arctic-strap installs from it, non-interactively
arctic-conf /mnt
arctic-strap /mnt

mount /dev/nvme0n1p2 /mnt/boot
arctic-boot-conf /mnt/boot
arctic-boot-strap /mnt/boot --efi

reboot

build it yourself

every build runs sandboxed under bubblewrap — the host is mounted read-only, only the build tree and /tmp are writable. that is not a formality: a recipe that forgets DESTDIR once installed glibc straight over a host's /usr/lib. it now just fails with EROFS instead.

build/arctic-sandbox --check
build/build.sh

contribute

502 packages are defined in ports/manifest.tsv, with recipes generated from it rather than hand-written. adding a port means adding a line to the manifest, not boilerplate.

pull requests welcome on github.