<page xmlns="http://projectmallard.org/1.0/"
      type="topic"
      id="application-basics">

  <info>
    <credit type="author">
      <name>Allan Day</name>
      <email>aday@gnome.org</email>
    </credit>
    <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
    <desc>Basic application characteristics.</desc>    
  </info>

<title>Application basics</title>

<p>These Human Interface Guidelines are intended to help with the creation of applications. An understanding of what an application is will help you to distribute your software more effectively, as well as ensure effective and consistent system integration.</p>

<p>The application model allows users to understand how software is distributed, installed and removed, as well as how that software behaves when in use. Ensuring that your software behaves according to this model will therefore help to ensure that it is predictable and conforms to user expectations. It will also ensure correct integration with system tools for installing and removing applications.</p>

<section id="application-definition">
<title>Defining an application</title>

<quote><p>An application is a distinct and independent piece of software that incorporates useful functionality, and which can be installed on a user’s system.</p></quote>

<p>This definition can be broken down into a set of characteristics, which describe an application in more detail. Applications:</p>

<list>
<item><p>Can be individually installed and removed from the system.</p></item>
<item><p>Do not rely on other applications in order to run.</p></item>
<item><p>Contain functionality of their own.</p></item>
<item><p>Provide at least one <link xref="primary-windows">primary window</link>.</p></item>
<item><p>Do not affect or interfere with the behavior of other applications.</p></item>
<item><p>Have a unique name and <link xref="icons-and-artwork#application-icons">icon</link>.</p></item>
</list>

<p>At the heart of this definition is a model that allows the modular installation and use of 3rd party software, in a way that avoids dependency issues and ensures simplicity of use.</p>

<p>In GNOME 3, only software that conforms to these characteristics should install an application launcher.</p>

<!-- Expand into a section on application launchers?

Applications are launched and switched to via their launchers...

-->

</section>

<section id="application-names">
<title>Naming your application</title>

<p>An application’s name is vital. It is what users will be first exposed to, and will help them decide whether they want to use an application or not. It is a major part of your application’s public face.</p>

<p>An application name plays a number of functions:</p>

<list>
<item><p>It must advertise your application to potential users.</p></item>
<item><p>It should serve to reinforce a positive identity, and have expressive qualities.</p></item>
<item><p>It needs to identify your application in the systems where it is installed and run.</p></item>
</list>

<p>Ensure that your application name is short - fewer than 15 characters. This will ensure that it is always displayed in full within a GNOME 3 environment.</p>

<p>Additionally, choose an application name that is easy to understand and communicates your application’s functionality. Avoid references which will not be understood or be familiar to potential users, such as obscure cultural references, inside jokes and acronyms. Instead, pick a name that references what your application does, or the domain in which it operates.</p>

</section>

<!-- Possible additional section on defining scope. "A successful application does one thing, and does it well." -->

</page>
