Peter M. Benjamin

A Minimal Chromebook Setup for Development and Hacking

Table of Contents

The TLDR Version


Introduction

I decided to share my recommended Chromebook development setup because I am tired of seeing the same misinformed and misguided recommendations that lead to:

So, how will my recommendation be different than those previously listed?

I have my own SOLID set of guiding principles that I will discuss in detail.

Note: Keep in mind that there is no setup without its own set of drawbacks.

The SOLID Principles

Security

ChromeOS comes with a set of really — and I mean REALLY — strong security controls built-in. So much so that CoreOS, a specialized server operating system for containers, is based on ChromeOS.

So, it is justifiably cringe-worthy that the first recommendation would be “disable all those secure features and turn on Dev Mode”.

Why is Dev Mode insecure?

On top of that, adding Crouton to side-load Linux distributions adds another huge vector. You’re essentially running un-vetted code as root on your Chromebook. Not only that, but nothing is stopping code running as root in a chrooted environment from escaping the chroot and infecting the rest of ChromeOS.

Essentially, dev mode by default is less physically secure than a standard laptop running Linux -  David Schneider (creator of Crouton)

If you insist on a Linux distribution, you are better served by finding an old, used, cheap Lenovo Thinkpad and installing your favorite Linux distribution on it. You’ll have a more secure environment than a Chromebook in Dev Mode and a better overall experience than a Chromebook running a Linux distribution.

Ownership Cost

Leverage Native Capabilities

Inherent Restrictions

Developer Experience

The Details

I have been using a Chromebook as my primary personal machine for a few years now. So, I have experimented with a variety of different hardware and software combinations. I am also very familiar with the initial pains of getting acclimated to this new setup. But, once I’ve adapted to it, I noticed that I have applied the same philosophy to my work setup.

I also consider myself a pro user with often conflicting needs:

On the one hand, as a Software Engineer, I prefer to work on my personal and work-related projects on remote development environments (I would also like to be able to do local/offline development when absolutely needed). On the other hand, as an Information Security Engineer, SSH’ing into a remote server is not an option and I certainly need to be able to — erm, do some things 😏 — directly from my local machine.

Here is where I have landed…

Hardware

Based on these loose hardware recommendations, the following are the top 3:

Alternatively, these are significantly more affordable and could be sufficient for your use-case:

Software

I will be straight-forward with you here: get comfortable living in the terminal.

GUI-based IDEs/editors for local software development on Chromebooks are not there yet, but they are getting better.

There are some lightweight GUI editors, but they lack many critical features needed for software development (e.g. git integration, search-and-replace, auto-completion …etc). These lightweight GUI editors are good for light editing/note-taking at best.

This is a good thing and I’ll tell you why:

The Kubernetes and Docker container movement has ushered in an era of DevOps that can be summarized as “Pets versus Cattle“:

In the old way of doing things, we treat our servers like pets, for example Bob the mail server. If Bob goes down, it’s all hands on deck. The CEO can’t get his email and it’s the end of the world. In the new way, servers are numbered, like cattle in a herd. For example, www001 to www100. When one server goes down, it’s taken out back, shot, and replaced on the line. - Randy Bias

Here is the baseline software stack I use for development (all of which are installed on the server):

Here is the baseline software stack I use for hacking:

And that’s it. I have reached a point where all I need is a phone, a portable monitor, and a keyboard to be productive.

And that’s what this journey has been really all about: bringing technology back to its most basic set of needs for me to be effective and productive, where I am no longer physically or emotionally dependent on premium brushed aluminum computers with 16GB RAM just to run slack, chrome, and atom or vscode.

Parting Thoughts

I don’t claim that this setup is for everyone. Admittedly, this setup falls apart when you have a hard requirement on a piece of software that is not available as a web app or if it is financially prohibitive as a web app.

I am really excited about what the future of development might look like.

Perhaps, in the not-so-distant-future, all you might need is the multi-core processing power already in your pocket, a Virtual Reality (VR) or Augmented Reality (AR) headset, with virtual workspaces (because, why be prohibitively limited by physical, costly monitors when you can just create unlimited number virtual monitors?)

But, I’m curious about your thoughts, opinions, or concerns about this setup or if you would like to share your setup.

Thank you for your time.

Cheers and happy coding! 🤗