# oi-userland Maintainer Areas

This file divides the ~2,700 components under `components/` into responsibility
areas, each sized to be sustainable for **one person**. It is advisory: owners
review and merge PRs in their area, drive version bumps, and own breakage there.

Two cross-cutting **roles** (PR triage, build infrastructure) are not tied to a
category — they support every area.

How to read an entry:

- **Scope** — what the area covers.
- **Paths** — glob patterns under the repo root that belong to the area.
- **Owner** — GitHub/Forgejo handle, or `_unassigned_`.
- **Load** — relative effort and the nature of the work (deep vs. churn).

Sizing principle: package *count* is not load. The big categories (`python/` 699,
`perl/` 466, `library/` 384) are mostly mechanical, automatable version bumps
("wide and shallow"); the small ones (toolchain, crypto, installer) are
expertise-heavy and high blast-radius ("narrow and deep"). Areas below balance
the two. Adjacent seats marked *(mergeable)* can be held by one person if you
have fewer volunteers.

---

## Cross-cutting roles

### PR triage / release coordination
- **Scope**: First-pass triage of incoming userland PRs, label/route to the
  area owner, keep the merge queue moving, coordinate releases. Not an area —
  a coordination role across the whole repo.
- **Paths**: `*` (repo-wide)
- **Owner**: Toasterson
- **Load**: Steady, interrupt-driven. Keep separate from a heavy build area.

### Build infrastructure
- **Scope**: The framework every component depends on — make-rules, transforms,
  shared tooling, CI. Changes here ripple to all areas.
- **Paths**: `make-rules/*`, `transforms/*`, `tools/*`, `ci/*`, `components.mk`,
  `components/Makefile`
- **Owner**: Toasterson
- **Load**: Bursty but high-leverage. Do not stack onto a content area.

---

## Areas

### 1. Toolchain & developer tools
- **Scope**: Compilers, debuggers, linkers, and the build-tool/VCS userland.
- **Paths**: `components/developer/*`, `components/rust/*`
  - Core: `gcc-*`, `gcc3`, `clang-*`, `llvm*`, `gdb`, `binutils`, `golang-*`,
    Rust toolchain
  - Build tools: `autoconf*`, `automake*`, `cmake*`, `bison*`, `flex`, `meson`,
    `ninja`, `pkg-config`; VCS: `git`, `cvs`, `fossil`
- **Owner**: Bill-Sommerfeld
- **Load**: High / deep. The gcc + clang version matrix alone is a real job.
  Consider handing the **Go + Rust toolchains** to the language-runtimes owner.

### 2. X11 — server, Mesa & drivers
- **Scope**: The X server (Xorg / Xlibre), Mesa/GL, and DDX video/input drivers.
- **Paths**: `components/x11/xorg-server*`, `components/x11/xlibre*`,
  `components/x11/xserver*`, `components/x11/mesa*`, `components/x11/xwayland*`,
  `components/x11/xf86-video-*`, `components/x11/xf86-input-*`,
  `components/openindiana/gfx-drm`, `components/openindiana/nvidia*`
- **Owner**: _unassigned_
- **Load**: High / deep. The real X11 work lives here.

### 3. X11 — libraries & protocol *(mergeable with #2 or #13)*
- **Scope**: Client libraries, XCB, protocol headers, X bitmap fonts.
- **Paths**: `components/x11/lib*`, `components/x11/xcb*`, `components/x11/*proto*`,
  `components/x11/xtrans`, and the remaining `components/x11/*`
- **Owner**: _unassigned_
- **Load**: Medium / churn. Mostly tracking xorg releases.

### 4. Core libraries (GLib/GTK stack & general C/C++)
- **Scope**: The shared-library substrate under desktop and everything else —
  glib/gtk, boost, cairo, pango, imaging libs, scientific libs.
- **Paths**: `components/library/*` (everything **except** the crypto libs in
  area #5), `components/image/*`, `components/scientific/*`
- **Owner**: _unassigned_
- **Load**: High / mixed. 380+ libs; glib/gtk churn drives desktop rebuilds.

### 5. Crypto & security libraries  ⚠️ owns the OpenSSL cleanup
- **Scope**: TLS/crypto libraries and the trust store.
- **Paths**: `components/library/openssl*`, `components/library/gnutls`,
  `components/library/libsodium`, `components/library/botan`,
  `components/library/cryptopp`, `components/library/nettle`,
  `components/library/libgcrypt*`, `components/library/libgpg-error`,
  `components/library/heimdal`, `components/sysutils/gnupg`,
  `components/sysutils/gpgme`, `components/sysutils/argon2`,
  `components/sysutils/ccrypt`, `components/openindiana/ca-certificates`
- **Owner**: _unassigned_
- **Load**: Medium / deep + security-on-call.

### 6. Network & web services
- **Scope**: Network daemons, VPN/SSH, and web servers/app stacks.
- **Paths**: `components/network/*`, `components/web/*`
- **Owner**: _unassigned_
- **Load**: High / churn + security. samba, bind/unbound, openssh, openvpn,
  tor, freeradius, apache/tomcat/squid. Pairs naturally with #5.

### 7. Language runtimes & module ecosystems

#### 7.1. Chunk 1 Python and Perl
- **Scope**: Non-C (Python and Perl) language runtimes and their (largely automatable) module sets.
- **Paths**: `components/python/*`, `components/perl/*`
- **Owner**: mtelka
- **Load**: Wide / shallow. ~1,200 dirs but dominated by mechanical bumps —
  ideal for someone who invests in automation. Runtimes are the deep part.
  
### 7.2. Chunk 2 Others
- **Scope**: Non-C language runtimes and their (largely automatable) module sets.
- **Paths**: `components/runtime/*`, `components/ruby/*`, `components/ocaml/*`,
  `components/common-lisp/*`, `components/prolog/*`, `components/tcl/*`
- **Owner**: gemelen
- **Load**: Wide / shallow. ~1,200 dirs but dominated by mechanical bumps —
  ideal for someone who invests in automation. Runtimes (node/openjdk/erlang)
  are the deep part.

### 8. Databases
- **Scope**: RDBMS, KV stores, and their extensions/connectors.
- **Paths**: `components/database/*`
- **Owner**: DrLou
- **Load**: Medium / deep. postgres 14–16 + extensions, mariadb/mysql, redis,
  mongodb, sqlite.

### 9. Desktop environments
- **Scope**: MATE/GNOME and desktop apps, input methods, games.
- **Paths**: `components/desktop/*`, `components/inputmethod/*`,
  `components/games/*`
- **Owner**: _unassigned_
- **Load**: High / finicky. Sensitive to GTK/glib churn from #4. Consider
  splitting MATE from the rest if it gets heavy.

### 10. Media & codecs (encumbered)
- **Scope**: Audio/video codecs, GStreamer, players. Includes the patent/
  license-encumbered tree — owner must know its distribution rules.
- **Paths**: `components/encumbered/*`, `components/multimedia/*`
- **Owner**: _unassigned_
- **Load**: Medium / specialized. ffmpeg 6/7, gstreamer, vlc, x264/x265, dav1d.

### 11. Core system, virtualization & install media
- **Scope**: Distro plumbing — IPS (`pkg`), bhyve/kvm/qemu, the installer,
  release/ISO build, meta-packages, closed bits. The seat closest to
  illumos-gate.
- **Paths**: `components/openindiana/*` (except gfx-drm/nvidia → #2,
  ca-certificates → #5), `components/cluster/*`,
  `components/meta-packages/*`, `components/closed/*`
- **Owner**: Toasterson
- **Load**: High / deep. Natural home for the **create + boot-test install
  media** task.

### 12. CLI userland & sysutils  *(onboarding seat)*
- **Scope**: The command-line GNU/POSIX userland, shells, archivers, text tools,
  editors, MUAs.
- **Paths**: `components/sysutils/*` (except crypto utils → #5),
  `components/shell/*`, `components/archiver/*`, `components/text/*`,
  `components/editor/*`, `components/mail/*`
- **Owner**: _unassigned_
- **Load**: Wide / shallow, low individual risk. Best first seat for a new
  maintainer.

### 13. Fonts, printing & docs  *(light seat)*
- **Scope**: Font packaging, the print stack, doc toolchains.
- **Paths**: `components/fonts/*`, `components/print/*`, `components/foomatic/*`,
  `components/docbook/*`
- **Owner**: _unassigned_
- **Load**: Low / self-contained. Good for a lighter-availability volunteer.

---

## Package Maintainers
- iigs: Firefox, Thunderbird, Libreoffice
- fkink: php, Samba
- grzemba: SAMQFS

## Architecture Maintainers

SPARC: klausz65

## Category coverage

Every top-level `components/` category maps to exactly one area:

| Category | Area |
|---|---|
| developer, rust | 1 |
| x11 (server/mesa/drivers) | 2 |
| x11 (libs/proto) | 3 |
| library (general), image, scientific | 4 |
| library (crypto subset) | 5 |
| network, web | 6 |
| runtime, python, perl, ruby, ocaml, common-lisp, prolog, tcl | 7 |
| database | 8 |
| desktop, inputmethod, games | 9 |
| encumbered, multimedia | 10 |
| openindiana, cluster, meta-packages, closed | 11 |
| sysutils, shell, archiver, text, editor, mail | 12 |
| fonts, print, foomatic, docbook | 13 |
