W
C
I
I
T

SLAM

The System Layer Abstraction Modules set (SLAM) is a minimalist framework for a Nix-based operating system distribution. SLAM follows in the tradition of NixOS but with an independent codebase that strives to maximise flexibility while constraining the scope of its functions. The eponymous system layer abstraction offers a choice of init systems and service managers that can run both in isolation and in mutually composing forms.

screenshot of a virtual machine booting

SLAM demonstrates that it is both possible and advantageous to reject the monolithic status quo. The project is intended to be a research platform and not a replacement for production grade Linux distributions. It is however in active use on both personal hardware and virtual servers.

SLAM differs from other distributions in that has no aspirations of becoming an open-ended community project. It is developed under the discipline of a single developer to retain conceptual coherence and conform to a single standard of quality and intent. Restricting development to a handful of engineers is a well established norm within the operating systems community. It is a model that has yielded results like UNIX, Project Oberon, and L4 microkernel family.

SLAM is neither Free Software or Open Source. SLAM is released under the terms of the Peer Production License. This limits use to individual users, non-commercial entities, and other worker owned cooperatives. This is to ensure that development remains aligned to research goals and disincentivise the accretion of poorly conceived features.

Features

  • BIOS and UEFI booting via the Limine bootloader.
  • Dual stage bootstrap from initramfs.
  • s6 service supervision with s6-rc service management. Available as a primary system layer or as a secondary via a modular service.
  • Synit as a system-bus and service manager. Available as a primary system layer or as a secondary via a modular service. Supports federated service management via external modules.
  • Finit as PID1 and service-manager (inherited from Finix). Available as a primary system layer.
  • Modules for core Linux services.
  • Modular services support for externally defined services.
  • Modular services for hosting SLAM service managers on NixOS.
  • Package overlays to sever malignant dependency chains.
  • Module documentation authored using the mdoc language.
  • User management and Pluggable Authentication Modules.
  • A switch-to-configuration script and /run/current-system directory for compatibility with NixOS deployment tooling.

Getting started

The SLAM Git repository is hosted at git.informatics.coop/projects/slam.

SLAM is a research project which does not allude to an abundance of tutorials. The slam-images repository exemplifies initial system configurations and a harness for importing the SLAM expressions. Additional articles are provided via the interim Synit wiki. Module options are documented in the slam(5) man page.

Project History

The originating project was a port of the Synit reactive operating system to the NixOS module system and to advance work on Nix RFC0163. After NixOS development stalled the SLAM repository was forked from Finix repository. Finit is still supported by SLAM but Finix is the the recommended project for building Finit based systems.

History shows that SLAM is not an aberration but a stepping stone in development timeline that spans decades:

Nix project started by Eelco Dolstra.
The Purely Functional Software Deployment Model published by Eelco Dolstra.
NixOS: the Nix based operating system published by Armijn Hemel. Uses System V init.
NixOS migrates to Upstart.
Guix first commit from Ludovic Courtès.
NixOS migrates to systemd.
not-os first commit from Michael Bishop.
vpsadminos forked from not-os by Richard Marko.
NixWRT announced by Daniel Barlow.
Sigil first commit.
nix-processmgmt framework first commit from Sander van der Burg.
NixOS Init Freedom first commit from Guido Witmond.
NixNG first commit from Richard Brežák.
Spectrum first commit from Alyssa Ross.
ZilchOS first commit from Alexander Sosedkin.
Liminix first commit from Daniel Barlow.
Portable Service Layer RFC submitted by Sander van der Burg.
NixBSD first commit from Audrey Dutcher.
SixOS presented at 38c3 by Adam Joseph.
Modular Services PR submitted by Robert Hensing.
Finix first commit from Aaron Andersen.
SLAM forked from Finix.

Support and discussion

SLAM discussion happens on the IRC channels #synit on Libera and #slam on the OFTC network.