Lowering the Barrier

Making programming (everything) more accessible

10 Aug 2020

What is this thing?

What is this thing?

Maybe other people can build things without quite knowing what they’re building but I never can. The eureka moment is more like “oh, that’s what I’m trying to do.”

When you open a repl on Repl.it, we start a container. Every so often we take a snapshot of the file system and store it in GCS. When you close the tab, we stop the container. The next time you open the repl, we pull the file system snapshot from GCS and mount it into the container. In essence, we’re starting and stopping entire computers and shuttling file systems across the network. Anything that runs on Linux will run on repl.it, which is huge, it allows us to port the old world into the new.

If I didn’t have to worry about running existing software, which I’m free to do in my spare time, I would focus exclusively on resiliency. I’ve spent a lot of time these past ten years chasing down slow or stuck requests or staring at graphs waiting for services to recover from an outage. One way to make things more resilient is to find the unhappiest path (what you might call the worst case or a pathological case, though the word “pathological” implies that something or someone would have to go to crazy to hit that case and it’s not your fault if they do, an attitude that will keep you from dealing with the problem) and either prevent it or make it faster. The unhappy paths that still bother me years later all involved having to move large amounts of data over the network.

The first goal, then, is to be able to write programs that can start again from where they left off without having to sync state off the machine. Modifying an existing small program is probably the fastest way to get there.