~ober/jerboa-shell
Imported from ~/mine/jerboa-shell
about
# jerboa-shell `jerboa-shell` is `jsh`: a compact shell written in Jerboa Scheme. It focuses on familiar bash/zsh-style command execution: parsing, expansion, builtins, redirection, pipelines, jobs, history, completion, and POSIX process behavior. Security posture, threat model, native-boundary notes, and release evidence are tracked in `SECURITY.md`, `docs/threat-model.md`, `docs/ffi-boundary.md`, and `docs/release-evidence.md`. `jsh` is a shell, not a sandbox. ## Build ```sh make jsh-macos ./jsh-macos -c 'echo ok' ``` The build uses `jerbuild` from Jerboa. The Makefile prefers `./jerbuild`, then `.jerboa/bin/jerbuild`, then `jerbuild` on `PATH`; if none are available it fetches the configured Jerboa release tool. The default targets build only the bare shell. To open the optional-feature menu, fetch the extras bundle and its selected dependencies, and produce `./jsh-extras`, run: ```sh make extras ``` The optional bundle currently covers 20 selectable groups, including built-in coreutils, mux, encrypted embed/pass/vault storage, SSH, YubiKey, AWS, wormhole, recording, sandboxing, resource limits, profiling, proxying, WireGuard, process watching, hardening, AWK, and sed. See [`docs/extras.md`](docs/extras.md) for the complete command reference, selection rules, platform requirements, security boundaries, and known limitations. The top-level target uses `_vendor/jerboa-shell-extras/embed` as its embed input. It does not automatically read or encrypt `~/.embed`; the extras guide shows the explicit encrypted build command. ## Test ```sh make test make test-native make test-security-regressions make audit make release-evidence make test-binary make compat-smoke ``` The Oils spec runner under `test/` measures shell compatibility. Benchmark scripts live here so speed work stays close to the shell implementation. `make release-evidence` records unit tests, native FFI audit output, SBOM manifests, and reproducibility output under `dist/release-evidence/`. Command substitution is drained concurrently and is limited to 8 MiB by default. Set `JSH_COMMAND_SUB_MAX_BYTES` to a positive byte limit no greater than 1 GiB when a workload needs a different bound. Exceeding the limit aborts the expansion after the producer has been drained, rather than hanging it on a full pipe. Interpreted development runs load `libjsh-ffi` only when `JSH_FFI_DEV_NATIVE=1` and `JSH_FFI_LIB` names an absolute, non-symlink directory. Standalone builds register the shim statically; neither mode searches the current directory or a bare library name. Development loading also rejects ambient DYLD/LD search overrides and verifies the JSH1 ABI canary. ## History Interactive `jsh` writes normal line-oriented shell history to `$HISTFILE` (default: `~/.jsh_history`). Set `HISTSIZE` and `HISTFILESIZE` to control the in-memory and saved entry limits. History recording can be disabled from startup config with the bash-style history option: ```sh # ~/.jshrc case "$PWD/" in "$HOME/mine/obersh/"*) set +o history ;; esac ``` For memory-only session history without saving a file, unset `HISTFILE`, set `HISTFILE=`, or set `HISTFILE=/dev/null`. ## Layout ```text *.ss shell source modules jerboa-src/src/ small compatibility modules used by the build support/ build helpers test/ unit, binary, and Oils compatibility tests bench*.ss shell benchmark scripts ```
recent commits
- Document local mine repository authority 9e19a43 Jaime Fournier
- Use FreeBSD Forgejo CI runner 533e866 user
- Set up Forgejo CI/CD policy b1acc71 Jaime Fournier
- Update Jerboa release references 9ee27f9 Jaime Fournier
- Update jpkg metadata for Forgejo 9ba0d83 Jaime Fournier
- fix for loop 2381112 Jaime Fournier
- Point Oils jsh tests at Forgejo 0603632 Jaime Fournier
- Fix Git branch prompt detection 14fd61d Jaime Fournier
- docs: remove jerboa-emacs restriction a717a47 Jaime Fournier
- Remove GitHub workflow metadata dd4a383 Jaime Fournier