15 to 20 years ago we were repeatedly told that the command line was dead and the graphical user interface would rule everything. Not just from the consumer or end-user perspective, but on the administrative side as well. Microsoft and Apple, to name just two, were leading proponents of relying exclusively on a GUI, and in general did their best to deprecate or cripple any text-based UI on their respective systems. Administrators had to find all kinds of workarounds to these silly limitations – whether through sanctioned options like VBScript or unsanctioned ones like installing Cygwin.
And yet a funny thing happened on the way to the text-massacre:
- In the networking world, the GUI never became particularly popular. While web or Java interfaces exist for most network devices, the vast majority of configuration and daily administration continues to be done at the CLI. Even the self-proclaimed future with Software-Defined Networking (SDN), with its focus on programmability, configuration management, etc., is still more consistent with the command line than with graphical user interfaces.
- Linux, an open source re-implementation of Unix, became first the power behind the web, and then the power behind the cloud. Yes, there are many GUIs for Linux (and other open source operating systems), and some of them are even very good (if you haven’t played with Enlightenment, you should), but the vast majority of Linux work gets done at the CLI. Whether you’re the administrator of a web server, a mail server, or a cloud management platform like OpenStack – you’re using the CLI.
- Despite the focus on a “lickable” GUI, Mac OS X was a rebirth based on the CLI-oriented FreeBSD (a Unix-like OS via NeXTSTEP). Indeed, Apple even trumpeted the fact that Mac OS X is “really” UNIX – trademark and all. You may not need to access the CLI to use Mac OS X, but it is a necessary component of the operating system, and one which many users take significant advantage.
- Microsoft, after years of relying on the frankly awful command.com and then cmd.exe shells, finally broke down and decided to one-up the Linux/Unix shells like Bash, ksh, etc. by building “Monad” – an object-oriented command shell that was eventually released as PowerShell in 2005. Subsequently, PowerShell has become a fundamental technology for Microsoft with most, if not all, of their products providing full management capabilities via PowerShell. In fact, it’s common that some features of each product are only accessible via PowerShell. Scripting, in a Microsoft world, has gone from being a useful but relatively rare skill to now being not only commonplace but actually seen as a requirement for any serious Windows administrator.
Consumer technologies have definitely continued to become more and more graphical, with touch technologies appearing everywhere. Touch may not be antithetical to a CLI, but it’s certainly not conducive to it – as any one who has tried to use only a virtual keyboard for a long writing session can likely attest. GUIs are great at providing a discoverable interface, or to easily perform simple tasks, but in the infrastructure world and the development world – when you need to get something done, you most often use the CLI. If you want to get something done quickly, repeatably, and efficiently – the CLI is almost always your better choice.
Even where a management GUI exists – such as OpenStack Horizon, VMware vCenter, Cisco UCS Manager, Microsoft System Center, etc. – these GUIs typically expose only a fraction of the functionality available from the system and all of these systems have a robust CLI. In the case of vCenter and UCS Manager, apart from their own native CLIs they both support PowerShell as well. In fact, PowerShell is in many ways the management commonality for enterprise systems with toolkits and/or SDKs being provided by many vendors for their products: VMware, Cisco, NetApp, Citrix, HP, EMC, Symantec, Splunk, IBM, Dell, Microsoft – heck, even AWS includes PowerShell support!
Twenty years later, it’s strange to think that Microsoft has actually achieved one of its greatest successes, from both a technical perspective and an industry usage perspective, with PowerShell: one CLI to perhaps rule them all.