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 Changelog.com 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.
Discussion
Sign in or Join to comment or subscribe
Harry Pray IV
2023-03-04T16:08:41Z ago
Nix Flakes > Dev Containers
Jerod Santo
Bennington, Nebraska
Jerod co-hosts The Changelog, crashes JS Party & takes out the trash (his old code) once in awhile.
2023-03-07T19:39:47Z ago
Appreciate the comment, Harry… but please say more 😎
Harry Pray IV
2023-03-08T18:46:01Z ago
ok.
Basically, you guys should interview one of the smartest software engineers of our time, Eelco Dolstra https://github.com/edolstra
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:
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.
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.
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.
Dependency management: Nix flakes provide a powerful dependency management system, allowing for easy management of complex dependencies.
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.
Jerod Santo
Bennington, Nebraska
Jerod co-hosts The Changelog, crashes JS Party & takes out the trash (his old code) once in awhile.
2023-03-15T20:12:49Z ago
Thanks for the in-depth reply! I’ll put Eelco Dolstra on my short list of potential future guests 💚