Attn: Development Editor, Latest OCaml Weekly News

Alan Schmitt <[email protected]> Tue, 02 Jun 2026 11:01:00 +0200
Newsgroups gmane.comp.lang.caml.inria
Message-ID <[email protected]>
--===-=-=
Content-Type: multipart/mixed; boundary="=-=-="

--=-=-=
Content-Type: multipart/alternative; boundary="==-=-="

--==-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hello

Here is the latest OCaml Weekly News, for the week of May 26 to June 02,
2026.

Table of Contents
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80

Caml In The Capital: Register Now! June 3rd
Slipshow!
doctor 0.3.0: read-only OCaml environment diagnostics
Solo5, a sandboxed execution environment for unikernels
OCaml compiler office hours
Call for Talk Proposals @ OCaml Workshop 2026
Old CWN


Caml In The Capital: Register Now! June 3rd
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90

  Archive:
  <https://discuss.ocaml.org/t/london-caml-in-the-capital-register-now-june=
-3rd/18183/1>


Sacha Ayoun announced
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80

  Hi everyone!

  Please register for next week's Caml In The Capital on June 3rd at
  [this link]. Since it will be hosted at JaneStreet, your registration
  will make it much easier for them to organise.

  *Important information*: Please bring a photo ID on the day of the
  event! =F0=9F=AA=AA Information about the even can be found on [our websi=
te].


[this link]
<https://www.eventbrite.sg/e/caml-in-the-capital-june-tickets-1990385560792>

[our website] <https://caml-in-the-capital.github.io>

Logistics
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=
=95=8C

  The event will be held at *Jane Street's London office*, located at 2
  & A Half Devonshire Square, Premier Place, London, EC2M 4UJ.  Check in
  will take place in the building lobby - *please bring a photo ID with
  you on the day*.  =E2=8C=9B The event will begin at 17:30 with talks star=
ting
  around 18:30.  =F0=9F=8D=95Food and beverages will be served.


Talks
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C

=E2=97=8A Dune Package Management

  *Speaker:* Ali Caglayan Abstract:* Dune package management is a
  *project with the goal of teaching dune how to build and use opam
  *packages. It has been in active development since 2023, and has
  *started to take shape into something more polished and
  *useful. Although it is still considered it experimental at this
  *stage, I will discuss what is possible with it today (relocatable
  *compiler, lockless building, OxCaml support), discuss some of the
  *features we are currently working on (in-and-out, dev-tools), and
  *finally give a glimpse of the road to stability.


=E2=97=8A Opam=E2=80=99s Nix system dependency mechanism

  *Speaker:* Ryan Gibb Abstract:* 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=E2=80=99s reproducible system
  *dependencies. This provides one example of how Nix interfaces with
  *other software development and deployment technologies.


Slipshow!
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90

  Archive: <https://discuss.ocaml.org/t/ann-slipshow/16337/23>


Continuing this thread, Paul-Elliot announced
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80

  First, a small announcement: Slipshow now has its [dedicated zulip]!
  Find help there while you are preparing your presentation, and show
  off your best works!

  It is after completing all the paperwork, that I am officially
  announcing the next release of lsipshow on opam:

  *Lspishow 0.11.0: Brazlip*

  You are not without knowing that a typo can have /darmatic/
  consequences. As a result, we want *at all cost* to avoid committing
  one.

  This release allows splishow to display the errors directly in your
  editor. plsishow can now see everything you write, and directly
  reports any warning, typo or other terrorist misbehavior, for your own
  protection.

  Here is the live recording of a typo corrected in one of our
  presentation:

  <https://github.com/user-attachments/assets/ac675cdf-1d08-41e4-b384-25a3b=
fd764ef>

  The LPS server supports:
  =E2=80=A2 Displaying errors in opened buffers,
  =E2=80=A2 Completion for IDs in actions using IDs as arguments
  =E2=80=A2 Displaying documentation on hover for actions
  =E2=80=A2 Highlighting occurrences of an ID
  =E2=80=A2 Jump to definition for a given ID
  =E2=80=A2 Multi-file presentations
  =E2=80=A2 Synchronized preview server
  =E2=80=A2 Compilation on save

  Every release, I'm amazed to find a new, incredible, OCmal
  library. This time, it is [linlol], from @c-cbue. Thank you so much
  for creating and maintaining it!

  As alwyas, I'd also like to thank NNLet for their generous and
  invaluable support, and=E2=80=A6 =E2=9D=A4=EF=B8=8F my [sponsor]!

  =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80
  =E2=94=82 $ opam update
  =E2=94=82 $ opam upgrade sipshow
  =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80

  You can find the full changelog, as the PSL server is not the only
  improvement of this release!


[dedicated zulip] <https://slipshow.zulipchat.com/>

[linlol] <https://github.com/c-cube/linol>

[sponsor] <https://github.com/sponsors/panglesd>

Added
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C

  =E2=80=A2 Add a visual indicator for the state of the previewer (disconne=
cted,
    refreshing, =E2=80=A6) (#220, #222)
  =E2=80=A2 Allow frontmatter in included files (#228)
  =E2=80=A2 (#229) Add an LSP server, available though the `slipshow lsp'
    command, to interact with your editor. The server supports:
    =E2=80=A2 Diagnostics
    =E2=80=A2 Documentation for actions on hover
    =E2=80=A2 Go to definition (from IDs in action, to the associated eleme=
nt)
    =E2=80=A2 Occurrences of ID
    =E2=80=A2 Completion for IDs in actions
  =E2=80=A2 Add preview server capabilities to the LSP server (#233)
  =E2=80=A2 Add more syntax to include raw html, either in the file or as
    external file (#236)


Changed
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C

  =E2=80=A2 In frontmatter, distinguish between `attributes' (the attribute=
s for
    the whole /file/) and `toplevel-attributes' (the attributes for the
    whole *presentation*). Change `toplevel-attributes' to `attributes'
    in your presentation to fix the breaking change. (#229)


Fixed
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C

  =E2=80=A2 Fixed hot-reload not resuming after a disconnect (#220)


doctor 0.3.0: read-only OCaml environment diagnostics
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=
=E2=95=90=E2=95=90=E2=95=90

  Archive:
  <https://discuss.ocaml.org/t/ann-doctor-0-3-0-read-only-ocaml-environment=
-diagnostics/18186/1>


Funwithcthulhu announced
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80

  Hi,

  I released `doctor' 0.3.0.

  `doctor' is a small read-only CLI for checking a local OCaml
  development environment. It reports common setup issues around opam,
  switches, PATH, dune, ocaml-lsp-server, ocamlformat, and the VS Code
  OCaml Platform extension.

  Install:

  =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80
  =E2=94=82 opam update
  =E2=94=82 opam install doctor
  =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80

  Basic use:

  =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80
  =E2=94=82 doctor check
  =E2=94=82 doctor check --json
  =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80

  The 0.3.0 release focuses on opam switch environment diagnostics. In
  particular, it tries to distinguish missing tools from cases where
  opam has an active switch but the current shell has not loaded that
  switch environment.

  For example, it can report when `ocaml' resolves outside the active
  switch, or when installed switch tools such as `dune', `ocamllsp', or
  `ocamlformat' are missing from `PATH'.

  The command does not run `opam init', create switches, install
  packages, or edit shell/editor files. It only reports what it sees and
  suggests commands to run manually.

  JSON output is intended for editor integrations or small scripts that
  want stable diagnostic names and exit-code mapping.

  Repository:

  <https://github.com/funwithcthulhu/doctor>

  opam package:

  <https://opam.ocaml.org/packages/doctor/>

  Feedback on confusing diagnostics or missing common setup cases would
  be useful.

  Thanks!


Solo5, a sandboxed execution environment for unikernels
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90

  Archive:
  <https://discuss.ocaml.org/t/ann-solo5-a-sandboxed-execution-environment-=
for-unikernels/18191/1>


Calascibetta Romain announced
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=
=E2=94=80=E2=94=80=E2=94=80=E2=94=80

  I am delighted to announce the release of [Solo5.0.11.0]. This release
  is significant as it marks the start of performance improvements for
  our unikernels in OCaml.

  Although the project is written in C, it is a cornerstone of unikernel
  development. OCaml support is provided via [`ocaml-solo5'] (which
  tracks the OCaml compiler versions). Here is a simple example of a
  Solo5 (hvt) unikernel with OCaml:

  =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80
  =E2=94=82 $ opam install ocaml-solo5
  =E2=94=82 $ eval $(opam env)
  =E2=94=82 $ cat >startup.c<<EOF
  =E2=94=82 #include "solo5.h"
  =E2=94=82 #include <caml/callback.h>
  =E2=94=82=20
  =E2=94=82 static char *argv[] =3D { "unikernel", NULL };
  =E2=94=82=20
  =E2=94=82 void _nolibc_init(uintptr_t, size_t);
  =E2=94=82=20
  =E2=94=82 int solo5_app_main(const struct solo5_start_info *si) {
  =E2=94=82   _nolibc_init(si->heap_start, si->heap_size);
  =E2=94=82   caml_startup(argv);
  =E2=94=82   return (0);
  =E2=94=82 }
  =E2=94=82 EOF
  =E2=94=82 $ cat >manifest.json<<EOF
  =E2=94=82 {
  =E2=94=82   "type": "solo5.manifest",
  =E2=94=82   "version": 1,
  =E2=94=82   "devices": []
  =E2=94=82 }
  =E2=94=82 EOF
  =E2=94=82 $ cat >main.ml<<EOF
  =E2=94=82 let () =3D print_endline "Hello World!"
  =E2=94=82 EOF
  =E2=94=82 $ solo5-elftool gen-manifest manifest.json manifest.c
  =E2=94=82 $ ocamlfind -toolchain solo5 opt \
  =E2=94=82   manifest.c startup.c main.ml \
  =E2=94=82   -cclib "-z solo5-abi=3Dhvt" -o main.hvt
  =E2=94=82 $ solo5-hvt -- main.hvt
  =E2=94=82             |      ___|
  =E2=94=82   __|  _ \  |  _ \ __ \
  =E2=94=82 \__ \ (   | | (   |  ) |
  =E2=94=82 ____/\___/ _|\___/____/
  =E2=94=82 Solo5: Bindings version v0.11.0
  =E2=94=82 Solo5: Memory map: 512 MB addressable:
  =E2=94=82 Solo5:   reserved @ (0x0 - 0xfffff)
  =E2=94=82 Solo5:       text @ (0x100000 - 0x14efff)
  =E2=94=82 Solo5:     rodata @ (0x14f000 - 0x166fff)
  =E2=94=82 Solo5:       data @ (0x167000 - 0x371fff)
  =E2=94=82 Solo5:       heap >=3D 0x372000 < stack < 0x20000000
  =E2=94=82 Hello World!
  =E2=94=82 Solo5: solo5_exit(0) called
  =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80

  If you'd like to find out more about developing unikernels in OCaml,
  we recommend reading our [slide] (at the last MirageOS retreat) or
  tutorial on [`mnet'], available [here].


[Solo5.0.11.0] <https://github.com/solo5/solo5>

[`ocaml-solo5'] <https://github.com/mirage/ocaml-solo5>

[slide]
<https://github.com/robur-coop/mkernel/blob/main/slides/retreat.md>

[`mnet'] <https://github.com/robur-coop/mnet>

[here] <https://robur-coop.github.io/mnet/>

What is Solo5?
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=
=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C

  Solo5 is both a C framework and a set of tools for creating and
  running programmes within a sandbox that, initially, allows only 5
  interactions with the outside world:
  1) reading and writing Ethernet frames to a _net_ device
  2) reading and writing pages to a _block_ device
  3) exit

  All the functions available in the sandboxed environment are described
  in this [header].

  What is notable about Solo5 is that this API works with [VirtIO],
  [Xen] (and [QubesOS]) and our minimalist hypervisor `hvt' (which runs
  on KVM, [BHyve] and [VMM]). This means that a Solo5 application can be
  deployed across a wide range of platforms. On Ubuntu, you can install
  Solo5 via:
  =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80
  =E2=94=82 $ curl -fsSL https://apt.robur.coop/gpg.pub | \
  =E2=94=82   gpg --dearmor > /etc/apt/trusted.gpg.d/apt.robur.coop.gpg
  =E2=94=82 $ echo "deb [signed-by=3D/etc/apt/trusted.gpg.d/apt.robur.coop.=
gpg] https://apt.robur.coop ubuntu-24.04 main" > /etc/apt/sources.list.d/ro=
bur.list
  =E2=94=82 $ apt update
  =E2=94=82 $ apt install solo5
  =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80


[header] <https://github.com/Solo5/solo5/blob/main/include/solo5.h>

[VirtIO] <https://lwn.net/Articles/239238/>

[Xen] <https://www.xenserver.com/>

[QubesOS] <https://www.qubes-os.org/>

[BHyve] <https://bhyve.org/>

[VMM] <https://man.openbsd.org/vmm>


`hvt' unikernels
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=
=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C

  At [Robur], we prefer to build `hvt' unikernels. These unikernels only
  require the `solo5-hvt' "tender" (~200 KB) to run, which is available
  on Linux, FreeBSD and OpenBSD (WSL supports what is known as _nested_
  virtualisation, so it is also possible to run a unikernel on WSL!).

  The advantage of `hvt' is its minimalism (a hallmark of Solo5 in
  general). This latest release completes the sandboxing on Linux by
  using `libseccomp' to retain privileges only for what is necessary to
  run the unikernel (which amounts to 18 system calls in total). This
  sandboxing was already available for FreeBSD with [Capsicum] and
  OpenBSD with [pledge(2)].

  This release also marks an improvement in throughput when writing
  Ethernet frames to a tap interface on Linux, achieved through the use
  of [eventfd(2)] and a parallel thread that writes directly to the tap
  interface. This allows us to use fewer costly VM exits.

  To this end, we ran a benchmark using [`iperf3'] (and [a unikernel]
  implementing this protocol with [`mnet']) to demonstrate the
  improvement in throughput.

  =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=
=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=
=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=
=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81
   solo5.0.10.1    solo5.0.11.0=20=20=20=20
  =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80
   ~700 Mbits/sec  ~2.15 Gbits/sec=20
  =E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=
=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=
=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=
=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81=E2=94=81


[Robur] <https://robur.coop/>

[Capsicum] <https://wiki.freebsd.org/Capsicum>

[pledge(2)] <https://man.openbsd.org/pledge.2>

[eventfd(2)] <https://man7.org/linux/man-pages/man2/eventfd.2.html>

[`iperf3'] <https://iperf.fr/iperf-download.php>

[a unikernel] <https://git.robur.coop/robur/iperf3>

[`mnet'] <https://github.com/robur-coop/mnet>


Deploy unikernels
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=
=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=
=8C

  At [Robur], we aim to make deploying unikernels as straightforward as
  possible. That is why we have developed a suite of software and
  unikernels designed to deploy a range of services:
  1) [Albatross] is a project (also installable via `apt') that allows
     you to run a daemon capable of launching and monitoring `hvt'
     unikernels. The advantage is that this service was specifically
     designed for `hvt' unikernels (although, more recently, we have
     been able to deploy systems).
  2) [dnsvizor] is one of our unikernels that resolves the issue of IP
     addressing and DNS resolution. The idea is to launch such a
     unikernel and have subsequent ones configure their networks in
     relation to it.
  3) Finally, we are actively developing [mollymawk], a unikernel that
     provides a web interface for Albatross to enable the deployment of
     new unikernels (in the simplest way possible).

  We have also developed [`aussi'] (still very much in the
  *experimental* stage), which is an [OCI] runtime for our
  unikernels. Among other things, this allows us to use [Docker] to
  build and deploy our unikernels. An example using our unikernels
  [`annuaire'] is available [here].


[Robur] <https://robur.coop/>

[Albatross] <https://github.com/robur-coop/albatross>

[dnsvizor] <https://github.com/robur-coop/dnsvizor>

[mollymawk] <https://github.com/robur-coop/mollymawk>

[`aussi'] <https://github.com/robur-coop/aussi>

[OCI] <https://opencontainers.org/>

[Docker] <https://www.docker.com/>

[`annuaire'] <https://github.com/dinosaure/annuaire>

[here] <https://github.com/robur-coop/aussi#with-docker>


Develop unikernels
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=
=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=
=8C=E2=95=8C

  Finally, there is the other aspect of unikernels and their
  development. At Robur, we are therefore trying to develop libraries
  (particularly protocols and formats) to help potential new users
  develop new unikernels themselves (so that there is a sense of
  ownership).

  So please do not hesitate to ask us any questions on this subject!

  In this regard, for several years now we have been developing a number
  of libraries that enable the development of standard unikernels:
  =E2=80=A2 we are continuing to develop [Miou] as our scheduler for our
    unikernels (as well as our services)
  =E2=80=A2 we are developing [`mnet'] and [`utcp'], which is our new TCP/IP
    stack for our unikernels
  =E2=80=A2 [`mfat'], a FAT32 file system for unikernels, is also available
  =E2=80=A2 and finally [`vifu'], a web framework for developing your websi=
te as
    a unikernel, is also available
  =E2=80=A2 and many other projects that we have been maintaining for sever=
al
    years now!


[Miou] <https://github.com/robur-coop/miou>

[`mnet'] <https://github.com/robur-coop/mnet>

[`utcp'] <https://github.com/robur-coop/utcp>

[`mfat'] <https://github.com/robur-coop/mfat>

[`vifu'] <https://github.com/robur-coop/vif>


Conclusion
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=
=95=8C=E2=95=8C

  This release gives us the opportunity to provide a comprehensive (and
  accessible) overview of our cooperative=E2=80=99s work. This work essenti=
ally
  involves creating the necessary components for the development and
  deployment of unikernels in OCaml, whilst embracing the idea of
  reclaiming control over the means of communication and production.

  Happy hacking!


OCaml compiler office hours
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=
=E2=95=90=E2=95=90

  Archive:
  <https://discuss.ocaml.org/t/ocaml-compiler-office-hours/17230/38>


Continuing this thread,gasche announced
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80

  Dear all,

  This is a reminder that the OCaml Compiler Office Hours will take
  place again next week, on Friday June 5th at 11:00-12:00 UTC (in local
  time, [date-range from=3D2026-06-05T11:00:00 to=3D2026-06-05T12:00:00
  timezone=3DUTC]).

  The collaborative notes for this meeting are available at :
  <https://notes.irif.fr/UGGkT7aqTpmOCsqvW2VFZQ> They are mostly empty
  so far, please feel free to add topics that you would like to see
  discussed in the meeting. (It's fine to put a question here even if
  you cannot attend anyway, we can answer it anyway and it leads to good
  discussions.)

  The video link is also there, and it may still change.


Call for Talk Proposals @ OCaml Workshop 2026
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90=E2=95=90=E2=95=90

  Archive:
  <https://discuss.ocaml.org/t/call-for-talk-proposals-ocaml-workshop-2026/=
18192/1>


Sudha Parimala announced
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80

  Hi all! This year's OCaml workshop will take place in Paris. We are
  happy to invite submissions to the workshop.

  <https://us1.discourse-cdn.com/flex020/uploads/ocaml/original/2X/d/df969f=
0f9bb4c84623413a5805111b147b822ed7.jpeg>


Important Information
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=
=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=
=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C

  =E2=80=A2 *Location:* Paris (co-located with [FPW 2026])
  =E2=80=A2 *Date:* August 27th (*Subject to change!* Possible alternative:
     August 31st)
  =E2=80=A2 *Submission deadline:* July 1st, AoE
  =E2=80=A2 *Speaker notification:* July 27th
  =E2=80=A2 *Submission website:* [https://types-hotcrp.paris.inria.fr/ocam=
l26/]


[FPW 2026] <https://www.irif.fr/~scherer/events/fpw-2026/announce.html>

[https://types-hotcrp.paris.inria.fr/ocaml26/]
<https://types-hotcrp.paris.inria.fr/ocaml26/>


Scope
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C

  The OCaml Workshop welcomes a broad audience of OCaml users ranging
  from enthusiasts who are discovering the magic of OCaml to wizards
  well-proficient in the cast of unsafe spells. Their common denominator
  is their passion for OCaml and the desire to learn more, connect with
  fellow OCamlers, and collectively find ways to improve the language.

  We invite talk proposals just as broad: *anything OCaml related* is
  welcome!

  The topics are not limited to the following, but, to give an idea,
  examples from previous years include: OCaml editing tools, verified
  OCaml artefacts, interoperability between OCaml and other languages,
  the OCaml code of conduct, compiler optimisations, OS portability,
  OCaml testing frameworks, packages for concurrency in OCaml, etc.

  The full catalogue from previous editions can be accessed through the
  links below:

  =E2=80=A2 2025: [https://ocaml.org/conferences/ocaml-workshop-2025]
  =E2=80=A2 2024: [https://ocaml.org/conferences/ocaml-workshop-2024]
  =E2=80=A2 2023: [https://ocaml.org/conferences/ocaml-workshop-2023]
  =E2=80=A2 2022: [https://ocaml.org/conferences/ocaml-workshop-2022]
  =E2=80=A2 2021: [https://ocaml.org/conferences/ocaml-workshop-2021]


[https://ocaml.org/conferences/ocaml-workshop-2025]
<https://ocaml.org/conferences/ocaml-workshop-2025>

[https://ocaml.org/conferences/ocaml-workshop-2024]
<https://ocaml.org/conferences/ocaml-workshop-2024>

[https://ocaml.org/conferences/ocaml-workshop-2023]
<https://ocaml.org/conferences/ocaml-workshop-2023>

[https://ocaml.org/conferences/ocaml-workshop-2022]
<https://ocaml.org/conferences/ocaml-workshop-2022>

[https://ocaml.org/conferences/ocaml-workshop-2021]
<https://ocaml.org/conferences/ocaml-workshop-2021>


Format
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C

  In addition to the *Standard Talk* format of 20 minutes, we allow the
  following formats:

  =E2=80=A2 *Demo.* 30 minutes tutorial-style demonstration of a tool.
  =E2=80=A2 *Informed Position.* 20 minutes presentation on topics in the d=
esign
     space of OCaml (such as, but not limited to, the inclusion or
     removal of a feature).
  =E2=80=A2 *Experience Report.* 20 minutes report on the use of OCaml or a
     tool.


Submission
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=
=95=8C=E2=95=8C

  The submission website is available at:
  [https://types-hotcrp.paris.inria.fr/ocaml26/]

  Please submit a description of the talk (typically two to three pages
  long; it could also be less or more): the problems that are addressed
  and the solutions or methods that are proposed. If you believe the
  delivery itself is a unique feature of the talk, please feel free to
  also include a description of how you plan to deliver the talk.

  LaTeX-produced PDFs are common but not required.

  Last year's accepted presentations are available online:
  [https://icfp25.sigplan.org/home/ocaml-2025#event-overview]


[https://types-hotcrp.paris.inria.fr/ocaml26/]
<https://types-hotcrp.paris.inria.fr/ocaml26/>

[https://icfp25.sigplan.org/home/ocaml-2025#event-overview]
<https://icfp25.sigplan.org/home/ocaml-2025#event-overview>

=E2=97=8A Evaluation Criteria

  We will evaluate submissions according to:

  =E2=80=A2 Relevance for the OCaml community
  =E2=80=A2 Rigor and soundness
  =E2=80=A2 Novelty
  =E2=80=A2 Clarity
  =E2=80=A2 Potential to deliver an engaging and informative presentation


Recommendations on LLM Usage
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=
=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=
=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=
=E2=95=8C=E2=95=8C=E2=95=8C

  Proposals largely written by LLMs are not acceptable and will be
  desk-rejected. The use of LLMs to correct grammar and enhance style is
  perfectly fine (especially if English is not your first language), but
  their use to produce material directly is dangerous and
  unprofessional, and undermines both authorship and reviewer effort.


Location Information
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=
=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=
=8C=E2=95=8C=E2=95=8C=E2=95=8C

  This edition of the Caml Workshop will be located in Paris as part of
  [Functional Programming Workshops (FPW) 2026], alongside other
  workshops and events taking place at the end of August. This is a
  departure from the usual habit of having the OCaml Workshop co-located
  with ICFP. Because some FPW'26 events are bi-located with ICFP, the
  events will take place at roughly the same dates.


[Functional Programming Workshops (FPW) 2026]
<https://www.irif.fr/~scherer/events/fpw-2026/announce.html>


Co-ordination with ML Workshop
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=
=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=
=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C

  The [ML Family Workshop] is also co-located with FW '26 this year and
  may be of interest to attendees. While the OCaml Workshop focuses on
  developments in the OCaml ecosystem, the ML Workshop is
  language-agnostic and more research oriented. Authors whose
  submissions fit both venues are welcome to indicate this at submission
  time or reach out to the program chairs.


[ML Family Workshop]
<https://icfp26.sigplan.org/home/mlfamilyworkshop-2026#About>


Program Committee
=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=
=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=
=8C

  =E2=80=A2 Cl=C3=A9ment Allain
  =E2=80=A2 Pedro Carrott
  =E2=80=A2 Simon Cruanes
  =E2=80=A2 Marko Doko
  =E2=80=A2 Patrick Ferris
  =E2=80=A2 Jean-Christophe Filli=C3=A2tre
  =E2=80=A2 Sadiq Jaffer
  =E2=80=A2 Robbert Krebbers
  =E2=80=A2 Vincent Laviron
  =E2=80=A2 Tim McGilchrist
  =E2=80=A2 Ant=C3=B3nio Monteiro
  =E2=80=A2 Carine Morel
  =E2=80=A2 Andreas Rossberg
  =E2=80=A2 Vimala Soundarapandian
  =E2=80=A2 J=C3=A9r=C3=B4me Vouillon
  =E2=80=A2 John Whitington
  =E2=80=A2 Paulo de Vilhena (Chair)
  =E2=80=A2 Sudha Parimala (Chair)


Old CWN
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90

  If you happen to miss a CWN, you can [send me a message] and I'll mail
  it to you, or go take a look at [the archive] or the [RSS feed of the
  archives].

  If you also wish to receive it every week by mail, you may subscribe
  to the [caml-list].

  [Alan Schmitt]


[send me a message] <mailto:[email protected]>

[the archive] <https://alan.petitepomme.net/cwn/>

[RSS feed of the archives] <https://alan.petitepomme.net/cwn/cwn.rss>

[caml-list] <https://sympa.inria.fr/sympa/info/caml-list>

[Alan Schmitt] <https://alan.petitepomme.net/>


--==-=-=
Content-Type: text/html; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

<?xml version=3D"1.0" encoding=3D"utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns=3D"http://www.w3.org/1999/xhtml" lang=3D"en" xml:lang=3D"en">
<head>
<!-- 2026-06-02 Tue 10:59 -->
<meta http-equiv=3D"Content-Type" content=3D"text/html;charset=3Dutf-8" />
<meta name=3D"viewport" content=3D"width=3Ddevice-width, initial-scale=3D1"=
 />
<title>OCaml Weekly News</title>
<meta name=3D"generator" content=3D"Org Mode" />
<style type=3D"text/css">
  #content { max-width: 60em; margin: auto; }
  .title  { text-align: center;
             margin-bottom: .2em; }
  .subtitle { text-align: center;
              font-size: medium;
              font-weight: bold;
              margin-top:0; }
  .todo   { font-family: monospace; color: red; }
  .done   { font-family: monospace; color: green; }
  .priority { font-family: monospace; color: orange; }
  .tag    { background-color: #eee; font-family: monospace;
            padding: 2px; font-size: 80%; font-weight: normal; }
  .timestamp { color: #bebebe; }
  .timestamp-kwd { color: #5f9ea0; }
  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
  .underline { text-decoration: underline; }
  #postamble p, #preamble p { font-size: 90%; margin: .2em; }
  p.verse { margin-left: 3%; }
  pre {
    border: 1px solid #e6e6e6;
    border-radius: 3px;
    background-color: #f2f2f2;
    padding: 8pt;
    font-family: monospace;
    overflow: auto;
    margin: 1.2em;
  }
  pre.src {
    position: relative;
    overflow: auto;
  }
  pre.src:before {
    display: none;
    position: absolute;
    top: -8px;
    right: 12px;
    padding: 3px;
    color: #555;
    background-color: #f2f2f299;
  }
  pre.src:hover:before { display: inline; margin-top: 14px;}
  /* Languages per Org manual */
  pre.src-asymptote:before { content: 'Asymptote'; }
  pre.src-awk:before { content: 'Awk'; }
  pre.src-authinfo::before { content: 'Authinfo'; }
  pre.src-c:before { content: 'C'; }
  pre.src-C:before { content: 'C'; }
  /* pre.src-C++ doesn't work in CSS */
  pre.src-clojure:before { content: 'Clojure'; }
  pre.src-css:before { content: 'CSS'; }
  pre.src-D:before { content: 'D'; }
  pre.src-ditaa:before { content: 'ditaa'; }
  pre.src-dot:before { content: 'Graphviz'; }
  pre.src-calc:before { content: 'Emacs Calc'; }
  pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
  pre.src-fortran:before { content: 'Fortran'; }
  pre.src-gnuplot:before { content: 'gnuplot'; }
  pre.src-haskell:before { content: 'Haskell'; }
  pre.src-hledger:before { content: 'hledger'; }
  pre.src-java:before { content: 'Java'; }
  pre.src-js:before { content: 'JavaScript'; }
  pre.src-latex:before { content: 'LaTeX'; }
  pre.src-ledger:before { content: 'Ledger'; }
  pre.src-lisp:before { content: 'Lisp'; }
  pre.src-lilypond:before { content: 'Lilypond'; }
  pre.src-lua:before { content: 'Lua'; }
  pre.src-matlab:before { content: 'MATLAB'; }
  pre.src-mscgen:before { content: 'Mscgen'; }
  pre.src-ocaml:before { content: 'Objective Caml'; }
  pre.src-octave:before { content: 'Octave'; }
  pre.src-org:before { content: 'Org mode'; }
  pre.src-oz:before { content: 'OZ'; }
  pre.src-plantuml:before { content: 'Plantuml'; }
  pre.src-processing:before { content: 'Processing.js'; }
  pre.src-python:before { content: 'Python'; }
  pre.src-R:before { content: 'R'; }
  pre.src-ruby:before { content: 'Ruby'; }
  pre.src-sass:before { content: 'Sass'; }
  pre.src-scheme:before { content: 'Scheme'; }
  pre.src-screen:before { content: 'Gnu Screen'; }
  pre.src-sed:before { content: 'Sed'; }
  pre.src-sh:before { content: 'shell'; }
  pre.src-sql:before { content: 'SQL'; }
  pre.src-sqlite:before { content: 'SQLite'; }
  /* additional languages in org.el's org-babel-load-languages alist */
  pre.src-forth:before { content: 'Forth'; }
  pre.src-io:before { content: 'IO'; }
  pre.src-J:before { content: 'J'; }
  pre.src-makefile:before { content: 'Makefile'; }
  pre.src-maxima:before { content: 'Maxima'; }
  pre.src-perl:before { content: 'Perl'; }
  pre.src-picolisp:before { content: 'Pico Lisp'; }
  pre.src-scala:before { content: 'Scala'; }
  pre.src-shell:before { content: 'Shell Script'; }
  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
  /* additional language identifiers per "defun org-babel-execute"
       in ob-*.el */
  pre.src-cpp:before  { content: 'C++'; }
  pre.src-abc:before  { content: 'ABC'; }
  pre.src-coq:before  { content: 'Coq'; }
  pre.src-groovy:before  { content: 'Groovy'; }
  /* additional language identifiers from org-babel-shell-names in
     ob-shell.el: ob-shell is the only babel language using a lambda to put
     the execution function name together. */
  pre.src-bash:before  { content: 'bash'; }
  pre.src-csh:before  { content: 'csh'; }
  pre.src-ash:before  { content: 'ash'; }
  pre.src-dash:before  { content: 'dash'; }
  pre.src-ksh:before  { content: 'ksh'; }
  pre.src-mksh:before  { content: 'mksh'; }
  pre.src-posh:before  { content: 'posh'; }
  /* Additional Emacs modes also supported by the LaTeX listings package */
  pre.src-ada:before { content: 'Ada'; }
  pre.src-asm:before { content: 'Assembler'; }
  pre.src-caml:before { content: 'Caml'; }
  pre.src-delphi:before { content: 'Delphi'; }
  pre.src-html:before { content: 'HTML'; }
  pre.src-idl:before { content: 'IDL'; }
  pre.src-mercury:before { content: 'Mercury'; }
  pre.src-metapost:before { content: 'MetaPost'; }
  pre.src-modula-2:before { content: 'Modula-2'; }
  pre.src-pascal:before { content: 'Pascal'; }
  pre.src-ps:before { content: 'PostScript'; }
  pre.src-prolog:before { content: 'Prolog'; }
  pre.src-simula:before { content: 'Simula'; }
  pre.src-tcl:before { content: 'tcl'; }
  pre.src-tex:before { content: 'TeX'; }
  pre.src-plain-tex:before { content: 'Plain TeX'; }
  pre.src-verilog:before { content: 'Verilog'; }
  pre.src-vhdl:before { content: 'VHDL'; }
  pre.src-xml:before { content: 'XML'; }
  pre.src-nxml:before { content: 'XML'; }
  /* add a generic configuration mode; LaTeX export needs an additional
     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
  pre.src-conf:before { content: 'Configuration File'; }

  table { border-collapse:collapse; }
  caption.t-above { caption-side: top; }
  caption.t-bottom { caption-side: bottom; }
  td, th { vertical-align:top;  }
  th.org-right  { text-align: center;  }
  th.org-left   { text-align: center;   }
  th.org-center { text-align: center; }
  td.org-right  { text-align: right;  }
  td.org-left   { text-align: left;   }
  td.org-center { text-align: center; }
  dt { font-weight: bold; }
  .footpara { display: inline; }
  .footdef  { margin-bottom: 1em; }
  .figure { padding: 1em; }
  .figure p { text-align: center; }
  .equation-container {
    display: table;
    text-align: center;
    width: 100%;
  }
  .equation {
    vertical-align: middle;
  }
  .equation-label {
    display: table-cell;
    text-align: right;
    vertical-align: middle;
  }
  .inlinetask {
    padding: 10px;
    border: 2px solid gray;
    margin: 10px;
    background: #ffffcc;
  }
  #org-div-home-and-up
   { text-align: right; font-size: 70%; white-space: nowrap; }
  textarea { overflow-x: auto; }
  .linenr {
    font-size: smaller;
    @supports (content: attr(data-linenr)) {
      visibility: hidden;
      &::before { content: attr(data-linenr); visibility: visible; }
    }
  }
  .code-highlighted { background-color: #ffff00; }
  .org-info-js_info-navigation { border-style: none; }
  #org-info-js_console-label
    { font-size: 10px; font-weight: bold; white-space: nowrap; }
  .org-info-js_search-highlight
    { background-color: #ffff00; color: #000000; font-weight: bold; }
  .org-svg { }
</style>
<style type=3D"text/css">#table-of-contents h2 { display: none } .title { d=
isplay: none } .authorname { text-align: right }</style>
<style type=3D"text/css">.outline-2 {border-top: 1px solid black;}</style>
</head>
<body>
<div id=3D"content" class=3D"content">
<h1 class=3D"title">OCaml Weekly News</h1>
<p>
<a href=3D"https://alan.petitepomme.net/cwn/2026.05.26.html">Previous Week<=
/a> <a href=3D"https://alan.petitepomme.net/cwn/index.html">Up</a> <a href=
=3D"https://alan.petitepomme.net/cwn/2026.06.09.html">Next Week</a>
</p>

<p>
Hello
</p>

<p>
Here is the latest OCaml Weekly News, for the week of May 26 to June 02, 20=
26.
</p>

<div id=3D"table-of-contents" role=3D"doc-toc">
<h2>Table of Contents</h2>
<div id=3D"text-table-of-contents" role=3D"doc-toc">
<ul>
<li><a href=3D"#1">Caml In The Capital: Register Now! June 3rd</a></li>
<li><a href=3D"#2">Slipshow!</a></li>
<li><a href=3D"#3">doctor 0.3.0: read-only OCaml environment diagnostics</a=
></li>
<li><a href=3D"#4">Solo5, a sandboxed execution environment for unikernels<=
/a></li>
<li><a href=3D"#5">OCaml compiler office hours</a></li>
<li><a href=3D"#6">Call for Talk Proposals @ OCaml Workshop 2026</a></li>
<li><a href=3D"#org66e1c7f">Old CWN</a></li>
</ul>
</div>
</div>
<div id=3D"outline-container-1" class=3D"outline-2">
<h2 id=3D"1">Caml In The Capital: Register Now! June 3rd</h2>
<div class=3D"outline-text-2" id=3D"text-1">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/london-caml-in-the-capital-=
register-now-june-3rd/18183/1">https://discuss.ocaml.org/t/london-caml-in-t=
he-capital-register-now-june-3rd/18183/1</a>
</p>
</div>
<div id=3D"outline-container-org5ffb949" class=3D"outline-3">
<h3 id=3D"org5ffb949">Sacha Ayoun announced</h3>
<div class=3D"outline-text-3" id=3D"text-org5ffb949">
<p>
Hi everyone!
</p>

<p>
Please register for next week's Caml In The Capital on June 3rd at <a href=
=3D"https://www.eventbrite.sg/e/caml-in-the-capital-june-tickets-1990385560=
792">this link</a>. Since it will be hosted at JaneStreet, your registratio=
n will make it much easier for them to organise.
</p>

<p>
<b>Important information</b>: Please bring a photo ID on the day of the eve=
nt! =F0=9F=AA=AA
Information about the even can be found on <a href=3D"https://caml-in-the-c=
apital.github.io">our website</a>.
</p>
</div>
<div id=3D"outline-container-org4b31204" class=3D"outline-4">
<h4 id=3D"org4b31204">Logistics</h4>
<div class=3D"outline-text-4" id=3D"text-org4b31204">
<p>
The event will be held at <b>Jane Street's London office</b>, located at 2 =
&amp; A Half Devonshire Square, Premier Place, London, EC2M 4UJ.
Check in will take place in the building lobby - <b>please bring a photo ID=
 with you on the day</b>.
=E2=8C=9B The event will begin at 17:30 with talks starting around 18:30.
=F0=9F=8D=95Food and beverages will be served.
</p>
</div>
</div>
<div id=3D"outline-container-org032f1be" class=3D"outline-4">
<h4 id=3D"org032f1be">Talks</h4>
<div class=3D"outline-text-4" id=3D"text-org032f1be">
</div>
<ul class=3D"org-ul">
<li><a id=3D"org806e617"></a>Dune Package Management<br />
<div class=3D"outline-text-5" id=3D"text-org806e617">
<p>
<b>Speaker:</b> Ali Caglayan
<b>Abstract:</b> Dune package management is a project with the goal of teac=
hing dune how to build and use opam packages. It has been in active develop=
ment since 2023, and has started to take shape into something more polished=
 and useful. Although it is still considered it experimental at this stage,=
 I will discuss what is possible with it today (relocatable compiler, lockl=
ess building, OxCaml support), discuss some of the features we are currentl=
y working on (in-and-out, dev-tools), and finally give a glimpse of the roa=
d to stability.
</p>
</div>
</li>
<li><a id=3D"org66ffbfa"></a>Opam=E2=80=99s Nix system dependency mechanism=
<br />
<div class=3D"outline-text-5" id=3D"text-org66ffbfa">
<p>
<b>Speaker:</b> Ryan Gibb
<b>Abstract:</b> 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 de=
velopment easily whilst benefitting from Nix=E2=80=99s reproducible system =
dependencies. This provides one example of how Nix interfaces with other so=
ftware development and deployment technologies.
</p>
</div>
</li>
</ul>
</div>
</div>
</div>
<div id=3D"outline-container-2" class=3D"outline-2">
<h2 id=3D"2">Slipshow!</h2>
<div class=3D"outline-text-2" id=3D"text-2">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-slipshow/16337/23">http=
s://discuss.ocaml.org/t/ann-slipshow/16337/23</a>
</p>
</div>
<div id=3D"outline-container-org0f2a971" class=3D"outline-3">
<h3 id=3D"org0f2a971">Continuing this thread, Paul-Elliot announced</h3>
<div class=3D"outline-text-3" id=3D"text-org0f2a971">
<p>
First, a small announcement: Slipshow now has its <a href=3D"https://slipsh=
ow.zulipchat.com/">dedicated zulip</a>! Find help there while you are prepa=
ring your presentation, and show off your best works!
</p>

<p>
It is after completing all the paperwork, that I am officially announcing t=
he next release of lsipshow on opam:
</p>

<p>
<b>Lspishow 0.11.0: Brazlip</b>
</p>

<p>
You are not without knowing that a typo can have <i>darmatic</i> consequenc=
es. As a result, we want <b>at all cost</b> to avoid committing one.
</p>

<p>
This release allows splishow to display the errors directly in your editor.=
 plsishow can now see everything you write, and directly reports any warnin=
g, typo or other terrorist misbehavior, for your own protection.
</p>

<p>
Here is the live recording of a typo corrected in one of our presentation:
</p>

<p width=3D"80%">
<a href=3D"https://github.com/user-attachments/assets/ac675cdf-1d08-41e4-b3=
84-25a3bfd764ef" width=3D"80%">https://github.com/user-attachments/assets/a=
c675cdf-1d08-41e4-b384-25a3bfd764ef</a>
</p>

<p>
The LPS server supports:
</p>
<ul class=3D"org-ul">
<li>Displaying errors in opened buffers,</li>
<li>Completion for IDs in actions using IDs as arguments</li>
<li>Displaying documentation on hover for actions</li>
<li>Highlighting occurrences of an ID</li>
<li>Jump to definition for a given ID</li>
<li>Multi-file presentations</li>
<li>Synchronized preview server</li>
<li>Compilation on save</li>
</ul>

<p>
Every release, I'm amazed to find a new, incredible, OCmal library. This ti=
me, it is <a href=3D"https://github.com/c-cube/linol">linlol</a>, from @c-c=
bue. Thank you so much for creating and maintaining it!
</p>

<p>
As alwyas, I'd also like to thank NNLet for their generous and invaluable s=
upport, and&hellip; =E2=9D=A4=EF=B8=8F my <a href=3D"https://github.com/spo=
nsors/panglesd">sponsor</a>!
</p>

<pre class=3D"example" id=3D"org7a19fda">
$ opam update
$ opam upgrade sipshow
</pre>

<p>
You can find the full changelog, as the PSL server is not the only improvem=
ent of this release!
</p>
</div>
<div id=3D"outline-container-org2178927" class=3D"outline-4">
<h4 id=3D"org2178927">Added</h4>
<div class=3D"outline-text-4" id=3D"text-org2178927">
<ul class=3D"org-ul">
<li>Add a visual indicator for the state of the previewer (disconnected,
refreshing, &hellip;) (#220, #222)</li>
<li>Allow frontmatter in included files (#228)</li>
<li>(#229) Add an LSP server, available though the <code>slipshow lsp</code=
> command, to interact
with your editor. The server supports:
<ul class=3D"org-ul">
<li>Diagnostics</li>
<li>Documentation for actions on hover</li>
<li>Go to definition (from IDs in action, to the associated element)</li>
<li>Occurrences of ID</li>
<li>Completion for IDs in actions</li>
</ul></li>
<li>Add preview server capabilities to the LSP server (#233)</li>
<li>Add more syntax to include raw html, either in the file or as external =
file
(#236)</li>
</ul>
</div>
</div>
<div id=3D"outline-container-org16f6826" class=3D"outline-4">
<h4 id=3D"org16f6826">Changed</h4>
<div class=3D"outline-text-4" id=3D"text-org16f6826">
<ul class=3D"org-ul">
<li>In frontmatter, distinguish between <code>attributes</code> (the attrib=
utes for the whole <i>file</i>) and <code>toplevel-attributes</code> (the a=
ttributes for the whole <b>presentation</b>). Change <code>toplevel-attribu=
tes</code> to <code>attributes</code> in your presentation to fix the break=
ing change. (#229)</li>
</ul>
</div>
</div>
<div id=3D"outline-container-orgd4a18cc" class=3D"outline-4">
<h4 id=3D"orgd4a18cc">Fixed</h4>
<div class=3D"outline-text-4" id=3D"text-orgd4a18cc">
<ul class=3D"org-ul">
<li>Fixed hot-reload not resuming after a disconnect (#220)</li>
</ul>
</div>
</div>
</div>
</div>
<div id=3D"outline-container-3" class=3D"outline-2">
<h2 id=3D"3">doctor 0.3.0: read-only OCaml environment diagnostics</h2>
<div class=3D"outline-text-2" id=3D"text-3">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-doctor-0-3-0-read-only-=
ocaml-environment-diagnostics/18186/1">https://discuss.ocaml.org/t/ann-doct=
or-0-3-0-read-only-ocaml-environment-diagnostics/18186/1</a>
</p>
</div>
<div id=3D"outline-container-orgd41c88b" class=3D"outline-3">
<h3 id=3D"orgd41c88b">Funwithcthulhu announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgd41c88b">
<p>
Hi,
</p>

<p>
I released <code>doctor</code> 0.3.0.
</p>

<p>
<code>doctor</code> is a small read-only CLI for checking a local OCaml dev=
elopment environment. It reports common setup issues around opam, switches,=
 PATH, dune, ocaml-lsp-server, ocamlformat, and the VS Code OCaml Platform =
extension.
</p>

<p>
Install:
</p>

<pre class=3D"example" id=3D"orgd72b385">
opam update
opam install doctor
</pre>

<p>
Basic use:
</p>

<pre class=3D"example" id=3D"org2386956">
doctor check
doctor check --json
</pre>

<p>
The 0.3.0 release focuses on opam switch environment diagnostics. In partic=
ular, it tries to distinguish missing tools from cases where opam has an ac=
tive switch but the current shell has not loaded that switch environment.
</p>

<p>
For example, it can report when <code>ocaml</code> resolves outside the act=
ive switch, or when installed switch tools such as <code>dune</code>, <code=
>ocamllsp</code>, or <code>ocamlformat</code> are missing from <code>PATH</=
code>.
</p>

<p>
The command does not run <code>opam init</code>, create switches, install p=
ackages, or edit shell/editor files. It only reports what it sees and sugge=
sts commands to run manually.
</p>

<p>
JSON output is intended for editor integrations or small scripts that want =
stable diagnostic names and exit-code mapping.
</p>

<p>
Repository:
</p>

<p>
<a href=3D"https://github.com/funwithcthulhu/doctor">https://github.com/fun=
withcthulhu/doctor</a>
</p>

<p>
opam package:
</p>

<p>
<a href=3D"https://opam.ocaml.org/packages/doctor/">https://opam.ocaml.org/=
packages/doctor/</a>
</p>

<p>
Feedback on confusing diagnostics or missing common setup cases would be us=
eful.
</p>

<p>
Thanks!
</p>
</div>
</div>
</div>
<div id=3D"outline-container-4" class=3D"outline-2">
<h2 id=3D"4">Solo5, a sandboxed execution environment for unikernels</h2>
<div class=3D"outline-text-2" id=3D"text-4">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-solo5-a-sandboxed-execu=
tion-environment-for-unikernels/18191/1">https://discuss.ocaml.org/t/ann-so=
lo5-a-sandboxed-execution-environment-for-unikernels/18191/1</a>
</p>
</div>
<div id=3D"outline-container-orgc742734" class=3D"outline-3">
<h3 id=3D"orgc742734">Calascibetta Romain announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgc742734">
<p>
I am delighted to announce the release of <a href=3D"https://github.com/sol=
o5/solo5">Solo5.0.11.0</a>. This release is significant as it marks the sta=
rt of performance improvements for our unikernels in OCaml.
</p>

<p>
Although the project is written in C, it is a cornerstone of unikernel deve=
lopment. OCaml support is provided via <a href=3D"https://github.com/mirage=
/ocaml-solo5"><code>ocaml-solo5</code></a> (which tracks the OCaml compiler=
 versions). Here is a simple example of a Solo5 (hvt) unikernel with OCaml:
</p>

<div class=3D"org-src-container">
<pre class=3D"src src-shell"><code>$ opam install ocaml-solo5
$ eval $(opam env)
$ cat &gt;startup.c&lt;&lt;EOF
<span style=3D"color: #ca3400;">#include "solo5.h"</span>
<span style=3D"color: #ca3400;">#include &lt;caml/callback.h&gt;</span>

<span style=3D"color: #ca3400;">static char *argv[] =3D { "unikernel", NULL=
 };</span>

<span style=3D"color: #ca3400;">void _nolibc_init(uintptr_t, size_t);</span>

<span style=3D"color: #ca3400;">int solo5_app_main(const struct solo5_start=
_info *si) {</span>
<span style=3D"color: #ca3400;">  _nolibc_init(si-&gt;heap_start, si-&gt;he=
ap_size);</span>
<span style=3D"color: #ca3400;">  caml_startup(argv);</span>
<span style=3D"color: #ca3400;">  return (0);</span>
<span style=3D"color: #ca3400;">}</span>
<span style=3D"color: #ca3400;">EOF</span>
$ cat &gt;manifest.json&lt;&lt;EOF
<span style=3D"color: #ca3400;">{</span>
<span style=3D"color: #ca3400;">  "type": "solo5.manifest",</span>
<span style=3D"color: #ca3400;">  "version": 1,</span>
<span style=3D"color: #ca3400;">  "devices": []</span>
<span style=3D"color: #ca3400;">}</span>
<span style=3D"color: #ca3400;">EOF</span>
$ cat &gt;main.ml&lt;&lt;EOF
<span style=3D"color: #ca3400;">let () =3D print_endline "Hello World!"</sp=
an>
<span style=3D"color: #ca3400;">EOF</span>
$ solo5-elftool gen-manifest manifest.json manifest.c
$ ocamlfind -toolchain solo5 opt <span style=3D"color: #ca3400;">\</span>
  manifest.c startup.c main.ml <span style=3D"color: #ca3400;">\</span>
  -cclib <span style=3D"color: #ca3400;">"-z solo5-abi=3Dhvt"</span> -o mai=
n.hvt
$ solo5-hvt -- main.hvt
            |      ___|
  __|  _ <span style=3D"color: #ca3400;">\ </span> |  _ <span style=3D"colo=
r: #ca3400;">\ </span>__ <span style=3D"color: #ca3400;">\</span>
<span style=3D"color: #ca3400;">\_</span>_ <span style=3D"color: #ca3400;">=
\ </span>(   | | (   |  ) |
____/<span style=3D"color: #ca3400;">\_</span>__/ _|<span style=3D"color: #=
ca3400;">\_</span>__/____/
Solo5: Bindings version v0.11.0
Solo5: Memory map: 512 MB addressable:
Solo5:   reserved @ (0x0 - 0xfffff)
Solo5:       text @ (0x100000 - 0x14efff)
Solo5:     rodata @ (0x14f000 - 0x166fff)
Solo5:       data @ (0x167000 - 0x371fff)
Solo5:       heap &gt;=3D 0x372000 &lt; stack &lt; 0x20000000
Hello World!
Solo5: solo5_exit(0) called
</code></pre>
</div>

<p>
If you'd like to find out more about developing unikernels in OCaml, we rec=
ommend reading our <a href=3D"https://github.com/robur-coop/mkernel/blob/ma=
in/slides/retreat.md">slide</a> (at the last MirageOS retreat) or tutorial =
on <a href=3D"https://github.com/robur-coop/mnet"><code>mnet</code></a>, av=
ailable <a href=3D"https://robur-coop.github.io/mnet/">here</a>.
</p>
</div>
<div id=3D"outline-container-org349e01c" class=3D"outline-4">
<h4 id=3D"org349e01c">What is Solo5?</h4>
<div class=3D"outline-text-4" id=3D"text-org349e01c">
<p>
Solo5 is both a C framework and a set of tools for creating and running pro=
grammes within a sandbox that, initially, allows only 5 interactions with t=
he outside world:
</p>
<ol class=3D"org-ol">
<li>reading and writing Ethernet frames to a <span class=3D"underline">net<=
/span> device</li>
<li>reading and writing pages to a <span class=3D"underline">block</span> d=
evice</li>
<li>exit</li>
</ol>

<p>
All the functions available in the sandboxed environment are described in t=
his <a href=3D"https://github.com/Solo5/solo5/blob/main/include/solo5.h">he=
ader</a>.
</p>

<p>
What is notable about Solo5 is that this API works with <a href=3D"https://=
lwn.net/Articles/239238/">VirtIO</a>, <a href=3D"https://www.xenserver.com/=
">Xen</a> (and <a href=3D"https://www.qubes-os.org/">QubesOS</a>) and our m=
inimalist hypervisor <code>hvt</code> (which runs on KVM, <a href=3D"https:=
//bhyve.org/">BHyve</a> and <a href=3D"https://man.openbsd.org/vmm">VMM</a>=
). This means that a Solo5 application can be deployed across a wide range =
of platforms. On Ubuntu, you can install Solo5 via:
</p>
<div class=3D"org-src-container">
<pre class=3D"src src-shell"><code>$ curl -fsSL https://apt.robur.coop/gpg.=
pub | <span style=3D"color: #ca3400;">\</span>
  gpg --dearmor &gt; /etc/apt/trusted.gpg.d/apt.robur.coop.gpg
$ echo <span style=3D"color: #ca3400;">"deb [signed-by=3D/etc/apt/trusted.g=
pg.d/apt.robur.coop.gpg] https://apt.robur.coop ubuntu-24.04 main"</span> &=
gt; /etc/apt/sources.list.d/robur.list
$ apt update
$ apt install solo5
</code></pre>
</div>
</div>
</div>
<div id=3D"outline-container-org5360ae0" class=3D"outline-4">
<h4 id=3D"org5360ae0"><code>hvt</code> unikernels</h4>
<div class=3D"outline-text-4" id=3D"text-org5360ae0">
<p>
At <a href=3D"https://robur.coop/">Robur</a>, we prefer to build <code>hvt<=
/code> unikernels. These unikernels only require the <code>solo5-hvt</code>=
 "tender" (~200 KB) to run, which is available on Linux, FreeBSD and OpenBS=
D (WSL supports what is known as <span class=3D"underline">nested</span> vi=
rtualisation, so it is also possible to run a unikernel on WSL!).=20
</p>

<p>
The advantage of <code>hvt</code> is its minimalism (a hallmark of Solo5 in=
 general). This latest release completes the sandboxing on Linux by using <=
code>libseccomp</code> to retain privileges only for what is necessary to r=
un the unikernel (which amounts to 18 system calls in total). This sandboxi=
ng was already available for FreeBSD with <a href=3D"https://wiki.freebsd.o=
rg/Capsicum">Capsicum</a> and OpenBSD with <a href=3D"https://man.openbsd.o=
rg/pledge.2">pledge(2)</a>.
</p>

<p>
This release also marks an improvement in throughput when writing Ethernet =
frames to a tap interface on Linux, achieved through the use of <a href=3D"=
https://man7.org/linux/man-pages/man2/eventfd.2.html">eventfd(2)</a> and a =
parallel thread that writes directly to the tap interface. This allows us t=
o use fewer costly VM exits.
</p>

<p>
To this end, we ran a benchmark using <a href=3D"https://iperf.fr/iperf-dow=
nload.php"><code>iperf3</code></a> (and <a href=3D"https://git.robur.coop/r=
obur/iperf3">a unikernel</a> implementing this protocol with <a href=3D"htt=
ps://github.com/robur-coop/mnet"><code>mnet</code></a>) to demonstrate the =
improvement in throughput.
</p>

<table border=3D"2" cellspacing=3D"0" cellpadding=3D"6" rules=3D"groups" fr=
ame=3D"hsides">


<colgroup>
<col  class=3D"org-left" />

<col  class=3D"org-left" />
</colgroup>
<thead>
<tr>
<th scope=3D"col" class=3D"org-left">solo5.0.10.1</th>
<th scope=3D"col" class=3D"org-left">solo5.0.11.0</th>
</tr>
</thead>
<tbody>
<tr>
<td class=3D"org-left">~700 Mbits/sec</td>
<td class=3D"org-left">~2.15 Gbits/sec</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id=3D"outline-container-org54adbf6" class=3D"outline-4">
<h4 id=3D"org54adbf6">Deploy unikernels</h4>
<div class=3D"outline-text-4" id=3D"text-org54adbf6">
<p>
At <a href=3D"https://robur.coop/">Robur</a>, we aim to make deploying unik=
ernels as straightforward as possible. That is why we have developed a suit=
e of software and unikernels designed to deploy a range of services:
</p>
<ol class=3D"org-ol">
<li><a href=3D"https://github.com/robur-coop/albatross">Albatross</a> is a =
project (also installable via <code>apt</code>) that allows you to run a da=
emon capable of launching and monitoring <code>hvt</code> unikernels. The a=
dvantage is that this service was specifically designed for <code>hvt</code=
> unikernels (although, more recently, we have been able to deploy systems)=
.</li>
<li><a href=3D"https://github.com/robur-coop/dnsvizor">dnsvizor</a> is one =
of our unikernels that resolves the issue of IP addressing and DNS resoluti=
on. The idea is to launch such a unikernel and have subsequent ones configu=
re their networks in relation to it.</li>
<li>Finally, we are actively developing <a href=3D"https://github.com/robur=
-coop/mollymawk">mollymawk</a>, a unikernel that provides a web interface f=
or Albatross to enable the deployment of new unikernels (in the simplest wa=
y possible).</li>
</ol>

<p>
We have also developed <a href=3D"https://github.com/robur-coop/aussi"><cod=
e>aussi</code></a> (still very much in the <b>experimental</b> stage), whic=
h is an <a href=3D"https://opencontainers.org/">OCI</a> runtime for our uni=
kernels. Among other things, this allows us to use <a href=3D"https://www.d=
ocker.com/">Docker</a> to build and deploy our unikernels. An example using=
 our unikernels <a href=3D"https://github.com/dinosaure/annuaire"><code>ann=
uaire</code></a> is available <a href=3D"https://github.com/robur-coop/auss=
i#with-docker">here</a>.
</p>
</div>
</div>
<div id=3D"outline-container-org5403c65" class=3D"outline-4">
<h4 id=3D"org5403c65">Develop unikernels</h4>
<div class=3D"outline-text-4" id=3D"text-org5403c65">
<p>
Finally, there is the other aspect of unikernels and their development. At =
Robur, we are therefore trying to develop libraries (particularly protocols=
 and formats) to help potential new users develop new unikernels themselves=
 (so that there is a sense of ownership).
</p>

<p>
So please do not hesitate to ask us any questions on this subject!
</p>

<p>
In this regard, for several years now we have been developing a number of l=
ibraries that enable the development of standard unikernels:
</p>
<ul class=3D"org-ul">
<li>we are continuing to develop <a href=3D"https://github.com/robur-coop/m=
iou">Miou</a> as our scheduler for our unikernels (as well as our services)=
</li>
<li>we are developing <a href=3D"https://github.com/robur-coop/mnet"><code>=
mnet</code></a> and <a href=3D"https://github.com/robur-coop/utcp"><code>ut=
cp</code></a>, which is our new TCP/IP stack for our unikernels</li>
<li><a href=3D"https://github.com/robur-coop/mfat"><code>mfat</code></a>, a=
 FAT32 file system for unikernels, is also available</li>
<li>and finally <a href=3D"https://github.com/robur-coop/vif"><code>vifu</c=
ode></a>, a web framework for developing your website as a unikernel, is al=
so available</li>
<li>and many other projects that we have been maintaining for several years=
 now!</li>
</ul>
</div>
</div>
<div id=3D"outline-container-org814faa7" class=3D"outline-4">
<h4 id=3D"org814faa7">Conclusion</h4>
<div class=3D"outline-text-4" id=3D"text-org814faa7">
<p>
This release gives us the opportunity to provide a comprehensive (and acces=
sible) overview of our cooperative=E2=80=99s work. This work essentially in=
volves creating the necessary components for the development and deployment=
 of unikernels in OCaml, whilst embracing the idea of reclaiming control ov=
er the means of communication and production.
</p>

<p>
Happy hacking!
</p>
</div>
</div>
</div>
</div>
<div id=3D"outline-container-5" class=3D"outline-2">
<h2 id=3D"5">OCaml compiler office hours</h2>
<div class=3D"outline-text-2" id=3D"text-5">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ocaml-compiler-office-hours=
/17230/38">https://discuss.ocaml.org/t/ocaml-compiler-office-hours/17230/38=
</a>
</p>
</div>
<div id=3D"outline-container-org34b4b41" class=3D"outline-3">
<h3 id=3D"org34b4b41">Continuing this thread,gasche announced</h3>
<div class=3D"outline-text-3" id=3D"text-org34b4b41">
<p>
Dear all,
</p>

<p>
This is a reminder that the OCaml Compiler Office Hours will take place aga=
in next week, on Friday June 5th at 11:00-12:00 UTC (in local time, [date-r=
ange from=3D2026-06-05T11:00:00 to=3D2026-06-05T12:00:00 timezone=3DUTC]).
</p>

<p>
The collaborative notes for this meeting are available at : <a href=3D"http=
s://notes.irif.fr/UGGkT7aqTpmOCsqvW2VFZQ">https://notes.irif.fr/UGGkT7aqTpm=
OCsqvW2VFZQ</a>
They are mostly empty so far, please feel free to add topics that you would=
 like to see discussed in the meeting. (It's fine to put a question here ev=
en if you cannot attend anyway, we can answer it anyway and it leads to goo=
d discussions.)
</p>

<p>
The video link is also there, and it may still change.
</p>
</div>
</div>
</div>
<div id=3D"outline-container-6" class=3D"outline-2">
<h2 id=3D"6">Call for Talk Proposals @ OCaml Workshop 2026</h2>
<div class=3D"outline-text-2" id=3D"text-6">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/call-for-talk-proposals-oca=
ml-workshop-2026/18192/1">https://discuss.ocaml.org/t/call-for-talk-proposa=
ls-ocaml-workshop-2026/18192/1</a>
</p>
</div>
<div id=3D"outline-container-orgcf8da1c" class=3D"outline-3">
<h3 id=3D"orgcf8da1c">Sudha Parimala announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgcf8da1c">
<p>
Hi all! This year's OCaml workshop will take place in Paris. We are happy t=
o invite submissions to the workshop.
</p>


<div id=3D"orgcd7e53b" class=3D"figure">
<p><img src=3D"https://us1.discourse-cdn.com/flex020/uploads/ocaml/original=
/2X/d/df969f0f9bb4c84623413a5805111b147b822ed7.jpeg" alt=3D"df969f0f9bb4c84=
623413a5805111b147b822ed7.jpeg" width=3D"80%" />
</p>
</div>
</div>
<div id=3D"outline-container-org32213fa" class=3D"outline-4">
<h4 id=3D"org32213fa">Important Information</h4>
<div class=3D"outline-text-4" id=3D"text-org32213fa">
<ul class=3D"org-ul">
<li><b>Location:</b> Paris (co-located with <a href=3D"https://www.irif.fr/=
~scherer/events/fpw-2026/announce.html">FPW 2026</a>)</li>
<li><b>Date:</b> August 27th (<b>Subject to change!</b> Possible alternativ=
e: August 31st)</li>
<li><b>Submission deadline:</b> July 1st, AoE</li>
<li><b>Speaker notification:</b> July 27th</li>
<li><b>Submission website:</b> <a href=3D"https://types-hotcrp.paris.inria.=
fr/ocaml26/">https://types-hotcrp.paris.inria.fr/ocaml26/</a></li>
</ul>
</div>
</div>
<div id=3D"outline-container-orge94ff13" class=3D"outline-4">
<h4 id=3D"orge94ff13">Scope</h4>
<div class=3D"outline-text-4" id=3D"text-orge94ff13">
<p>
The OCaml Workshop welcomes a broad audience of OCaml users ranging from en=
thusiasts who are discovering the magic of OCaml to wizards well-proficient=
 in the cast of unsafe spells. Their common denominator is their passion fo=
r OCaml and the desire to learn more, connect with fellow OCamlers, and col=
lectively find ways to improve the language.
</p>

<p>
We invite talk proposals just as broad: <b>anything OCaml related</b> is we=
lcome!
</p>

<p>
The topics are not limited to the following, but, to give an idea, examples=
 from previous years include: OCaml editing tools, verified OCaml artefacts=
, interoperability between OCaml and other languages, the OCaml code of con=
duct, compiler optimisations, OS portability, OCaml testing frameworks, pac=
kages for concurrency in OCaml, etc.
</p>

<p>
The full catalogue from previous editions can be accessed through the links=
 below:
</p>

<ul class=3D"org-ul">
<li>2025: <a href=3D"https://ocaml.org/conferences/ocaml-workshop-2025">htt=
ps://ocaml.org/conferences/ocaml-workshop-2025</a></li>
<li>2024: <a href=3D"https://ocaml.org/conferences/ocaml-workshop-2024">htt=
ps://ocaml.org/conferences/ocaml-workshop-2024</a></li>
<li>2023: <a href=3D"https://ocaml.org/conferences/ocaml-workshop-2023">htt=
ps://ocaml.org/conferences/ocaml-workshop-2023</a></li>
<li>2022: <a href=3D"https://ocaml.org/conferences/ocaml-workshop-2022">htt=
ps://ocaml.org/conferences/ocaml-workshop-2022</a></li>
<li>2021: <a href=3D"https://ocaml.org/conferences/ocaml-workshop-2021">htt=
ps://ocaml.org/conferences/ocaml-workshop-2021</a></li>
</ul>
</div>
</div>
<div id=3D"outline-container-org2fef45a" class=3D"outline-4">
<h4 id=3D"org2fef45a">Format</h4>
<div class=3D"outline-text-4" id=3D"text-org2fef45a">
<p>
In addition to the <b>Standard Talk</b> format of 20 minutes, we allow the =
following formats:
</p>

<ul class=3D"org-ul">
<li><b>Demo.</b> 30 minutes tutorial-style demonstration of a tool.</li>
<li><b>Informed Position.</b> 20 minutes presentation on topics in the desi=
gn space of OCaml (such as, but not limited to, the inclusion or removal of=
 a feature).</li>
<li><b>Experience Report.</b> 20 minutes report on the use of OCaml or a to=
ol.</li>
</ul>
</div>
</div>
<div id=3D"outline-container-orga76b8e9" class=3D"outline-4">
<h4 id=3D"orga76b8e9">Submission</h4>
<div class=3D"outline-text-4" id=3D"text-orga76b8e9">
<p>
The submission website is available at: <a href=3D"https://types-hotcrp.par=
is.inria.fr/ocaml26/">https://types-hotcrp.paris.inria.fr/ocaml26/</a>
</p>

<p>
Please submit a description of the talk (typically two to three pages long;=
 it could also be less or more): the problems that are addressed and the so=
lutions or methods that are proposed. If you believe the delivery itself is=
 a unique feature of the talk, please feel free to also include a descripti=
on of how you plan to deliver the talk.
</p>

<p>
LaTeX-produced PDFs are common but not required.
</p>

<p>
Last year's accepted presentations are available online: <a href=3D"https:/=
/icfp25.sigplan.org/home/ocaml-2025#event-overview">https://icfp25.sigplan.=
org/home/ocaml-2025#event-overview</a>
</p>
</div>
<ul class=3D"org-ul">
<li><a id=3D"org4ee5bbb"></a>Evaluation Criteria<br />
<div class=3D"outline-text-5" id=3D"text-org4ee5bbb">
<p>
We will evaluate submissions according to:
</p>

<ul class=3D"org-ul">
<li>Relevance for the OCaml community</li>
<li>Rigor and soundness</li>
<li>Novelty</li>
<li>Clarity</li>
<li>Potential to deliver an engaging and informative presentation</li>
</ul>
</div>
</li>
</ul>
</div>
<div id=3D"outline-container-orge279c63" class=3D"outline-4">
<h4 id=3D"orge279c63">Recommendations on LLM Usage</h4>
<div class=3D"outline-text-4" id=3D"text-orge279c63">
<p>
Proposals largely written by LLMs are not acceptable and will be desk-rejec=
ted. The use of LLMs to correct grammar and enhance style is perfectly fine=
 (especially if English is not your first language), but their use to produ=
ce material directly is dangerous and unprofessional, and undermines both a=
uthorship and reviewer effort.
</p>
</div>
</div>
<div id=3D"outline-container-orgd2ca40d" class=3D"outline-4">
<h4 id=3D"orgd2ca40d">Location Information</h4>
<div class=3D"outline-text-4" id=3D"text-orgd2ca40d">
<p>
This edition of the Caml Workshop will be located in Paris as part of <a hr=
ef=3D"https://www.irif.fr/~scherer/events/fpw-2026/announce.html">Functiona=
l Programming Workshops (FPW) 2026</a>, alongside other workshops and event=
s taking place at the end of August. This is a departure from the usual hab=
it of having the OCaml Workshop co-located with ICFP. Because some FPW'26 e=
vents are bi-located with ICFP, the events will take place at roughly the s=
ame dates.
</p>
</div>
</div>
<div id=3D"outline-container-org00d3254" class=3D"outline-4">
<h4 id=3D"org00d3254">Co-ordination with ML Workshop</h4>
<div class=3D"outline-text-4" id=3D"text-org00d3254">
<p>
The <a href=3D"https://icfp26.sigplan.org/home/mlfamilyworkshop-2026#About"=
>ML Family Workshop</a> is also co-located with FW '26 this year and may be=
 of interest to attendees. While the OCaml Workshop focuses on developments=
 in the OCaml ecosystem, the ML Workshop is language-agnostic and more rese=
arch oriented. Authors whose submissions fit both venues are welcome to ind=
icate this at submission time or reach out to the program chairs.
</p>
</div>
</div>
<div id=3D"outline-container-org2d6e322" class=3D"outline-4">
<h4 id=3D"org2d6e322">Program Committee</h4>
<div class=3D"outline-text-4" id=3D"text-org2d6e322">
<ul class=3D"org-ul">
<li>Cl=C3=A9ment Allain</li>
<li>Pedro Carrott</li>
<li>Simon Cruanes</li>
<li>Marko Doko</li>
<li>Patrick Ferris</li>
<li>Jean-Christophe Filli=C3=A2tre</li>
<li>Sadiq Jaffer</li>
<li>Robbert Krebbers</li>
<li>Vincent Laviron</li>
<li>Tim McGilchrist</li>
<li>Ant=C3=B3nio Monteiro</li>
<li>Carine Morel</li>
<li>Andreas Rossberg</li>
<li>Vimala Soundarapandian</li>
<li>J=C3=A9r=C3=B4me Vouillon</li>
<li>John Whitington</li>
<li>Paulo de Vilhena (Chair)</li>
<li>Sudha Parimala (Chair)</li>
</ul>
</div>
</div>
</div>
</div>
<div id=3D"outline-container-org66e1c7f" class=3D"outline-2">
<h2 id=3D"org66e1c7f">Old CWN</h2>
<div class=3D"outline-text-2" id=3D"text-org66e1c7f">
<p>
If you happen to miss a CWN, you can <a href=3D"mailto:alan.schmitt@polytec=
hnique.org">send me a message</a> and I'll mail it to you, or go take a loo=
k at <a href=3D"https://alan.petitepomme.net/cwn/">the archive</a> or the <=
a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive=
s</a>.
</p>

<p>
If you also wish to receive it every week by mail, you may subscribe to the=
 <a href=3D"https://sympa.inria.fr/sympa/info/caml-list">caml-list</a>.
</p>

<div class=3D"authorname" id=3D"orgb987332">
<p>
<a href=3D"https://alan.petitepomme.net/">Alan Schmitt</a>
</p>

</div>
</div>
</div>
</div>
</body>
</html>


--==-=-=--

--=-=-=--

--===-=-=
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQFvBAEBCABZFiEE6lXof/BsSVW56ZmGBA0KO07S5ccFAmoem8wbFIAAAAAABAAO
bWFudTIsMi41KzEuMTIsMCwzHxxhbGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5v
cmcACgkQBA0KO07S5cesHggAza6WLfbbeX9SCdUTitvqbXLUb0sEcPudCaW31J2p
hQpSKAcM+eHZBJ8DbVgDKSXW/inwmSBh1nIuUcxpDFeID8Kkcrs+UCs0gfsvsAco
B2CveYeM+fLtEFpGsXOVrw7z5opGCMiDnErGu86cUyV7dWI7Kh4+ib+wq5CxKQzy
pmXWIyolKvBlOifs6EerymRU1stimMzhl9NABX3zrD3Th+nX6CqkSP3BZ4RrHCLK
hX5bp+JY8rk0Lu11pUg2OYKC2cYVpM1emd1+ZGa9l7wdxsWSiBVPurv38lhNYxd1
tWx2Yz/MueYc8pIRgNWTr/fR9DxCEo/2FhE0qpAfko9mmQ==
=ocmg
-----END PGP SIGNATURE-----
--===-=-=--