Hello, Snap team!
Request for Classic Confinement: Emulsion
name: emulsion
description: Emulsion is a modern, responsive game launcher that organizes platforms into galleries, manages game metadata and cover art, and launches titles through configured emulators.
snapcraft: https://gitlab.com/yphil/io.gitlab.yphil.emulsion/-/blob/master/snap/snapcraft.yaml
upstream: https://gitlab.com/yphil/emulsion
upstream-relation: author
supported-category: desktop
reasoning: Emulsion’s core functionality depends on unrestricted access to the user’s filesystem and system commands, which strict confinement cannot allow.
I understand that strict confinement is generally preferred over classic.
I’ve tried the existing interfaces to make the snap to work under strict confinement.
Why Classic Confinement is Required:
-
Game Directory Scanning: Users specify arbitrary game directories anywhere on their system, typically including external drives in /media. The app recursively - 2 levels deep only - scans these directories to discover game files based on - platform default / user defined - file extensions. We tested this under strict confinement: while the snap can mount and read the user-defined directories and files, it cannot actually enumerate or discover files within them, which prevents the core functionality of Emulsion from working.
-
Metadata and Image Management: In each game directory, Emulsion creates (if they don’t exist)
metadata/andimages/subdirectories where it writes and reads game information as JSON files and cover art downloaded / edited on user action (per game or batch download per platform). -
Game Launching: Games are launched by executing emulator commands (configured by the user in the platform menu) with the game file path as argument, and optional additional arguments ; This requires spawning processes with shell access. This functionality is impossible under strict confinement. We have tested this and the security policy correctly blocks the execution of arbitrary host commands with a “Permission denied” error.
-
Flatpak Integration: Users can install (in user mode) missing emulators from Flathub through the platform menu. This involves checking Flatpak itself availability, managing remotes, and checking availability of / installing packages.
-
External API Access: Game metadata and cover images are fetched from Wikipedia, WikiMedia, SteamGridDB (optional, API key required), and GiantBomb (optional, API key required, this API will be removed soon anyway) APIs.
-
File Parsing: For the parsing of Playstation 3 SFO files, Emulsion embarks a binary executable: SFO.c, the source code - and compatible license - of which is available publicly.
Most of these operations require full filesystem access and the ability to execute arbitrary commands, which is only possible with classic confinement.
Security Considerations:
- Emulsion only accesses user-specified directories and the app’s data / config directory
- No network-facing services or privileged operations
- All file operations are initiated by explicit user actions
Notes: The official Emulsion git repo is at gitlab (see this message header) but the files are released on the github mirror because
- GitLab releases are harder to do because electron-builder doesn’t have a built-in “recipe” for publishing to GitLab
- We seem to have exhausted all our pipelines minutes on GitLab
- GitLab releases - and this is the main reason - don’t provide a “latest” link to the archive, which is a very handy functionality for keeping web links relevant / up to date.
The current snap already uses classic confinement successfully. This request is to maintain that functionality.
Thank you for considering this request.