-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
Solo5 is a sandboxed execution environment primarily intended for, but not limited to, running applications built using various unikernels (a.k.a. library operating systems).
I have a local branch (against dev) with a (mostly) complete port, but there are a few things I'd like to discuss before making a proper PR.
-
Solo5 is a "bare" target. At a program's entry point, it provides a flat memory range in which both the call stack and the heap will live. For now I require the user to reserve memory manually using a static stack size (i.e.
mi_manage_os_memory(info->heap_start, info->heap_size - STACK_SIZE, [...])) before doing any allocation, making_mi_prim_allocalways returnENOMEM. However, in OCaml's Solo5 toolchain (where they usedlmalloc), they implement a "dummy"sbrkwhich dynamically checks if the heap gets too close to the call stack. My opinion is that a static stack size should be fine since processes running on an ordinary OS usually also get a limited stack. It also makes the code simpler. -
Solo5 doesn't provide a standard C library. The headers (
errno.h,string.h, ...) and functions (abort,mem*, ...) mimalloc expects must be come from somewhere. I think the user (not mimalloc) should be responsible for providing such a library. For example, I'm interested in writing unikernels in Koka which requires a lot more from the standard library, and splitting a standard library between different projects depending on their particular needs doesn't make much sense to me. -
The Solo5 toolchain's
ccis just a wrapper around the host system'scc. For now I detect that we're building for Solo5 withdefined(__STDC_HOSTED__) && __STDC_HOSTED__ == 0(this is used ininclude/mimalloc/atomic.hto avoid definingMI_USE_PTHREADSand insrc/prim/prim.c), which is set that way because of the-ffreestanding flag. This is not very robust, we have to check for Solo5 before any other platform (sinceccwill still define host platform-specific constants like__OpenBSD__) and maybe we'll want to add other freestanding platforms in the future.
I'd be happy to read some opinions. It's fine if this isn't wanted in the main repo, I just wanted to put it out there if anyone's interested.