mirror of
https://cagebreak.project-repo.co/cagebreak.git
synced 2026-08-23 05:54:19 +02:00
This is a major release and includes BREAKING changes! Breaking Changes: * More intuitive switch of focus, next, prev and exchange (#20, 40 in Bugs.md) Cagebreak will probably still feel broadly the same though. * Remove -r flag - This is replaced by output configuration. * Socket disabled by default - The socket is enabled by invoking Cagebreak with the -e flag. * Socket permissions restricted to the user of the Cagebreak process (700) This may require modification of scripts interacting with the socket with different UIDs than the UID of the Cagebreak process. * Rename "Current frame" indicator to "Current tile" Changelog: * Move to wlr_scene * Add events displaying change over the socket * this enables scripting tools * Add support for scaling outputs (thanks to Oliver Friedmann) * Remove -r flag * Add rotation to output configuration * Add cursor enable|disable flag * Add input keyboard configuration * Custom path flag for configuration file * Restrict socket permissions to the user running cagebreak (700) * Fix Issue #31 (resolve some terminology) 38 in Bugs.md * Fix Issue #30 - 39 in Bugs.md * Fix Issue #20 - 40 in Bugs.md * Fix Issue #12 - 41 in Bugs.md (dump + events over socket) * Fix Bugs found via scan-build static analysis (42 - 45 in Bugs.md) * Fix Issue #33 - 46 in Bugs.md * Fix Issue #32 - 47 in Bugs.md * Fix Issue #16 - 48 in Bugs.md * Fix Issue #3 - 49 in Bugs.md (disabling keybinding interpretation for specific keyboards is now possible) * Fix Issue #26 - 50 in Bugs.md * Fix Issue #7 - 51 in Bugs.md (Change cursor to square while Cagebreak is waiting for a key) * Fix config bug for some commands - 52 in Bugs.md * Fix Issue #35 - 53 in Bugs.md (update to wlroots 0.16.1) * Improve FAQ.md (related to some Issues) * Disable outputs when unable to set any mode (crashed previously) * Add Code of Conduct * Print version number on startup
572 lines
22 KiB
Markdown
572 lines
22 KiB
Markdown
# Cagebreak: A Wayland Tiling Compositor
|
|
|
|
[](https://bestpractices.coreinfrastructure.org/projects/6532) [](https://repology.org/project/cagebreak/versions) [](https://repology.org/project/cagebreak/versions)
|
|
|
|
## Quick Introduction
|
|
|
|
Cagebreak is a [Wayland](https://wayland.freedesktop.org/) tiling compositor
|
|
based on [Cage](https://github.com/Hjdskes/cage) and inspired by [ratpoison](https://www.nongnu.org/ratpoison/).
|
|
|
|
### Purpose
|
|
|
|
The goal of this project is to provide a successor to ratpoison for Wayland.
|
|
However, this is no reimplementation of ratpoison.
|
|
|
|
#### New Features, Bugs and Contact Information
|
|
|
|
Should you want to know if a feature will be implemented, file a bug or
|
|
get in touch, [open an issue](https://github.com/project-repo/cagebreak/issues/new)
|
|
or write an e-mail (See [SECURITY.md](SECURITY.md) for details.).
|
|
|
|
The Roadmap section outlines what is planned for the future.
|
|
|
|
#### Compatibility & Development Distribution
|
|
|
|
Cagebreak supports [Arch Linux](https://archlinux.org/) and uses the libraries
|
|
(and software versions) as they are obtained through [pacman](https://wiki.archlinux.org/title/Pacman)
|
|
at the time of release. Any other use is out of scope.
|
|
|
|
Most other setups probably work with a bit of luck. We
|
|
make no guarantees.
|
|
|
|
### Quick Installation
|
|
|
|
This assumes Arch Linux:
|
|
|
|
1. Use the [cagebreak PKGBUILD](https://aur.archlinux.org/packages/cagebreak).
|
|
2. Add an example config such as [config](examples/config) to `$USER/.config/cagebreak/config`
|
|
3. Execute cagebreak like any other binary.
|
|
|
|
See the [ArchWiki](https://wiki.archlinux.org/title/Cagebreak#Getting_started) for
|
|
details on getting started and the documentation for everything else.
|
|
|
|
### Documentation
|
|
|
|
* the rest of this file
|
|
* the man pages:
|
|
* [cagebreak](man/cagebreak.1.md)
|
|
* [configuration](man/cagebreak-config.5.md)
|
|
* [socket](man/cagebreak-socket.7.md)
|
|
* the [FAQ](FAQ.md)
|
|
* [SECURITY.md](SECURITY.md)
|
|
|
|
#### What's new?
|
|
|
|
See the [Changelog](Changelog.md).
|
|
|
|
### Uninstallation
|
|
|
|
`pacman -R cagebreak` should be sufficient.
|
|
|
|
### Contributing
|
|
|
|
* Just [open an issue](https://github.com/project-repo/cagebreak/issues/new) and state your idea.
|
|
We will consider the proposal and get back to you.
|
|
* Don't open a pull request. We might not accept your code and
|
|
it would be sad to waste the effort.
|
|
* Respect the [Code of Conduct](CODE_OF_CONDUCT.md) (To date, we never
|
|
had to intervene - Keep it that way!)
|
|
|
|
### Name
|
|
|
|
Cagebreak is based on [Cage](https://github.com/Hjdskes/cage), a Wayland kiosk
|
|
compositor. Since it breaks the kiosk into tiles the name
|
|
Cagebreak seemed appropriate.
|
|
|
|
## Installation
|
|
|
|
On Arch Linux, just use the PKGBUILDs from the [AUR](https://aur.archlinux.org/):
|
|
|
|
* Using [cagebreak](https://aur.archlinux.org/packages/cagebreak), Cagebreak is
|
|
compiled on the target system (since release 1.3.0)
|
|
* Using [cagebreak-bin](https://aur.archlinux.org/packages/cagebreak-bin),
|
|
the pre-built binaries are extracted to
|
|
appropriate paths on the target system (since release 1.3.2)
|
|
|
|
See [cagebreak-pkgbuild](https://github.com/project-repo/cagebreak-pkgbuild) for details.
|
|
|
|
### Obtaining Source Code
|
|
|
|
There are different ways to obtain cagebreak source:
|
|
|
|
* [git clone](https://github.com/project-repo/cagebreak) (for all releases)
|
|
* [download release asset tarballs](https://github.com/project-repo/cagebreak/releases) (starting at release 1.2.1)
|
|
|
|
#### Verifying Source Code
|
|
|
|
There are corresponding methods of verifying that you obtained the correct code:
|
|
|
|
* our git history includes signed tags for releases
|
|
* release assets starting at release 1.2.1 contain a signature for the tarball
|
|
|
|
## Building Cagebreak
|
|
|
|
You can build Cagebreak with the [meson](https://mesonbuild.com/) build system. It
|
|
requires wayland, wlroots and xkbcommon to be installed. Note that Cagebreak is
|
|
developed against the latest tag of wlroots, in order not to constantly chase
|
|
breaking changes as soon as they occur.
|
|
|
|
Simply execute the following steps to build Cagebreak:
|
|
|
|
```
|
|
$ meson setup build
|
|
$ ninja -C build
|
|
```
|
|
|
|
#### Release Build
|
|
|
|
By default, this builds a debug build. To build a release build, use `meson
|
|
setup build --buildtype=release`.
|
|
|
|
##### Xwayland Support
|
|
|
|
Cagebreak comes with compile-time support for XWayland. To enable this,
|
|
first make sure that your version of wlroots is compiled with this
|
|
option. Then, add `-Dxwayland=true` to the `meson` command above. Note
|
|
that you'll need to have the XWayland binary installed on your system
|
|
for this to work.
|
|
|
|
##### Man Pages
|
|
|
|
Cagebreak has man pages. To use them, make sure that you have `scdoc`
|
|
installed. Then, add `-Dman-pages=true` to the `meson` command.
|
|
|
|
### Running Cagebreak
|
|
|
|
You can start Cagebreak by running `./build/cagebreak`. If you run it from
|
|
within an existing X11 or Wayland session, it will open in a virtual output as
|
|
a window in your existing session. If you run it in a TTY, it'll run with the
|
|
KMS+DRM backend. Note that a configuration file is required. For more
|
|
configuration options, see the man pages.
|
|
|
|
Please see `example_scripts/` for example scripts and a basis to customize
|
|
from.
|
|
|
|
#### Usage Philosophy
|
|
|
|
Cagebreak was originally built to suit the needs of its creators. This section outlines
|
|
how we intended some parts of cagebreak and might ease learning how to use cagebreak a
|
|
little bit. Please note that this does not replace the man pages or the FAQ.
|
|
Also, this is in no way intended as a guide on how cagebreak must be used but rather
|
|
as a source of inspiration and of explanations for why certain particularities.
|
|
|
|
1. Cagebreak is keyboard-based. Everything regarding cagebreak can be done
|
|
through the keyboard and it is our view that it should be. This does not mean
|
|
that pointers, touchpads and such are not available for the few applications
|
|
that do require them.
|
|
|
|
2. Cagebreak is a tiling compositor. Every view takes up as much screen space
|
|
as possible. We believe this is useful, as only very few programs are typically
|
|
necessary to complete a task. To manage multiple tasks concurrently, we use
|
|
workspaces.
|
|
|
|
3. Each task deserves its own workspace. Any given task (the sort of thing you
|
|
might find in your calendar or on your todo list) probably requires very few
|
|
views and ideally, these take up as much of the screen as possible.
|
|
|
|
> Combining 2. and 3. might look like this in practice:
|
|
|
|
> * Task 1: Edit introduction section for paper on X
|
|
> * Task 2: Coordinate event with person Y
|
|
|
|
> * split screen vertically
|
|
> * open web browser or pdf viewer to read literature
|
|
> * focus next
|
|
> * open editor
|
|
> * change to a different workspace
|
|
> * split screen vertically
|
|
> * open calendar application
|
|
> * focus next
|
|
> * open chat application
|
|
|
|
> Now each task has its own workspace and switching between tasks is possible
|
|
> by switching between workspaces.
|
|
|
|
> Note that, for example by using the socket, more advanced setups are
|
|
> possible. But the user is warned that excessive tweaking eats into the work
|
|
> to be done.
|
|
|
|
4. Use keybindings and terminal emulators for the right purpose. Given the
|
|
philosophy outlined above you probably launch the same few programs very
|
|
often and others are very rarely used. We believe that commonly
|
|
used programs should have their own keybindings together with the most
|
|
important cagebreak commands. All the rarely used programs should be launched
|
|
from a terminal emulator as they probably require special flags, environment
|
|
variables and file paths anyway.
|
|
|
|
> In practice this means thinking about the applications and cagebreak commands
|
|
> you use and taking your keyboard layout into account when defining keybindings for
|
|
> your individual needs.
|
|
|
|
5. Cagebreak can't do everything, but with scripting you can do most things.
|
|
Through the socket and with a bit of scripting, you can use the internal state
|
|
of cagebreak in combination with cagebreak commands and the full power of
|
|
a scripting language of your choice to do almost whatever you want.
|
|
|
|
> Example scripts can be found in the repository under `example_scripts/`.
|
|
|
|
## Contributing
|
|
|
|
* Read this document.
|
|
* Just [open an issue](https://github.com/project-repo/cagebreak/issues/new) and state your feature request.
|
|
We will consider the proposal and get back to you.
|
|
* Don't open a pull request without asking first. We might not accept your
|
|
code and it would be sad to waste the effort.
|
|
* Respect the [Code of Conduct](CODE_OF_CONDUCT.md) (To date, we never
|
|
had to intervene - Please keep it that way!)
|
|
|
|
### Good First Contributions
|
|
|
|
* Reviewing the project is always welcome.
|
|
* Read the code.
|
|
* Read the documentation.
|
|
* Test whether the documentation matches the code.
|
|
* Test Cagebreak in more esoteric setups (many monitors, for instance).
|
|
* Compile the code.
|
|
* Ideas on improving the testing and quality assurance are particularly
|
|
welcome.
|
|
* If you want, you can share your cagebreak scripts and we might include them
|
|
in the repository provided you agree to release them under MIT and we agree
|
|
with the use case and coding style.
|
|
* Iff you are happy with Cagebreak and use Arch Linux, you may vote for
|
|
[Cagebreak in the AUR](https://aur.archlinux.org/packages/cagebreak).
|
|
* The points above still apply.
|
|
|
|
### Philosophy
|
|
|
|
Cagebreak is currently developed to fit the needs of its creators.
|
|
|
|
The feature set is intentionally limited - we removed
|
|
support for a desktop background image for example.
|
|
|
|
Nonetheless, don't be intimidated by any other part of this file.
|
|
Do your best and we will collaborate toward a solution.
|
|
|
|
## Development
|
|
|
|
### Compatibility & Development Distribution
|
|
|
|
Cagebreak supports [Arch Linux](https://archlinux.org/) and uses the libraries
|
|
(and software versions) as they are obtained through [pacman](https://wiki.archlinux.org/title/Pacman)
|
|
at the time of release. Any other use is out of scope.
|
|
|
|
However, Cagebreak may also work on other distributions given the
|
|
proper library versions (Some package maintainers have done this and it
|
|
seems to work (To date, we dealt with a few Issues and never felt the
|
|
need to ask for the distribution the user was having the issue on.)).
|
|
|
|
[](https://repology.org/project/cagebreak/versions)
|
|
|
|
You should use Arch Linux if you want to modify Cagebreak
|
|
for yourself.
|
|
|
|
### GCC and -fanalyzer
|
|
|
|
Cagebreak should compile with any reasonably new gcc or clang. Consider
|
|
a gcc version of at least [10.1](https://gcc.gnu.org/gcc-10/changes.html) if
|
|
you want to get the benefit of the brand-new
|
|
[-fanalyzer](https://gcc.gnu.org/onlinedocs/gcc/Static-Analyzer-Options.html)
|
|
flag. However, this new flag sometimes produces false-postives and we
|
|
selectively disable warnings for affected code segments as described below.
|
|
|
|
Meson is configured to set `CG_HAS_FANALYZE` if `-fanalyzer` is available.
|
|
Therefore, to maintain portability, false-positive fanalyzer warnings are to be
|
|
disabled using the following syntax:
|
|
|
|
```
|
|
#if CG_HAS_FANALYZE
|
|
#pragma GCC diagnostic push
|
|
#pragma GCC diagnostic ignored "WARNING OPTION"
|
|
#endif
|
|
```
|
|
and after
|
|
|
|
```
|
|
#if CG_HAS_FANALYZE
|
|
#pragma GCC diagnostic pop
|
|
#endif
|
|
```
|
|
|
|
### Fuzzing
|
|
|
|
Along with the project source code, a fuzzing framework based on `libfuzzer` is
|
|
supplied. This allows for the testing of the parsing code responsible for reading
|
|
the `cagebreak` configuration file. When `libfuzzer` is available (please
|
|
use the `clang` compiler to enable it), building the fuzz-testing software can
|
|
be enabled by passing `-Dfuzz=true` to meson. This generates a `build/fuzz/fuzz-parse`
|
|
binary according to the `libfuzzer` specifications. Further documentation on
|
|
how to run this binary can be found [here](https://llvm.org/docs/LibFuzzer.html).
|
|
|
|
Here is an example workflow:
|
|
|
|
```
|
|
rm -rf build
|
|
CC=clang meson setup build -Dfuzz=true -Db_sanitize=address,undefined -Db_lundef=false
|
|
ninja -C build/
|
|
mkdir build/fuzz_corpus
|
|
cp examples/config build/fuzz_corpus/
|
|
WLR_BACKENDS=headless ./build/fuzz/fuzz-parse -jobs=12 -max_len=50000 -close_fd_mask=3 build/fuzz_corpus/
|
|
```
|
|
|
|
You may want to tweak `-jobs` or add other options depending on your own setup.
|
|
We have found code path discovery to increase rapidly when the fuzzer is supplied
|
|
with an initial config file. We are working on improving our fuzzing coverage to
|
|
find bugs in other areas of the code.
|
|
|
|
#### Caveat
|
|
|
|
Currently, there are memory leaks which do not seem to stem from our code but rather
|
|
the code of wl-roots or some other library we depend on. We are working on the problem.
|
|
In the meantime, add `-Db_detect-leaks=0` to the meson command to exclude memory leaks.
|
|
|
|
### Reproducible Builds
|
|
|
|
Cagebreak offers reproducible builds given the exact library versions specified
|
|
in `meson.build`. Should a version mismatch occur, a warning will be emitted. We have
|
|
decided on this compromise to allow flexibility and security. In general we will
|
|
adapt the versions to the packages available under Arch Linux at the time of
|
|
release.
|
|
|
|
There are reproducibility issues up to and including release `1.2.0`. See
|
|
`Issue 5` in [Bugs.md](Bugs.md).
|
|
|
|
#### Reproducible Build Instructions
|
|
|
|
All hashes and signatures are provided for the following build instructions.
|
|
|
|
```
|
|
meson setup build -Dxwayland=true -Dman-pages=true --buildtype=release
|
|
ninja -C build
|
|
```
|
|
|
|
#### Hashes for Builds
|
|
|
|
For every release after 1.0.5, hashes will be provided.
|
|
|
|
For every release after 1.7.0, hashes will be provided for man pages too.
|
|
|
|
See [Hashes.md](Hashes.md)
|
|
|
|
#### GPG Signatures
|
|
|
|
For every release after 1.0.5, a GPG signature will be provided in `signatures`.
|
|
|
|
The current signature is called `cagebreak.sig`, whereas all older signatures
|
|
will be named after their release version.
|
|
|
|
Due to errors in the release process, the releases 1.7.1 and 1.7.2 did not include the release
|
|
signatures in the appropriate folder of the git repository. However, signatures were provided
|
|
as release-artefacts at the time of release. The signatures were introduced into the
|
|
repository with 1.7.3. The integrity of cagebreak is still the same because the signatures were
|
|
provided as release-artefacts (which were themselves signed) and the hashes in Hashes.md
|
|
are part of a signed release tag.
|
|
|
|
#### Signing Keys
|
|
|
|
All releases are signed by at least one of the following collection of
|
|
keys.
|
|
|
|
* E79F6D9E113529F4B1FFE4D5C4F974D70CEC2C5B
|
|
* 4739D329C9187A1C2795C20A02ABFDEC3A40545F
|
|
* 7535AB89220A5C15A728B75F74104CC7DCA5D7A8
|
|
* 827BC2320D535AEAD0540E6E2E66F65D99761A6F
|
|
* A88D7431E5BAAD0B6EAE550AC8D61D8BD4FA3C46
|
|
* 8F872885968EB8C589A32E9539ACC012896D450F
|
|
* 896B92AF738C974E0065BF42F2576BD366156BB9
|
|
* AA927AFD50AF7C6810E69FE8274F2C605359E31B
|
|
* BE2DED372287BC4EB2213E13A0C743848A638955
|
|
* 0F3476E4B2404F95EC41600683D5810F7911B020
|
|
|
|
Should we at any point retire a key, we will only replace it with keys signed
|
|
by at least one of the above collection.
|
|
|
|
We registered project-repo.co and added mail addresses after release `1.3.0`.
|
|
|
|
We now have a mail address and its key is signed by signing keys. See Security
|
|
Bugs for details.
|
|
|
|
The full public keys can be found in `keys/` along with any revocation certificates.
|
|
|
|
### Versioning & Branching Strategy
|
|
|
|
Cagebreak uses [semantic versioning](https://semver.org).
|
|
|
|
There are three permanent branches in cagebreak:
|
|
|
|
* `master` (for releases)
|
|
* `development` (for polishing code between releases)
|
|
* `hotfix` (for small emergent releases, usually up-to-date with master)
|
|
|
|
Releases are merged to master as per the release procedure, with
|
|
reasonable exceptions as the situation requires.
|
|
|
|
The release commit is tagged with the release version.
|
|
|
|
In the past, our git history did not perfectly reflect this scheme.
|
|
|
|
### Release Procedure
|
|
|
|
The release procedure outlines the process for a release to occur.
|
|
|
|
* [ ] `git checkout development`
|
|
* [ ] `git pull origin development`
|
|
* [ ] `git push origin development`
|
|
* [ ] New semantic version number determined
|
|
* [ ] Adjust version number
|
|
* [ ] meson.build
|
|
* [ ] git tag
|
|
* [ ] man pages
|
|
* [ ] README.md repology badges minversion
|
|
* [ ] Relevant Documentation completed
|
|
* [ ] New features
|
|
* [ ] man pages
|
|
* [ ] cagebreak
|
|
* [ ] cagebreak-config
|
|
* [ ] cagebreak-socket
|
|
* [ ] example config
|
|
* [ ] Set EPOCH to release day in man generation in meson.build
|
|
* [ ] FAQ.md
|
|
* [ ] Changelog.md for major and minor releases but not patches
|
|
* [ ] Check features for SECURITY.md relevance (changes to socket scope
|
|
for example)
|
|
* [ ] Synchronize any socket changes to cagebreak-socket man page
|
|
* [ ] Fixed bugs documented in Bugs.md
|
|
* [ ] Include issue discussion from github, where applicable
|
|
* [ ] Testing
|
|
* [ ] Manual testing
|
|
* [ ] Libfuzzer testing
|
|
* [ ] Build version without xwayland support
|
|
* [ ] meson.build reproducible build versions are current archlinux libraries and gcc
|
|
* [ ] wlr_xdg_shell version check
|
|
* [ ] `ninja -C build clang-format` makes no changes
|
|
* [ ] `ninja -C build scan-build` shows no issues
|
|
* [ ] Cagebreak is reproducible on multiple machines
|
|
* [ ] Documented reproducible build artefacts
|
|
* [ ] Hashes of the artefacts in Hashes.md
|
|
* [ ] Renamed previous signatures
|
|
* [ ] Created gpg signature of the artefacts
|
|
* [ ] `gpg --detach-sign -u keyid cagebreak`
|
|
* [ ] `gpg --detach-sign -u keyid cagebreak.1`
|
|
* [ ] `gpg --detach-sign -u keyid cagebreak-config.5`
|
|
* [ ] `gpg --detach-sign -u keyid cagebreak-socket.7`
|
|
* [ ] `git add` relevant files
|
|
* [ ] `git commit`
|
|
* [ ] `git push origin development`
|
|
* [ ] Determined commit and tag message (Start with "Release version_number\n\n")
|
|
* [ ] Mentioned fixed Bugs.md issues ("Fixed Issue n")
|
|
* [ ] Mentioned other important changes
|
|
* [ ] `git checkout master`
|
|
* [ ] `git merge --squash development`
|
|
* [ ] `git commit` and insert message
|
|
* [ ] `git tag -u keyid version HEAD` and insert message
|
|
* [ ] `git tag -v version` and check output
|
|
* [ ] `git push --tags origin master`
|
|
* [ ] `git checkout development` (merge to development depends on whether release was a hotfix)
|
|
* [ ] `git merge master`
|
|
* [ ] `git push --tags origin development`
|
|
* [ ] `git checkout hotfix` (hotfix is to be kept current with master after releases)
|
|
* [ ] `git merge master`
|
|
* [ ] `git push --tags origin hotfix`
|
|
* [ ] `git archive --prefix=cagebreak/ -o release_version.tar.gz tags/version .`
|
|
* [ ] Create release-artefacts_version.tar.gz
|
|
* [ ] `mkdir release-artefacts_version`
|
|
* [ ] `cp build/cagebreak release-artefacts_version/`
|
|
* [ ] `cp build/cagebreak.sig release-artefacts_version/`
|
|
* [ ] `cp build/cagebreak.1 release-artefacts_version/`
|
|
* [ ] `cp build/cagebreak.1.sig release-artefacts_version/`
|
|
* [ ] `cp build/cagebreak-config.5 release-artefacts_version/`
|
|
* [ ] `cp build/cagebreak-config.5.sig release-artefacts_version/`
|
|
* [ ] `cp build/cagebreak-socket.7 release-artefacts_version/`
|
|
* [ ] `cp build/cagebreak-socket.7.sig release-artefacts_version/`
|
|
* [ ] `cp LICENSE release-artefacts_version/`
|
|
* [ ] `cp README.md release-artefacts_version/`
|
|
* [ ] `cp SECURITY.md release-artefacts_version/`
|
|
* [ ] `cp FAQ.md release-artefacts_version/`
|
|
* [ ] `export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) ; tar --sort=name --mtime= --owner=0 --group=0 --numeric-owner -czf release-artefacts_version.tar.gz release-artefacts_version`
|
|
* [ ] Checked archive
|
|
* [ ] tar -xvf release_version.tar.gz
|
|
* [ ] cd cagebreak
|
|
* [ ] meson setup build -Dxwayland=true -Dman-pages=true --buildtype=release
|
|
* [ ] ninja -C build
|
|
* [ ] gpg --verify ../signatures/cagebreak.sig build/cagebreak
|
|
* [ ] cd ..
|
|
* [ ] rm -rf cagebreak
|
|
* [ ] `gpg --detach-sign -u keyid release_version.tar.gz`
|
|
* [ ] `gpg --detach-sign -u keyid release-artefacts_version.tar.gz`
|
|
* [ ] Upload archives and signatures as release assets
|
|
|
|
## Roadmap
|
|
|
|
Cagebreak plans to do or keep doing the following things
|
|
in the future:
|
|
|
|
* React to all issues.
|
|
* Add or modify features, which the authors find convenient or important.
|
|
* Improve the [OpenSSF Best Practices Badge Program](https://bestpractices.coreinfrastructure.org/en) level
|
|
|
|
## Governance
|
|
|
|
Cagebreak is managed by project-repo.
|
|
|
|
Project-repo is a pseudonym of at least two individuals acting
|
|
as benevolent dictators for the project by the others mutual consent.
|
|
|
|
The individuals comprising project-repo are not otherwise associated
|
|
by payment from any organisation or grant.
|
|
|
|
For all intents and purposes consider project-repo as a single
|
|
benevolent dictator for life that happens to occupy at least two brains.
|
|
|
|
### Roles
|
|
|
|
There are members of project-repo and those who are not.
|
|
|
|
There are no specific roles forced unto anyone.
|
|
|
|
### Bus Factor
|
|
|
|
The Bus Factor is a measure of how many people have to be
|
|
incapacitated for a project to be unable to continue.
|
|
|
|
The current bus factor for Cagebreak is: 1
|
|
|
|
Project-repo could still react to issues (even confidential
|
|
e-mails) and fix easier issues if any one individual were
|
|
incapacitated.
|
|
|
|
However, not all aspects of the code or release engineering
|
|
are fully resilient to the loss of any one individual.
|
|
|
|
We strive to improve the Bus Factor to at least two in all
|
|
aspects of Cagebreak.
|
|
|
|
### Governance Issues
|
|
|
|
Anyone can use the information in [SECURITY.md](SECURITY.md) to
|
|
contact the members of project-repo and bring governance
|
|
issues to their attention.
|
|
|
|
## Bugs
|
|
|
|
For any bug, please [create an issue](https://github.com/project-repo/cagebreak/issues/new) on
|
|
[GitHub](https://github.com/project-repo/cagebreak).
|
|
|
|
Fixed bugs are to be assigned a number and summarized inside Bugs.md for future reference
|
|
independent of github, in case this service is unavailable.
|
|
|
|
For other means of contacting the Cagebreak authors and for security issues
|
|
see [SECURITY.md](SECURITY.md).
|
|
|
|
## Contributors
|
|
|
|
* Aisha Tammy
|
|
* [make man pages optional](https://github.com/project-repo/cagebreak/pull/4), released
|
|
in 1.6.0 with slight modifications
|
|
* Oliver Friedmann
|
|
* [Add output scaling](https://github.com/project-repo/cagebreak/pull/34), released
|
|
in 2.0.0 with slight modifications
|
|
|
|
## License
|
|
|
|
MIT, please see [LICENSE](https://github.com/project-repo/cagebreak/blob/master/LICENSE).
|
|
|