Software Overview

Todo

  • list deprecated components

AppImage project

AppImageKit

AppImageKit is the reference implementation of the AppImage specification. It is split up into several components, which are described in this subsection.

runtime

The runtime provides the “executable header” of every AppImage. When executing an AppImage, the runtime within the AppImage is run, which mounts the embedded filesystem image read-only in a temporary location, and launches the payload application within there. After the payload application exited, the runtime unmounts the squashfs image and cleans up the temporary resources (such as, the temporary mountpoint directory).

appimagetool

appimagetool is the easiest way to create AppImages from existing directories on the system, the so-called :ref:`AppDir`s. It creates the AppImage by embedding the runtime, and creating and appending the filesystem image.

appimagetool implements all optional features, like for instance update information, signing, and some linting options to make sure the information in the AppImage is valid (for instance, it can validate AppStream files).

AppRun

Every AppImage’s AppDir must contain a file called AppRun, providing the “entry point”. When running the AppImage, the runtime executes the AppRun file within the AppDir.

AppRun doesn’t necessarily have to be a regular file. If the application is relocatable, it can just be a symlink to the main binary. Tools like linuxdeploy can turn applications into relocatable applications, and therefore create such a symlink.

In some cases, though, when an existing application must not be altered (e.g., when the license prohibits any modifications) or tools like linuxdeploy cannot be used, AppRun.c can be used. AppRun.c attempts to make programs load bundled shared libraries instead of system ones by manipulating environment variable. Furthermore, it attempts to prevent warnings users might encounter that are coming from the fact the AppDir is mounted read-only.

Using AppRun is not a guarantee that an application will run, and the packager must provide all the resources an application could need manually (or by using external tools) before creating the AppImage with appimagetool. AppRun force-changes the current working directory, and therefore applications can not detect where the AppImage was called originally. This may be especially annoying for CLI tools, but can also be a problem for GUI applications expecting paths via parameters.

Note

AppRun is legacy technology, and should be avoided if possible. Tools like linuxdeploy deploy applications in a different way, and deprecated its usage. This doesn’t mean there’s no cases in which AppRun might be useful, but it’s got several limitations a user must be aware of before using it.

Helpers

AppImageKit ships with a few helpers that can be used to verify and validate some AppImage features.

validate

validate can validate the PGP signatures inside AppImages.

digest-md5

Calculates the MD5 digest used for desktop integration purposes for a given AppImage. This digest depends on the path, not on the contents.

AppImageUpdate

AppImageUpdate lets you update AppImages in a decentral way using information embedded in the AppImage itself.

The project consists of two tools: appimageupdatetool, a full-featured CLI tool for updating AppImages and dealing with update information, and AppImageUpdate, a user interface for updating AppImages written in Qt.

appimaged

appimaged is a daemon that monitors a predefined set of directories on the system, looking for AppImages. It automatically integrates all AppImages it can find during an initial search, and then live watches for new AppImage (or AppImages that were removed) and (de)integrates these immediately.

It is shipped in a few native distribution package formats as well as as AppImage.

Warning

One of the monitored directories is ~/Downloads. If the directory is very large, appimaged usually needs quite long to visit all files. It is likely to slow down the system (specifically, the filesystem).

Third-party tools

This section showcases a couple of third-party tools that can be used to create and handle AppImage files.

linuxdeploy

linuxdeploy is a simple to use tool that can be used to create AppDirs and AppImages. It has been developed in 2018, and describes itself as an “AppDir creation and maintenance tool”.

linuxdeploy is the successor of linuxdeployqt, and can be used in all projects that use linuxdeployqt. The list of plugins is continually growing, providing solutions for bundling frameworks such as Qt as well as complete environments for non-native programming languages such as Python.

See also

There’s a guide on native binary packaging and a general linuxdeploy user guide in the Packaging Guide.

AppImageLauncher

AppImageLauncher is a helper application for Linux distributions serving as a kind of “entry point” for running and integrating AppImages.

Quoting the README:

AppImageLauncher makes your Linux desktop AppImage ready™. By installing it, you won’t ever have to worry about AppImages again. You can always double click them without making them executable first, just like you should be able to do nowadays. You can integrate AppImages with a single mouse click, and manage them from your application launcher. Updating and removing AppImages becomes as easy as never before.

Due to its simple but efficient way to integrate into your system, it plays well with other applications that can be used to manage AppImages, for example app stores. However, it doesn’t depend on any of those, and can run completely standalone.

Install AppImageLauncher today for your distribution and enjoy using AppImages as easy as never before!

https://github.com/TheAssassin/AppImageLauncher/blob/master/README.md

AppImageLauncher doesn’t provide any kind of “app store” software, but integrates into system-provided launchers’ context menus. It provides tools for updating (based on AppImageUpdate) and removing AppImages.

Nomad Software Center

Todo

describe app store

linuxdeployqt

Todo

describe linuxdeployqt

Todo

Describe the rest of the third-party tools