MSL Wiki
MSL on GitHub

What can be restricted

The full list of switches, grouped, and the rule that keeps the list honest.

Chapter 15 of 202 min read
On this page 3 sections

A policy is a list of capabilities that are denied. Everything not denied is allowed, so a new MSL feature is never silently restricted by an old policy.

msl admin capabilities

prints every one with what it covers and where it is enforced.

The groups#

GroupCovers
instanceCreating, deleting, starting, stopping, renaming, cloning, locking instances
resourcesMemory, CPUs, disk size, fixed or dynamic memory
distroInstalling and removing distros, custom images, where images come from
shipmentImporting and exporting .mslship files
networkThe VPN, DNS, the sandbox network gate, the traffic monitor, forwarded ports
publicPublishing an instance to the internet, and each backend
sharingThe Mac home share, the clipboard, MSL Files, the Finder mount, the file picker
peripheralsUSB, audio, camera, microphone
graphicsGPU acceleration, per-app graphics, scaling
appsLaunching Linux apps, launch commands, Launchpad, the Dock, scanning
integrationsLinks and mail opening on the Mac, the global menu bar, shortcuts, sign-in
systemExperimental features, updating, startup, uninstalling, the terminal, SSH, diagnostics
adminRemoving or editing the policy itself

Denying a group denies everything under it: network covers network.vpn. Whole segments only — denying net denies nothing.

Scopes#

A rule applies to or to instance names, including lab-. So a lab Mac can forbid copying the teaching image while leaving a student's own instances alone.

The honesty rule#

Every capability says where it is enforced:

TierMeans
daemonmslhd refuses the request. Binds the app and the command line alike.
appRefused in the app or CLI, for things the daemon never sees.
interface onlyA hidden control, and nothing more.

That last one is deliberately unflattering, and MSL labels it rather than hiding it. system.terminal is interface-only: hiding MSL's Terminal tab does not stop anybody typing msl <instance> in Terminal.app, and the refusal on screen says exactly that.

A capability with nowhere that refuses it is not shipped as enforced. A test walks the whole list against the real enforcement sites, so the catalogue cannot drift into a list of promises nothing keeps.