What I learnt at ICFP/SPLASH 2025 about OCaml, Hazel and FP / Oct 2025

This is part 5 of a series of posts about ICFP 2025.

In addition to giving a bunch of talks about Docker, post-POSIX and planetary computing, the greatest fun at a huge conference like ICFP and SPLASH is seeing talks given by my students (they grow up so fast!) and collaborators, and generally floating around random talks trying to deceipher ancient Greek lambdas floating on a projector.

Read full note... (2017 words)

# 9th Oct 2025 docker, functional, icfp, multicore, ocaml, oxcaml, programming

It's time to go post-POSIX at ICFP/SPLASH 2025 / Oct 2025

This is part 4 of 5 of a series of posts about ICFP 2025.

After the excitement of presenting my Docker experience report, I went straight into giving a keynote talk at VMIL 2025. This talk bubbled up intrusive thoughts I've had resulting in the past 25 years: every system I've worked on, ranging from Xen to Docker on all seem to boil down to "make shared memory go fast".

I'd started to believe it was time for change in the way we approach IO about 12 years ago when I talked about wierd IO behaviour to a packed audience at FOSDEM, and now I believe it's even more true in 2025.

So I made one key argument to the audience: it's time to accept that standards such as POSIX are now holding back the development of good language runtimes, and we need to embrace the diversity of highly concurrent, shared-memory interfaces. And unfortunately, there's no portable subset amongst these, and so this may require a rethink of our frontend language interfaces as well.

The leaning tower of operating system layers
The leaning tower of operating system layers

Read full note... (852 words)

# 8th Oct 2025 functional, icfp, iouring, ocaml, programming, tutorial

Jane Street and Docker on moving to OCaml 5 at ICFP/SPLASH 2025 / Oct 2025

This is part 3 of 5 of a series of posts about ICFP 2025.

It's been about six years since we wrote the papers on parallelism and effects, and four years since we helped to release upstream OCaml 5.0 with multicore support, a mammoth effort that took up years of work for my OCaml Labs and Tarides crew. After the release came out, I focussed on building applications using OCaml 5 for my own work on planetary computing, for example on using the new features with the fledgling Eio library to get some experience with direct-style OCaml programming.

Meanwhile, big OCaml users have also been adapting their codebases to shift from OCaml 4 to 5. Jane Street have expanded their tools and compiler team and driven through their production switch to the multicore runtime, and Docker for Desktop is progressing with their switch to direct-style code via Eio for hundreds of millions of users! Read on to learn more...

Read full note... (1839 words)

# 7th Oct 2025 docker, icfp, multicore, ocaml, oxcaml, programming

Holding an OxCaml tutorial at ICFP/SPLASH 2025 / Oct 2025

This is part 2 of 5 of a series of posts about ICFP 2025.

Several extensions to "oxidize" OCaml (Rust performancew with ML ergonomics!) have been developing rapidly in a fork called OxCaml. I helped an intrepid crew from Jane Street, IIT-M, Tarides, Brown and Cambridge pull together a really fun tutorial in ICFP 2025 that you can try out too! TL;DR: Work through the online slides, try the activities, and take the quiz to give us feedback.

Just click on the tutorial repo to get an online environment
Just click on the tutorial repo to get an online environment

Read full note... (1485 words)

# 6th Oct 2025 icfp, ocaml, oxcaml, programming, tutorial

mlgpx is the first Tangled-hosted package available on opam / Aug 2025

Since I wrote about the new ATProto-powered Tangled Git forge a few months ago, it's come along by leaps and bounds!

First, and most excitingly, they've added continuous integration via Spindles which are built in a nice ATProto style:

When you push code or open a pull request, the knot hosting your repository emits a pipeline event (sh.tangled.pipeline). Running as a dedicated service, spindle subscribes to these events via websocket connections to your knot.

The pipelines are Nix-only right now, so I braved using it for a new GPS Exchange Format library in OCaml that I wrote. The pipelines should look familiar, and the description format very straightforward.

Secondly, the service has added support for JJ stacked pull requests, which are the closest I've seen to the Jane Street Iron diff workflow which I've been wanting to try in open source for ages. You can see the interdiff review process on a recent PR by Winter who add support for engine-agnostic Spindle workflows, which should pave the path for a Docker or BuildKit engine alongside the existing Nixery-based one.

And thirdly, the general quality-of-life of the web frontend has improved dramatically, with a nice timeline, repo list, and profile pages. I'm running two knots right now (one on Recoil, and one in the Cambridge Computer Lab), and both have been very painfree. I wrote one of the earliest Dockerfiles for it, but there's now a community-maintained Knot Docker setup which I've switched to. Doesn't take very long at all; give it a try!

Because I've been using Tangled so much, I added support for Tangled metadata to Dune to make OCaml package maintainence easier. This will appear in Dune 3.21 in a few months, but in the meanwhile enjoy the first Tangled.sh package on opam. It's a simple GPX library I used in my recent trip to Botswana. All you need in your dune-project will be:

(lang dune 3.21)
(name mlgpx)
(generate_opam_files true)
(source (tangled @anil.recoil.org/ocaml-gpx))

The only major thing I'm missing from Tangled is support for private repositories now, but I'm very content using it for public content today. Beware as usual that it's still in alpha, so don't trust super-ultra-mega-important stuff to it unless you've git mirrored elsewhere.

# 17th Aug 2025 bluesky, git, ocaml, tangled

Cresting the OCaml AI humps / Jul 2025

I've been hacking with Sadiq Jaffer (^), Jon Ludlam (^) and Ryan Gibb (^) on various approaches to improving the agentic coding experience for OCaml.

We jotted down our notes in a draft paper to keep track of everything going on, including summarising previous experiments with Qwen3 for FoCS. Since then, there's been a flurry of extra activity from others which we need to integrate!

This is all fairly straightforward MCP work that improves the short-term experience. We'll get to the RL-VR ideas later... If anyone else is hacking on something agent related do post on OCaml Discuss and let us know! I'm hoping to update the paper later in August to roundup the efforts above.

# 18th Jul 2025 ai, llms, ocaml

Webassembly on exotic architectures (a 2025 roundup) / Apr 2025

It's about the time of the academic year to come up with project ideas! KC Sivaramakrishnan, Andy Ray and I have been looking into FPGA/OCaml matters recently so I thought I'd review the latest in the land of Webassembly for non-traditional hardware targets. It turns out that there are very fun systems projects going on to turn wasm into a "real" target architecture on several fronts: a native port of Linux to run in wasm, a port of wasm to run in kernel space, a POSIX mapping of wasm, and fledgling wasm-CPUs-on-FPGAs.

Read full note... (1130 words)

# 16th Apr 2025 fpga, ocaml, systems, wasm

Unikernels wins the ASPLOS most influential paper award / Apr 2025

I was gobsmacked to get a note from the SIGARCH ASPLOS steering committee that our 2013 paper "Unikernels: library operating systems for the cloud" won the most influential paper award at the conference last week! I couldn't make it to Rotterdam myself due to the travel time, but Richard Mortier was already there and so accepted the award on the whole team's behalf!

Read full note... (1524 words)

# 12th Apr 2025 awards, ocaml, systems, unikernels

Socially self-hosting source code with Tangled on Bluesky / Mar 2025

I've been an avid user of GitHub since its launch, and it really has revolutionised how communities come together to work on open source. In recent years though, I find myself utterly overwhelmed by its notifications and want to experiment with alternative workflows. This experimentation also has a more serious undertone due to the increasing need for data sovereignty and so I'm starting to move my source code to self-hosted solutions that are less reliant on centralised services.

This has also come up persistently over the years in the OCaml community, with questions over why participation in packaging requires a GitHub account ever since the early days of opam. I've never found a good answer... until now, with the launch of an exciting new service that's built over the same protocol that Bluesky uses. As I noted a few weeks ago, the ATProto can be used for more than just microblogging. It can also be an identity layer, across which other applications can be built which reuse the social fabric from Bluesky accounts.

"Tangled" is a new service launched (just yesterday!) by opilli and icyphox to manage Git repositories. I'm having a lot of fun trying it out, even in its early alpha stages! The coolest thing about Tangled is that you can self-host your own knots, which control where the source code repositories are actually stored.

Read full note... (1104 words)

# 8th Mar 2025 bluesky, distributed, docker, identity, ocaml, security, selfhosting

Are you still using OCaml 4.08 or earlier? If so, we need to know (via ocaml.org) / Mar 2025

I started pushing OCaml Docker images over to the Docker Hub in around 2017, to support the burgeoning automated build infrastructure around the use of the language. Back then, OCaml 4.06 was the latest release, and so I wrote an ocaml-version library to track the release metadata. It has been a bit of a success disaster, as that library now tracks every release of OCaml in the modern era, and also backs the automatic building of a huge array of compiler versions and variants across Linux and Windows.

The problem is...we're now building the full set of images from OCaml 4.02 onwards through to the latest OCaml 5.3.0 release, which is unsustainable for obvious reasons; despite the hosting being kindly sponsored by Docker, we must also consider the carbon footprint of our infrastructure. So the question for the OCaml community: are there are any remaining users who still need images earlier than OCaml 4.08 or can we can stop pushing those now?

Read full note... (313 words)

# 5th Mar 2025 ocaml, opensource

Oh my Claude, we need agentic copilot sandboxing right now / Mar 2025

Yaron Minsky nerdsniped me last week into getting OCaml to drive the 80s-retro RGB Matrix displays. I grabbed one from the local Pi Store and soldered it together with help from Michael Dales. But instead of writing OCaml bindings by hand, we thought we'd try out the latest agentic CLI called Claude Code released last week to see if we could entirely autogenerate the bindings.

TL;DR: Claude Coder generated working OCaml code almost from scratch, ranging from C bindings to high-level OCaml interface files and even Cmdliner terms, but needs a more sophisticated sandboxing model before something goes horribly wrong. So much potential and so much danger awaits us. Coincidentally Cyrus Omar and Patrick Ferris and I wrote about this a few months ago. Read on...

Read full note... (2125 words)

# 2nd Mar 2025 ai, hardware, llm, ocaml

Using AT Proto for more than just Bluesky posts / Feb 2025

While Bluesky is taking off like a rocket, a number of us moving towards #self sovereign digital infrastructure have been looking at how to use the Bluesky network for other uses than just short-form notes. This is possible because of my colleague Martin Kleppmann's hard work on the "AT Protocol" that underpins the Bluesky network. Martin recently gave us a deep-dive into the AT proto in the Cambridge security group, which made me look into other uses of it more closely. As background, you may wish to read his paper on the subject which explains the technical architecture extremely clearly.

Read full note... (684 words)

# 11th Feb 2025 perscon, bluesky, distributed, fediverse, ocaml, selfhosting

Programming FPGAs using OCaml / Feb 2025

With the vast amount of data we have these days for our planetary computing processing, it's naturally tempting to use more hardware offload. The obvious choice, GPGPUs, are not a great fit for the problem due to the difficulty of unlocking high data parallelism for geospatial data. So it's back to an old technology I worked on twelve years ago in the form of FPGAs!

FPGAs are a very flexible way to execute boolean combinatorial logic, but are notoriously difficult to program. We have two possible angles to explore to address this. One is to design more declarative DSLs for data processing that compile to the FPGAs, such as Michael Dales work on Yirgacheffe or Omar Tanner's work on in-memory compressive computation. The other angle is to work on the low-level API to programming the FPGAs, to get away from Verilog and program in our favourite high-level language...OCaml! KC Sivaramakrishnan and I have started making a list of resources for programming FPGAs in OCaml for our own education.

Read full note... (1214 words)

# 7th Feb 2025 embedded, fpga, hardware, networking, ocaml

How to publish custom Homebrew taps for OCaml / Jan 2025

Now that I've switched to a new website, I'm working on open-sourcing its components. I've got a lot of small OCaml scripts that are all work-in-progress, and so not quite suitable to be published to the central opam-repository but I still need be able to run them conveniently on my own #self-hosted infrastructure.

I mainly use a variety of macOS and Linux hosts and I want a workflow as simple as "brew install avsm/ocaml/srcsetter" and have it install a working binary version of my CLI utility. In this case, it's srcsetter, a simple tool I knocked up to generate the responsive images on this website. Luckily, Homebrew has made this really easy for us! They have a BrewTestBot that integrates with GitHub Actions to automate the compilation of binary packages for us, all from a convenient PR-like workflow.

Read full note... (658 words)

# 31st Jan 2025 bushel, homebrew, ocaml, packaging, testing, til

Foundations of Computer Science / Jan 2025

Here are the various repos used to create the interactive teaching environment we use for 1A Foundations of Computer Science in Cambridge. It may be useful to other professors who are using OCaml in their courses.

Read full note... (186 words)

# 3rd Jan 2025 cambridge, compsci, computerlab, ocaml, pembroke, teaching

Programming for the Planet / May 2024

I was invited by Mary Sheeran to deliver a keynoted at Lambda Days, and I decided to go along to talk about my work on Programming for the Planet. The conference was a really vibrant crowd and I would definitely go along in future years. It's best summarised via an interview video they took of all the speakers.

# 27th May 2024 plancomp, biodiversity, fp, interview, ocaml, satellites, sensing, sweden

State of the OCaml Platform 2023 / Sep 2023

We deliver the annual presentation about the OCaml Platform in the OCaml Workshop at ICFP 2023.

This paper reflects on a decade of progress and developments within the OCaml Platform, from its inception in 2013 with the release of opam 1.0, to today where it stands as a robust toolchain for OCaml developers. We review the last three years in detail, emphasizing the advancements and innovations that have shaped the OCaml development landscape and highlighting key milestones such as the migration to Dune as the primary build system, and the development of a Language Server Protocol (LSP) server for OCaml.

# 1st Sep 2023 devtools, ocaml, testing

Eio 1.0 – Effects-based IO for OCaml 5 / Sep 2023

An update on the OCaml EIO library at the OCaml Workshop 2023. Tom Leonard led this presentation on the release of Eio 1.0, which brings effects-based IO to OCaml 5. This is a big deal for the OCaml ecosystem as it provides a modern approach to concurrent programming using algebraic effects rather than monads or callbacks. The library has been under development for a while and reaching 1.0 is a significant milestone. It's particularly exciting because it takes advantage of OCaml 5's new effect handlers to provide a clean, composable interface for IO operations that feels natural in the language.

# 1st Sep 2023 concurrency, effects, eio, fp, ocaml

OCaml wins the ACM Programming Language Software award (via ACM) / Jun 2023

I was honoured to be included in the OCaml team that won the ACM Programming Languages Software Award for 2023.

The Association for Computing Machinery (ACM), the world's largest association of computing professionals, today gave the 2023 SIGPLAN Award to a group of developers for their work on the functional programming language OCaml.

The award was presented at the annual SIGPLAN Programming Language Design and Implementation Conference to a group of researchers and developers including our colleague Anil Madhavapeddy, Professor of Planetary Computing here.

The prestigious Programming Languages Software Award is given annually "to an institution or individual(s) to recognise the development of a software system that has had a significant impact on programming language research, implementations, and tools," ACM says.

-- Computer Laboratory

See also the main ACM Award Page citation:

The OCaml Compiler Distribution is the reference implementation of the OCaml language, a dialect of ML that aims to be pragmatic, both in language features and implementation, encouraging a simple programming style that yields good performance and usability. It has a large user base in industry, research, and education throughout the world, and was used to implement a number of other impactful systems, notably in verification: Coq proof assistant, CompCert verified compiler, Why3 verified programming environment, Frama-C, Astrée and Gillian static analyzers, Infer, Hack and Flow projects at Meta, SLAM/SDV and F* at Microsoft, etc. -- ACM SIGPLAN

# 19th Jun 2023 acm, award, icfp, ocaml

The 2nd ed of Real World OCaml is available in shops / Oct 2022

I'm delighted to report that the second edition of Real World OCaml is now available from Cambridge University Press! It's also freely available online, and CUP also kindly agreed that the PDF version could be freely available online thanks to sponsorship from Tarides.

Read full note... (105 words)

# 1st Oct 2022 book, cambridge, ocaml

Homogeneous Builds with OBuilder and OCaml / Sep 2022

Paper on our incremental computation DSL OCurrent presented at OCaml Workshop 2022 with Tim McGilchrist, David Allsopp, Patrick Ferris, and others. OCurrent provides a declarative way to express CI/CD pipelines as incremental computations that automatically track dependencies and cache results. Combined with OBuilder for reproducible builds, it enables homogeneous build infrastructure across different platforms - the foundation powering OCaml-CI and other OCaml ecosystem infrastructure.

# 1st Sep 2022 build-systems, ci-cd, ocaml, tooling

OCaml Multicore Monthly: heading towards OCaml 5.0 (via OCaml.org) / Apr 2022

We're getting closer to a stable release of OCaml 5.0, including reenabling support for the BSDs and introducing ARM64 multicore support.

# 19th Apr 2022 multicore, ocaml, ocamllabs

OCaml Multicore Monthly: post merge activites (via OCaml.org) / Feb 2022

After we got the massive OCaml 5.0 pull request merged, we've taken some time to consolidate the trunk branch of OCaml and start down the release path towards getting OCaml 5.0 out of the door.

# 9th Feb 2022 multicore, ocaml, ocamllabs, opensource

OCaml Multicore Monthly: code review complete with Inria (via OCaml.org) / Dec 2021

We've been working hard on OCaml multicore support, and went over to Paris to sit down with some core developers from Inria and work through code review of our proposed patches.

# 21st Dec 2021 multicore, ocaml, ocamllabs, opensource

What is an Operating System? (via Signals and Threads) / Nov 2021

I am the latest person to feature on the first season of the Signals and Threads podcast hosted by Yaron Minsky (you may recognise him as my co-author on Real World OCaml).

Anil Madhavapeddy is an academic, author, engineer, entrepreneur, and OCaml aficionado. In this episode, Anil and Ron consider the evolving role of operating systems, security on the internet, and the pending arrival (at last!) of OCaml 5.0. They also discuss using Raspberry Pis to fight climate change; the programming inspiration found in British pubs and on Moroccan beaches; and the time Anil went to a party, got drunk, and woke up with a job working on the Mars Polar Lander. -- Signals and Threads

I think I might be the first non- Jane Street person to be on their podcast! Quite the honour.

# 3rd Nov 2021 janestreet, multicore, nasa, ocaml, opensource, podcast, space
Loading recent items...