I can find references to a thread module and it clearly creates a "main" thread, but I actually can't find anywhere where it creates anything other than a main thread, nor do I see any code for task switching manually/cooperatively, or anything else like that. There's a global thread table but I can only find test code manipulating it. And the main core VM loop doesn't seem to have any concurrency in it to me.
Corrections welcome; posted fully in the spirit of Cunningham's Law as I'm curious too.
https://github.com/platypusguy/jacobin/blob/18c541820cb73bda...
I couldn't figure out what happens if you invoke a native method that has not been set up like this.
However, inside Java it may look like the original Threading API. In that case you'd have a JVM running the Thread abstraction in Java on top of green threads in Go, while not supporting Java green threads, and there's no contradiction or even anything weird going on. Perfectly normal.