A shell is a command line program that allows you to start other programs, do some job control, do simple programming, chain other programs together via pipes, etc.
Your *default shell* is usually stored in the environment variable $SHELL.
It might be bash, tcsh, ksh, or something like that.
On Windows, it would probably be cmd.

AnsiTerm: `M-x term' or `M-x ansi-term' runs a full vt100 emulation, running your default shell.  Ordinary Emacs keybindings are only available via the `C-c' prefix.

ShellMode: `M-x shell' is dumb terminal emulation, running your default shell.  Ordinary Emacs keybindings are available.

EmacsShell: `M-x eshell' is even dumber, doesn't emulate anything, and runs a shell written in EmacsLisp.  That's why it is available on every system Emacs runs on.  You can run elisp functions as commands.  All Emacs keybindings are available.  However, the package [[https://codeberg.org/akib/emacs-eat/ Eat]] can be used to add terminal emulation to it.

ShellPop: A utility which helps you pop up and pop out shell buffer easily.

[[https://codeberg.org/akib/emacs-eat/ Eat]]:  Full-fledged and reasonably fast terminal emulator in pure EmacsLisp, also integrates with EmacsShell to provide terminal emulation in it.

[[https://github.com/akermu/emacs-libvterm vterm]]: Full-fledged terminal emulator, powered by libvterm.

There are several modes that look alike but don't run a shell.  Examples include all command-line interfaces that connect to dedicated interpreters such as CommonLisp, [[Scheme]], [[SQL]], etc.

----
EevMode is different from these modes above.
Eev can send a part of buffer to a shell that uses another terminal.
Eev opens up another method to deal with a shell in Emacs.

EmacsPipe: describes techniques for piping things in and out of [[https://www.emacswiki.org/emacs/Buffer Emacs buffers]] when using the [[Bash]] or Zsh shells.

