{"$schema": "https://raw.githubusercontent.com/guitaripod/wwdc-sessions/master/schema/transcript.schema.json", "id": "wwdc2026-389", "language": "eng", "source": "https://developer.apple.com/videos/play/wwdc2026/389", "wordCount": 1214, "segments": [{"start": 7.0, "text": "Hi, my name is Michael,"}, {"start": 9.0, "text": "and today I want to introduce a new feature built on top of Containerization."}, {"start": 15.0, "text": "Containerization is a swift framework for running Linux containers,"}, {"start": 20.0, "text": "with a focus on security, privacy, and performance."}, {"start": 25.0, "text": "Linux containers are a great way to build, test, and deploy server-side applications."}, {"start": 33.0, "text": "Building on this foundation, Container machine,"}, {"start": 36.0, "text": "is a new feature that provides a highly integrated Linux environment,"}, {"start": 41.0, "text": "that works seamlessly on your Mac."}, {"start": 44.0, "text": "A Container machine is fast and lightweight, like a container,"}, {"start": 48.0, "text": "and persistent like a virtual machine."}, {"start": 52.0, "text": "Along with host integrations, a Container machine feels native to macOS."}, {"start": 58.0, "text": "Before learning more, about Container machine,"}, {"start": 60.0, "text": "lets take some time to review the Containerization framework."}, {"start": 65.0, "text": "Then, we will look the design principles that shaped Container machine."}, {"start": 70.0, "text": "Finally, we will explore how Container machine"}, {"start": 73.0, "text": "provides a seamless workflow for cross-platform development."}, {"start": 79.0, "text": "At WWDC 25 we open sourced Containerization."}, {"start": 85.0, "text": "Containerization is a Swift framework for running Linux containers on macOS."}, {"start": 90.0, "text": "It provides APIs for storage, networking, execution, and a Linux init system."}, {"start": 98.0, "text": "It is designed to provide each container with Virtual machine based isolation."}, {"start": 104.0, "text": "These lightweight Virtual machines are performant,"}, {"start": 106.0, "text": "and provide sub-second start times."}, {"start": 110.0, "text": "Along with Containerization, the container tool was open sourced."}, {"start": 115.0, "text": "It provides CLI commands for image creation, distribution,"}, {"start": 119.0, "text": "and lifecycle management for Linux containers."}, {"start": 123.0, "text": "If you want to learn more about the overall architecture of Containerization"}, {"start": 127.0, "text": "and the container tool, watch \"Meet Containerization\" from WWDC 25."}, {"start": 134.0, "text": "Now, let's take a look at the design principles for container machine."}, {"start": 139.0, "text": "These environments should be fast and lightweight,"}, {"start": 142.0, "text": "to integrate into existing workflows."}, {"start": 145.0, "text": "Switching between macOS and Linux should be easy."}, {"start": 149.0, "text": "Users should be able to customize and create new environments quickly."}, {"start": 154.0, "text": "Quick creation allows multiple projects to have their own, dedicated environment,"}, {"start": 160.0, "text": "without the worry of conflicting dependencies or toolchains."}, {"start": 165.0, "text": "Different tools and dependencies are often required during the development lifecycle."}, {"start": 172.0, "text": "Having a persistent environment,"}, {"start": 174.0, "text": "allows additional tools to be added and used over time."}, {"start": 178.0, "text": "Finally, these Linux environments should integrate into your existing work-flow."}, {"start": 183.0, "text": "Developing for multiple platforms shouldn't involve a large context switch."}, {"start": 189.0, "text": "There shouldn't be the need to learn new tools,"}, {"start": 191.0, "text": "when targeting a different environment."}, {"start": 194.0, "text": "We kept these design principles in mind when building Container machine."}, {"start": 199.0, "text": "A Container machine must be fast and lightweight."}, {"start": 202.0, "text": "They must be simple to manage."}, {"start": 205.0, "text": "They must provide persistence, allowing users to revisit over time."}, {"start": 209.0, "text": "And a Container machine must feel like an extension of macOS."}, {"start": 214.0, "text": "With these design principles in mind,"}, {"start": 216.0, "text": "lets look at how Container machine improves cross platform workflows."}, {"start": 221.0, "text": "Building on top of Containerization,"}, {"start": 224.0, "text": "each Container machine runs inside of its own, lightweight virtual machine,"}, {"start": 228.0, "text": "and use the same image format as containers."}, {"start": 232.0, "text": "It is a first class feature of the container tool and has a familiar UX."}, {"start": 237.0, "text": "Images built with the container tool,"}, {"start": 240.0, "text": "can to be used as the starting point for a new Container machine."}, {"start": 245.0, "text": "A Container machine is stateful and persists modifications made"}, {"start": 249.0, "text": "while you are working in it."}, {"start": 251.0, "text": "Start and stop projects as needed,"}, {"start": 253.0, "text": "Container machine ensures your environment can continue where you left it."}, {"start": 259.0, "text": "And with automatic user mapping, shared filesystem support,"}, {"start": 263.0, "text": "and the ability to enter your Linux environment,"}, {"start": 266.0, "text": "no matter where you are in a terminal,"}, {"start": 268.0, "text": "Container machine provides a smooth transition,"}, {"start": 272.0, "text": "from macOS into Linux, and back again."}, {"start": 276.0, "text": "Now, lets see Container machine in action."}, {"start": 279.0, "text": "Lets start with container machine."}, {"start": 288.0, "text": "This shows an overview of the actions we can perform,"}, {"start": 291.0, "text": "including ones like create, run, and stop."}, {"start": 296.0, "text": "To create a new Container machine, I'll use container machine create."}, {"start": 303.0, "text": "I'll provide it a name and set it as the default machine on my Mac."}, {"start": 309.0, "text": "This way, we don't have to provide the name for every command."}, {"start": 314.0, "text": "Container machine uses the same OCI images that containers use."}, {"start": 319.0, "text": "A common container image is alpine."}, {"start": 325.0, "text": "Great, our Container machine is created."}, {"start": 329.0, "text": "Next, I want to execute commands inside of this Container machine."}, {"start": 334.0, "text": "I'll use container machine run to execute the echo command."}, {"start": 348.0, "text": "Great, let try this with uname."}, {"start": 353.0, "text": "On macOS uname prints Darwin."}, {"start": 357.0, "text": "Container machine run uname, prints Linux, reflecting the runtime environment."}, {"start": 365.0, "text": "Container machine automatically mirrors your username"}, {"start": 368.0, "text": "and current working directory from your Mac."}, {"start": 371.0, "text": "If I run whoami on my Mac, it returns Michael."}, {"start": 376.0, "text": "Running pwd shows that I'm located in my user's home directory on macOS."}, {"start": 383.0, "text": "Lets run an interactive shell inside of the Container machine."}, {"start": 387.0, "text": "Container machine run,"}, {"start": 389.0, "text": "without additional arguments, will start an interactive session."}, {"start": 396.0, "text": "From inside my container machine, running whoami and pwd,"}, {"start": 401.0, "text": "returns the same username and path from my Mac."}, {"start": 411.0, "text": "Great!"}, {"start": 415.0, "text": "Automatic user creation, filesystem sharing,"}, {"start": 418.0, "text": "and having a consistent working directory results in a seamless experience."}, {"start": 423.0, "text": "Lets explore more, by looking at an application I'm building."}, {"start": 427.0, "text": "I have a Vapor-based web server that I'd like to run and deploy on Linux."}, {"start": 433.0, "text": "For my work-flow, I edit the project using Xcode on my Mac."}, {"start": 438.0, "text": "I use macOS tools, to edit images for the application."}, {"start": 443.0, "text": "I'll build and run this in Linux,"}, {"start": 445.0, "text": "then, test my changes on macOS by accessing the web server from Safari."}, {"start": 452.0, "text": "Let's work on this application."}, {"start": 454.0, "text": "In the terminal, running ls shows my project files."}, {"start": 460.0, "text": "I have a Package.swift, my Source code, and a Public directory holding assets."}, {"start": 467.0, "text": "I have a Container machine with the swift toolchain installed."}, {"start": 471.0, "text": "container machine list will display the name,"}, {"start": 474.0, "text": "IP address, and resource information of all my Container machines."}, {"start": 487.0, "text": "I will copy the IP address for later."}, {"start": 494.0, "text": "I'm ready to test my application in Linux."}, {"start": 497.0, "text": "I'll start with an interactive shell,"}, {"start": 499.0, "text": "inside of my Container machine, by running container machine run."}, {"start": 509.0, "text": "With automatic directory sharing, all my project files are available."}, {"start": 517.0, "text": "My Container machine has an isolated network."}, {"start": 521.0, "text": "For Safari on my Mac to access the web server,"}, {"start": 524.0, "text": "running inside the Container machine,"}, {"start": 527.0, "text": "I need to ensure that Vapor listens on the external interface."}, {"start": 532.0, "text": "Let's update the server's configuration in Xcode."}, {"start": 537.0, "text": "I will set the configuration's hostname to the IP address of my Container machine."}, {"start": 543.0, "text": "We copied this value earlier."}, {"start": 545.0, "text": "I edited this file in Xcode on my Mac,"}, {"start": 549.0, "text": "but these changes are already available to my Container machine."}, {"start": 553.0, "text": "Moving back to my terminal,"}, {"start": 555.0, "text": "I'm ready to compile and run my application."}, {"start": 559.0, "text": "Great, the server is running so lets view our site in Safari."}, {"start": 563.0, "text": "I will open Safari and paste the IP for my container machine,"}, {"start": 567.0, "text": "into the address bar."}, {"start": 569.0, "text": "I will also add port 8080."}, {"start": 573.0, "text": "Great, access works and I could stare at this all day!"}, {"start": 579.0, "text": "But, let's make one last change."}, {"start": 581.0, "text": "I used Icon Composer, to create the storage icon on screen."}, {"start": 586.0, "text": "I want to change the icon's background to a gradient."}, {"start": 590.0, "text": "I will open my existing icon file, in Icon Composer to make this change."}, {"start": 603.0, "text": "Now, I will export this icon to my project and overwrite the existing file."}, {"start": 615.0, "text": "Without copying files into my Container machine,"}, {"start": 618.0, "text": "I expect refreshing the page in Safari, to automatically display my updated icon."}, {"start": 624.0, "text": "Lets go back to Safari."}, {"start": 627.0, "text": "Great! my update is working."}, {"start": 633.0, "text": "Container machine builds on the usability and speed of containers,"}, {"start": 638.0, "text": "with the persistence of a Virtual machine."}, {"start": 641.0, "text": "The seamless integrations provide a Linux environment"}, {"start": 644.0, "text": "that feels like an extension of your Mac."}, {"start": 648.0, "text": "We're excited for you to try out Container machine."}, {"start": 651.0, "text": "Download the latest release of the container tool on Github."}, {"start": 655.0, "text": "We look forward to your feedback."}, {"start": 657.0, "text": "Thanks for watching!"}]}