Platform support
Russet runs on macOS, Linux, and Windows, but some recipe operations depend on tools that only one operating system provides. This page explains which operations work on each platform.
How platform limits work
Section titled “How platform limits work”Every platform registers the same processors, so a recipe loads on any
platform. When a processor needs a tool that the current platform doesn’t
have, the processor fails with an error that names the limitation, such as
Disk image operations are only supported on macOS and Linux. Russet doesn’t skip the
step or substitute different behavior.
Recipes that only download software and read metadata usually run on every platform. Recipes that read disk images, verify macOS code signatures, or build packages run on macOS and Linux. Recipes that install software need macOS.
Operations by platform
Section titled “Operations by platform”The following table shows how each kind of operation runs on each platform:
| Operation | macOS | Linux and Windows |
|---|---|---|
| Downloads and web requests | curl | curl |
| Zip and tar archives | ditto and tar |
On Linux, a built-in replacement for ditto that keeps file modes, symbolic links, and extended attributes. On both, a built-in extractor for tar archives that use gzip, bzip2, or xz compression. Zip archives extracted on Windows lose file modes and symbolic links. |
| Disk images | hdiutil |
Linux: a built-in reader for read-only .dmg images in the UDZO, UDBZ, ULFO, ULMO, UDCO, and UDRO formats with HFS+ or APFS volumes. Creating images, encrypted images, and ISO images aren’t supported. Windows: not supported |
| Building and installing packages | Helper services, pkgbuild, and installer |
Linux: a built-in package builder that doesn’t need root. Installing packages isn’t supported. Windows: not supported |
| Expanding and flattening packages | pkgutil, xar, and ditto |
Linux: built-in replacements that expand and flatten flat packages and unpack gzip and pbzx payloads. Windows: not supported |
| macOS code signatures | codesign and pkgutil |
Linux: built-in replacements that check app and installer package signatures against Apple’s root certificates. They don’t check notarization or revocation. Windows: not supported |
| Authenticode signatures | Not supported | Windows: SignToolVerifier with signtool.exe |
| Chocolatey packages | Not supported | Windows: ChocolateyPackager with choco.exe |
StopProcessingIf predicates |
Foundation predicates | A documented subset of predicate syntax |
| Munki metadata for packages and disk images | Supported | Linux: supported, except installer choices. Windows: not supported |
| Munki catalogs and pkginfo edits | Supported | Supported |
| Preferences | com.github.russet domain |
config.plist or config.json file in the Russet folder |
Disk images on Linux
Section titled “Disk images on Linux”Linux can’t mount Apple disk images, so Russet reads the image itself and copies each volume’s contents into a scratch folder, where processors see the same files, permissions, symbolic links, hard links, and extended attributes that macOS shows for the mounted image. Transparently compressed files are decompressed. The copy is removed when the recipe finishes, and a recipe that opens the same image in several steps reads it once.
The scratch folder needs free space about the size of the image’s contents.
By default it’s in the system temporary folder; set RUSSET_SCRATCH_DIR to
use another location. Because Linux can’t hard-link folders, folder hard
links become copies.
DmgCreator builds disk images on Linux too, but always with an HFS+ volume. APFS is DmgCreator’s default file system, and Russet has no APFS writer that macOS accepts, so an APFS request logs a warning and writes HFS+ instead. macOS opens these images the same way, and Munki only copies items out of them. Extended attributes in the source folder aren’t copied into the image.
Predicates on Linux and Windows
Section titled “Predicates on Linux and Windows”StopProcessingIf evaluates a predicate to decide whether to stop a recipe.
On macOS, Russet uses the same Foundation predicate engine as Python AutoPkg.
On Linux and Windows, Russet evaluates a bounded subset of the predicate
syntax and rejects predicates outside that subset instead of guessing.
Munki on Linux and Windows
Section titled “Munki on Linux and Windows”Russet generates Munki metadata natively. On Linux, it reads packages and disk
images with its built-in readers, including RestartAction, which it derives
from the package’s PackageInfo or Distribution the way installer does.
The installerChoices option needs macOS, because Distribution files can
choose packages with JavaScript. Icon extraction works on Linux. Windows can’t import packages
or disk images. Processors that only edit
metadata, such as MunkiPkginfoMerger, and the MakeCatalogsProcessor
catalog builder work on every platform.
On Linux and Windows, the _metadata dictionary in a generated pkginfo
records the platform name instead of a macOS version.