It’s unclear whether Go on a Mill should map its threadlets onto Mill hardware threads; they may be too heavy-duty for Go use. Frankly, I don’t know enough about Go and its usage to say. One thing that’s safe to say is that no matter what size we choose for a thread id there will be someone who wants more threads. 🙂
Thread runaway is not only possible due to malice, but also due to program bug. In this a runaway spawn is much like runaway call, i.e. recursion and runaway malloc, and has the same fix: quotas.
As for virtualization, a virtualized Mill presents what appears to be a real Mill, which has a full shared virtual address space both to the app and to the (guest) kernel/OS. The hypervisor runs in another (real) Mill, with a full space disjoint from all the guest spaces, but has means by which it can see and manage the guests. How, you ask? Sorry, that’s NYF (Not Yet Filed).