Hi, and thank you for your interest in MirageOS. To keep it brief and regarding the MirageOS ecosystem, we do use Lwt as a scheduler, which is implemented through a single event loop. You can find the implementation here: mirage-solo5/lib/main.ml at main Ā· mirage/mirage-solo5 Ā· GitHub
Regarding block devices, within the Solo5 context, these are accessible for reading and writing by pages (the page size, usually 512 bytes, is configurable when launching the unikernel with solo5-hvt). You can see the Solo5 implementation here: GitHub - mirage/mirage-block-solo5: Solo5 implementation of MirageOS block interface
Furthermore, we (the Robur cooperative) have just released cachet: a small library that provides read (with cache) access and a write pipeline for so-called āatomicā values. This is what we use, among other things, to implement our KV-store as a unikernel (for more details, you can read our blog post on the subject here).
I would also like to mention that our cooperative is exploring a new workflow to develop unikernels, specifically with OCaml 5 and the use of effects. We currently have several (unreleased) projects that already allow us to develop some unikernels as long as we provide the right compilation environment for dune:
- mkernel is perhaps the fundamental library, providing a scheduler for unikernels based on Miou. The repository contains some examples regarding block devices. We also gave a presentation at the last MirageOS retreat which is available here
- mnet is the TCP/IP stack we use, which aims to solve issues encountered with
mirage-tcpip (specifically regarding memory leaks).
- vifu is an HTTP server (HTTP/1.1 and h2) for unikernels.
Even though these projects are experimental, we are iterating quickly and already offer:
- immuable: a unikernel for serving a static website from an archive (also a block device).
- kevin: a KV-store using our recent bancos project.
- chaos: an early implementation of an NTP server.
This is a new approach that no longer involves the mirage tool, but we believe the developer experience is much better (no functors, no tools generating crucial files like dune files, and of course, the use of effects and Miou as the scheduler).
You can contact us directly via Discord, for instance, which has a dedicated MirageOS channel. Feel free to reach out whether you want to experiment with the mirage tool, Lwt, and block devices, or to learn more about our new approach to developing unikernels.
Best,