Changelog Interviews Changelog Interviews #529

You’re just a devcontainer.json away

This week we’re joined by Brigit Murtaugh, Product Manager on the Visual Studio Code team at Microsoft, and we’re talking about Development Containers and the Dev Container spec. Ever since we talked with Cory Wilkerson about Coding in the cloud with Codespaces we’ve wanted to get the codebase setup with a dev environment in the cloud to more easily support contributions. After getting a drive-by contribution from Chris Eggert to add a Dev Container spec to our codebase, we got curious and reached out to Brigit and asked her to come on the show to give us all the details.


Sign in or Join to comment or subscribe

2023-03-04T16:08:41Z ago

Nix Flakes > Dev Containers

Jerod Santo

Jerod Santo

Omaha, Nebraska

Jerod co-hosts The Changelog, crashes JS Party, and takes out the trash (his old code) once in awhile.

2023-03-07T19:39:47Z ago

Appreciate the comment, Harry… but please say more 😎

2023-03-08T18:46:01Z ago


Basically, you guys should interview one of the smartest software engineers of our time, Eelco Dolstra

Nix flakes are superior to dev containers because they provide a more reliable and reproducible environment for development. Nix flakes allow developers to easily create isolated development environments that are completely reproducible and can be shared with other developers. By the end of the show, I wanted to shout, “NIX FLAKES!” at you guys…..and here I am because of that. 🤣

Flakes makes it easier to collaborate on projects and ensure that everyone is working in the same environment. Additionally, Nix flakes are more secure than dev containers, as they are built from a single source of truth and can be easily audited. You can actually use them to automate the build/creation of pinned devcontainers from nix flakes.

Flakes unlock a number of capabilities, including:

  1. Reproducible builds: Nix flakes allow for reproducible builds, meaning that the same exact build can be reproduced natively on any machine, regardless of the environment.

  2. Declarative configuration: Nix flakes provide a purely functional, lazy, declarative configuration language which describes the desired state of a complex system, rather than the steps needed to achieve that state.

  3. Version pinning: Crucially, Nix flakes allow for version pinning, meaning that specific versions of packages can be pinned to ensure that the same version is used across different machines.

  4. Dependency management: Nix flakes provide a powerful dependency management system, allowing for easy management of complex dependencies.

  5. Flexible deployment: Nix flakes allow for flexible deployment, meaning that the same configuration can be used to deploy to multiple environments. I can run a single command and have a devshell up (within minutes on first pull and seconds after the first build) that has ALL of the needed dependencies and won’t interfere with my system environment variables.

Bonus 6. Nix is starting to use content addressed storage, which is a whole other can of worms that brings even more guarantees that start to remind me of Unison.

Player art
  0:00 / 0:00