It's not clear to me and I don't have any experience with unikernels, so please accept my grain of salt and I apologize if I misspeak.
If you're starting with MirageOS, then obviously makes sense to just run MirageOS a bare-metal hypervisor. But if you're starting with the assumption that you will be running in a JS VM, then you have two options: build a unikernel in JS, or compile one to JS. The later option (MirageOS compiled to JS) also happens to leave open the possibility of easily being ran on a bare metal hypervisor with the unikernel implementation itself also running on bare metal (without a language level virtual machine) - because OCaml executes without a language level virtual machine (it's more like C++ in that sense).
> The obvious benefit of a JS VM unikernel is that you get to write your application in JavaScript...
What are some reasons why that would be a good thing in the case of unikernels? (I'm genuinely asking) The type system and invariants that it enforces are one of the things that makes OCaml based unikernels such a compelling idea to me. JavaScript, although I obviously find it useful for many things, doesn't seem to have as much appeal in this case.
> What are some reasons why [using JS] would be a good thing in the case of unikernels?
The same reason it would be a good thing to use JS under any circumstances: there's already a huge supply of developers familiar with it and its ecosystem, it's available on pretty much every platform (now including at least one dedicated unikernel environment), it's a natural fit for web application development, and so on.
It's clear why unikernels and OCaml go together so nicely: immutability is a concept central to them both.
That said, the affordances of using a unikernel seems fairly orthogonal to the choice of language, IMO.
The obvious benefit of a JS VM unikernel is that you get to write your application in JavaScript...