I don&#x27;t understand. How is using ForkExec, Wait4 forcing you to use threads? What do you mean with &quot;You basically can&#x27;t do anything with file descriptors or containers at all with this model.&quot;? It is possible to pass a ProcAddr containing a SysProcAddr to ForkExec with fds, chroot, namespaces, &amp;c.<p>Attached simple demo code of what I mean with ForkExec, Wait4.<p>EDIT: to clarify, the demo code is not intended to work like init, just to spawn a couple of processes and wait for them to terminate.<p><pre><code>        package main

        import (
            &quot;log&quot;
            &quot;syscall&quot;
        )

        func main() {
            cmds := [][]string{
                {&quot;&#x2F;usr&#x2F;bin&#x2F;sleep&quot;, &quot;4&quot;},
                {&quot;&#x2F;usr&#x2F;bin&#x2F;sleep&quot;, &quot;5&quot;},
                {&quot;&#x2F;usr&#x2F;bin&#x2F;sleep&quot;, &quot;1&quot;},
                {&quot;&#x2F;usr&#x2F;bin&#x2F;sleep&quot;, &quot;2&quot;},
            }

            for _, cmd := range cmds {
                if len(cmd) &gt; 0 {
                    if _, err := syscall.ForkExec(cmd[0], cmd, nil); err != nil {
                        log.Fatal(err)
                    }
                }
            }

            for nwaited := 0; nwaited &lt; len(cmds); nwaited++ {
                var w syscall.WaitStatus
                pid, err := syscall.Wait4(-1, &amp;w, 0, nil)
                if err != nil {
                    log.Println(err)
                } else {
                    log.Println(&quot;pid&quot;, pid, &quot;exited&quot;, w.Exited(), &quot;exit status&quot;, w.ExitStatus())
                }
            }
        }</code></pre>