#+TITLE: Get rich slow with Guile and Guix #+AUTHOR: David Thompson #+DATE: 2024-06-18 Tue #+OPTIONS: toc:nil num:nil reveal_title_slide:nil #+REVEAL_MAX_SCALE: 2 #+REVEAL_MARGIN: 0.075 #+REVEAL_MIN_SCALE: 0.5 #+REVEAL_TRANS: cube #+REVEAL_THEME: night #+REVEAL_HLEVEL: 2 #+REVEAL_ROOT: reveal.js # * To-Do # ** TODO Fix Christine deadname in old blog post * Get rich slow with Guile and Guix Guix Social 2024-06-18 https://dthompson.us * Hi! - I'm David Thompson - From Massachusetts, USA - The birthplace of Scheme and Free Software - CTO at Spritely Institute - Guile/Guix user and contributor for over 10 years * tl;dr - 2012: Discovered Scheme then started using Guile - 2013: Became an early Guix contributor - 2015-2017: Made my own tools/libraries with Guile - 2022-now: Making FOSS full-time * 2012: Libreplanet In hindsight, the most defining moment in my career path: - Yukihiro Matsumoto: "How Emacs Changed My Life" - Christine Lemmer-Webber: GNU MediaGoblin * 2012: Libreplanet - Immediately dropped Vim for Emacs - Started to use/hack on MediaGoblin * 2012: Ruby - First professional development job writing Ruby - Relevant to Guix, eventually * 2012: Game dev - Wanted to make games as a hobby - Went the C core with embedded "scripting" language route - Started with Lua, but then... * 2012: SICP #+REVEAL_HTML: * 2012: Guile - "official" GNU extension language - I was into GNU at the time - Can extend C programs... but at what cost? * 2013: First FOSS patch - Like many, I struggled to find a way to participate in FOSS development - GNU MediaGoblin turned out to be very welcoming! - Issue tracker had "bitesized" tag for newcomers - I added an option to enable/disable comments * 2013: Guix - I hadn't heard of Nix, but this new Guix thing by Ludovic Courtès looked fascinating - Started before the distro was bootstrapped - Switched from Debian to Guix later * Why Guix? - Functional package management model - Practical software freedom - Whole-system rollback - Easy development environments * Extend vs. Embed - Nix embeds Bash into package recipes - Guix uses Guile all the way down (almost) - Scheme isn't *icing* on top of C++/Bash - Scheme is the *cake* * 2013: Guix contributor - First Guix patch: Packaged libtheora - Packaged SDL, SDL2, etc. shortly after - Ludo gave me commit access! * 2013: Guile contributor - First patch to Guile: =alist->hash-table= - Worked on =(system repl coop-server)= with Mark Weaver * 2014: Ruby build system - Wrote =(guix build-system ruby)= and initial Ruby packages - Pjotr Prins was involved in this, too * 2014: guix environment - Wanted something like =nix shell= - Would become =guix shell= later - Did not achieve consensus on sane defaults - Remember =--ad-hoc=? - =guix shell= corrected the problems, eventually * 2015: guix publish - Guix wanted to encourage more substitute providers - but Hydra was a large piece of software - I wrote the initial version of =guix publish= - Pure Guile; uses the =(web ...)= modules * 2015: guix publish - Seems to have been useful over the years - but substitute availability is far from a solved problem - Distributed substitutes seem like the way to go * 2015: call-with-container - Learned that there was more to containers than layered disk images - Thanks to Docker for "container" ambiguity! 😞 - The good stuff is actually the runtime environment (Linux namespaces, etc.) - Can we implement just the good parts of Docker for Guix? * 2015: call-with-container - Don't mount opaque disk images of unknown provenance - Bind mount =/gnu/store= directories instead - Containment + reproducibility - Used in: - =guix shell --container= - =guix system container= - containerized Shepherd services * 2015: Haunt - Static site generator written in Guile - Uses =guix shell= for development environment - Guix is the first (only?) distro that gets package updates - Both the Guix and Guile websites use Haunt * 2016: Oops, I bought a house - Who could have imagined this would use up all my free time? - Guix contibutions greatly reduced - I've never returned to my previous level of activity - But the Guix community has grown *a lot*! - I can be a user now (mostly) 👾 * 2017: Chickadee #+REVEAL_HTML: - After all this time, I still wanted to make games - Created Guile-SDL2 along the way - Uses =guix shell= for development, naturally * Chickadee - *not* a wrapper around raylib, etc. - Inspired by Guix to *maximize* usage of Guile - Rendering code 100% Scheme (until we hit libGL) - Made possible by Andy Wingo's incredible compiler/VM work * 2019: guix deploy - Wanted an answer to Chef, Ansible, etc. - Co-mentored Jakob L. Kreuze with Christine Lemmer-Webber for Google Summer of Code - A GSoC project that made it upstream! - I now manage my personal server with =guix deploy= - Lots of improvements could be made - Any volunteers? 🙂 * Intermission: Pandemic * 2022: Lisp Game Jam - Became co-host of the Lisp Game Jam on itch.io - along with Fennel maintainer technomancy - This will become relevant shortly * 2022: Spritely #+REVEAL_HTML: - Spritely is a US 501(c)(3) nonprofit - Cofounded by *Christine Lemmer-Webber* - now famous for ActivityPub! - Building the next generation of *secure*, distributed networking infrastructure - Object capability security https://spritely.institute * OCapN: The Object Capability Network #+REVEAL_HTML: