Using a Chromebook for development
Over a year ago I began using a Chromebook as my laptop at work. My main reasons for switching were because I viewed it as a more secure platform as well as I liked the idea of the simplicity of it. I've been happy with how it has worked out and I enjoy using it.
In the past I would have been against the idea of using a Chromebook. It's a good example of how my views have changed over time. I would have viewed it as giving up privacy to Google, and I would have been unhappy with the lack of control and customizability. Today these things don't bother me. The latter I view as a benefit.
I like it so much that my next personal PC will likely be a Chromebook. (Currently my main personal computer is a NUC running Debian, although I have a basic personal Chromebook as well).
The Chromebook I use for work is an Acer Chromebook Spin 13. It's beefy as far as Chromebooks go, and has a great 3:2 screen.
The main reason I wanted to write this post was to describe my development workflow and environment. How does one develop on such a system?
ChromeOS has a Linux container you can enable. This runs a VM which in turn runs a container with Debian Linux (by default). You access this container using an app called Terminal, which as you might imagine is a terminal! There's details about how this all works here.
This means you have a Linux environment where you can install familiar tools and even run X apps.
I have this container set it up to allow ssh connections locally. I use the Secure Shell App to connect to it. This app supports having your SSH key on a YubiKey through the Smart Card Connector app.
I like using Secure Shell App rather than Terminal as it means one terminal experience for anything I ssh to, and it means I can use my YubiKey.
Inside my ssh session to the container I run tmux.
For many things I work in the container directly. Otherwise I run a Compute
VM on Google Cloud Platform, and work in that VM. I ssh to the VM from
inside the container as I found it worked well to mix and match tmux
windows between local and remote sessions. I can also manage most of my ssh
configs using ~/.ssh/config
.
I use vim as my editor. I run it either locally in the container if I'm working in the container or remotely on the Compute VM if I'm working there.
For my note taking I am used to using vim, so I continue to do that. I share a Google Drive directory to the container so vim can access my notes on Drive and they get synced that way.
That's all there is to it. My Chromebook is basically a browser and an ssh terminal. It's not too different from using a Linux laptop in that regard, except there's less to manage.
The benefits I already mentioned: Simplicity and security. On the simplicity side, it's because there's very little to customize. From a security perspective, ChromeOS wins because the platform is locked down, as well as benefiting from Google's investment in security for Chrome.
There are of course drawbacks:
- The Linux container is usable, but doing certain things such as running additional VMs is not straightforward (at least the last time I tried to start a VM with vagrant I ran into issues).
- Compared to laptops built with local development in mind, I expect many Chromebooks are going to be anemic speed wise. Which is to say it's good to pair this with access to remote compute. I'm not sure how I'd feel about 100% local development on one.
- The lack of customizability could be seen as a drawback. Coming from an extremely customized setup (and using one as I write this) I embrace it though. It's one less distraction.
All in all I've been pleasantly surprised with the experience. I went into it viewing it as a trial and not expecting to be able to switch, but it's worked out well.