MOUSE

MOUSE is the Monolithic Opinionated Unix-like System Environment: a small Linux system with a versioned base, mouse-ports for third-party software, and cheesed as PID 1.

Build

The build needs Apple Container, Docker, or Podman, plus QEMU and Expect for the runtime checks.

make image
make run
make check

The guest defaults to the host architecture, so Apple Silicon builds AArch64. Set MOUSE_ARCH=x86_64 or MOUSE_ARCH=aarch64 to override it. An explicit MOUSE_BUILDER_PLATFORM supplies the default architecture only when MOUSE_ARCH is unset, so MOUSE_ARCH=x86_64 MOUSE_BUILDER_PLATFORM=linux/arm64 cross-builds an x86_64 guest on the Arm builder. Architecture-specific artifacts live under build/x86_64/ and build/aarch64/; downloaded sources are shared under build/sources/.

The default builder has 8 CPUs, 8 GB of memory, and 8 build jobs; override those with MOUSE_BUILDER_CPUS, MOUSE_BUILDER_MEMORY, and MOUSE_BUILD_JOBS. MOUSE_NETWORK=0 make run disables QEMU networking. MOUSE_GRAPHICAL=1 make run opens QEMU's graphical display while retaining the serial console in the terminal.

VM images use the hostname mousehole and provide the administrator account mouse with the password cheddar. The account is a member of wheel and can elevate through doas; direct root and toor password authentication remains locked.

System

The base owns /bin, /sbin, /usr/bin, and /usr/sbin; mouse-ports owns /usr/local. /var, /home, /srv, and /usr/local are shared by both root environments, /etc follows the selected root, and /run is rebuilt at boot. The fixed /usr/local package prefix keeps ports out of base-owned paths.

Limine boots the default or alternate root from the same disk. mouse-bootenv prepare snapshots the running root into the inactive one; activate selects it and rollback selects the other root. Automated base updates and configuration merging are not implemented yet.

cheesed mounts early filesystems, reaps children, supervises services in cgroups, and handles shutdown. It identifies itself as Cheesed to meet you! v0.1.0. Service definitions live in /etc/rc.d and /usr/local/etc/rc.d; dependency cycles, missing facilities, and duplicate names are rejected.

Persistent service policy lives only in /etc/rc.conf:

enable_network=YES
enable_gardendevd=YES
enable_seatd=YES
enable_greetd=YES
enable_wpa_supplicant=NO
enable_cron=YES
enable_ntpd=YES

Assignments are exactly enable_NAME=YES or enable_NAME=NO; shell expansion, includes, and other keys are invalid. /sbin/service controls the running system without editing boot policy.

The x86_64 kernel includes common laptop and desktop storage, USB, input, wired-network, Intel Wi-Fi, and Atheros Wi-Fi drivers. Images ship the complete pinned linux-firmware collection. To configure Wi-Fi, write a mode-0600 /etc/wpa_supplicant/wpa_supplicant.conf with wpa_passphrase, set enable_wpa_supplicant=YES in /etc/rc.conf, and reboot; gardendevd loads drivers for devices present at boot or plugged in later.

Packages

Images contain the MOUSE ports tree in /usr/local/src/mouse-ports, with source-built bmake under /usr/local. Ports use /usr/local/etc for configuration, /var/db/mouse/packages for installation records, and /var/cache/mouse/ports for verified distfiles. This state survives a base rollback.

Checks

make check builds the assembled disk with test fixtures, then boots it under QEMU. It covers UEFI boot on both architectures and BIOS on x86_64, both Btrfs roots, services and cgroup cleanup, users, networking, storage tools, native C and C++ compilation, ports layout, and persistence across reboots. The build also rejects changed source checksums and dynamic base executables.

S
Description
The Containerfile situation. May or may not build an Operating System.
https://bigcheese.llc
Readme
198 KiB
Languages
Shell 61.8%
Rust 29.6%
Dockerfile 6.3%
C 1.5%
Makefile 0.8%