{"id":3635,"date":"2016-04-13T01:26:06","date_gmt":"2016-04-13T01:26:06","guid":{"rendered":"http:\/\/www.garysieling.com\/blog\/?p=3635"},"modified":"2016-04-13T01:26:06","modified_gmt":"2016-04-13T01:26:06","slug":"philly-ete-talk-notes-nixos","status":"publish","type":"post","link":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/","title":{"rendered":"Philly ETE Talk notes: NixOS"},"content":{"rendered":"<p>In the interest of seeing new developments in DevOps, I went to a talk at Philly ETE on Nix OS, by <a href=\"https:\/\/twitter.com\/SusanPotter\">Susan Potter<\/a>, which ended up being quite interesting as it&#8217;s outside what I normally work on. <\/p>\n<p>NixOS turns out to be a Linux distribution with specific tooling inspired by functional programming techniques (which out loud sounds confusingly like &#8220;*nix&#8221;). This includes specialized dependency management and a scripting language. Collectively this offers a number of compelling benefits: you should be able to easily run multiple versions of a particular runtime concurrently, and have repeatable installations (and rollbacks!) that self-document their dependencies. This also prevents side-effects on other users or by your past self on your present and future self.<\/p>\n<p>If you build\/install a package, it gets it&#8217;s own area on the filesystem with a uniquely named folder, isolated with chroot, which prevents it from having implicit dependencies on things you&#8217;ve installed, or environment variables you set and forgot about. It sounded like these use symlinks to manage references between the packages.<\/p>\n<p>As I understand it, the dependency manager does all the downloading as a single step, then does the actual installations, so that the installation gets the benefits of being a non-side effecting process (i.e. you can run it as many times as you want and get the same result, so long as you have disk space).<\/p>\n<p>Depending on the problem space you&#8217;re currently in, there are a bunch of different tooling options that offer overlapping functionality to Nix. I find the idea of functional\/immutable deployments really compelling, knowing that on my own servers I haven&#8217;t done a great job of documenting my own setup. The biggest disadvantage to Nix seems to me to be that it requires you to use a custom OS, which is a pretty high level of buy-in.<\/p>\n<p>As feature examples, the &#8220;chroot jail&#8221; feature is used by a number of tools (e.g. Docker or Dokku) for isolation. One note &#8211; I overheard another attendee mention that a lot of people are using Alpine linux as a minimalist Linux as a basis point for Docker images.<\/p>\n<p>Chef and Puppet make some efforts to get server deployment to be concepts that live outside of individual machines, but in my limited view as an outsider they lack the compelling features of functional programming. Puppet seems to assume you have a lot of servers, although I do like the idea of being able to declare a desired state and have Puppet fix your machines to match that state. Kubernetes is an interesting toolset as well &#8211; this seems to also take over all your infrastructure, but in the demos I&#8217;ve seen it appears to be something one could actually make use of at a smaller scale.<\/p>\n<p>Other things I noted to research<sup><a href=\"#footnote_1_3635\" id=\"identifier_1_3635\" class=\"footnote-link footnote-identifier-link\" title=\"https:\/\/www.terraform.io\/intro\/\">1<\/a><\/sup><sup><a href=\"#footnote_2_3635\" id=\"identifier_2_3635\" class=\"footnote-link footnote-identifier-link\" title=\"http:\/\/www.idris-lang.org\/\">2<\/a><\/sup><\/p>\n<ol class=\"footnotes\"><li id=\"footnote_1_3635\" class=\"footnote\">https:\/\/www.terraform.io\/intro\/<span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_1_3635\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_2_3635\" class=\"footnote\">http:\/\/www.idris-lang.org\/<span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_2_3635\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>NixOS is a linux distribution with features inspired by functional programming, to ensure more reproducible and stable builds.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[15],"tags":[338,430,538],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"NixOS is a linux distribution with features inspired by functional programming, to ensure more reproducible and stable builds.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"gary\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Gary Sieling - Software Engineer\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Philly ETE Talk notes: NixOS - Gary Sieling\" \/>\n\t\t<meta property=\"og:description\" content=\"NixOS is a linux distribution with features inspired by functional programming, to ensure more reproducible and stable builds.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2016-04-13T01:26:06+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2016-04-13T01:26:06+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Philly ETE Talk notes: NixOS - Gary Sieling\" \/>\n\t\t<meta name=\"twitter:description\" content=\"NixOS is a linux distribution with features inspired by functional programming, to ensure more reproducible and stable builds.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-nixos\\\/#blogposting\",\"name\":\"Philly ETE Talk notes: NixOS - Gary Sieling\",\"headline\":\"Philly ETE Talk notes: NixOS\",\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"},\"datePublished\":\"2016-04-13T01:26:06+00:00\",\"dateModified\":\"2016-04-13T01:26:06+00:00\",\"inLanguage\":\"en-US\",\"commentCount\":2,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-nixos\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-nixos\\\/#webpage\"},\"articleSection\":\"Meetups, linux, phillyete, talks\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-nixos\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/meetups\\\/#listItem\",\"name\":\"Meetups\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/meetups\\\/#listItem\",\"position\":2,\"name\":\"Meetups\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/meetups\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-nixos\\\/#listItem\",\"name\":\"Philly ETE Talk notes: NixOS\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-nixos\\\/#listItem\",\"position\":3,\"name\":\"Philly ETE Talk notes: NixOS\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/meetups\\\/#listItem\",\"name\":\"Meetups\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/\",\"name\":\"gary\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-nixos\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"gary\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-nixos\\\/#webpage\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-nixos\\\/\",\"name\":\"Philly ETE Talk notes: NixOS - Gary Sieling\",\"description\":\"NixOS is a linux distribution with features inspired by functional programming, to ensure more reproducible and stable builds.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-nixos\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"datePublished\":\"2016-04-13T01:26:06+00:00\",\"dateModified\":\"2016-04-13T01:26:06+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Philly ETE Talk notes: NixOS - Gary Sieling","description":"NixOS is a linux distribution with features inspired by functional programming, to ensure more reproducible and stable builds.","canonical_url":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/#blogposting","name":"Philly ETE Talk notes: NixOS - Gary Sieling","headline":"Philly ETE Talk notes: NixOS","author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"},"datePublished":"2016-04-13T01:26:06+00:00","dateModified":"2016-04-13T01:26:06+00:00","inLanguage":"en-US","commentCount":2,"mainEntityOfPage":{"@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/#webpage"},"isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/#webpage"},"articleSection":"Meetups, linux, phillyete, talks"},{"@type":"BreadcrumbList","@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.garysieling.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/meetups\/#listItem","name":"Meetups"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/meetups\/#listItem","position":2,"name":"Meetups","item":"https:\/\/www.garysieling.com\/blog\/category\/meetups\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/#listItem","name":"Philly ETE Talk notes: NixOS"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/#listItem","position":3,"name":"Philly ETE Talk notes: NixOS","previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/meetups\/#listItem","name":"Meetups"}}]},{"@type":"Organization","@id":"https:\/\/www.garysieling.com\/blog\/#organization","name":"Gary Sieling","description":"Software Engineer","url":"https:\/\/www.garysieling.com\/blog\/"},{"@type":"Person","@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author","url":"https:\/\/www.garysieling.com\/blog\/author\/gary\/","name":"gary","image":{"@type":"ImageObject","@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g","width":96,"height":96,"caption":"gary"}},{"@type":"WebPage","@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/#webpage","url":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/","name":"Philly ETE Talk notes: NixOS - Gary Sieling","description":"NixOS is a linux distribution with features inspired by functional programming, to ensure more reproducible and stable builds.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/#breadcrumblist"},"author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"creator":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"datePublished":"2016-04-13T01:26:06+00:00","dateModified":"2016-04-13T01:26:06+00:00"},{"@type":"WebSite","@id":"https:\/\/www.garysieling.com\/blog\/#website","url":"https:\/\/www.garysieling.com\/blog\/","name":"Gary Sieling","description":"Software Engineer","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Gary Sieling - Software Engineer","og:type":"article","og:title":"Philly ETE Talk notes: NixOS - Gary Sieling","og:description":"NixOS is a linux distribution with features inspired by functional programming, to ensure more reproducible and stable builds.","og:url":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/","article:published_time":"2016-04-13T01:26:06+00:00","article:modified_time":"2016-04-13T01:26:06+00:00","twitter:card":"summary_large_image","twitter:title":"Philly ETE Talk notes: NixOS - Gary Sieling","twitter:description":"NixOS is a linux distribution with features inspired by functional programming, to ensure more reproducible and stable builds."},"aioseo_meta_data":{"post_id":"3635","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2023-02-04 16:47:51","updated":"2026-07-06 01:44:40","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\/category\/meetups\/\" title=\"Meetups\">Meetups<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tPhilly ETE Talk notes: NixOS\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.garysieling.com\/blog"},{"label":"Meetups","link":"https:\/\/www.garysieling.com\/blog\/category\/meetups\/"},{"label":"Philly ETE Talk notes: NixOS","link":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-nixos\/"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/3635"}],"collection":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/comments?post=3635"}],"version-history":[{"count":0,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/3635\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/media?parent=3635"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/categories?post=3635"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/tags?post=3635"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}