A lot of conservation and planetary computing this week. We celebrated a decade of the CCI with a visit from Sir David Attenborough, and Andrew Balmford delivered his Royal Society Environment Medal lecture. I also tuned in remotely to the third PROPL at PLDI, where the programming-languages community had an action-oriented discussion. On the hacking side, I wrapped a local LLM up as an OCaml library and started fleshing out OCaml/Eio on Windows. Plus fun links at the end.
The Cambridge Conservation Initiative 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 and the freshly renamed Dash of Life (our 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, and it's a splendid reminder of how much gets done in the stairwells and common room of the David Attenborough Building.
Earlier in the week I was down at Carlton House Terrace for the inaugural Royal Society Environment Prize lecture, where Andrew Balmford was awarded the Environment Medal. 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.
Just before heading down, I also nipped into the Vice Chancellor Debbie 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...
The third PROPL (Programming for the Planet) was held at PLDI 2026 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 (live-skeeting? sounds a bit silly). We also maintained a collaborative living document 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. 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.
Cyrus Omar opened by making the case that the future digital commons for science must not just store data under FAIR principles but must also compute over it. The morning talks were a strong lineup:
fortl
The afternoon switched to breakout working groups, where the planetary computing agenda ranged over:
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 and Cyrus Omar 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!
I wrote up my local LLM experiment this week. After Fable cut out, I bound the Dwarfstar inference engine into OCaml 5 and Eio as ocaml-deepseek, so a 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 then followed up by pointing me at Hadley Wickham's piece on how agents actually work under the hood, which kicked off a discussion 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.
I've also just started using GLM 5.2 running locally on my Mac Studio using the mlx-lm per-layer DSA indexer PR 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.
I also attended a session for London Tech Week hosted by Amanda Brock 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:
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. --
["Can open source deliver sovereign AI? UK experts weigh in"]
I also got quoted in Computing about this: "Anil Madhavapeddy, professor of planetary computing at at the University of Cambridge, argued for "federation and collaboration" with other countries, using open ecosystems to achieve scale and resilience". Another good read this week was an article on how Europe's AI sovereignty problem runs deeper than frontier access. Unfortunately, the EU seems to be making bizarre choices by moving to closed source social media forks of ATProto rather than federated relays like the good folk at Eurosky are already doing.
A blocker to getting Docker VPNKit refreshed to the latest Eio is Windows support. So after last week's io_uring spree on Linux, I spent the back half of this week on getting Eio running properly on Windows 11. Windows has a close equivalent to uring called IORing, but before using that I refreshed the bindings to the more traditional I/O completion ports (IOCP). Both bindings should end up looking a lot like the Linux one, I hope.
I reworked the low-level ocaml-iocp bindings and rebuilt the API around a bounded free-list of OVERLAPPED slots. Then in the Eio Windows backend 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:
SHUT_RD
, a Windows SD_RECEIVE
seems to leave an outstanding overlapped recv hanging forever.I also started adding WinPty pseudoterminal support, after refreshing the Eio/pty PR that I started 2.5 years ago! I had to rework fork action handling a bit in Eio as a prerequisite to this work. David Allsopp also pointed me to some potential issues in OCaml's handling of standard descriptors on Windows which is described in his CLOEXEC post.
As an aside, it was also excellent to see OCaml 5.5 get released. I did a quick review of the release notes and very much enjoyed seeing all the new goodies (especially relocatable compiler support).
I dropped by the Botanic Gardens to catch Science on Sundays where David Coomes was talking about plant biodiversity before he headed off on a world lecture tour for a couple of weeks!