Contributing
jai is intentionally small. The goal is a sandbox that a single person can read, understand, and audit in a sitting. Contributions that preserve that quality are welcome.
What we value
- Keeping it small. Every line added should earn its place. If something can be done in fewer lines without sacrificing clarity, prefer fewer lines.
- Human-authored code. jai is a human-authored project. PRs should be written by a person who understands the change — not generated wholesale by an AI tool.
- Clarity over cleverness. If a reader has to puzzle over a construct, it is probably too clever. Prefer straightforward C++23.
- Linux-native. jai uses the Linux new-mount API, user namespaces, and overlayfs directly. Portability to non-Linux systems is not a goal.
How to contribute
- Open an issue first for anything non-trivial. This avoids wasted effort if the change does not fit the project's direction.
- Keep PRs focused. One logical change per PR.
- Test manually — there is no automated test suite yet. Run
sudo ./jai bashand exercise the code path your change affects.
TODO
Development workflow details (formatting, CI checks, release process) are not yet documented. Check with the maintainer before submitting large changes.
Bug reports
Bug reports with reproduction steps are always welcome. Include:
- Kernel version (
uname -r) - Whether your home directory is on a local filesystem or NFS
- The exact jai command and its output
- Contents of any relevant config files