summaryrefslogtreecommitdiff
path: root/2024-06-18-guix-social/slides.org
diff options
context:
space:
mode:
Diffstat (limited to '2024-06-18-guix-social/slides.org')
-rw-r--r--2024-06-18-guix-social/slides.org292
1 files changed, 292 insertions, 0 deletions
diff --git a/2024-06-18-guix-social/slides.org b/2024-06-18-guix-social/slides.org
new file mode 100644
index 0000000..b7c740e
--- /dev/null
+++ b/2024-06-18-guix-social/slides.org
@@ -0,0 +1,292 @@
+#+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: <img class="stretch" src="sicp.jpg">
+
+* 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: <img class="stretch" src="chickadee-3d.png">
+
+- 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: <img style="background-color: #edeaee; border-radius: 5px;" class="stretch" src="spritely-institute-logo.png">
+
+- 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: <video src="ocapn-handoff.mp4" autoplay="true" loop="true" class="stretch"/>
+
+* OCapN
+- Open standard for capability-secure networking
+- Pre-standardization phase
+
+https://ocapn.org
+
+* My role at Spritely
+- Initially hired as Core Infrastructure Architect
+ - now CTO
+- First big project: Distributed debugging
+
+* 2023: Distributed debugger
+
+#+REVEAL_HTML: <img class="stretch" src="questie-lamport-diagram.png">
+
+* How Spritely uses Guix
+- =guix shell= for development environments
+- =guix deploy= to manage servers over SSH
+- =guix pack -f docker= to build CI images
+- Goblins and Hoot releases are immediately published to Guix on
+ release day
+
+* Highlight: GitLab CI
+
+I've noticed people asking about this lately:
+
+#+BEGIN_SRC sh
+ guix pack -m ci-manifest.scm -C zstd -f docker -S /bin=bin
+ skopeo copy ...
+#+END_SRC
+
+* 2023: Hoot
+
+#+REVEAL_HTML: <img class="stretch" src="hoot-future-of-scheme-hacking.png">
+
+* 2023: Hoot
+- Hoot is a Scheme-to-WebAssembly compiler
+ - with its own toolchain!
+ - *No* emscripten!
+- Scheme in the browser!
+- Lead engineer: Andy Wingo (Guile maintainer)
+- I wrote the Wasm interpreter =(wasm vm)=
+- Still actively working on toolchain and Scheme implementation
+
+* 2023: Strigoform
+#+REVEAL_HTML: <iframe frameborder="0" src="https://itch.io/embed-upload/8997570?color=333333" allowfullscreen="" width="482" height="662"><a href="https://davexunit.itch.io/strigoform">Play Strigoform on itch.io</a></iframe>
+
+* 2023: Strigoform
+- My game dev fascination comes full circle!
+- Made for the Autumn Lisp Game Jam
+- One of the first Wasm GC games to be published
+- Built with Hoot 0.1 + some additional stuff from the main branch
+- Largest program built with Hoot at the time
+
+* 2024: Cirkoban
+#+REVEAL_HTML: <iframe frameborder="0" src="https://itch.io/embed-upload/10583669?color=222034" allowfullscreen="" width="640" height="500"><a href="https://davexunit.itch.io/cirkoban">Play Cirkoban on itch.io</a></iframe>
+
+* 2024: Cirkoban
+- Made for the Spring Lisp Game Jam
+- Built with Hoot 0.4.1 and a WIP port of Goblins
+- Uses Goblins actors and transactional rollback
+
+* The future: guix develop
+- =docker compose= but for Guix
+- I've wanted this for 10 years!
+- Like =guix shell= but also spawns a Shepherd
+- Uh oh, *another* kind of service?
+
+* The future: Distributed shepherd
+- Currently funded by NLnet and in development by Juli Sims
+- Shepherd + Spritely Goblins
+- Orchestrate clusters of Guix machines securely!
+- =guix deploy= over Object Capabilities Network (OCapN)?
+
+* The future: Distributed substitutes
+- Using ERIS perhaps?
+ https://codeberg.org/eris/guile-eris/
+
+* The future: Guix, the OCap OS
+- Unified services (no system vs. home split)
+- Reduce ambient authority on Linux
+- Build on =call-with-container=?
+
+* The future: Chickadee + Hoot
+- Native + web builds of Guile games from the same source
+- Need to improve Wasm GC to make this possible
+
+* Fin
+- Opportunties come from unexpected vectors
+- Guile and Guix have come a long way!
+- Keep pushing the limits of what Guile can do!
+- Thank you to the Guix Social organizers!
+
+* Questions?
+
+https://dthompson.us
+
+https://spritely.institute