October 26, 2023·4 min read·engineeringdockerrosettamulti-platform

Rosetta becomes generally available for Intel images on Apple silicon

Desktop 4.25 promotes Rosetta support on macOS 13 and later. Translation helps execute an existing Intel artifact while preserving the distinction between image identity and native execution.

An image can be available in a registry and still target a different processor from the machine on a developer's desk. Docker Desktop 4.25, released October 26, makes Rosetta support generally available on macOS 13 and later. Docker describes it as faster emulation of Intel-based images on Apple silicon. The change improves a compatibility path for existing artifacts without changing the architecture for which those artifacts were built.

That distinction is useful when deciding what a local run demonstrates. Executing an Intel image through translation exercises that Intel artifact in a translated environment. Selecting an ARM image exercises a different platform artifact. Both can support development, but they provide different information about the software a project intends to distribute.

I value the ability to move a packaged environment between machines. Processor architecture is one of the conditions that packaging must still describe. A translation path makes an existing image more usable on another machine, while an explicit platform choice keeps the meaning of that local environment clear.

Translation runs within the Linux environment

Apple's WWDC22 virtualization session describes Rosetta support for Linux x86-64 binaries in an ARM Linux virtual machine. The host exposes Rosetta through a directory-sharing device. Linux mounts that share and registers the translator to handle the relevant executable format. The guest can then launch x86-64 applications through Rosetta.

This is translation of application binaries within the guest environment. It does not mean the virtual machine's entire operating system has become an Intel system. The distinction helps explain how an ARM Linux guest can supply the surrounding environment while an application uses a different instruction set.

The Docker release promotes its integration of this capability. General availability describes the product support status of that path. It does not assert that every image behaves identically under every architecture or that translation makes an ARM build unnecessary. Those are separate questions about an application's distribution requirements.

The image index makes platform selection explicit

The containerd content-flow documentation explains how an image index refers to platform-specific manifests. A descriptor records the operating system and architecture, with a variant where applicable. A client follows the matching manifest to obtain the configuration and layers for its selected platform.

That means a familiar repository tag can stand above several distinct artifacts. The Intel and ARM variants are not merely different names for one set of executable bytes. Each selected manifest identifies the content appropriate to that platform. Understanding which variant is running is part of understanding the environment. Containerd follows the selected manifest's references to obtain its configuration and layers as separate pieces of content.

An Intel-only dependency makes the compatibility path especially relevant. Translation can allow a developer to run the available artifact while continuing to work on an ARM machine. If the project later produces an ARM variant, selecting that variant changes the artifact under examination. The convenience of one repository name should not obscure that change.

This also explains why successful image retrieval and successful execution are different events. A registry can supply the requested content correctly even if the local environment lacks the required execution support. The platform metadata describes the target, while the runtime environment determines whether it can execute that target directly or through translation.

The status change has a history

Docker introduced Rosetta for Linux as a beta in Desktop 4.16. Those January notes identify macOS 13 and Intel-image emulation on Apple silicon. October's release therefore changes the maturity of an existing integration. It is not the first appearance of Rosetta support in Docker Desktop.

The 4.25 notes also say Rosetta is enabled by default on macOS 14.1 and later. That default is narrower than its general-availability requirement of macOS 13 or later. Availability and automatic enablement should be described separately. Otherwise, a developer on a supported older macOS version might expect the same initial setting without checking it.

The same release raises Desktop's minimum macOS version to Monterey. That installation requirement is again distinct from Rosetta's requirement. A machine capable of installing the product does not necessarily satisfy every optional capability's prerequisites. Product version and host operating-system version both matter when explaining whether the translation feature is available.

Native and translated runs serve different purposes

For an existing Intel artifact, translated execution preserves the choice of artifact while changing the means of execution. That can be useful when a project needs to inspect a dependency it does not build itself. The local environment can exercise the available package without pretending that a native ARM alternative already exists.

For a project that publishes several architectures, each platform remains a separate deliverable. The index associates them under a common reference, but that association does not prove the implementations behave identically. Application correctness depends on the files and runtime requirements of the selected variant. Translation supplies an execution option for one variant.

I prefer to describe the result in those concrete terms. A translated Intel run can answer questions about the Intel package's application behavior in that environment. A native ARM run can answer questions about the ARM package. Keeping the platform in the description makes a reported result more useful to somebody investigating a different machine.

Performance claims need the same precision. Docker's release notes describe the Rosetta path as faster emulation, but they do not establish a speedup for every workload. The useful factual change is that the integrated path is generally available with stated host requirements. A project's execution characteristics still depend on what its program does.

Desktop 4.25 thus expands the supported way to use Intel images on Apple silicon while keeping image selection meaningful. The manifest identifies the platform artifact. Rosetta provides the translation mechanism for its executable instructions within the Linux environment. The macOS requirement and default setting determine how that mechanism is available on the host.