MSL Wiki
MSL on GitHub

Every stop code

The complete list: what each code means, which part of MSL it is about, what raised it, and what to do.

Chapter 20 of 207 min read
On this page 14 sections

MSL shows a crash screen when it has stopped and carrying on would mean pretending. Every stop carries a code — a number like 0x00000020 and a name like SERVICE_WILL_NOT_STAY_UP. This page is the reference the crash screen links to.

Who raises one#

Raised byRangeMeans
Nothing — a signal or an unhandled error0x01–0x06MSL fell over in a way it did not anticipate. No advice, deliberately.
MSL, about itself0x10–0x13A condition MSL detects where it happens and cannot continue past.
MSL's observer (mslod)0x20–A state MSL has been in for minutes and cannot get itself out of, seen from outside. See Reading a crash report.

At a glance#

CodeNameAbout
0x00000001WENT_SOMEWHERE_IT_SHOULDNTnot established
0x00000002BUS_TOOK_A_WRONG_TURNnot established
0x00000003INSTRUCTION_MAKES_NO_SENSEnot established
0x00000004MATHS_HAPPENEDnot established
0x00000005GAVE_UP_ON_ITSELFnot established
0x00000006TRIPPED_OVER_A_TRAPnot established
0x00000010SERVICE_CANNOT_LISTENmslhd — the control socket
0x00000011SIGNING_KEY_UNREADABLEinstance identity — the machine key
0x00000012KEY_STORE_UNPROTECTEDMSL Admin Portal — the key store
0x00000013VIRTUALIZATION_REFUSEDmslhd — the virtualization entitlement
0x00000020SERVICE_WILL_NOT_STAY_UPmslhd — MSL's background service
0x00000021SERVICE_STOPPED_ANSWERINGmslhd — the control socket
0x00000022SERVICE_IS_NOT_INSTALLEDthe installed programs in Application Support/MSL/bin
0x00000023STATE_DIRECTORY_UNUSABLEApplication Support/MSL — instances, accounts and settings

Codes MSL raises about itself#

Each of these is a condition MSL cannot continue past, detected where it actually happens. They are not the same as the errors that get a sentence and a retry — an instance that will not start, a disk that needs checking — because those leave MSL working. These do not.

0x00000010 · SERVICE_CANNOT_LISTEN#

Subsystem: mslhd — the control socket. Raised by: mslhd, about itself.

MSL's background service could not open the socket everything else talks to it on, so nothing can reach it: not the app, not msl, not a Linux app asking for a file. There is no degraded mode to fall back to, so it stops rather than running as something nothing can reach.

What to do. Another copy of it may already be running. Quit MSL, open it again, and if that does not help, restart the Mac.

0x00000011 · SIGNING_KEY_UNREADABLE#

Subsystem: instance identity — the machine key. Raised by: mslhd, about itself.

The key MSL signs your instances with is there and cannot be read.

What to do. Check that /Users/Shared/MSL and the machine-key file inside it still belong to you and are readable.

0x00000012 · KEY_STORE_UNPROTECTED#

Subsystem: MSL Admin Portal — the key store. Raised by: mslhd, about itself.

This Mac is managed, but the folder holding the administrator's keys can be written by other accounts — so signed policies no longer verify and the administrator's rules have silently stopped applying.

What to do. An administrator can repair it:

shell
sudo chown -R root /Users/Shared/MSL && sudo chmod -R go-w /Users/Shared/MSL

0x00000013 · VIRTUALIZATION_REFUSED#

Subsystem: mslhd — the virtualization entitlement. Raised by: mslhd, about itself.

macOS will not let this copy of MSL's service create a virtual machine, so no instance can ever start. Almost always a copy of mslhd that was moved into place by hand instead of installed.

What to do. Install MSL from its package rather than copying the files in: the permission is part of the signature and does not survive a plain copy.

Codes MSL's observer raises#

These come from mslod, a small program that watches MSL from outside and is not part of it. Every threshold below is in minutes, not seconds: a crash screen for a healthy MSL is worse than no observer at all, so a single crash the service recovered from, an update replacing it, a kickstart, a slow reply while a guest's memory is written out, and the Mac waking from sleep are all recorded and never shown.

0x00000020 · SERVICE_WILL_NOT_STAY_UP#

Subsystem: mslhd — MSL's background service. Raised by: mslod.

MSL's background service has crashed and restarted several times in a few minutes, and never managed to answer anything in between. Nothing that needs it can work: not your instances, not the app, not the command line.

Detected as: four restarts of mslhd within five minutes, none of which replied to a request. One restart is launchd doing its job and is not this; restarts that did serve in between are a service being bounced, which is what an update does to it.

What to do. Quit MSL, then open it again — that reinstalls the service from the app. If it keeps happening, the crash report named mslhd in Console ▸ Crash Reports says why. The report panel on the crash screen already quotes the exception type it found there.

0x00000021 · SERVICE_STOPPED_ANSWERING#

Subsystem: mslhd — the control socket. Raised by: mslod.

The service is running and accepting connections, but it has stopped replying to them. Anything that asks it something now waits forever instead of being told no.

Detected as: five unbroken minutes with no reply and nothing written to MSL's own log by the service. Measured on a reply, never on a connection: a Unix socket's listen backlog is serviced by the kernel, so connecting succeeds against a service whose accept loop has wedged and proves nothing at all. The log is the second half of it — answering a status question waits on the same queue that freezes a guest and writes its memory to disk, so a shutdown saving several instances can legitimately leave the socket silent for minutes while the service is plainly still working.

What to do. Restart the service. Your instances keep their disks, and anything that was running comes back:

shell
launchctl kickstart -k gui/$(id -u)/com.msl.mslhd

If it wedges again, restart the Mac before using MSL for anything you care about.

0x00000022 · SERVICE_IS_NOT_INSTALLED#

Subsystem: the installed programs in ~/Library/Application Support/MSL/bin. Raised by: mslod.

The program MSL runs everything through is missing from where MSL installs it, or is not executable, so nothing can start. An install or an update most likely stopped part-way.

Detected as: three unbroken minutes missing. An update replaces that file in milliseconds and the installer stops the service on purpose, so neither of those reaches this.

What to do. Open MSL once: the app reinstalls its own command-line programs every time it launches. If MSL will not open either, install it again from its package — your instances and their disks are untouched by that.

0x00000023 · STATE_DIRECTORY_UNUSABLE#

Subsystem: ~/Library/Application Support/MSL — instances, accounts and settings. Raised by: mslod.

MSL cannot use the folder it keeps your instances, accounts and settings in. Instances may appear to have vanished.

Detected as: two unbroken minutes in which the folder could not be written, or the file listing the instances could not be read. Tested by actually writing, because the permission bits lie on a read-only volume.

What to do. Check that ~/Library/Application Support/MSL still belongs to you and is readable and writable, and that the disk it is on is not full.

Codes nothing understands#

A signal, or an error nothing caught. These carry no advice and name no subsystem, deliberately: inventing a next step for something MSL cannot explain, or blaming a part of MSL nobody has established was at fault, would both be worse than admitting it.

CodeNameWhat the processor said
0x00000001WENT_SOMEWHERE_IT_SHOULDNTMSL read or wrote memory that was not its own (SIGSEGV)
0x00000002BUS_TOOK_A_WRONG_TURNMSL asked for memory the processor could not give it (SIGBUS)
0x00000003INSTRUCTION_MAKES_NO_SENSEMSL tried to run something that is not an instruction (SIGILL)
0x00000004MATHS_HAPPENEDAn arithmetic operation had no answer MSL could use (SIGFPE)
0x00000005GAVE_UP_ON_ITSELFMSL hit a check inside itself it could not carry on past (SIGABRT)
0x00000006TRIPPED_OVER_A_TRAPMSL ran into a trap left for a debugger (SIGTRAP)

An uncaught error shows as UNCAUGHT_ and the error's own name instead of a number.

What MSL does not trade away#

macOS writes its own crash report, with a backtrace, and that file is the only thing that ever makes a crash like this fixable. So MSL shows the screen and then lets the process die exactly as it would have. Nothing is given up for the window.

You will find that report in Console ▸ Crash Reports, named after the part that stopped — mslhd, MSLApp, MSLFiles, msl or mslod.