Application packaging notes: Difference between revisions

From Helpful
Jump to navigation Jump to search
 
Line 51: Line 51:
'''Intent'''
'''Intent'''


Snap (and its origins, click) are intended as app images,
Snap (and its origins, click) are intended as an implementation of the [[app images]] ''idea'': packaging ''all'' the dependencies.
packaging all the dependencies so creating things that run on any ubuntu variant,
This makes it easier to create packages that run on any ubuntu variant - or any linux variant really - e.g. letting you have newer or older libraries without creating dependency conflicts.
e.g. letting you have newer or older libraries without creating dependency conflicts.


Yes, containers would allow the same, but would be overkill and a little harder to handle - isolation would actually be in the way of accessing filesystem, local networking, X and thereby any GUI.
Yes, containers would allow the same, but would be overkill and a little harder to handle - isolation would actually be in the way of accessing filesystem, local networking, X and thereby any GUI.




The main downside is that, being app images, they take a bunch of space.
The main downside is that, being app images, they take a bunch of space. Expect
Expect each image to take 250..500MB, and snap to retain up to three versions of everything -- you will very quickly fill 10, maybe 20GB or more like thatInstalling the native packages (snap remove name, apt instlal name) can save you a few GByte.
* each graphical app to take order of 300MB almost regardless of what they do, and  
* to retain up to three versions of everything
...meaning that you will very quickly fill 10, maybe 20GB or more,
 
 
 
For some things, a single installed version of the same, in a shared dependency tree, might take GBytes less.
 
You can try to see the difference by doing
snap list
to see what's installed, see if there's an according apt package, and do
  snap remove ''name''
apt install ''name''




Line 74: Line 85:
'''In technical terms'''
'''In technical terms'''


A snap package is basically a compressed filesystem that can be mounted (based on [[squashfs]]).
A snap package is basically a compressed filesystem (based on [[squashfs]]) that can be mounted.


From the app's view, it has mounted
From the app's view, it has
: read-only access to the snap image (app+libraries)
: mounted read-only access to the snap image (app+libraries)
: read-only access to /
: mounted read-only access to /
: writeable directory, like your own homedir
: a mounted writeable directory, like your own homedir




Line 85: Line 96:
'''In practical terms'''
'''In practical terms'''


You will have ''many'' copies of the same libraries.


You will have ''many'' copies of the same libraries.
It's not precisely [[static linking]], but leads to the same bloat as static linking.
It's not precisely static linking, but leads to the same bloat as static linking.
(though snap seems to allow for shared files more than e.g. [[AppImage]]{{verify}})
(though snap seems to allow for shared files more than e.g. [[AppImage]]{{verify}})


Line 110: Line 121:




Limitations:
Limitations/downsides:
* often not lightweight in practice
* often not lightweight in practice
: they're monolithic things that need to include everything (and will duplicate many things)
: they're monolithic things that need to include everything (and will duplicate many things)

Latest revision as of 15:39, 26 March 2024



AppImage

Snap