Like them or hate them AppImages / Flatpaks / Snaps will become the norm for the mainstream distros regardless of the developer.
It's the developers the ones who use them, not the distro package maintainers. Distro package maintainers don't care what the format is, they just have to get the source from the developer and apply the necessary patches to make it available in their respective distros, the problem is not every pkg makes its way to a distro repo because there's no one willing to maintain it, there's where appimages, snaps and flatpacks come into play; they allow the developer to distribute the pkg regardless of the distro, and they alone are responsible for providing updates and bug fixes.
It's not about what's best for the user it never was it's what's easier for the developers and package maintainers.
I disagree. The easier the devps and maintainers have it, the easier we-users have it as well, after all they're the ones providing the software we-users use and enjoy. I support whatever helps to improve user's experience, that being said, I prefer appimages over snaps and flatpacks; easier to use and maintain.
I ran my first AppImage today and they seem far better than snaps.
I think so too. I've been running appimages for a while now and really like doing it. In reality, snaps, flatpacks and appimages works pretty much the same; they are self-contained
squashfs file systems that get mounted in /tmp where they unpack and load everything that make them able to run. Snaps and flatpacks do get updated "automatically" while new versions for appimages need to be downloaded, which I like better too; I get to know exactly what's been changed before deciding whether to update or not, and I can keep both versions just in case. Appimages can be extracted
Code:
./some_app.appimage --appimage-extract
this command will extract it to a folder called
squashfs-root inside that folder you'll find a file system structure similar to this
Code:
./pkg2appimage-1796-x86_64.AppImage --appimage-extract
squashfs-root/.DirIcon
squashfs-root/AppRun
squashfs-root/appimagetool.png
squashfs-root/etc
squashfs-root/etc/alternatives
squashfs-root/etc/alternatives/README
squashfs-root/etc/cron.daily
squashfs-root/etc/cron.daily/dpkg
squashfs-root/etc/dpkg
squashfs-root/etc/dpkg/dpkg.cfg
squashfs-root/etc/dpkg/dpkg.cfg.d
squashfs-root/etc/logrotate.d
squashfs-root/etc/logrotate.d/dpkg
squashfs-root/pkg2appimage.desktop
squashfs-root/sbin
squashfs-root/sbin/start-stop-daemon
squashfs-root/usr
squashfs-root/usr/bin
squashfs-root/usr/bin/AppRun
squashfs-root/usr/bin/appimagetool
squashfs-root/usr/bin/convert
squashfs-root/usr/bin/desktop-file-validate
squashfs-root/usr/bin/dpkg
squashfs-root/usr/bin/dpkg-deb
squashfs-root/usr/bin/dpkg-divert
squashfs-root/usr/bin/dpkg-maintscript-helper
squashfs-root/usr/bin/dpkg-query
squashfs-root/usr/bin/dpkg-split
squashfs-root/usr/bin/dpkg-statoverride
squashfs-root/usr/bin/dpkg-trigger
squashfs-root/usr/bin/update-alternatives
squashfs-root/usr/bin/zsyncmake
squashfs-root/usr/lib
squashfs-root/usr/lib/appimagekit
squashfs-root/usr/lib/appimagekit/mksquashfs
squashfs-root/usr/lib/libffi.so.5
squashfs-root/usr/lib/libgio-2.0.so
squashfs-root/usr/lib/libgio-2.0.so.0.5600.0
squashfs-root/usr/lib/libglib-2.0.so
squashfs-root/usr/lib/libglib-2.0.so.0.5600.0
squashfs-root/usr/lib/libgmodule-2.0.so
squashfs-root/usr/lib/libgmodule-2.0.so.0
squashfs-root/usr/lib/libgmodule-2.0.so.0.5600.0
squashfs-root/usr/lib/libgobject-2.0.so
squashfs-root/usr/lib/libgobject-2.0.so.0.5600.0
squashfs-root/usr/lib/libgthread-2.0.so
squashfs-root/usr/lib/libgthread-2.0.so.0
squashfs-root/usr/lib/libgthread-2.0.so.0.5600.0
squashfs-root/usr/lib/libpcre.so
squashfs-root/usr/lib/libpcre.so.1
squashfs-root/usr/lib/libpcre.so.1.2.11
squashfs-root/usr/lib/libpcrecpp.so
squashfs-root/usr/lib/libpcrecpp.so.0
squashfs-root/usr/lib/libpcrecpp.so.0.0.1
squashfs-root/usr/lib/libpcreposix.so
squashfs-root/usr/lib/libpcreposix.so.0
squashfs-root/usr/lib/libpcreposix.so.0.0.6
squashfs-root/usr/lib/x86_64-linux-gnu
squashfs-root/usr/lib/x86_64-linux-gnu/libbz2.so.1.0
squashfs-root/usr/lib/x86_64-linux-gnu/libffi.so.6
squashfs-root/usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0
squashfs-root/usr/lib/x86_64-linux-gnu/liblzma.so.5
squashfs-root/usr/lib/x86_64-linux-gnu/libpcre.so.3
squashfs-root/usr/lib/x86_64-linux-gnu/libselinux.so.1
squashfs-root/usr/lib64
squashfs-root/usr/share
squashfs-root/usr/share/applications
squashfs-root/usr/share/applications/pkg2appimage.desktop
squashfs-root/usr/share/doc
squashfs-root/usr/share/doc/dpkg
squashfs-root/usr/share/doc/dpkg/AUTHORS
squashfs-root/usr/share/doc/dpkg/README.feature-removal-schedule.gz
squashfs-root/usr/share/doc/dpkg/THANKS.gz
squashfs-root/usr/share/doc/dpkg/changelog.Debian.gz
squashfs-root/usr/share/doc/dpkg/copyright
squashfs-root/usr/share/doc/dpkg/usertags.gz
squashfs-root/usr/share/dpkg
squashfs-root/usr/share/dpkg/abitable
squashfs-root/usr/share/dpkg/cputable
squashfs-root/usr/share/dpkg/ostable
squashfs-root/usr/share/dpkg/triplettable
squashfs-root/usr/share/icons
squashfs-root/usr/share/icons/hicolor
squashfs-root/usr/share/icons/hicolor/128x128
squashfs-root/usr/share/icons/hicolor/128x128/apps
squashfs-root/usr/share/icons/hicolor/128x128/apps/appimagetool.png
squashfs-root/usr/share/lintian
squashfs-root/usr/share/lintian/overrides
squashfs-root/usr/share/lintian/overrides/dpkg
squashfs-root/usr/share/locale
squashfs-root/usr/share/locale/ast
squashfs-root/usr/share/locale/ast/LC_MESSAGES
squashfs-root/usr/share/locale/ast/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/bs
squashfs-root/usr/share/locale/bs/LC_MESSAGES
squashfs-root/usr/share/locale/bs/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/ca
squashfs-root/usr/share/locale/ca/LC_MESSAGES
squashfs-root/usr/share/locale/ca/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/cs
squashfs-root/usr/share/locale/cs/LC_MESSAGES
squashfs-root/usr/share/locale/cs/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/da
squashfs-root/usr/share/locale/da/LC_MESSAGES
squashfs-root/usr/share/locale/da/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/de
squashfs-root/usr/share/locale/de/LC_MESSAGES
squashfs-root/usr/share/locale/de/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/dz
squashfs-root/usr/share/locale/dz/LC_MESSAGES
squashfs-root/usr/share/locale/dz/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/el
squashfs-root/usr/share/locale/el/LC_MESSAGES
squashfs-root/usr/share/locale/el/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/eo
squashfs-root/usr/share/locale/eo/LC_MESSAGES
squashfs-root/usr/share/locale/eo/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/es
squashfs-root/usr/share/locale/es/LC_MESSAGES
squashfs-root/usr/share/locale/es/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/et
squashfs-root/usr/share/locale/et/LC_MESSAGES
squashfs-root/usr/share/locale/et/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/eu
squashfs-root/usr/share/locale/eu/LC_MESSAGES
squashfs-root/usr/share/locale/eu/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/fr
squashfs-root/usr/share/locale/fr/LC_MESSAGES
squashfs-root/usr/share/locale/fr/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/gl
squashfs-root/usr/share/locale/gl/LC_MESSAGES
squashfs-root/usr/share/locale/gl/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/hu
squashfs-root/usr/share/locale/hu/LC_MESSAGES
squashfs-root/usr/share/locale/hu/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/id
squashfs-root/usr/share/locale/id/LC_MESSAGES
squashfs-root/usr/share/locale/id/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/it
squashfs-root/usr/share/locale/it/LC_MESSAGES
squashfs-root/usr/share/locale/it/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/ja
squashfs-root/usr/share/locale/ja/LC_MESSAGES
squashfs-root/usr/share/locale/ja/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/km
squashfs-root/usr/share/locale/km/LC_MESSAGES
squashfs-root/usr/share/locale/km/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/ko
squashfs-root/usr/share/locale/ko/LC_MESSAGES
squashfs-root/usr/share/locale/ko/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/ku
squashfs-root/usr/share/locale/ku/LC_MESSAGES
squashfs-root/usr/share/locale/ku/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/lt
squashfs-root/usr/share/locale/lt/LC_MESSAGES
squashfs-root/usr/share/locale/lt/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/mr
squashfs-root/usr/share/locale/mr/LC_MESSAGES
squashfs-root/usr/share/locale/mr/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/nb
squashfs-root/usr/share/locale/nb/LC_MESSAGES
squashfs-root/usr/share/locale/nb/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/ne
squashfs-root/usr/share/locale/ne/LC_MESSAGES
squashfs-root/usr/share/locale/ne/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/nl
squashfs-root/usr/share/locale/nl/LC_MESSAGES
squashfs-root/usr/share/locale/nl/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/nn
squashfs-root/usr/share/locale/nn/LC_MESSAGES
squashfs-root/usr/share/locale/nn/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/pa
squashfs-root/usr/share/locale/pa/LC_MESSAGES
squashfs-root/usr/share/locale/pa/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/pl
squashfs-root/usr/share/locale/pl/LC_MESSAGES
squashfs-root/usr/share/locale/pl/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/pt
squashfs-root/usr/share/locale/pt/LC_MESSAGES
squashfs-root/usr/share/locale/pt/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/pt_BR
squashfs-root/usr/share/locale/pt_BR/LC_MESSAGES
squashfs-root/usr/share/locale/pt_BR/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/ro
squashfs-root/usr/share/locale/ro/LC_MESSAGES
squashfs-root/usr/share/locale/ro/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/ru
squashfs-root/usr/share/locale/ru/LC_MESSAGES
squashfs-root/usr/share/locale/ru/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/sk
squashfs-root/usr/share/locale/sk/LC_MESSAGES
squashfs-root/usr/share/locale/sk/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/sv
squashfs-root/usr/share/locale/sv/LC_MESSAGES
squashfs-root/usr/share/locale/sv/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/th
squashfs-root/usr/share/locale/th/LC_MESSAGES
squashfs-root/usr/share/locale/th/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/tl
squashfs-root/usr/share/locale/tl/LC_MESSAGES
squashfs-root/usr/share/locale/tl/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/vi
squashfs-root/usr/share/locale/vi/LC_MESSAGES
squashfs-root/usr/share/locale/vi/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/zh_CN
squashfs-root/usr/share/locale/zh_CN/LC_MESSAGES
squashfs-root/usr/share/locale/zh_CN/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/locale/zh_TW
squashfs-root/usr/share/locale/zh_TW/LC_MESSAGES
squashfs-root/usr/share/locale/zh_TW/LC_MESSAGES/dpkg.mo
squashfs-root/usr/share/man
squashfs-root/usr/share/man/de
squashfs-root/usr/share/man/de/man1
squashfs-root/usr/share/man/de/man1/dpkg-deb.1.gz
squashfs-root/usr/share/man/de/man1/dpkg-maintscript-helper.1.gz
squashfs-root/usr/share/man/de/man1/dpkg-query.1.gz
squashfs-root/usr/share/man/de/man1/dpkg-split.1.gz
squashfs-root/usr/share/man/de/man1/dpkg-trigger.1.gz
squashfs-root/usr/share/man/de/man1/dpkg.1.gz
squashfs-root/usr/share/man/de/man5
squashfs-root/usr/share/man/de/man5/dpkg.cfg.5.gz
squashfs-root/usr/share/man/de/man8
squashfs-root/usr/share/man/de/man8/dpkg-divert.8.gz
squashfs-root/usr/share/man/de/man8/dpkg-statoverride.8.gz
squashfs-root/usr/share/man/de/man8/start-stop-daemon.8.gz
squashfs-root/usr/share/man/de/man8/update-alternatives.8.gz
squashfs-root/usr/share/man/es
squashfs-root/usr/share/man/es/man1
squashfs-root/usr/share/man/es/man1/dpkg-deb.1.gz
squashfs-root/usr/share/man/es/man1/dpkg-query.1.gz
squashfs-root/usr/share/man/es/man1/dpkg-split.1.gz
squashfs-root/usr/share/man/es/man1/dpkg-trigger.1.gz
squashfs-root/usr/share/man/es/man1/dpkg.1.gz
squashfs-root/usr/share/man/es/man5
squashfs-root/usr/share/man/es/man5/dpkg.cfg.5.gz
squashfs-root/usr/share/man/es/man8
squashfs-root/usr/share/man/es/man8/dpkg-divert.8.gz
squashfs-root/usr/share/man/es/man8/start-stop-daemon.8.gz
squashfs-root/usr/share/man/es/man8/update-alternatives.8.gz
squashfs-root/usr/share/man/fr
squashfs-root/usr/share/man/fr/man1
squashfs-root/usr/share/man/fr/man1/dpkg-deb.1.gz
squashfs-root/usr/share/man/fr/man1/dpkg-query.1.gz
squashfs-root/usr/share/man/fr/man1/dpkg-split.1.gz
squashfs-root/usr/share/man/fr/man1/dpkg-trigger.1.gz
squashfs-root/usr/share/man/fr/man1/dpkg.1.gz
squashfs-root/usr/share/man/fr/man5
squashfs-root/usr/share/man/fr/man5/dpkg.cfg.5.gz
squashfs-root/usr/share/man/fr/man8
squashfs-root/usr/share/man/fr/man8/dpkg-divert.8.gz
squashfs-root/usr/share/man/fr/man8/start-stop-daemon.8.gz
squashfs-root/usr/share/man/fr/man8/update-alternatives.8.gz
squashfs-root/usr/share/man/hu
squashfs-root/usr/share/man/hu/man5
squashfs-root/usr/share/man/hu/man5/dpkg.cfg.5.gz
squashfs-root/usr/share/man/it
squashfs-root/usr/share/man/it/man1
squashfs-root/usr/share/man/it/man1/dpkg-deb.1.gz
squashfs-root/usr/share/man/it/man1/dpkg-query.1.gz
squashfs-root/usr/share/man/it/man1/dpkg-split.1.gz
squashfs-root/usr/share/man/it/man1/dpkg.1.gz
squashfs-root/usr/share/man/it/man5
squashfs-root/usr/share/man/it/man5/dpkg.cfg.5.gz
squashfs-root/usr/share/man/it/man8
squashfs-root/usr/share/man/it/man8/start-stop-daemon.8.gz
squashfs-root/usr/share/man/it/man8/update-alternatives.8.gz
squashfs-root/usr/share/man/ja
squashfs-root/usr/share/man/ja/man1
squashfs-root/usr/share/man/ja/man1/dpkg-deb.1.gz
squashfs-root/usr/share/man/ja/man1/dpkg-query.1.gz
squashfs-root/usr/share/man/ja/man1/dpkg-split.1.gz
squashfs-root/usr/share/man/ja/man1/dpkg-trigger.1.gz
squashfs-root/usr/share/man/ja/man1/dpkg.1.gz
squashfs-root/usr/share/man/ja/man5
squashfs-root/usr/share/man/ja/man5/dpkg.cfg.5.gz
squashfs-root/usr/share/man/ja/man8
squashfs-root/usr/share/man/ja/man8/dpkg-divert.8.gz
squashfs-root/usr/share/man/ja/man8/start-stop-daemon.8.gz
squashfs-root/usr/share/man/ja/man8/update-alternatives.8.gz
squashfs-root/usr/share/man/man1
squashfs-root/usr/share/man/man1/dpkg-deb.1.gz
squashfs-root/usr/share/man/man1/dpkg-maintscript-helper.1.gz
squashfs-root/usr/share/man/man1/dpkg-query.1.gz
squashfs-root/usr/share/man/man1/dpkg-split.1.gz
squashfs-root/usr/share/man/man1/dpkg-trigger.1.gz
squashfs-root/usr/share/man/man1/dpkg.1.gz
squashfs-root/usr/share/man/man5
squashfs-root/usr/share/man/man5/dpkg.cfg.5.gz
squashfs-root/usr/share/man/man8
squashfs-root/usr/share/man/man8/dpkg-divert.8.gz
squashfs-root/usr/share/man/man8/dpkg-statoverride.8.gz
squashfs-root/usr/share/man/man8/start-stop-daemon.8.gz
squashfs-root/usr/share/man/man8/update-alternatives.8.gz
squashfs-root/usr/share/man/pl
squashfs-root/usr/share/man/pl/man1
squashfs-root/usr/share/man/pl/man1/dpkg-deb.1.gz
squashfs-root/usr/share/man/pl/man1/dpkg-query.1.gz
squashfs-root/usr/share/man/pl/man1/dpkg-split.1.gz
squashfs-root/usr/share/man/pl/man1/dpkg-trigger.1.gz
squashfs-root/usr/share/man/pl/man1/dpkg.1.gz
squashfs-root/usr/share/man/pl/man5
squashfs-root/usr/share/man/pl/man5/dpkg.cfg.5.gz
squashfs-root/usr/share/man/pl/man8
squashfs-root/usr/share/man/pl/man8/dpkg-divert.8.gz
squashfs-root/usr/share/man/pl/man8/start-stop-daemon.8.gz
squashfs-root/usr/share/man/pl/man8/update-alternatives.8.gz
squashfs-root/usr/share/man/sv
squashfs-root/usr/share/man/sv/man1
squashfs-root/usr/share/man/sv/man1/dpkg-deb.1.gz
squashfs-root/usr/share/man/sv/man1/dpkg-query.1.gz
squashfs-root/usr/share/man/sv/man1/dpkg-split.1.gz
squashfs-root/usr/share/man/sv/man1/dpkg-trigger.1.gz
squashfs-root/usr/share/man/sv/man1/dpkg.1.gz
squashfs-root/usr/share/man/sv/man5
squashfs-root/usr/share/man/sv/man5/dpkg.cfg.5.gz
squashfs-root/usr/share/man/sv/man8
squashfs-root/usr/share/man/sv/man8/dpkg-divert.8.gz
squashfs-root/usr/share/man/sv/man8/start-stop-daemon.8.gz
squashfs-root/usr/share/man/sv/man8/update-alternatives.8.gz
squashfs-root/usr/share/metainfo
squashfs-root/usr/share/metainfo/pkg2appimage.appdata.xml
squashfs-root/usr/share/pkg2appimage
squashfs-root/usr/share/pkg2appimage/appdir-lint.sh
squashfs-root/usr/share/pkg2appimage/excludedeblist
squashfs-root/usr/share/pkg2appimage/excludelist
squashfs-root/usr/share/pkg2appimage/functions.sh
squashfs-root/var
squashfs-root/var/lib
squashfs-root/var/lib/dpkg
squashfs-root/var/lib/dpkg/alternatives
squashfs-root/var/lib/dpkg/info
squashfs-root/var/lib/dpkg/parts
squashfs-root/var/lib/dpkg/updates
I just extracted
pkg2appimage-1796-x86_64.AppImage and as you can see there are a few dirs you might see in any Linux FS structure containing everything the app needs to run, dirs such as /
etc, /
usr/lib, /usr/share, /usr/bin, /var/lib ... with some knowledge of the inner workings of the app, you can modify the contents, edit some config files and put it back together using appimagetool
https://github.com/AppImage/AppImageKit .
The --appimage command can take more options too:
Code:
./pkg2appimage-1796-x86_64.AppImage --appimage-help
AppImage options:
--appimage-extract [<pattern>] Extract content from embedded filesystem image
If pattern is passed, only extract matching files
--appimage-help Print this help
--appimage-mount Mount embedded filesystem image and print
mount point and wait for kill with Ctrl-C
--appimage-offset Print byte offset to start of embedded
filesystem image
--appimage-portable-home Create a portable home folder to use as $HOME
--appimage-portable-config Create a portable config folder to use as
$XDG_CONFIG_HOME
--appimage-signature Print digital signature embedded in AppImage
--appimage-updateinfo[rmation] Print update info embedded in AppImage
--appimage-version Print version of AppImageKit
Portable home:
If you would like the application contained inside this AppImage to store its
data alongside this AppImage rather than in your home directory, then you can
place a directory named
/path/to/pkg2appimage-1796-x86_64.AppImage.home
Or you can invoke this AppImage with the --appimage-portable-home option,
which will create this directory for you. As long as the directory exists
and is neither moved nor renamed, the application contained inside this
AppImage to store its data in this directory rather than in your home
directory
Note that it might not work with every appimage out there, it depends on the appimagekit version used to build the app, but most will. You can confirm with
Code:
./some_app.appimage --appimage-help