Eu diria 1) por causa da história, 2) porque é uma boa ideia.
Geralmente chamamos gnome-terminal
ou xterm
um emulador de terminal . Nos tempos antigos, não havia emuladores de terminal, já que não havia interfaces gráficas com o usuário. Tudo o que havia eram terminais adequados, dispositivos com uma tela e um teclado conectados por meio de um cabo serial ao computador. As conchas também eram úteis e foram escritas para apoiar os comandos dos terminais. (Provavelmente de descritores de arquivos arbitrários, mas isso não importa.)
Com algo como terminais virtuais Linux e GUIs, era útil fazê-los emular os terminais originais, para que os antigos softwares pudessem funcionar, ou pelo menos com mudanças mínimas. Isso não significa apenas o shell, mas também outros programas que conectam o "terminal". ( ls
? vi
? emacs
?)
Além disso, a separação é uma boa idéia, pois permite trocar o emulador de terminal e o shell de forma independente. Eu posso usar Bash no xterm, ou zsh no gnome-terminal, ou Bash em uma conexão SSH, ou ...
Se as partes estivessem ligadas, essa escolha seria mais difícil.
Por acaso, não sei exatamente sobre cmd.exe
implementar a parte de emulação de terminal em si mesmo. Eu não toquei em um compilador no Windows há algum tempo, mas se bem me lembro, é possível criar um "aplicativo de console" sem envolver cmd.exe
. Consulte aqui e aqui .