# .plan-26-25: Planetary scale plans, Windows file-descriptor scale problems

*2026-06-21 — note*


A lot of conservation and planetary computing this week. We celebrated [a decade of the CCI](#ten-years-of-the-cci-with-sir-david-attenborough) with a visit from Sir David Attenborough, and [Andrew Balmford](https://www.zoo.cam.ac.uk/directory/andrew-balmford) delivered his [Royal Society Environment Medal lecture](#feeding-the-world-without-costing-the-earth). I also tuned in remotely to the third [PROPL at PLDI](#the-third-propl-programming-for-the-planet), where the programming-languages community had an action-oriented discussion. On the hacking side, I wrapped a [local LLM up as an OCaml library](#local-llms-as-an-ordinary-ocaml-library) and started fleshing out [OCaml/Eio on Windows](#getting-eio-working-on-windows). Plus [fun links](#fun-links) at the end.

## Ten years of the CCI, with Sir David Attenborough

The [Cambridge Conservation Initiative](https://www.cambridgeconservation.org)
turned ten this week, and Sir David Attenborough himself dropped by to
celebrate (and narrate a new video, just after his 100th birthday!). I spent
the afternoon demoing [TESSERA](https://anil.recoil.org/projects/tessera) and the freshly renamed Dash of Life
(our [Enki](https://anil.recoil.org/projects/enki) dashboard) at a campus packed with visitors. The standing
ovation when Sir David walked into the Babbage theatre was deafening and very heartwarming.

I've [written the day up properly](https://anil.recoil.org/notes/ten-years-of-cci), and it's
a splendid reminder of how much gets done in the stairwells and common room of the [David Attenborough Building](https://www.cambridgeconservation.org/about/the-david-attenborough-building/).

<figure class="image-center"><img src="/images/tessera-demo-cci.webp" alt="The visitors dropped by in small groups, so we had about a dozen demos in the afternoon! (image credit: Sadiq Jaffer)" title="The visitors dropped by in small groups, so we had about a dozen demos in the afternoon! (image credit: Sadiq Jaffer)" loading="lazy" srcset="/images/tessera-demo-cci.768.webp 768w, /images/tessera-demo-cci.640.webp 640w, /images/tessera-demo-cci.480.webp 480w, /images/tessera-demo-cci.320.webp 320w, /images/tessera-demo-cci.2560.webp 2560w, /images/tessera-demo-cci.1920.webp 1920w, /images/tessera-demo-cci.1600.webp 1600w, /images/tessera-demo-cci.1440.webp 1440w, /images/tessera-demo-cci.1280.webp 1280w, /images/tessera-demo-cci.1024.webp 1024w"><figcaption>The visitors dropped by in small groups, so we had about a dozen demos in the afternoon! (image credit: Sadiq Jaffer)</figcaption></figure>

## Feeding the world without costing the earth

Earlier in the week I was down at Carlton House Terrace for the inaugural [Royal Society Environment Prize](https://royalsociety.org/medals-and-prizes/environment-lecture/) lecture, where Andrew Balmford was awarded the [Environment Medal](https://royalsociety.org/medals-and-prizes/). His talk on *"Feeding the world without costing the earth"* is a relentlessly data-driven view that many of the conventional pieces of wisdom (like going organic) are all necessary but nowhere near sufficient to arrest biodiversity collapse, and that slowing the extinction crisis hinges on sustainable high-yield farming explicitly tied to land sparing. My [full notes and slides are here](https://anil.recoil.org/notes/ab-rs-env-medal).

Just before heading down, I also nipped into the Vice Chancellor [Debbie Prentice](https://en.wikipedia.org/wiki/Deborah_Prentice)'s annual garden party, where I caught up with many friends I hadn't seen in a while! Last year, we were in the middle of a heatwave and the grass was all parched. This year, it almost rained...

<figure class="image-center"><img src="/images/vc-garden-party-1.webp" alt="Over at the Vice Chancellor's garden party" title="Over at the Vice Chancellor's garden party" loading="lazy" srcset="/images/vc-garden-party-1.768.webp 768w, /images/vc-garden-party-1.640.webp 640w, /images/vc-garden-party-1.480.webp 480w, /images/vc-garden-party-1.3840.webp 3840w, /images/vc-garden-party-1.320.webp 320w, /images/vc-garden-party-1.2560.webp 2560w, /images/vc-garden-party-1.1920.webp 1920w, /images/vc-garden-party-1.1600.webp 1600w, /images/vc-garden-party-1.1440.webp 1440w, /images/vc-garden-party-1.1280.webp 1280w, /images/vc-garden-party-1.1024.webp 1024w"><figcaption>Over at the Vice Chancellor's garden party</figcaption></figure>

## The third PROPL (programming for the planet)

The third [PROPL](https://conf.researchr.org/home/icfp-splash-2025/propl-2025) (*Programming for the Planet*) was held at [PLDI 2026](https://pldi26.sigplan.org/) this week, and since I couldn't be there in person I tuned in virtually and live-tooted over on the [@propl.dev Bluesky feed](https://bsky.app/profile/propl.dev/post/3modkojuuk22t) (live-skeeting? sounds a bit silly). We also maintained a collaborative [living document](https://docs.google.com/document/d/1ZPUsfBinY1bKiXg-nuKDoEcIEqpL9d2BdOI5FuBfusk/edit) where Q\&A got recorded and discussions continued.

This edition tried a new format since it came less than a year before the [2nd PROPL](https://anil.recoil.org/notes/icfp25-propl). Rather than a full day of talks, we held a morning of position papers followed by an afternoon "working group" aimed at producing concrete action items for what the PL and systems community can actually build together.

<figure class="image-center"><img src="/images/propl-comar-1.webp" alt="Cyrus Omar sets the scene" title="Cyrus Omar sets the scene" loading="lazy" srcset="/images/propl-comar-1.768.webp 768w, /images/propl-comar-1.640.webp 640w, /images/propl-comar-1.480.webp 480w, /images/propl-comar-1.320.webp 320w, /images/propl-comar-1.1920.webp 1920w, /images/propl-comar-1.1600.webp 1600w, /images/propl-comar-1.1440.webp 1440w, /images/propl-comar-1.1280.webp 1280w, /images/propl-comar-1.1024.webp 1024w"><figcaption>Cyrus Omar sets the scene</figcaption></figure>

[Cyrus Omar](https://web.eecs.umich.edu/~comar/) opened by making the case that the future digital commons for science must not just store data under FAIR principles but must also [compute](https://anil.recoil.org/papers/2025-fairground) over it. The morning talks were a strong lineup:

- Deepak Cherian (Earthmover) on [Icechunk](https://www.earthmover.io/blog/icechunk/), a cloud-native, chunked, compressed nd-array storage format with version control, isolated transactions and snapshots. A sort of "Git for columnar data", born out of the xarray/netCDF lineage. I chuckled when he said that "the pile-of-files model severely lacks rigor" as we're frantically rsyncing terabytes of Tessera embeddings around. The discussions covered federation (you can only really trust the cloud if there's more than one instance) as this matters for datasets like the GEDI products that get [recomputed as calibration improves](https://anil.recoil.org/papers/2024-uncertainty-cs), so updates can be peer-reviewed rather than silently promoted.
- Billy Moses and a large cast talked about their compiler-first planetary compute engine: they built [Enzyme](https://enzyme.mit.edu/) to do automatic differentiation at the LLVM level, and a Reactant frontend that rewrites existing CUDA code into [StableHLO](https://openxla.org/stablehlo) so it can target TPUs. Having end-to-end differentiable earth-system models opens the door to calibration, tuning and uncertainty quantification across many large million-line Fortran codebases like [MITgcm](https://mitgcm.readthedocs.io/en/latest/). One cool example was doing AD on the [famous black-hole image](https://science.nasa.gov/resource/first-image-of-a-black-hole/) which dropped the compute time from over a week to an hour.
- [Dominic Orchard](https://dorchard.github.io) then talked about "minding the gap" between the semantic chasm between the mathematical equations in a paper and the code that supposedly implements them. He showed the [Fluid](https://f.luid.org/) literate language and previewed a new statically-typed language he's designing called [`fortl`](https://github.com/plas4sci/fortl), whose types carry units and physical structure (like [Camfort's](https://camfort.github.io/) units-of-measure analysis but baked into the type system).
- Mark Piper discussed the [Basic Model Interface](https://bmi.csdms.io/) (BMI), a minimal, language-agnostic spec (about ~30 functions) for coupling numerical models, crowdsourced through the CSDMS community.

The afternoon switched to breakout working groups, where the [planetary computing](https://anil.recoil.org/projects/plancomp) agenda ranged over:
- how to bootstrap a computational commons (start small, solve important problems first, build buy-in, and surface the benefits before trying to boil the ocean with a huge software monolith)
- a session on agents-as-collaborators, covering auditability, the climate cost of the models, whether prompt histories should be submitted alongside vibe-coded PRs, and TDD-style processes where verification happens *within* the workflow rather than after it
- the sociotechnical reality that you can't just get a working scientist ('[vernacular programmers](https://dl.acm.org/doi/pdf/10.1145/3480947)') to switch languages; instead we have to meet them where they are, mind the privacy of sensitive data (like endangered-species locations or farmers' fields), and co-design participatively.

I'm glad PROPL is becoming the venue for this kind of discussion! When things calm down after term-time, I'll be working with [Dominic Orchard](https://dorchard.github.io) and [Cyrus Omar](https://web.eecs.umich.edu/~comar/) to distill down the detailed working group sessions into a community writeup. Any ideas for the next PROPL and its focus are welcome from anyone interested in participating\!

## Local LLMs as an ordinary OCaml library

I wrote up [my local LLM experiment](https://anil.recoil.org/notes/language-integrated-llms) this week. After Fable cut out, I bound the [Dwarfstar](https://github.com/antirez/ds4) inference engine into OCaml 5 and [Eio](https://github.com/ocaml-multicore/eio) as [ocaml-deepseek](https://tangled.org/anil.recoil.org/ocaml-deepseek), so a [DeepSeek V4 Flash](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash) model running locally on my Mac is now a plain OCaml function call away. The agent's tools are ordinary OCaml functions, each sandboxed with Eio capabilities to exactly what it needs.

[Shriram Krishnamurthi](https://cs.brown.edu/~sk/) then followed up by pointing me at [Hadley Wickham's piece](https://substack.com/home/post/p-202740029) on how agents actually work under the hood, which kicked off [a discussion](https://x.com/avsm/status/2068657034996719671) about how a small algebra of combinators for "agent context control" (composing, scoping and pruning exactly what the model sees at each step) would be rather handy.

<a href="https://tangled.org/anil.recoil.org/ocaml-deepseek"> <figure class="image-center"><img src="/images/humpty-ss-1.webp" alt="The Humpty OCaml deepseek agent in full poetic flow" title="The Humpty OCaml deepseek agent in full poetic flow" loading="lazy" srcset="/images/humpty-ss-1.768.webp 768w, /images/humpty-ss-1.640.webp 640w, /images/humpty-ss-1.480.webp 480w, /images/humpty-ss-1.320.webp 320w, /images/humpty-ss-1.1920.webp 1920w, /images/humpty-ss-1.1600.webp 1600w, /images/humpty-ss-1.1440.webp 1440w, /images/humpty-ss-1.1280.webp 1280w, /images/humpty-ss-1.1024.webp 1024w"><figcaption>The Humpty OCaml deepseek agent in full poetic flow</figcaption></figure> </a>

I've also just started using [GLM 5.2](https://z.ai/blog/glm-5.2) running locally on my Mac Studio using the [mlx-lm per-layer DSA indexer PR](https://github.com/ml-explore/mlx-lm/pull/1412) which is necessary due to the new model architecture. It works great so far, holding at a cool ~450GB heap size with the [Pi agent](https://pi.dev/).

### OpenUK roundtable on sovereign AI

I also attended a session for London Tech Week hosted by [Amanda Brock](https://amandabrock.com/) of OpenUK about the importance of sovereign AI. Due to train issues, I had to dial in remotely which was a pity as Mike Bracken (who I last met when I worked for Chello back in ~2000) was there and it would have been great to see him again in person! The writeup of this session is available in [Resultsense](https://www.resultsense.com/news/2026-06-18-open-source-uk-sovereign-ai-debate/):

> OpenUK chief executive Amanda Brock warned that “data sovereignty”, “digital
> sovereignty” and “AI sovereignty” are too often conflated, and cautioned that
> sovereignty cannot be achieved in isolation given open source depends on
> global collaboration. Red Hat’s Johnny Williams framed it as “agency, choice
> and control”, warning against “sovereign washing” that fixates on where a
> supplier is headquartered while overlooking wider dependencies. Arm’s Matthew
> Crawford argued no single country can control every component of a modern AI
> model, urging a focus on resilience instead.
> <cite>\-- ["Can open source deliver sovereign AI? UK experts weigh in"](https://www.resultsense.com/news/2026-06-18-open-source-uk-sovereign-ai-debate/)

Another good read this week was an article on how [Europe's AI sovereignty problem runs deeper than frontier access](https://www.techpolicy.press/europes-ai-sovereignty-problem-runs-far-deeper-than-frontier-access/). Unfortunately, the EU seems to be making bizarre choices by moving to [closed source social media forks](https://news.ycombinator.com/item?id=48584497) of ATProto rather than federated relays like the good folk at [Eurosky](https://portal.eurosky.tech/) are already doing.

<figure class="image-center"><img src="/images/openuk-roundtable.webp" alt="The assembled roundtable and me on via Zoom!" title="The assembled roundtable and me on via Zoom!" loading="lazy" srcset="/images/openuk-roundtable.768.webp 768w, /images/openuk-roundtable.640.webp 640w, /images/openuk-roundtable.480.webp 480w, /images/openuk-roundtable.320.webp 320w, /images/openuk-roundtable.1280.webp 1280w, /images/openuk-roundtable.1024.webp 1024w"><figcaption>The assembled roundtable and me on via Zoom!</figcaption></figure>

## Getting Eio working on Windows

A blocker to getting Docker [VPNKit](https://anil.recoil.org/papers/2025-docker-icfp) refreshed to the latest Eio is Windows support. So after last week's [io\_uring spree on Linux](https://anil.recoil.org/notes/2026w24), I spent the back half of this week on getting [Eio](https://github.com/ocaml-multicore/eio) running properly on Windows 11. Windows has a close equivalent to uring called [IORing](https://windows-internals.com/ioring-vs-io_uring-a-comparison-of-windows-and-linux-implementations/), but before using that I refreshed the bindings to the more traditional [I/O completion ports](https://github.com/ocaml-multicore/ocaml-iocp) (IOCP). Both bindings should end up looking a lot like the Linux one, I hope.

<figure class="image-center"><img src="/images/opam-windows-install.webp" alt="opam has a Windows installer now and getting up and running was easy!" title="opam has a Windows installer now and getting up and running was easy!" loading="lazy" srcset="/images/opam-windows-install.768.webp 768w, /images/opam-windows-install.640.webp 640w, /images/opam-windows-install.480.webp 480w, /images/opam-windows-install.320.webp 320w, /images/opam-windows-install.1920.webp 1920w, /images/opam-windows-install.1600.webp 1600w, /images/opam-windows-install.1440.webp 1440w, /images/opam-windows-install.1280.webp 1280w, /images/opam-windows-install.1024.webp 1024w"><figcaption>opam has a Windows installer now and getting up and running was easy!</figcaption></figure>

I reworked the low-level [ocaml-iocp](https://github.com/ocaml-multicore/ocaml-iocp) bindings and rebuilt the API around a bounded free-list of [OVERLAPPED slots](https://stackoverflow.com/questions/28700797/what-is-the-purpose-of-the-overlapped-structure-when-using-iocp).
Then in the [Eio Windows backend](https://github.com/ocaml-multicore/eio) itself I rewrote the scheduler on top of IOCP (modelled on uring's), associating file descriptors with their IOCP port and suspending each fiber until its operation completes. Then it was a matter of splitting I/O dispatch per descriptor so that sockets and pipes go through overlapped IOCP, while regular files and the console run on a systhread pool so they can't stall the event loop. I'm still really confused about how console descriptors work on Windows, so this will spill into next week while I figure this out.

I also added process support (for spawning, capturing stdout/stderr, reading exit status, and passing a custom environment) as well as testing working TCP loopback, socketpairs, pipes, filesystem and timers. Some Windows quirks I noticed:

- Readiness doesn't exist as IOCP only tells you when an operation completed, but never when an FD is ready. So I faked readiness checks with a zero-byte overlapped recv/send, but I wonder if the scheduler structure is incorrectly edge-triggered as a result of needing this hack.
- Closing the read half doesn't wake a blocked read for some reason. Unlike the Linux `SHUT_RD`, a Windows `SD_RECEIVE` seems to leave an outstanding overlapped recv hanging forever.
- A vanished peer surfaces as a raw Win32 code like [ERROR\_NETNAME\_DELETED](https://stackoverflow.com/questions/14499593/can-the-infamous-error-netname-deleted-error-be-considered-an-error-at-all) that isn't in the OCaml runtime's error table, so it has to be translated to a Unix-ish errno.
- Symlinks need Developer Mode and are generally as much of a mess on Windows as they are on Linux, except even worse as you have to declare up front whether you're pointing at a file or a directory. Or maybe that's an improvement, I dunno.

I also started adding WinPty pseudoterminal support, after [refreshing the Eio/pty PR](https://github.com/ocaml-multicore/eio/pull/531) that I started 2.5 years ago! I had to [rework fork action handling](https://github.com/ocaml-multicore/eio/pull/854) a bit in Eio as a prerequisite to this work. [David Allsopp](https://www.dra27.uk) also pointed me to some potential issues in OCaml's handling of standard descriptors on Windows which is [described in his CLOEXEC post](https://www.dra27.uk/blog/platform/2025/04/03/cloexec.html).

As an aside, it was also excellent to see [OCaml 5.5 get released](https://discuss.ocaml.org/t/ocaml-5-5-0-released/18265). I did a quick [review of the release notes](https://github.com/ocaml/ocaml.org/pull/3688) and very much enjoyed seeing all the new goodies (especially [relocatable compiler support](https://www.dra27.uk/blog/platform/2025/09/15/relocatable-ocaml.html)).

## Fun links

<figure class="image-right-float"><img src="/images/science-sundays-1.webp" alt="David Coomes marches off on his travels" title="David Coomes marches off on his travels" loading="lazy" srcset="/images/science-sundays-1.768.webp 768w, /images/science-sundays-1.640.webp 640w, /images/science-sundays-1.480.webp 480w, /images/science-sundays-1.3840.webp 3840w, /images/science-sundays-1.320.webp 320w, /images/science-sundays-1.2560.webp 2560w, /images/science-sundays-1.1920.webp 1920w, /images/science-sundays-1.1600.webp 1600w, /images/science-sundays-1.1440.webp 1440w, /images/science-sundays-1.1280.webp 1280w, /images/science-sundays-1.1024.webp 1024w"><figcaption>David Coomes marches off on his travels</figcaption></figure>
<figure class="image-right-float"><img src="/images/science-sundays-3.webp" alt="A regular summer part of the Botanic schedule!" title="A regular summer part of the Botanic schedule!" loading="lazy" srcset="/images/science-sundays-3.768.webp 768w, /images/science-sundays-3.640.webp 640w, /images/science-sundays-3.480.webp 480w, /images/science-sundays-3.3840.webp 3840w, /images/science-sundays-3.320.webp 320w, /images/science-sundays-3.2560.webp 2560w, /images/science-sundays-3.1920.webp 1920w, /images/science-sundays-3.1600.webp 1600w, /images/science-sundays-3.1440.webp 1440w, /images/science-sundays-3.1280.webp 1280w, /images/science-sundays-3.1024.webp 1024w"><figcaption>A regular summer part of the Botanic schedule!</figcaption></figure>
I dropped by the Botanic Gardens to catch [Science on Sundays](https://www.botanic.cam.ac.uk/whats-on/science-on-sundays-june26/) where [David Coomes](https://coomeslab.org) was talking about plant biodiversity before he headed off on a world lecture tour for a couple of weeks\!

- I absolutely love [Amol Rajan's *Radical* podcast](https://www.bbc.co.uk/programmes/p0nm33j3), and the latest episode has [Shiv Malik](https://en.wikipedia.org/wiki/Shiv_Malik) fielding questions on his push for a brand-new [forest city](https://www.forestcity.uk/) just outside Cambridge! He really does make a compelling case that we can build our way out of the UK housing crisis, and so affordably, sustainably and equitably.
- Switching to performance deep learning, [Sadiq Jaffer](https://toao.com) sent me this paper on [text-to-text regression](https://arxiv.org/abs/2506.21718) for predicting the performance of large systems. They train a 60M-parameter encoder-decoder that gets highly accurate correlation predicting resource efficiency on Google's Borg cluster. It does this straight from raw config files and logs with no special feature engineering.
- [Plan2Map](https://arxiv.org/abs/2606.02747) is a geospatial benchmark that reconstructs machine-readable boundaries from UK planning records. The source documents usually only give us indirect spatial evidence, but now their "GeoPlanAgent" decomposes them into structured data with uncertainty quantification. Might be very neat to apply to our [evidence literature database](https://anil.recoil.org/projects/ce) of full text PDFs.
  

<figure class="image-center"><img src="/images/science-sundays-4.webp" alt="The Botanic looking as splendid as ever now the sun's back" title="The Botanic looking as splendid as ever now the sun's back" loading="lazy" srcset="/images/science-sundays-4.768.webp 768w, /images/science-sundays-4.640.webp 640w, /images/science-sundays-4.480.webp 480w, /images/science-sundays-4.3840.webp 3840w, /images/science-sundays-4.320.webp 320w, /images/science-sundays-4.2560.webp 2560w, /images/science-sundays-4.1920.webp 1920w, /images/science-sundays-4.1600.webp 1600w, /images/science-sundays-4.1440.webp 1440w, /images/science-sundays-4.1280.webp 1280w, /images/science-sundays-4.1024.webp 1024w"><figcaption>The Botanic looking as splendid as ever now the sun's back</figcaption></figure>
Synopsis: Ten years of the CCI with Sir David Attenborough, Andrew's Royal Society Environment Medal lecture, and the third PROPL at PLDI, while wrapping a local DeepSeek agent in OCaml and a first stab at getting Eio fleshed out on Windows.
Words: 2076
DOI: 10.59350/b3vvx-n70

Discussion:
- Bluesky: <https://bsky.app/profile/anil.recoil.org/post/3movrryvmn22l>
- LinkedIn: <https://www.linkedin.com/posts/anilmadhavapeddy_plan-26-w25-from-planetary-scale-plans-share-7474929964908228608-BbR0/>
- Mastodon: <https://amok.recoil.org/@avsm/116795774034519374>
- Twitter: <https://x.com/avsm/status/2069163130458939411>

## Related

- [Sir David Attenborough joins us to celebrate the Cambridge Conservation Initiative](https://anil.recoil.org/notes/ten-years-of-cci) (note, 2026-06-18)
- [The Royal Society Environmental Prize lecture on feeding the world without costing the earth](https://anil.recoil.org/notes/ab-rs-env-medal) (note, 2026-06-16)
- [.plan-26-24: Apparently a professor now; still debugging io_uring at midnight](https://anil.recoil.org/notes/2026w24) (note, 2026-06-14)
- [Language integrated LLMs as an OCaml function](https://anil.recoil.org/notes/language-integrated-llms) (note, 2026-06-14)
- [Enki, a Dashboard of Life on Earth](https://anil.recoil.org/projects/enki) (project, 2026-01-01)
- [Programming for the Planet at ICFP/SPLASH 2025](https://anil.recoil.org/notes/icfp25-propl) (note, 2025-10-05)
- [A FAIR Case for a Live Computational Commons](https://anil.recoil.org/papers/2025-fairground) (paper, 2025-10-01)
- [Functional Networking for Millions of Docker Desktops](https://anil.recoil.org/papers/2025-docker-icfp) (paper, 2025-08-01)
- [TESSERA, a pixelwise geospatial foundation model](https://anil.recoil.org/projects/tessera) (project, 2025-01-01)
- [Uncertainty at scale: how CS hinders climate research](https://anil.recoil.org/papers/2024-uncertainty-cs) (paper, 2024-02-01)
- [Conservation Evidence Copilots](https://anil.recoil.org/projects/ce) (project, 2024-01-01)
- [Planetary Computing](https://anil.recoil.org/projects/plancomp) (project, 2022-01-01)

---
Canonical: https://anil.recoil.org/notes/2026w25
Type: note
Tags: conservation, biodiversity, tessera, climate, academia, nature, ai
