Dragging Unix into the 1980s (and beyond?): liveness and source-level reflection
Most software continues not to be soft. Most software, perhaps not coincidentally, is built atop Unix-like abstractions originating in the 1970s. To surmount this, instead of treating our Unix-like core as a black box (as language VMs do) or throwing it away (as the world has steadfastly refused to do) we can choose to evolve these abstractions, compatibly. Done right, this can give new 1980s-style superpowers (or things even more futuristic still!) to all software, not just new software built with new systems or languages. I’ll talk about some new support for “live” change I’m prototyping within a commodity Linux userspace: object motion via pointer tracking, source-in-situ (borrowing the best properties of Smalltalk images), and reflection down to the source level. Along the way, we’ll visit some of the murkier corners of the Unix userland, such as what goes on during dynamic linking, how debugging works and doesn’t (currently), and why linking and garbage collection amount to the same problem.