There was a time when Microsoft considered open source an enemy. Now they are releasing open source software left and right and even using open source as a core part of their strategy. This slow change of strategy has left us with a few different open source software by Microsoft, that occupy the same space.
This can be confusing (at least to me), so this is the summary of what is happening in the world of terminal, shell, command line, etc. on Windows.
Background Info and Terminology
Here is a bit of background info to understand why all of this is happening.
The fundamental reason is developer, developers, developers. Microsoft needs to get developers to use their services: they want people to develop on Windows and to use Azure. So, it is trying to make life easier for them and become the best choice for developers.
.NET Core is the Only Future
Microsoft originally developed the .NET Framework to run software on Windows. It was not open source. Ximian, then Xamarin (now owned by Microsoft) developed Mono, an open source implementation of the .NET Framework that could run on Linux and MacOS. There was a clear separation.
During the course of the years, Microsoft open sourced almost everything, from the language (C#) to a new open source alternative to the .NET Framework called .NET Core. Now we are to a point that the Windows-only .NET Framework is a legacy platform, .NET Core will become .NET 5 and the only actively developed .NET platform.
The .NET Framework will be actively maintained, but it is not the platform you should develop on. Given the investment Microsoft has made on open source this is a somewhat obvious development, but it still feels weird for us older developers.
Shell
A shell is a user interface for the operating system. A text shell is a command-line interface (CLI), as opposed to a Graphical User Interface (GUI). A text shell/CLI is also known as a command-line interpreter. You execute commands using a shell.
Examples of text shells are: Bash and the Windows Command Prompt (or CMD).
Terminal Emulator
The definition of a terminal emulator is less clear, for the simple reason that the concept of terminal has lost importance. There was a time when people sit in front a keyboard and screen, but the rest of the computer was somewhere else. You typed in your terminal, but the work was executed on the mainframe. This system of keyboard, screen and their software was a terminal. A terminal emulator is a program that replace that, it takes the stuff you type and pass it to the shell.
Examples of terminal emulators are: konsole, GNOME Terminal and Windows Console.
Windows Terminal, PowerShell, Command Prompt, etc.
Now that the foundation is laid on, everything should be clear.
Microsoft developed the Command Prompt for Windows and DOS. It is a text shell. There are actually several versions that are mostly compatible, but this is beyond the point here. It is not very good, but it keeps working.
Much later Microsoft created Windows PowerShell based on the .NET Framework. PowerShell is a text shell, but also a scripting language. It was a Windows-only software. Then they developed it further in PowerShell Core, which is based on .NET Core, cross-platform and open-source. The last version of the original PowerShell is 5.1, it is still maintained, but legacy software.
Update: actually this all changed again in July 2020. Now PowerShell 7 is the heir of both PowerShell Core and Windows PowerShell. It is cross-platform, but with all the power of Windows PowerShell on Windows.
Finally, Windows Terminal is the open source terminal emulator designed for Windows. It supports all kinds of shells: the Command Prompt, PowerShell (old and Core), SSH, the Windows Subsystem for Linux (WSL) and the Azure Cloud Shell.
Here is a short table.
Name | What | Should I Start Using it? |
---|---|---|
Windows Command Prompt | Old shell for Windows | No |
Windows Console | Old terminal emulator for Windows | No |
Windows PowerShell | Oldish shell based on .NET Framework | No |
PowerShell Core | Newish cross-platform shell based on .NET Core | No |
PowerShell 7 | Latest cross-platform shell with more power on Windows | Yes |
Windows Terminal | New terminal emulator for Windows | Yes |