SoftwareUnderstanding/software_types

What is the difference between terminal application and command line application?

dgarijo opened this issue · 9 comments

Terminal application: A software application offering a terminal text-based user interface

Command line application: A software application offering a command-line interface

A terminal is a command-line interface. I am confused about this distinction and I think it should be clarified.

I added some extra clarification in the commit above. I kept it a bit short and will expand here:

The idea is that command line applications are applications whose primary modality of interaction is through the command line, i.e. selecting parameters, passing input and getting some output (which may in turn be redirected or piped). Tools like grep, sed, ls, git etc fall into this category. Even software like firefox (DesktopApplication) and nginx (ServerApplication) technically offer command line interfaces, but they wouldn't be classified as command line applications.

Terminal applications are those applications that offer a terminal text-based UI (aka TUI). This category may be a bit more niche (although I personally make very heavy use of them). Popular tools like vim, mutt, htop, tmux etc fall into this category.

Does this make sense? I hope the text itself is clear now, if necessary I can make it more verbose.

So these are DesktopApplications then, right? The only difference is that they are use through the terminal, so you can e.g., ssh into a server without a virtual desktop. Would it make sense to make it subclass of DesktopApplication then?

Well, in a way perhaps, although the way I had things in mind I see DesktopApplication as something that demands a graphical environment / graphical display server. Something like X11, a wayland compositor, or the built-in desktops in macos (Aqua?) or windows. If we consider that the desktop, the things that require this desktop are desktop applications. I see it as synonym for a GUI interface as they typically build on some GUI toolkit, either provided natively by the platform or things like Gtk, Qt, Tk, Java swing etc...

Terminal applications are more a class apart because they don't require this 'desktop' nor a fancy graphical display server. You can indeed run them over ssh as you indicated, or plainly on the console. So I wouldn't subclass them but rather see them as siblings.

Perhaps a special mention for one type of software: terminal emulators (programs like xterm, alacritty, kitty, st, iTerm2, etc...). These would simply classify as DesktopApplication, these are not TerminalApplications because they don't run in a terminal, instead they provide the whole terminal.

I think part of the problem may be because we are conflating an application with a graphical UI with an application that is run in a Desktop. Since terminal applications may be run from a Desktop, this may bring in confusion.

What if we rename DesktopApplication to GUIApplication? Shouldn't that make it distinguishable enough?

What if we rename DesktopApplication to GUIApplication? Shouldn't that make it distinguishable enough?

I thought about that at the beginning too but It feels less consistent with the rest of the naming. If we have GUIApplication I'd expect the others to be like WUIApplication and TUIApplication and CLIApplication which gets rather messy and assumes the abbreviations are known, nor does it fit with the existing schema.org naming. There's also the existing schema:MobileApplication which also qualifies as a GUIApplication in my book, I thought DesktopApplication was the natural counterpart for GUIs on non-mobile devices (the line is a bit blurry of course, especially on my linux pinephone ;) ).

I think part of the problem may be because we are conflating an application with a graphical UI with an application that is run in a Desktop. Since terminal applications may be run from a Desktop, this may bring in confusion.

If you look at it in terms of what kind of environment a specific software type requires (due to the interface it offers), then I think our definitions are pretty clear:

  • DesktopApplication - Requires a graphical desktop environment
  • TerminalApplication - Requires a terminal (interactive tty)
  • ServerApplication - Requires the ability to serve over a network
  • schema:WebApplication - Requires a web-browser
  • CommandLineApplication - Requires only a command line (can do without an interactive tty)
  • schema:MobileApplication - Requires a mobile device

I think this narrows it then, no? Now I can understand the differences clearly. A DesktopApplication may also be a MobileApplication, as they are not disjoint. Shall I update the definitions to clarify them?

Sure, give it a try. They indeed don't have to be disjoint necessarily.

Done.