pwd etc are called as utilities. I seem to not able to define what kind of things are called applications.
Let's abandon GUI to make the definition more precise.
The term is also sometimes loosely used to include non standard CLI only commands still common in Unix and Linux systems, like say
zipand a gazillion of others.
Applications are almost anything running in userland that interact with end users. This excludes the kernel and everything tight to it like device drivers. Daemons, system services and utilities might be excluded or not depending on the context.
Here again, POSIX defines what are portable applications, i.e. programs written in ISO C and describe the various levels of conformance they are allowed to follow. Of course, non conforming applications can use whatever programming language and non portable facility they like.
In any case, applications use APIs (Application Programming Interfaces).
"Application" is also one of the terms used to classify and arrange what is stored on disk, along with "Operating System", "Data" and others. For example the OS uses
/etc, data is stored in
/var and unbundled applications
I think the Wikipedia topic titled: "Utility Software" nails it:
Utility software usually focuses on how the computer infrastructure (including the computer hardware, operating system, application software and data storage) operates. Due to this focus, utilities are often rather technical and targeted at people with an advanced level of computer knowledge - in contrast to application software, which allows users to do things like creating text documents, playing video games, listening to music or viewing websites.
Utilities in Unix are meant to function well in command pipelines or scripts. They are not meant to be interacted with to a high degree while performing their tasks.
Applications typically provide a notion of a workspace or project where you can work on a task or file (or multiple such things) interactively, and maybe even save/load that entire project/workspace as a unit. Audacity, for example, lets you save multiple audio clips to a project. LMMS is another example - a "project" in LMMS would contain not only your music data, but samples, instrument settings, etc.
ls, or even ones with many options and capabilities like
avconv will take a file/directory, and process it, generating a new file, generating other output, or doing something to an existing single file/directory without further input from you. A utility generally takes a file or stdin as input, does something to it, and is then done.
Provides a platform for application software by providing access to hardware, etc.
Performs system specific tasks -- for example, most common command line utilities. However, many command line programs are really applications (e.g.,
Application software could be thought of as anything that could (in theory) run the same way on any operating system. But there is some ambiguity here. For example, is
tree an application or a utility? Since the distinction is an abstract one that does not impact use or implementation, it is not vital to categorize everything one way or the other.