techWebsite/content/posts/clirenaissance.md

3.8 KiB

+++ title = "A modern CLI renaissance?" date = 2024-03-04T12:20:02-06:00 draft = true +++

Id like to talk about a trend Ive seen these past few years, where people are rewriting core CLI tools, why I think this trend is a good thing, and why I think this trend might be happening.

History

The terminal has been a staple of computer user interfaces since before computer monitors were available, with some of the first computers offering an interactive mode in the late 1950's. The 'modern' Linux terminal traces its linage to the very first version of Unix, in 1971. Many utilities that a Linux user interacts with every day, commands like rm, cat, cd, cp, man and a host of other core commands trace their initial versions to this first version of Unix. Other tools are a bit newer, such as sed (1974), diff (1974) bc (1975), make (1976) or vi (1976). There were a few more tools introduced in the 90's, such as vim (1991) and ssh, (1995), but you get the picture. The majority of the foundational CLI tools on a Linux pc, even one installed yesterday, are older than Linux itself is.

Ok, so?

Now, theres nothing wrong with this, the tools work fine still, but, in the half-century since they were first written, Terminals and the broader Linux ecosystem have all changed. Terminals now have capacity to display more colours, Unicode symbols, and even inline images. Terminal programs now coexist with graphical user interfaces, and only a small subset of computer users even know they exist, wheras in the past, terminals were the only way one interacted with the computer.

Additionally, and perhaps more importantly, our knowledge has expanded, our knowledge of user interfaces, of what works and what doesnt, of what usecases are common and what usecases are niche, the way that error messages can teach, the value of a good out of the box experience, and the value of documentation that is easy to find and digest.

The new tools

These changes to the environment surrounding CLI apps has, in recent years, led to a resurgence in development of command line utilities. Instead of just developing tools that dont exist, Ive noticed that people are rethinking and reinventing tools that have existed since the early days of Unix.

Exploration of the design space

The lessons learned from the past

A good out of the box experience

Friendly error messages

Concise and discoverable documentation

Common usecases should be easy

Shedding historical baggage

The trendsetter

The languages