Proxies All the Way Down: Bootstrapping a Userland Speculative Optimizer for the OpenSmalltalk VM
Abstract
Self-supporting dynamic-language systems aim to lift core components otherwise implemented in the virtual machine up into userland to enable the expression and development of those core components at the same level and with the same tools as applications. Yet, bootstrapping components that are critical for userland stability poses a chicken-and-egg problem: bugs in such core components can destroy the running system. The OpenSmalltalk VM is implemented in Smalltalk as a nested simulation, and transpiled to C. The new speculative optimizer Scorch increases performance and is architected as a userland component to ease development. However, debugging Scorch into existence has proven impractical as faulty optimizations crash the system and make iterative development very challenging. We present OOPsie: an approach that allows components such as Scorch to live in userland during both development and production without alteration. It is a meta-architecture that decouples development from execution, meaning that only a simulation might be damaged. We employ proxies for critical paths, replacing inter-userland interfaces with proxy-based host-to-simulation interfaces. Using OOPsie, we revived the development of Scorch, identifying and fixing multiple defects, and extended the OpenSmalltalk simulator with improved debugging capabilities by reusing existing userland tools across system boundaries. Our experience demonstrates that the OOPsie architecture is effective in bootstrapping userland system capabilities by isolating bug effects to the simulation, supporting uninterrupted live-programming workflows even before a new component can sustain itself.