RSSAmplifier

Blog

ryan.freumh.org

ryan.freumh.orgRSS feed ↗44 posts

Latest posts

Package Managers à la Carte

A Formal Model of Dependency Resolution

Package Managers à la Carte: A Formal Model of Dependency Resolution

Aug. 2026 Ryan Gibb. The 31st ACM SIGPLAN International Conference on Functional Programming (ICFP) . Package managers are legion. Every programming language and operating system has its own solution, each with subtly different semantics for dependency resolution. This fragmentation prevents multilingual projects from expressing precise dependencies across language ecosystems; it leaves external…

Opam’s Nix system dependency mechanism

Jun. 2026 Ryan Gibb. Caml in the Capital . The OCaml language package manager, Opam, has support for interfacing with system package mangers to provide dependencies external to the language. Supporting Nix required re-thinking the abstractions used to interface with traditional package managers, but enables using Opam for development easily whilst benefitting from Nix’s reproducible system…

Opam’s Nix system dependency mechanism

Jan. 2026 Ryan Gibb. Free and Open Source Software Developers’ European Meeting (FOSDEM) . The OCaml language package manager, Opam, has support for interfacing with system package mangers to provide dependencies external to the language. Supporting Nix required re-thinking the abstractions used to interface with traditional package managers, but enables using Opam for development easily whilst…

Eilean: Self-hosted digital islands

Jan. 2026 Ryan Gibb. Free and Open Source Software Developers’ European Meeting (FOSDEM) . Our digital lives are increasingly fragmented across numerous centralised online services. This model concentrates power, leaving us with minimal technical control over our personal data and online identities. The long-term permanence of these platforms is uncertain, and their commercial incentives are often…

Package managers à la carte: A Formal Model of Dependency Resolution

Jan. 2026 Ryan Gibb. Free and Open Source Software Developers’ European Meeting (FOSDEM) . Package managers are legion. Every language and operating system has its own solution, each with subtly different semantics for dependency resolution. This fragmentation prevents multi-lingual projects expressing precise dependencies across language ecosystems, means external system and hardware dependencies…

ICFP/SPLASH 2025

I attended the co-located International Conference on Functional Programming (ICFP) and International Conference on Systems, Programming, Languages and Applications: Software for Humanity (SPLASH) as a co-author of a couple of papers, and was presenting ‘ Spatial Programming for Environmental Monitoring ’ at the International Workshop on Programming for the Planet (PROPL 2025) . While a lot of the…

Three steps for OCaml to crest the AI humps

Oct. 2025 Sadiq Jaffer, Jon Ludlam, Ryan Gibb, Thomas Gazagnaire, and Anil Madhavapeddy. Proceedings of the 2025 OCaml workshop . We discuss how OCaml could adapt to the fast-moving world of AI-assisted agentic coding. We first benchmark how well represented OCaml is in the large and diverse set of open weight models that can be run locally. We then consider what is unique about OCaml programming…

Functional Networking for Millions of Docker Desktops (Experience Report)

Aug. 2025 Anil Madhavapeddy, David J. Scott, Patrick Ferris, Ryan T. Gibb, and Thomas Gazagnaire. Proc. ACM Program. Lang. Docker is a developer tool used by millions of developers to build, share and run software stacks. The Docker Desktop clients for Mac and Windows have long used a novel combination of virtualisation and OCaml unikernels to seamlessly run Linux containers on these non-Linux…

Expanding My Vocabulary to a Million Words

I often find myself coming across new words that I look up in a dictionary and promptly forget about. I’ve been using Anki to learn Mandarin with my HSK stroke order deck, and I want an easy way to use the same approach for English. Existing decks I found were too small (didn’t contain words I wanted to learn) and lacked detail (I find the etymology very handy in understanding the meaning of…

Bifröst: Spatial Networking with Bigraphs

Jul. 2025 Josh Millar, Ryan Gibb, Roy Ang, Anil Madhavapeddy, and Hamed Haddadi. Preprint. Physical spaces are increasingly dense with networked devices, promising seamless coordination and ambient intelligence. Yet today, cloud-first architectures force all communication through wide-area networks regardless of physical proximity. We lack an abstraction for spatial networking: using physical…

Solving Package Management via Hypergraph Dependency Resolution

Jun. 2025 Ryan Thomas Gibb, Patrick Ferris, David Allsopp, Michael Winston Dales, Mark Elvers, Thomas Gazagnaire, Sadiq Jaffer, Thomas Leonard, Jon Ludlam, and Anil Madhavapeddy. Working paper. Package managers are everywhere, with seemingly every language and operating system implementing their own solution. The lack of interoperability between these systems means that multi-lingual projects are…

Steps towards an Ecology for the Internet

Jun. 2025 Anil Madhavapeddy, Sam Reynolds, Alec P. Christie, David A. Coomes, Michael W. Dales, Patrick Ferris, Ryan Thomas Gibb, Hamed Haddadi, Sadiq Jaffer, Josh Millar, Cyrus Omar, William J. Sutherland, and Jon Crowcroft. Association for Computing Machinery, New York, NY, USA, pp. 107–116. The Internet has grown from a humble set of protocols for end-to-end connectivity into a critical global…

Opam's Nix system dependency mechanism

On 22 Apr 2022, three years ago, I opened an issue in the OCaml package manager, opam, ‘ depext does not support nixOS ’. Last week, my pull request fixing this got merged ! Let’s Encrypt Example Before, if we tried installing an OCaml package with a system dependency we would run into: $ opam --version 2.3.0 $ opam install letsencrypt [NOTE] External dependency handling not supported for OS…

Caledonia

Command-line and Emacs Calendar Client

A Week With Claude Code

I tried using Claude Code while writing Caledonia , and these are the notes I took on the experience. It’s possible some of the deficiencies are due to the model’s smaller training set of OCaml code compared to more popular languages, but there’s work being done to improve this situation. It needs a lot of hand-holding, often finding it very difficult to get out of simple mistakes. For example, it…

Eilean

Self-hosted digital islands

Eon

A programmable nameserver

Pac

A universal dependency solver

Spatial Computing

Network support for physical devices

How This Site Is Built

Update : I’ve since extracted the site generator into its own project, meur , a static site generator built with Hakyll and Pandoc. This lets me separate the site generator from the site content, and means others can use it too. It also adds dual HTML/Markdown output and JSON feeds on top of the below. — This site has continuously evolved since I made the first commit while procrastinating my…

Sway

I use the sway Wayland compositor, which is a clone of the X11 i3 window manager for Wayland . Wayland is a communications protocol for next-generation display servers used in Unix-like systems which has been adopted as the default display server by Linux distributions including Fedora with KDE, and Ubuntu and Debian with GNOME. It aims to replace the venerable X display server with a modern…

Firefox

I use Firefox as my default browser. You can see my configuration in Nix OS here . Having it in Nix is handy so I don’t have to sign into a Firefox account on a live ISO or new machine install in order to get the environment I’m used to. Tridactyl I use Tridactyl for many useful Vim-like bindings in Firefox. Similar to Firefox you can see my configuration here . Some useful bindings are: h j k l…

Keyboard

I developed RSI symptoms at the tail end of writing my master’s project and started looking for ways to work more ergonomically. As someone who’s often typing in one form or another 8+ hours a day one obvious aspect to look at was my keyboard. I’m using the ZSA Moonlander as my daily driver which I purchased with my PhD stipend machine budget. It’s an ergonomic ortholinear split mechanical…

Emacs

I started using Emacs for the mu4e mail client after using and liking the mu mail indexer on the command line (read more about my mail client setup ). Similarly, I was using the ledger-cli accounting system, and found the Emacs minor mode to be great. Then I got curious about Emacs Org Mode and started using it for note taking and task management. Now I’m using Emacs as my primary development…

(Neo)Vim

I used to use Neovim as my main development environment. I like the fact that it’s small and fast, and that I can use it over an SSH connection. Neovim is a fork of Vim that I use for the Lua configuration and built-in Language Server Protocol support. However, I mainly use Emacs these days. I extensively use evil (a Vi(m) compatibility layer for Emacs), so I haven’t really stopped using Vim but…

Carbon-Aware Name Resolution

Dec. 2024 Ryan Thomas Gibb and Anil Madhavapeddy. Abstract in the 1st international workshop on low carbon computing . The current Internet architecture fails to treat the carbon emissions associated with networked services as a first-class metric. We propose extending the DNS with load balancing techniques to consider the carbon cost of scheduling decisions, and further to actively wake machines…

Building a Low-Powered NAS

At the start of this year I built a Network-Attached Storage (NAS) server to store backups, photos & videos, digitised VHS tapes, cached builds, and more. Having a dedicated machine has allowed me to use it in ways that wouldn’t be feasible with cloud storage, such as live transcoding of media playback to different resolutions or codecs, and having it physically co-located makes it resilient to…

FOSDEM 2024

Free and Open source Software Developers’ European Meeting

Where on Earth is the Spatial Name System?

Nov. 2023 Ryan Thomas Gibb, Anil Madhavapeddy, and Jon Crowcroft. Proceedings of the 22nd ACM workshop on hot topics in networks . The existing Internet architecture lacks support for naming locations and resolving them to the myriad addressing mechanisms we use beyond IP. We propose the Spatial Name System (SNS) that allows for the assignment of hierarchical location-based names and for…

Developing OCaml with Nix

Lately, I’ve been writing a significant amount of OCaml as part of my PhD. Instead of using the OCaml package manager (opam) command-line interface (CLI) for these projects, I prefer to use Nix to provide declarative and reproducible development environments and builds. However I still want to be able to interoperate with opam’s file format and access packages from the opam repository. In this…

Bibliography Management

I recently received a request to outline my process for managing bibliographies. Here’s a breakdown of my approach. Bibliography Generation I use the Zotero application as a reference manager. The Zotero Firefox connector 1 lets me add papers from URLs. Zotero is quite smart about grabbing the metadata from the URL or PDF itself. The view I have from Zotero is: While Zotero is great for storing…

Hacking on the Remarkable 2

I’ve recently had the good fortune to come into possession of a reMarkable 2 E-Ink writing tablet. This device runs a modified version of Linux, and contains the following message in the copyrights and licenses information: GPLv3 Compliance The General Public License version 3 and the Lesser General Public License version 3 also requires you as an end-user to be able to access your device to be…

Hillingar

MirageOS Unikernels on NixOS

Nix

I originally wrote this as an explainer for Hillingar before separating it into its own page. Nix snowflake 1 Nix is a deployment system that uses cryptographic hashes to compute unique paths for components 2 that are stored in a read-only directory: the Nix store, at /nix/store/<hash>-<name> . This provides several benefits, including concurrent installation of multiple versions of a package,…

Nim

I recently had the good fortune to attend a talk by Simon Peyton Jones titled “Immutability changes everything: 40 years of functional programming” which chronicled Simon’s life and research career. Simon is a self-described one trick pony, where that trick is functional programming. However, this trick has taken him from being a major instigator in Haskell - he remains a lead developer of the…

Spatial Name System

Jun. 2022 Ryan Thomas Gibb. MPhil disseratation. The development of emerging classes of hardware such as Internet of Thing devices and Augmented Reality headsets has outpaced the development of Internet infrastructure. We identify problems with latency, security and privacy in the global hierarchical distributed Domain Name System. To remedy this, we propose the Spatial Name System, an alternative…

Virtual and Augmented Reality

I’ve been interested in virtual reality (VR) and augmented reality (AR) recently as the use case for the system(s) I’m working on in my MPhil project. This blog post will cover my development experience in porting my cubes game to both VR and AR, and give a small demo for the latter. Microsoft Windows was used for ease of development with Unity and as it’s a hard requirement for the AR headset…

DNS LOC

The Domain Name System (DNS) has a little known ‘LOC’ resource record (RR) defined in 1996 for encoding location information purportedly for hosts, networks, and subnets[0]. It encodes: Latitude Longitude Altitude Size of the referenced sphere Horizontal and vertical precision A number of suggested uses are proposed in the RFC: USENET - a distributed discussion system now eclipsed by the World…

ILNP Interface

My dissertation involved implementing an Identifier-Locator Network Protocol (ILNP) overlay network in Python which can be found at github.com/RyanGibb/ilnp-overlay-network . As part of this, I wanted to add an application layer interface to the overlay to support existing applications. (To those who still want to know why, I posit: why not?) That is, applications other than those written in…

Cubes

I was teaching myself Unity the week after the last exam for my undergrad and ended up creating this. It’s an infinite runner with cubes created in Unity. Play it here . The repo can be found at github.com/RyanGibb/cubes . Re-rooting To allow the game to be infinite, whilst also avoiding floating point errors, the game world is periodically ‘re-rooted’. This involves moving the player and all…

Ubiquitous Communication for the Internet of Things

Jun. 2021 Ryan Thomas Gibb. BSc dissertation. The Internet of Things is a modern re-imagination of Weiser’s vision of Ubiquitous Computing. Weiser identified a number of changes required to realise this vision, one of which is network support for highly mobile devices. This could not be met by the Internet Protocol 28 years ago, and can not be met by it today. The Identifier-Locator Network…

Network layer mobility

An Identifier-Locator addressing split.

Cache and Multi-Core Efficient Algorithms for High-Degree Permutations

Aug. 2020 Ryan Thomas Gibb and Steve Linton. Undergraduate Research Assistant Scheme project. The traditional naive permutation composition algorithm is limited by memory latency and not CPU speed. Algorithms to take advantage of current memory hierarchies and multiple cores can be designed so as to be limited by memory bandwidth instead. We have implemented and benchmarked a number of such…