The docs currently state: > The easiest (and most fun) way to depend on a virtual machine is to implement the virtual machine within Guile itself. This way the virtual machine provides what Scheme needs (tail calls, multiple values, call/cc) and can provide optimized inline instructions for Guile (cons, struct-ref, etc.). This is a little confusing for new readers (like myself), who may consider Guile to by synonymous with Scheme. This led to interpret this as 'the VM is implemented in Scheme', which has a bootstrapping problem (what actually interprets your bytecode?). Instead, I propose adding an additional sentence: > The easiest (and most fun) way to depend on a virtual machine is to implement the virtual machine within Guile itself. Guile contains a bytecode interpreter (written in C) and a Scheme to bytecode compiler (written in Scheme). This way the virtual machine provides what Scheme needs (tail calls, multiple values, @code{call/cc}) and can provide optimized inline instructions for Guile (@code{cons}, @code{struct-ref}, etc.).