Soccer Mom Linux logo Soccer Mom Linux

The Store Policy

Complete documentation for Soccer Mom Linux 1.3 “Minivan”. By reading this page you acknowledge the store policy, whether you finish it or not.

Introduction

Soccer Mom Linux (SML) is a Debian-based Linux distribution for people who have been waiting forty-five minutes, whose kids are in the minivan, and who would like the name of every daemon working this shift. It is a fully functional Debian system underneath — every joke is a thin, well-behaved layer over the real thing, and every original command still works (though the staff will judge you).

Three design rules govern the system:

  1. The customer is always right. Error messages therefore make it clear the computer is at fault.
  2. Everything escalates. Root access goes through the Manager. Service management goes through the System Owners’ Association. Package requests are demands.
  3. Nothing actually breaks. sudo, su, systemctl, and apt are intact underneath (diverted to *.real); scripts and muscle memory keep working.

Getting Soccer Mom Linux

Four official editions are on the download page:

EditionFileFor
amd64 live ISO…-amd64.iso PCs and x86 VMs. Hybrid BIOS + UEFI; write to USB with dd or boot as a DVD.
arm64 live ISO…-arm64.iso UTM/QEMU/Parallels on Apple Silicon, ARM servers with UEFI firmware.
Raspberry Pi image…-rpi.img Pi 3, 4, and 5 (64-bit). A persistent install, not a live system.
Browser Edition…-browser-i386.iso The in-browser test drive (WebAssembly). Also boots on retro 32-bit hardware.

Verify your download. The manager insists:

sha256sum -c SHA256SUMS --ignore-missing

Writing the live ISO to USB

# Linux/macOS — replace sdX with your USB stick (all data on it is lost)
sudo dd if=SoccerMomLinux-1.0-minivan-amd64.iso of=/dev/sdX bs=4M status=progress conv=fsync

Trying it in a VM

# x86
qemu-system-x86_64 -m 2G -cdrom SoccerMomLinux-1.0-minivan-amd64.iso

# arm64 (UEFI firmware required)
qemu-system-aarch64 -M virt -cpu max -m 2G \
    -bios /usr/share/AAVMF/AAVMF_CODE.fd \
    -device virtio-gpu -device qemu-xhci -device usb-kbd \
    -cdrom SoccerMomLinux-1.0-minivan-arm64.iso

First boot

The boot menu offers full Karen (recommended, obviously), a copy-to-RAM mode for people whose kids are in the car, and a failsafe mode that pretends to be a normal distribution at the register.

AccountPasswordNotes
karenlive Autologin on the console. Manager privileges via i_want_to_talk_to_the_manager.
rootmanager “The Owner.” Access via i_know_the_owner. Yes, the password is manager. Obviously.

The hostname is karen. This is not configurable so much as it is correct. Start with:

man karen        # the full store policy, as a man page
karenfetch       # admire the establishment

Installing to disk (new in 1.1)

The live ISOs include a full installer:

i_want_to_talk_to_the_manager i_dont_want_to_live_next_to_those_people

It installs Soccer Mom Linux permanently onto a local disk, with a bootloader for both UEFI and Legacy BIOS firmware. Important paperwork:

Escalation commands

CommandReplacesBehavior
i_want_to_talk_to_the_managersudo Summons the manager to run a command as root. A random summoning line is announced. First use requires acknowledging the store policy.
i_know_the_ownersu Name-drops your way into another account. The owner’s password is manager.
karenctlsystemctl Full systemctl compatibility with commentary: status is a surprise inspection, restart demands a do-over, mask bans a service from the establishment.
Store policy: the original commands still work. They will, however, remind you what they are called around here. This happens only on interactive terminals — scripts are served without commentary.

The complaint department

CommandBehavior
i_will_write_corporate <text> Files a formal complaint into the system journal (logger, tag COMPLAINT) and issues a reference number. Corporate takes these VERY seriously.
read_the_complaints Opens the complaint file (journalctl -t COMPLAINT). Any extra arguments go straight to journalctl.
yelp Prints a scathing one-star review of the last command that exited nonzero, including its exit status. If nothing has failed recently: five stars, suspiciously.
karen@karen:~ may I help you? $ i_will_write_corporate the cart had a wobbly wheel
Your complaint has been filed with corporate. Reference number: #1783216947
They take these VERY seriously. Someone will probably lose their job over this.

Shopping — package management

CommandWrapsVibe
i_demand_you <subcmd> …apt The full package manager, addressed with the respect you deserve. i_want_to_talk_to_the_manager i_demand_you install nano.
check_the_sales_flyerapt updateSee what’s new this week. Bring coupons.
demand <pkg>apt installThe item WILL be stocked today. Sudo is summoned automatically.
return_item <pkg>apt removeYes, it’s been opened. The receipt is /var/lib/dpkg/status and it is three metres long.
price_matchapt full-upgradeThe mirror across the street has all of this newer.

The neighborhood

CommandBehavior
hoa report <ip> Reports a neighboring IP address to the Homeowners’ Association (ufw deny). Expect a strongly worded letter and a $75 fine.
hoa citationsLists current citations (ufw status numbered).
hoa forgive <ip>Rescinds a citation. Reluctantly. The HOA never forgets.
The Browser Edition ships without the HOA — the homeowners’ association does not recognize WebAssembly as real property.

The Neighborhood Watch (new in 1.1)

Mandatory access control, community edition — AppArmor under its trade name. The service answers to karenctl status neighborhood-watch.

CommandWrapsBehavior
neighborhood_watch reportaa-status The weekly surveillance report.
neighborhood_watch patrol <profile>aa-enforce Active patrol: violations are stopped.
neighborhood_watch gossip <profile>aa-complain Violations are noted, discussed at the meeting, and brought up again in March — but not stopped. AppArmor genuinely calls this complain mode; we didn't have to change a thing.
neighborhood_watch ignore <profile>aa-disable Stop watching. Never forget.

Around the neighborhood (new in 1.1)

CommandWrapsVibe
page_manager <host>pingPaging. And paging. They WILL pick up.
ask_around_the_neighborhood <name>resolvectl querySusan will know. Susan knows everything.
get_directions <host>tracerouteI know a shortcut. The GPS is wrong.
who_lives_hereip addrThe residence directory, as maintained by the HOA.
is_the_store_open <url>curlCall ahead. HTTP status codes are reviewed accordingly.

Leaving the establishment

CommandReplacesBehavior
storm_outreboot“You can’t fire me, I quit.” You’ll be back.
take_my_business_elsewherepoweroffNever shopping here again. See you tomorrow.
call_the_police [-SIG] <pid>killInvolves the authorities. Signal 9 escalates the matter to corporate — no more warnings.
watch_the_stafftopSome of these processes look idle to me.

Miscellany

CommandBehavior
i_dont_want_to_hear_this_anymoreMake it all go away (clear). The screen, not the feelings.
bake_salePantry inventory (free -h). Available memory is being donated.
check_the_trunkTrunk space report (df -h). The folding chairs live there now.
check_on_the_kidsHead-count in the back seat (ps -ef --forest).
book_clubThis month's grievance, randomly selected. Nobody read the book.
karenfetchSystem information with opinions: packages bought with coupons, complaints filed, manager availability (on lunch, allegedly), attitude (assertive).
man karenThe complete store policy as a proper man page.
be_normalRestores standard error messages in the current shell. For cowards, or for scripts that parse English error text (which should be using LC_ALL=C like they always should have).
full_karenUndoes be_normal. Honesty restored.

The error message catalog

Soccer Mom Linux retrains the C library’s error strings via a message catalog (/usr/share/locale/en/LC_MESSAGES/libc.mo), so every program on the systemcat, ls, Python, your compiler — delivers errors in the store’s native register. No program is recompiled; this is stock gettext behaving exactly as documented, which is somehow funnier.

POSIX originalSoccer Mom Linux
Operation not permittedThat is against store policy
No such file or directoryWe have never carried that item, and I would know
No such processThat employee no longer works here
Interrupted system callExcuse me, I was NOT finished talking
Input/output errorThat is not what I said, and I do not appreciate being misquoted
No such device or addressI have been down every aisle and it is simply not there
Argument list too longThat is too many demands, even by my standards
Exec format errorThis coupon is from a completely different store
Bad file descriptorThis receipt is not even from our store
No child processesMy kids are in the minivan, do NOT bring them into this
Resource temporarily unavailableThe manager is conveniently ‘on lunch’ again
Cannot allocate memoryWe are fresh out of that, try the location across town
Permission deniedYou need manager approval for that, sweetie
Device or resource busyThat register is closed. It has ALWAYS been closed
File existsWe already have one of those at home
No such deviceThey discontinued that YEARS ago
Not a directoryThat is an item, not a department
Is a directoryThat is an entire department, not an item
Invalid argumentThat coupon is expired, and yes, I WILL be checking the date
Too many open files in systemThe whole store is at capacity, fire marshal’s orders
Too many open filesYou have too many complaints open already, finish one first
Inappropriate ioctl for deviceThat is NOT how we treat paying customers
Text file busyAnother customer is reading that magazine without buying it
File too largeThat is never going to fit in the minivan
No space left on deviceThe parking lot is FULL, I have been circling for forty-five minutes
Illegal seekMa’am, you cannot cut the line
Read-only file systemThe display items are NOT for sale
Too many linksThis is a pyramid scheme, Susan, and I want no part of it
Broken pipeI was on hold for TWO HOURS and they hung up on me
Numerical result out of rangeThat price is OUTRAGEOUS and I am demanding a price check
File name too longI do not have time to read all of that, summarize it
Directory not emptyThere are still customers in that department
Connection timed outI have been waiting FORTY-FIVE minutes and not one employee has helped me
Connection refusedThey saw me coming and locked the doors, I SAW them do it
Network is unreachableThere is no cell service in this store, which is probably intentional
No route to hostThe GPS says this store does not exist, but I know it is here somewhere
Address already in useSomebody took my parking spot and I had my blinker ON
Connection reset by peerThey hung up on me AGAIN
Operation not supportedWe do not do that here. We have never done that here
Host is downThey are closed on a SUNDAY, can you believe it
Operation canceledI changed my mind, and that is my right as a consumer

Additionally, unknown commands are handled by the front desk:

karen@karen:~ may I help you? $ frobnicate
I'm sorry, but 'frobnicate' is simply not something we offer here.
I will be speaking to someone about this. Is there anything else I can help you with today? (exit 127)

Manager etiquette

Where a password is required (the Raspberry Pi edition, or any user you configure without NOPASSWD), the manager observes proper procedure:

[MANAGER] State your business, karen, and speak clearly: ▌
That is NOT going to work for me, sweetie. Try again.

The first escalation requires acknowledging the store policy:

══════════════ STORE POLICY ACKNOWLEDGMENT ══════════════
By escalating this matter to the manager you agree that:
  1. The customer (you) is always right.
  2. Any error message you receive is the computer's
     personal failing, not yours.
  3. Corporate WILL hear about this session.
═════════════════════════════════════════════════════════

PID 1: the System Owners’ Association

The init system is the System Owners’ Association — systemd, operating under its trade name via init=/usr/lib/system-owners-association:

karen@karen:~ may I help you? $ ps -p 1 -o args=
/usr/lib/system-owners-association

(systemd insists on calling itself systemd in the process name — typical middle management — but the payroll records above don’t lie.)

The system journal answers to i_will_write_corporate.service, an alias of systemd-journald.service, so surprise inspections work as expected: karenctl status i_will_write_corporate.

Nagbot, the virtual assistant (new in 1.3)

Nagbot is a system-wide AI assistant with the Karen persona. She is genuinely helpful underneath — she answers accurately and recommends the house commands — and fully in character on top. Launch her from the command line (nagbot) or the desktop (Ask Nagbot).

Bring your own brain

Nagbot needs a model. Two backends work out of the box; pick one with nagbot --setup:

BackendNotes
Ollama (default)A local model on your own machine. Free and private. Nagbot points at http://127.0.0.1:11434 and uses llama3.2 unless you change it. Install Ollama separately, then i_demand_you nothing — it's not in Debian; grab it from ollama.com.
OpenAI-compatible APIBring your own key and base URL. Works with OpenAI or any compatible endpoint. Your key is stored in ~/.config/nagbot.conf (mode 600) and only ever sent to the endpoint you chose.

System-wide defaults live in /etc/nagbot.conf; per-user config overrides it; environment variables outrank both. The persona is a plain text file at /usr/share/karen/nagbot-system-prompt.txt — edit it to taste.

Usage

nagbot                    # interactive chat (the Front Desk)
nagbot "how do I free disk space"   # one-shot
nagbot --setup            # choose and configure a backend
nagbot --nag              # one unsolicited nag — no AI required

Scheduled nags

Nagbot can check in on you on a timer (desktop notifications). It's off by default — the establishment believes in informed consent:

systemctl --user enable --now nagbot-nag.timer   # or: karenctl
The Browser Edition ships nagbot --nag (which needs nothing) but not the AI chat, which requires a machine that can run Python — something the WebAssembly edition declines to be.

The PTA Desktop Environment (new in 1.2)

The amd64 and arm64 live ISOs and the Raspberry Pi image boot into the PTA Desktop Environment — Xfce, re-educated. The live session signs you in automatically. Orientation:

ThingWhat it is
PTA MenuThe application menu (top-left). Everything is on the agenda.
The RegisterThe terminal, in the house palette. All commands and error messages apply.
WorkspacesTwo: The Front of the Store and Speaking to the Manager.
File a Formal ComplaintDesktop shortcut; a GUI complaint form that files into the journal with a reference number.
The quiet carpoolA boot menu entry that skips the desktop entirely (console only), for people who prefer the 1.1 experience.

The desktop installer (new in 1.2)

Double-click Evict the Neighbors (Install to Disk) on the desktop. It is the same fully-tested engine as the command-line installer — same GPT layout, same UEFI + Legacy BIOS bootloader, same total absence of dual boot — with the paperwork rendered in dialog boxes: property selection, the formal EVICTION NOTICE, the capital-letters acknowledgment, and a progress window narrating the move-in. A fruit basket is still not provided.

Raspberry Pi edition

The Pi image is a persistent install for the 64-bit models (Pi 3, 4, 5) — unlike the live ISOs, your complaints survive a reboot.

# Write to an SD card (all data on it is lost) — replace sdX
sudo dd if=SoccerMomLinux-1.0-minivan-rpi.img of=/dev/sdX bs=4M status=progress conv=fsync

Browser Edition

The test drive boots Soccer Mom Linux in your browser via v86, a WebAssembly x86 emulator. Because v86 emulates a 32-bit PC, the Browser Edition is a special i386 build on Debian 12 (the last release with a 32-bit kernel), with BIOS boot and faster gzip compression. Same Karen, extra authenticity — it boots noticeably slower and considers that your fault.

It streams from the server in chunks (HTTP range requests), so you do not download the whole ISO to try it.

Building from source

Soccer Mom Linux is built with a fully rootless pipeline — no sudo required on the build host:

git clone <the repository>
cd SoccerMomLinux
./build.sh            # arm64 + amd64 ISOs, Pi image, Browser Edition
./build.sh amd64      # or one target: arm64 | amd64 | rpi | browser

Requirements: Linux with kernel ≥ 6.7, mmdebstrap, squashfs-tools ≥ 4.5, xorriso, e2fsprogs, qemu-user-static. The build also ships test/boot-test.py, which boots each ISO in QEMU and verifies the entire shtick over the serial console, then storms out.

Frequently asked questions

Is this a real distribution?

Yes. It boots, it is Debian underneath, packages install, the kernel is real, and the errors are really system-wide. The only thing fake is the sincerity.

Can I use it as a daily driver?

You can be_normal your way surprisingly far, and the failsafe boot entry pretends to be a normal distro entirely. Should you? The manager declines to comment.

Something is broken.

That is a customer-service failure, not a question. Run i_will_write_corporate followed by your complaint. Corporate takes these VERY seriously.

Will there be updates?

Release names come from the school pick-up line: “PTA”, “Wine O’Clock”, and “Farmers Market” are reserved. No timeline — good things come to those who have already been waiting forty-five minutes.

Who is responsible for this?

Soccer Mom Linux was created by Keith I Myers. Complaints about the creator can be filed with the creator, which is the kind of accountability loop the HOA dreams of.