Apps (abbr. for application, synonym for program) is the name for executable software, which provides additional functionality or improvements to the user, which goes beyond the scope (or are not includes) of the operating system. Generally, the term app can be used as a synonym for multiple different applications, which may be used in many different areas and use cases, however, the term is established in the area of mobile operating systems as software that provides functionality on these devices (e.g. for Android, iOS, Windows Phone or Symbian).
The term app can be used for every operating system which allows the installation of additional software. To better distinguish apps, which are specifically created for a mobile usage (e.g. on a smartphone), such apps can be called mobile apps. Usually, such apps can be purchased or installed via a so-called app store. Such app stores are mostly pre-installed on the devices, e.g. the Google Play Store or F-Droid.
Mobile apps are developed to provide value to the user and have a special focus on an easy usage. During the development of a mobile app, a special focus is on the user interface and how the app is supposed to be used, as a mobile devices provides only limited space on the screen. If a developer wants to reach users of multiple different platforms, there are basically two approaches: a native app or a mobile web-app. To support multiple platforms with a native app, the developer has to develop an app for each of the platforms they want to support. Mobile web apps usually just require a web browser, however, they mostly require an internet connection at any time.
Alternatively to creating an app package for each desired platform, there are frameworks that support creating an artifact for multiple platforms, such as Flutter or React native. Kotlin Multiplatform (also called "KMP") supports both iOS and Android platforms, and can integrate native libraries alongside KMP code.
Native apps are programs, which are directly installed on the target system. As of this installation on the device itself, the app is able to get access to the systems resources (such as WiFi, bluetooth, the filesystem) through the operating system.
The app, as a down-side, has to be programmed for the targeted system and can therefore only be installed and used on this specific system. It can not, without changing the program, be used on another platform, as the used interfaces and resources may not be present or present in the same fashion. Additionally, different platforms may use and/or support different programming languages only, in which an app can be programmed (in Android e.g. Java or Kotlin, iOS supports Objective-C and Swift, Windows Phone C#, C++ and C). As of this, a developer who wants to target multiple different platforms with a native app, needs to develop the app from scratch for each of the desired platforms.
Installation and usage
Usually, a native app needs to be installed on the device. On Android, there's a special kind of apps, called Instant apps, where the installation happens on the fly. For mobile apps, the installation usually happens using an App-shop, however, on some platforms it's possible to download the app package from an arbitrary source and install it directly on the system. On Android such app packages are called APK files.
After the installation of an app, it is shown in the listing of installed apps (in Android the so-called App-Drawer). It can then be started by clicking on it (on a touchscreen: tapping on it). Most mobile operating systems also allow to have a shortcut to apps on the Homescreen (also called desktop).
There's no strict standard for how an app should look like or how it should behave or used by the user (even though, there're best practices). That means, that different apps may have different user interfaces and usability concepts. Given, that it is already hard enough to find a general UX pattern on a single platform, looking at different platforms, it's nearly impossible to find a baseline or a common understanding of how an app should look like.
For Android, Google is providing guidelines for app developers on how they should design their apps in order to ensure an intuitive interface in their apps. With the adaption of these guidelines in popular apps enables the user to easily use a new app, as long as it follows these guidelines.
As a native app is installed on the device, it can have access to a variety of different files and system resources. As a mobile device, such as a smartphone, also saves sensible data, such as contacts, SMS or similar, the access to data on a device for an app is, on most platforms, controlled and regulated by the operating system. The basic principle, which is followed on most platforms is, that an app has only access to it's own files and data and to a limited set of data, where the user needs to grant the access. An app should also only have access to data, which is essentially needed to do their job (e.g. a game usually does not need access to make phone calls or similar access in order to operate properly).
In android there's a permission system, which is based on groups. Each group has access to some system resources. If a new app is installed on the system, the user needs to grant access to the permissions/groups as requested by the app. If the user declines the access to some of these rights, the installation of the app can not proceed. In more recent versions of Android, the user can also decline single permissions for an app without needing to decline the installation of the app.