Managed workloads are first-class objects.
A service, container, VM or agent receives a stable identity, declared resources, limits, policy and audit context.
Omarchy Server is a server-oriented Omarchy fork for serious homelabs and small on-premises clusters. It explores one administrative model for workload identity, resource access, isolation, auditing, virtualization and desired state.
Linux already provides strong primitives for process isolation, mandatory access control, resource limits and virtualization. Omarchy Server does not replace those primitives. It defines a smaller administrative model and compiles that model into existing enforcement mechanisms.
A service, container, VM or agent receives a stable identity, declared resources, limits, policy and audit context.
Administrators define intended access and resource relationships. Backend-specific configuration is generated from that declaration.
The system must answer what a workload can access, what denied an operation, and which policy rule produced the result.
Userspace policy is not a substitute for enforcement. Linux security and isolation mechanisms remain the actual boundary.
A machine must remain administrable without a cluster controller, cloud service or external identity platform.
Changes outside the managed model are visible as unmanaged or drifted state. The system does not claim authority it cannot verify.
R04 found no current requirement for a kernel fork. The immediate gate is an adversarial prototype that launches a managed workload, reconstructs credentials, cgroups, namespaces, capabilities, seccomp, LSM/Landlock/network state and open descriptors, then reports either a proved result or explicit INDETERMINATE.
Windows NT centralized resource representation and security around objects, access tokens, security descriptors and access checks.[1][2] Omarchy Server studies those durable abstractions without attempting Windows compatibility or an NT kernel reimplementation.
The public model is intentionally smaller than the implementation surface.
The initial model keeps only concepts that improve server administration. NT's Object Manager is useful as prior art because it centralizes creation, naming, lifetime and access tracking for system objects.[3] Omarchy Server applies that idea selectively at the management layer.
principalPersistent project identity independent of transient UID/GID assignment. Human-readable names remain aliases.
workloadService, container, VM or agent with identity, runtime policy, limits and lifecycle.
resourceFilesystem tree, service, socket, secret, device, GPU, VM, volume or other managed target.
descriptorDeclared rights and audit rules attached to a resource, inspired by NT security descriptors.[4]
roleNamed rights that can be assigned to principals without encoding backend-specific groups or labels.
hostIndependent machine that resolves and enforces its own effective configuration.
policy bundleVersioned configuration that can be validated, signed and optionally distributed to multiple hosts.
eventPrincipal, workload, resource, operation, decision, rule, host and backend evidence in one schema.
The first architecture test is not whether a policy can be enforced. It is whether the system can accurately explain effective authority across all enabled backends.
$ omarchy access workload:subject-a PRINCIPAL principal:subject-a HOST host:local RESOURCE filesystem:data-a filesystem.read-data ALLOW filesystem.write-data ALLOW RESOURCE network:endpoint-a network.connect ALLOW $ omarchy why workload:subject-a filesystem.write-data filesystem:data-a --live DECISION ALLOW COMPLETENESS COMPLETE GRANT descriptor:data-a / filesystem.write-data GATES descriptor, namespace, DAC, LSM, live-authority scan $ omarchy why workload:subject-a filesystem.read-data filesystem:data-b --live DECISION DENY COMPLETENESS COMPLETE DECISIVE GATE no matching managed grant # Names are schematic. The interface describes authority, not an application profile.
The first security boundary is deliberately narrow: protect managed resources and workloads from compromised workloads while making drift, unknown gates and incomplete evidence explicit. A malicious host administrator, kernel compromise or firmware compromise is outside the v0 claim.
A managed resource grants no workload authority merely because it exists or is reachable. Access is declared through typed resource policy.
Unknown seccomp, LSM, BPF, namespace or other relevant state can make an access answer INDETERMINATE. The system does not convert missing knowledge into allow or deny.
Compiled artifacts, observed backend state and already-acquired FDs, sockets, devices and credentials are separate evidence layers.
Infrastructure workloads should invoke typed brokered operations such as snapshot creation rather than receiving unrestricted mount, device or host-administration capabilities.
Full first-pass threat model: docs/THREAT-MODEL.md.
The v0 grammar is a design fixture, not an API promise. It tests whether real workloads can be described without exposing systemd, seccomp, nftables, LSM or cgroup syntax. Managed resource access is default-deny; general ordered explicit-deny ACL semantics are deferred.
apiVersion: omarchyserver/v0alpha1
kind: PolicyBundle
metadata:
name: host-r940-01
revision: 42
principals:
- id: principal:subject-a
type: workload
resources:
- id: filesystem:data-a
type: filesystem
locator: { path: /srv/example/data-a }
descriptor:
allow:
- subject: principal:subject-a
rights: [filesystem.read-data, filesystem.write-data]
audit:
denied: always
workloads:
- id: workload:subject-a
principal: principal:subject-a
runtime:
kind: service
exec: { path: /usr/bin/example-service }
restrictions:
filesystem:
visible: [filesystem:data-a]
privilegeEscalation: false
limits:
memory: { max: 1GiB }
pids: { max: 64 }
Full grammar and compiler contract: docs/POLICY-GRAMMAR.md.
The normalized event model connects declared policy, compiler provenance, observed runtime state and backend evidence. omarchy why is a projection of that trace, not a separate reasoning system. Missing material evidence produces INDETERMINATE rather than a guessed allow result.
eventHost, principal, workload, resource, operation, timestamp and source identity. Backend-native evidence remains attributable to its actual source.
gateDescriptor, namespace, DAC, Landlock/LSM, seccomp, network, device, broker or external state evaluates independently as allow, deny, not-applicable or unknown.
evidenceLive cgroup, namespace, process, ruleset, LSM or descriptor observations are distinct from desired policy and compiled artifacts.
completenessCOMPLETE, PARTIAL or UNKNOWN states whether every material gate needed for the answer was actually resolved.
$ omarchy why workload:subject-a network.connect network:endpoint-a --live REQUEST operation network.connect resource network:endpoint-a target tcp 203.0.113.10:443 RESULT decision ALLOW completeness COMPLETE POLICY bundle host-r940-01@42 grant grant:subject-a-endpoint-a restriction restriction:subject-a-network GATES resource descriptor ALLOW managed · compiled + observed network namespace ALLOW managed · observed network policy ALLOW managed · compiled + observed seccomp ALLOW managed · provenance + observed LSM / Landlock N/A no relevant gate external gates CLEAR no material unknown gate detected EVIDENCE policy bundle sha256:... compiler manifest sha256:... cgroup + namespace observed live nft ruleset observed live proc status observed live CONCLUSION New connection authority is proved for the declared resource.
Full event envelope, gate schema, live-authority edge case and worked traces: docs/AUDIT-EXPLANATION.md.
The project starts from original NT design material, checks which concepts remain central in current Windows, then maps only the surviving useful semantics onto Linux. Modern Windows Server configuration is treated as operational evidence, not as a feature checklist.
Extracted the original Object Manager/security invariants and separated them from NT-specific machinery.
The original token/descriptor/typed-rights core survived, but modern authorization composes several independent gates around it.
Treat current Server behavior as operational evidence, not a feature checklist.
Upstream Linux appears sufficient for the first architecture; the hard problem is reconstructing combined live authority without overstating certainty.
Use narrow comparisons where another system can challenge or simplify the model.
A provisional v0alpha1 grammar now tests the model against concrete workloads without committing to a final serialization/API.
Managed workloads are untrusted; host root/kernel/compiler remain inside the initial trust boundary.
Prototype the parts most likely to disprove the architecture before expanding scope.
A normalized evidence model now defines how policy, compiler provenance, live backend state and acquired authority become an explainable access result.
Detailed work program: docs/RESEARCH.md. R01: original NT model. R02: modern Windows continuity. R04: Linux substrate. R06: policy grammar. R07: threat model. R11: audit + explanation. Statements are labeled KNOWN, HYPOTHESIS, OPEN, DECISION or DEFER.
| Concept | Original NT purpose | Omarchy Server decision | Status |
|---|---|---|---|
| Object / common header | Give different resources a common management envelope for naming, protection, tracking and generic operations.[1] | Common management-level resource record plus a type-specific body. No kernel-object emulation. | KEEP |
| Object type | Define type-specific data/operations while preserving generic object services. | Each managed resource type defines its rights vocabulary and adapter behavior. | KEEP |
| Object namespace | Name selected objects so they can be discovered and shared through a common hierarchy. | Stable resource IDs + aliases. No global NT-style object namespace unless a concrete requirement appears. | ADAPT |
| Handle | Opaque per-process reference carrying granted rights; also participates in lifetime/accounting.[17] | No universal project handle API. Treat already-acquired Linux FDs/capabilities as live authority that effective-access analysis must consider. | ADAPT |
| Security Reference Monitor | Centralize object access enforcement and auditing instead of scattering authorization semantics.[18] | One semantic resolver/compiler; actual enforcement remains in Linux kernel backends. | KEEP / ADAPT |
| Access token | Represent execution security context: identity, groups, privileges and defaults.[5] | Computed, inspectable workload security context. No NT-token binary/API clone. | ADAPT |
| Security descriptor / ACL | Attach resource protection policy and auditing intent to securable objects.[4] | One project descriptor for access + audit intent; defer Windows ACE ordering/inheritance semantics. | KEEP / ADAPT |
| Standard + type-specific rights | Combine operations common to many objects with rights meaningful only to a particular object type.[19] | Small common rights set plus typed rights. Do not force every resource into rwx. | KEEP |
| Privilege | Exceptional authority outside ordinary resource ACL grants; some operations require a privilege. | Small explicit privilege vocabulary mapped to Linux mechanisms; never expose raw CAP_SYS_ADMIN as the conceptual model. | KEEP / ADAPT |
| Process / thread | Process owns address space/resources; threads execute within it. Original NT did not use a general parent/child process hierarchy.[20] | Runtime implementation facts. The administrative unit is a workload backed by cgroup/systemd; R02 uses modern Job Objects as process-grouping/resource-control prior art. | ADAPT |
| Retention + object quotas | Track lifetime and charge processes for object-backed resource use. | Leave to Linux/runtime primitives; surface only when required for truthful authority or resource reporting. | DROP / MOVE DOWN |
| Modern addition / continuity | What Windows demonstrates | Omarchy Server extraction | Status |
|---|---|---|---|
| Token + descriptor core | Still the basic split between caller context and securable-object policy. | Keep workload-context distinct from a resource descriptor. | KEEP |
| Restricted tokens | Privileges and identity contributions can be removed or constrained; restriction can only reduce the usable authority of the base context.[22] | Study monotonic restriction profiles for agents and sandboxes. | ADAPT |
| Mandatory Integrity Control | A mandatory gate can deny an operation before discretionary ACL evaluation.[23] | One normalized access result may compose multiple independent enforcement gates. Do not copy the Windows integrity lattice. | LESSON |
| Job Objects | Process grouping, limits, accounting and group lifecycle are useful independently of access-token security.[24] | workload maps to systemd/cgroup grouping; security context remains separate. | KEEP / ADAPT |
| AppContainer capabilities | Stable application identity + named capabilities can reuse an existing security model to create a default-deny sandbox.[25] | Study server-oriented named capabilities; drop package/MSIX/UI semantics. | ADAPT |
| ACL inheritance | Automatic hierarchical policy propagation solves real problems but introduces explicit/inherited precedence, flags and protected ACL state.[26] | Explicit descriptors and reusable templates first. No Windows inheritance clone in v0. | DEFER |
| SACL + host audit policy | Resource audit intent and system-wide collection policy are separate layers.[27] | Descriptor expresses what matters; host policy controls collection, retention and forwarding. | KEEP / ADAPT |
| Dynamic Access Control | Claims, resource attributes and central policy address enterprise authorization scenarios but add directory and expression complexity.[28] | Defer general ABAC/claims until explicit roles and typed resources prove insufficient. | DEFER |
| Declarative sandbox spec | Microsoft now documents an experimental launch specification that composes identity, AppContainer, filesystem, network, integrity and Job restrictions behind one interface.[29] | Useful prior art for a compiler over heterogeneous enforcement mechanisms; not a schema or dependency. | REFERENCE |
| Linux mechanism | Enforcement | Runtime introspection | Omarchy Server use |
|---|---|---|---|
| systemd + cgroup v2 | Lifecycle, grouping, CPU/memory/IO/PID limits, device attachment points. | Strong: unit/cgroup membership and controller values are readable. | Default Phase-1 workload adapter; generated state is verified, not blindly trusted.[30] |
| UID/GID + ACL + capabilities | Filesystem DAC and exceptional process privilege. | Strong for credentials/capability masks; filesystem result also depends on namespace, ACL and other gates. | Backends behind stable project principals and semantic privileges.[31][38] |
| Namespaces | Visibility and scope isolation. | Membership is strong; the effective resource view sometimes requires namespace-relative inspection. | Report as reachability/scope gates, not descriptor permissions.[32] |
| seccomp | Strong syscall restriction; filters can layer and persist across exec. | Partial from ordinary runtime state; filter mode/count are visible, complete filter meaning needs retained policy or privileged inspection. | Compiler-owned policy + digest/provenance. Unknown filters can force INDETERMINATE.[33] |
| LSM / Landlock / BPF LSM | Kernel MAC and stackable workload restrictions. | Varies by backend. Landlock denial provenance is now strong; BPF LSM can be designed to emit project evidence. | Detect active LSMs; prefer Landlock where covered; defer BPF LSM to later gaps/provenance needs.[34][35][36] |
| nftables / cgroup network policy | Strong packet/socket policy. | Rulesets are readable; tracing can identify packet rule traversal. | Bind policy to workload/cgroup identity where practical. Hostname/DNS authorization remains an explicit open problem.[37] |
| Open FDs / fdinfo | Already-acquired authority rather than a policy backend. | Partial-to-strong depending on object type. | Mandatory input to omarchy access --live; unmodeled descriptor types are surfaced, not ignored.[39] |
Each phase has an explicit exit condition. Later phases should not proceed if the earlier abstraction cannot produce an accurate effective-access model.
Define resource types, principal semantics, rights, descriptors, inheritance, audit semantics and managed/unmanaged boundaries.
Create and run managed services with declarative identity, lifecycle, resources and isolation using existing Linux components.
Add persistent principal IDs, typed resources, descriptors, policy compilation and normalized audit records.
Evaluate LSM, BPF LSM and Landlock as enforcement/audit backends. BPF LSM can attach programs to LSM hooks for MAC and audit policy; Landlock can add stackable restrictions to processes.[7][8]
Apply the same principal/resource/policy model to KVM guests and OCI-style containers without making either runtime the top-level administrative abstraction.
Add inventory, signed policy distribution, host status and drift reporting while preserving complete standalone operation.
The project is not an attempt to reproduce the Windows ecosystem or replace mature Linux subsystems.
Kernel changes are not part of the initial architecture. Existing upstream interfaces are preferred.
The project borrows selected administrative and security concepts, not Windows APIs or application compatibility.
Enterprise directory services are outside the first target. External identity can be integrated later.
The primary unit is the host and its managed workloads. Cluster orchestration is optional and limited in scope.
Generated system configuration and backend state must remain inspectable with normal Linux tools.
Root-level unmanaged changes can invalidate the model. Drift and unmanaged state must be reported rather than ignored.
This section defines what a site-building agent may change, what it must preserve, and the acceptance criteria for a production implementation. The research documents are authoritative for technical claims; this page is the canonical product and presentation brief.
The builder may replace the current HTML/CSS structure, componentize the site, introduce a static-site framework, and redesign individual cards or responsive behavior. It must preserve the project's factual status, technical distinctions, citations, uncertainty markers, non-goals, and research decisions.
Assume technical literacy. Define project-specific terms; do not explain basic Linux, virtualization, or operating-system concepts unless necessary to distinguish semantics.
Deep links must continue to open the correct view and target. Browser back/forward behavior must work.
Where the website and a research document disagree on a technical finding, the research document wins until both are reconciled.
Project identity and relationship to upstream Omarchy.
First things first, this site is not an official Omarchy site! Omarchy also has an “Omarchy Server” listed as “Coming Soon”, so please be certain to note that our project here is just a research project.
Our goal is to bring a Windows NT/Server architecture into Omarchy as a unifying layer atop the Linux kernel.
Finally, if you represent Omarchy and you would prefer to have this domain name, we'll gladly donate it.
These sources define the current research baseline. The project should add references when an architectural decision depends on them.