August 29, 2020
A few days ago, I picked up a $229 Chromebook with minimum specs and have decided to replace all my existing Macbook Pros and Airs and use it as my main machine for development work (and everything else). This isn’t because it’s a great laptop; in fact, it’s a far-below-average laptop when you consider the current hardware options on the market. But, that’s precisely why I picked it — it leaves nothing more to be desired, because I redefined what I expect out of a laptop and instead optimized on price and having the minimum feature set to connect to a remote machine. It might sound a bit defeatist, but once you treat your client machine as a dumb terminal and nothing more, you actually end up with a more robust and reliable setup.
After being constantly disappointed with common Macbook quality issues (keyboard problems, display gasket peeling off, etc.) and looking at the available options on the market, I realized my seemingly basic desire to have an easy to use, robust laptop that has software and hardware that just works is becoming more of a pipe dream. So, I did something that seems like a regression — buy a low-end, dumb laptop that I just use to ssh into a remote linux server where I do all my work. I chose a Chromebook because it’s portable, has good battery life, and has an operating system that is decent for non-dev work. When in terminal, I use Screen and Emacs to work and save my sessions for later. And, I use Tailscale which allows me to magically create a private mesh network between my machines in a couple minutes; this is what makes it easy to access remote services on my server like a locally-hosted web server for instance. When I'm working outside without access to wifi, I simply connect to my phone's hotspot which provides me enough speed to work on my remote server. This no-frills setup is simple but works well enough.
With a distributed setup, the client machine is just the control device to a much larger system. I couldn’t care less how fancy or powerful my laptop is as long as it has a display, keyboard, and internet that works. And if this laptop is stolen or breaks, I wouldn't be affected. I would just buy another cheap laptop and pick up where I left off. This was perhaps the wisdom behind the vision for the Plan 9 distributed operating system which took this core idea to a whole new level during the 80’s beyond dumb terminals.
This setup may obviously not work for everyone since terminal/ssh is limited when it comes to non-textual work or work requiring more visual interfaces. Of course, you could setup X11 forwarding or some other remote GUI software, but I've always found the latency too unbearable to work with. I think in 2020, it might be worthwhile to take a step back and ask ourselves whether this should still be the case. When you think of all the amazing things you can do with distributed computing and what Plan 9 managed to do over 30 years ago, it makes one wonder why we’re still stuck with basic tools like terminal/ssh; with the right abstractions and local caching, we could provide a more integrated relationship between software, network computing, and the visual representation of that on the client machine. Additionally, the rise of 5G brings us even closer to "always online" laptops with fast internet, opening the door to more interesting architectures centered around network computing. I’d imagine a true modern successor to Plan 9 (I don't mean ChromeOS) would be a delightful experience where laptops instead focus on providing beautiful, well-functioning interfaces to remote computing systems with theoretically infinite computing power, memory, and storage. Assuming the network and security/privacy challenges can be figured out, this seems to me like it would be a far superior approach to how we use computers today.