Shipments
A whole instance in one file, for carrying to another Mac.
On this page 5 sections
A shipment is one instance packed into a single file. Everything it has goes with it: the applications you installed, your files, your Linux account, how much disk and memory it was given, and which experimental features it was running. Someone else's MSL can install that file and get a working machine - even if their Mac has never downloaded that distribution.
It is, honestly, MSL's weirder and worse version of what Docker does. There are no layers, no registry, no build file, and nothing clever about it: it is one machine, copied whole. Docker is a better tool for almost everything a shipment could be used for. What a shipment is good at is the thing Docker makes awkward - handing a colleague the exact environment you are sitting in, graphical applications and all, and having them open it on their Mac without learning anything first.
Making one#
From the app, in the Tools tab, or from the menu beside the Terminal button: Create Shipment…. From a terminal:
msl work --shipment msl work --shipment -o ~/Desktop/work.mslship
The instance has to be shut down first. A shipment taken from a running machine catches its filesystem halfway through a write, which makes a file that looks fine and is not.
Expect it to take a few minutes and produce a file a few hundred megabytes to a gigabyte or so, depending on how much is in the instance. Most of that time is compression.
Installing one#
New Instance → Install MSL Shipment…, or:
msl shipment install work.mslship msl shipment install work.mslship --name borrowed
If the name inside is already taken, MSL picks a free one rather than writing over the instance you have. To see what is in a file before committing to it:
msl shipment info work.mslship
That reads only the small manifest at the front of the file, so it answers immediately even for a very large shipment.
What travels, and what it does on arrival#
| The filesystem | Everything - applications, files, configuration |
| Your Linux account | The one you log in as, so the instance opens as you |
| CPUs, memory, disk size | Applied to the new instance |
| Sandbox seals | Applied, but see below |
| Experimental features | Applied to that instance only |
Experiments do not change your MSL. The settings in a shipment are recorded as overrides for the instance it created and nothing else, so installing a shipment from someone who runs MSL differently from you leaves your own switches exactly as they were. Only the differences are stored, so an instance is not frozen against settings its author never touched.
Some things cannot be reproduced on every Mac. If a shipment wanted GPU acceleration and this Mac has no renderer installed, that one is skipped, and MSL says which and why rather than pretending.
Seals only travel in the safe direction. A sealed shipment installs sealed. An open one does not unseal anything - it leaves your defaults alone.
Before you install someone else's#
A shipment is a complete Linux system somebody else assembled. It can contain anything they put in it, and installing one is closer to running their computer than to opening their document. Install shipments from people you trust.
The checksum inside a shipment is there to catch a damaged or truncated file. It is not a signature, and it says nothing about who made it.
Where the file goes#
A .mslship is a plain zip. You can look inside with Archive Utility or unzip -l and find two things: msl.json, which is the manifest above, and the compressed disk. Nothing is hidden or encrypted.