In Layman’s terms, a container is a box in which we can put things inside and use them separately without affecting the central system (host).
👍 A simple definition
An example is provided about "traditional packaging" tools clashes when installing binary names: example of VSCode and Code - OSS.
For example, if an application recently updated, and requires dependency A version 1, but the distribution only ships dependency A version 0.9. It would not be ideal for upgrading the application, as the distribution will not meet the requirements.
The author suggests using containers to solve it using containers. He recommends Nix and Flatpak.
The only short-term issue is: toolkits, frameworks, and applications have to adopt these standards.
AppImage is similar to dmg files for MacOS. If you have the file, you can run the app.
A Snap image contains all dependencies. A snap app will run in isolated mode. The rights of the contained application depend on the level defined in the snap: classic, strict, or dev mode. There is therefore a real security benefit since a given piece of software will only have very controlled interactions with the rest of the system. A snap app is often two or 3 times larger though.
Flatpak is similar to Snap. Differences occur for the developers, who have nearly nothing at the beginning, and the user must approve every data request (personal data, network, process). Security has been criticized though. Executables take also a noticeable amount of storage.