Slide 1

Slide 1 text

OBS AppImage openSUSE Conference May 27, 2017 Simon Peter AppImage Adrian Schröter Open Build Service Portable cross-distro application bundles for the Linux desktop

Slide 2

Slide 2 text

THE PROBLEM

Slide 3

Slide 3 text

"As a developer, I want to reach users with minimal effort"

Slide 4

Slide 4 text

.exe .dmg ?

Slide 5

Slide 5 text

Approach #1 OBS

Slide 6

Slide 6 text

„Let‘s take the distribution approach and scale it“

Slide 7

Slide 7 text

A system to build distributions in a controlled way Allow application authors to package applications for all major distributions CENTRAL IDEA

Slide 8

Slide 8 text

Source (from User) Base Binaries (from OBS) OBS checks sources and binares. And may build the source. Published Binaries

Slide 9

Slide 9 text

Authors can get newer applications to mature distributions Application authors can leverage already-packaged dependencies Optimized for base distribution Optional submission to become part of official distribution SOLVES...

Slide 10

Slide 10 text

Still cannot link to a file for Linux Still needs to understand RPM spec files, debian packaging Still need to install applications before using them Still need a package manager, mess around with repositories Still need root rights to install BUT...

Slide 11

Slide 11 text

Approach #2 AppImage

Slide 12

Slide 12 text

„Let‘s take the un-distro approch, like Windows and macOS“

Slide 13

Slide 13 text

.exe .dmg .AppImage

Slide 14

Slide 14 text

Distribution = base system Applications directly from original authors (upstreams) Like Windows and macOS CENTRAL IDEA

Slide 15

Slide 15 text

DEMO

Slide 16

Slide 16 text

EXECUTABLE EXECUTABLE SQUASHFS IMAGE SQUASHFS IMAGE AppImage • One file per app and version

Slide 17

Slide 17 text

EXECUTABLE EXECUTABLE SQUASHFS IMAGE SQUASHFS IMAGE AppImage • Binary • Mounts the image with FUSE when executed

Slide 18

Slide 18 text

EXECUTABLE EXECUTABLE SQUASHFS IMAGE SQUASHFS IMAGE AppImage • Bundle app and everything that is not part of all target systems: icons, i18n, Qt 5, KF5,… • Built on host that as old as the oldest target systems

Slide 19

Slide 19 text

MORE • Binary delta updates using AppImageUpdate – only download what has changed • Sandboxing using, e.g., Firejail • Optional appimaged daemon for desktop integration (menus, icons, MIME types, updates,...)

Slide 20

Slide 20 text

Works for all common Linux distributions Run the latest applications on mature (e.g., enterprise) OSes One app = one file Super simple for users: just download one AppImage file, make it executable, and run No unpacking or installation necessary SOLVES...

Slide 21

Slide 21 text

No root needed No system libraries changed Works out of the box, no installation of runtimes needed Works on Live ISOs, university lab computers,... Can use the same AppImages when dual-booting multiple distributions SOLVES...

Slide 22

Slide 22 text

„This is just very cool.“ https://plus.google.com/+LinusTorvalds/posts/WyrATKUnmrS

Slide 23

Slide 23 text

Krita OFFICIAL APPIMAGES Microsoft PowerShell KDevelop Scribus OpenShot digiKam JetBrains Toolbox MuseScore Kdenlive Subsurface ImagePlay Drawpile ...hundreds more Avidemux https://github.com/probonopd/AppImageKit/wiki/AppImages

Slide 24

Slide 24 text

BUT... FOSDEM 2017

Slide 25

Slide 25 text

Author needs a trusted, reliable, auditable build system Author needs to track security updates of dependencies Author needs to ensure licensing compliance BUT...

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

BETTER TOGETHER

Slide 28

Slide 28 text

OBS AppImage

Slide 29

Slide 29 text

OBS: trusted, reliable, auditable build system that tracks security updates of dependencies, ensures licensing compliance, and hosts build products AppImage: simple bundle format that allows upstream application authors to reach Linux users easily An ideal match! OBS APPIMAGE

Slide 30

Slide 30 text

DEMO

Slide 31

Slide 31 text

Packaging workshop this afternoon: let‘s take your application and package it as an AppImage on OBS Not signed up? Don‘t worry: „Hello world“ at https://build.opensuse.org/package/show/home:probono/QtQuickApp Instructions on https://github.com/probonopd/AppImageKit/wiki/Using-Open-Build-Service OBS APPIMAGE

Slide 32

Slide 32 text

appimage.org #AppImage build.opensuse.org #opensuse-buildservice

Slide 33

Slide 33 text

BACKUP

Slide 34

Slide 34 text

"As a tester, I want to run multiple builds without messing up my system.“

Slide 35

Slide 35 text

"As a user, I want to download an application from the original author and run it, now!“

Slide 36

Slide 36 text

mkdir ­p leafpad/leafpad.AppDir && cd leafpad # Get existing binary wget ­c „http://.../leafpad_0.8.17­2_amd64.deb“ # Turn into an AppDir cd leafpad.AppDir dpkg ­x ../leafpad_*.deb . cp ./usr/share/icons/hicolor/scalable/apps/leafpad.svg . cp ./usr/share/applications/leafpad.desktop . wget ­c https://.../AppRun chmod a+x AppRun cd .. # Package as an AppImage wget ­c https://.../appimagetool.AppImage chmod a+x ppimagetool.AppImage ./appimagetool.AppImageleafpad.AppDir/ HELLO WORLD,…

Slide 37

Slide 37 text

…MORE LIKE THIS # Build on an „old enough“ build system (for which recent compilers and build tools exist, e.g., CentOS 6.x) # Make sure it is relocatable (no hardcoded „/usr“); otherwise patch it # Turn into an AppDir ... chmod a+x AppRun # Bundle any libraries that might not be there in a recent enough version # on each target system # Package the AppDir as an AppImage ... ./appimagetool.AppImage leafpad.AppDir ./Leafpad­x86_64.AppImage # Test on each target system ­ really! (I use Live ISOs)

Slide 38

Slide 38 text

CONTINUOUS APPIMAGE WORKFLOW 2 Push commit to GitHub 1 Prepare build sys- tem, e.g., CentOS 6 with Qt5,… 3 Build and package as an AppImage 4 Upload to, e.g., Bintray, GitHub Releases 5 Post download link on Project homepage