aboutsummaryrefslogtreecommitdiffhomepage
path: root/README.md
blob: 9058024f7d4079c85e0fc928b9872f2992f27689 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<p align="center"><a href="https://src.rosa.moe/hakurei"><picture>
	<img src="https://basement.gensokyo.uk/images/yukari1.png" width="200px" alt="Yukari">
</picture></a></p>

Hakurei is a tool for running sandboxed desktop applications as dedicated
subordinate users on the Linux kernel. It implements the application container
of [planterette (WIP)](https://git.gensokyo.uk/rosa/planterette), a
self-contained Android-like package manager with modern security features.

Interaction with hakurei happens entirely through structures described by
package [hst](https://pkg.go.dev/hakurei.app/hst). No native API is available
due to internal details of uid isolation.

Our canonical Git repository is located at https://src.rosa.moe/hakurei.
There is a mirror of the repository https://git.gensokyo.uk/rosa/hakurei.

## Notable Packages

Package [container](https://pkg.go.dev/hakurei.app/container) is general purpose
container tooling. It is used by the hakurei shim process running as the target
subordinate user to set up the application container. It has a single dependency,
[libseccomp](https://github.com/seccomp/libseccomp), to create BPF programs
for the [system call filter](https://www.kernel.org/doc/html/latest/userspace-api/seccomp_filter.html).

Package [pkg](https://pkg.go.dev/hakurei.app/pkg) provides
infrastructure for hermetic builds. This replaces the legacy nix-based testing
framework and serves as the build system of Rosa OS, currently developed under
package [internal/rosa](https://pkg.go.dev/hakurei.app/internal/rosa).

## Dependencies

`container` depends on:

- [libseccomp](https://github.com/seccomp/libseccomp) to generate BPF programs.

`cmd/hakurei` depends on:

- [acl](https://savannah.nongnu.org/projects/acl/) to export sockets to
  subordinate users.
- [wayland](https://gitlab.freedesktop.org/wayland/wayland) to set up
  [security-context-v1](https://wayland.app/protocols/security-context-v1).
- [xcb](https://xcb.freedesktop.org/) to grant and revoke subordinate users
  access to the X server.

`cmd/sharefs` depends on:

- [fuse](https://github.com/libfuse/libfuse) to implement the filesystem.

New dependencies will generally not be added. Patches adding new dependencies
are very likely to be rejected.