- name: bossterm
- description: Modern terminal emulator built with Kotlin and Compose Desktop. Features include multiple tabs, search, hyperlink detection, full emoji/Unicode
support, copy-on-select, IME support for CJK input, command completion notifications, and mouse reporting for vim/tmux/htop. - snapcraft: BossTerm/snapcraft.yaml at master · kshivang/BossTerm · GitHub
- upstream: GitHub - kshivang/BossTerm: Pure Kotlin Terminal Emulator. Works with SSH and PTY.
- upstream-relation: I am the author and maintainer of BossTerm
- supported-category: terminal emulator
- reasoning:
BossTerm is a terminal emulator that requires classic confinement for the following technical reasons:
-
PTY (Pseudo-Terminal) Access
Terminal emulators must create and manage PTY devices (/dev/ptmx, /dev/pts/*) to spawn shell processes. The pty4j library we use requires unrestricted PTY access to allocate and manage terminal sessions. -
Arbitrary Command Execution
As a terminal emulator, BossTerm must execute the user’s shell ($SHELL) and any commands they type. This is the core function of a terminal - running arbitrary
processes with full environment inheritance. -
Unrestricted File System Access
Users expect to navigate to any directory (cd /path), read/write files anywhere they have permissions, and run programs from any location. A terminal cannot be
restricted to specific paths. -
Process Control & Signals
Terminal emulators must send signals (SIGINT, SIGTSTP, SIGCONT, SIGWINCH) to child processes and manage foreground/background job control. -
Precedent
Other terminal emulators have been granted classic confinement:
- alacritty
- hyper
- tilix
- terminator
The existing interfaces (process-control, system-files, etc.) are insufficient because:
- No interface combination allows spawning arbitrary user shells
- PTY allocation requires unrestricted /dev/ptmx access
- Users expect full file system navigation capability
I understand that strict confinement is generally preferred over classic.
I’ve tried the existing interfaces to make the snap work under strict confinement.
I attempted to use combinations of process-control, home, removable-media, and system-files interfaces, but terminal emulators fundamentally require the ability to
spawn any process the user requests and access any path they navigate to, which is not achievable with strict confinement.