A terminal is a device, typically with a screen and keyboard, used to remotely communicate with a computer. Pieces of software that serve this purpose are technically terminal <i>emulators</i>, but in 2024 we just call them terminals because people who use actual terminals, like a VT100 or even an X terminal, are few and far between. So when a Show HN comes along that says "I made a new terminal! It's written in Rust and does this or that" they're not talking about terminals in the traditional sense but pieces of software, a usage of the term I find... urticating.<p>A shell is a UI to the operating system, used for file management, launching programs, etc. Historically it referred to Unix terminology: the kernel was the bit of the OS that actually performed operations, and the shell was a user friendly wrapper around the kernel's system-call interface. Usages drifted, however, and the shell became called upon to do other things, while the one-to-one mapping between shell commands and system calls drifted and was outsourced to external programs (cp, mv, rm, etc.) But the idea that the shell was your UI into system management persisted. Shells can be graphical; Explorer on Windows and Finder on macOS can be considered shells.<p>TTY stands for Teletype, an early form of terminal called a teletypewriter. Like a normal typewriter, it printed on paper rather than having a screen. For historical reasons, Unix systems have device nodes called /dev/ttyXX to represent terminal connections.<p>The console is the main user interface to the system. On old mainframes and minis, it was a dedicated terminal sitting in the room the computer was in and wired directly to it. Other terminals could be located in another room, building, or far away and might communicate with the computer via modem or other telecom link. Some administrative functions, such as installing the OS itself, could only be performed via the console. Today, a typical PC's attached monitor(s), keyboard, and pointing device might be considered the console, and might be abstracted as such through e.g., /dev/console, or at a lower level, NetBSD's wscons(4) kernel driver.