Status & conformance · §
Project Maturity
The NFSv3, NFSv4 (4.0 / 4.1 / 4.2), and SMB2/3 servers implement the full data-path
and metadata operation set and pass real-Linux-client conformance suites. The data
path — read, write, metadata, locking — is mature and well exercised.
Reboot-recovery state persistence, Kerberos for NFS, and several advanced protocol
features are either present-but-incomplete or absent. Those gaps are listed below.
§ 01 At a glance
Four protocol servers over one pluggable async VFS. Because they share the VFS, all
of them work across every backend — in-memory, Linux passthrough, and persistent.
NFSv3
Mature
All 21 procedures, full MOUNT v3, and a real NLM byte-range lock manager routed
through the unified VFS lease layer. TCP and RPC-over-RDMA.
NFSv4 · 4.1 · 4.2
Mature core
Single COMPOUND handler across all three minor versions. Sessions, state, ACLs,
xattrs, delegations, and pNFS (flex-files). Reboot-recovery persistence is
framework-only.
SMB2 · SMB3
Broad coverage
All 19 commands, dialects through 3.1.1, signing, encryption, leases, durable
handles, change-notify, ACLs, Kerberos. Several advanced features ship disabled by
default.
S3
Object path only
Object data path works — GET/PUT/HEAD/DELETE, ranged reads, full multipart,
SigV4/V2. Bucket management, versioning, ACLs, SSE, and conditional requests are
absent.
§ 02 Backends
Every protocol sits on the same VFS, so it runs identically across all backends. A
handful of features are backend-specific and noted in the per-protocol detail.
memfs in-memory
linux passthrough
io_uring
cairn persistent
diskfs persistent
§ 03 Feature detail, protocol by protocol
Each protocol below splits into what's done,
what's partial (works with caveats), and what's
missing. This is a summary — for the line-by-line detail and known bugs, the
GitHub issue tracker
is the source of truth.
NFSv3
+ MOUNT v3 + NLM v4 locking
Mature
✓Done
- All 21 procedures implemented, no stubs
- MOUNT v3 — MNT, DUMP, UMNT, EXPORT, in-memory mount table
- NLM v4 advisory byte-range locking through the unified VFS lease layer, with cross-protocol conflict detection
- Write stability &
COMMIT with per-instance write verifier
- Weak cache consistency (wcc) pre/post attrs
- TCP and RPC-over-RDMA transports
- Built-in portmap / rpcbind
~Partial
- Blocking locks: cross-protocol conflicts ride the wait path; same-protocol contention returns
DENIED (no async GRANTED queue)
- Lock state is in-memory only — does not survive a server restart
- SHARE / UNSHARE (DOS share modes) accepted but not enforced
- EXPORT access control: advertised to all clients, no per-client restriction
−Missing
- NSM / statd — no crash-recovery lock-reclaim notification
- RPCSEC_GSS / Kerberos — non-AUTH_SYS flavors fall back to anonymous
- UDP transport (TCP / RDMA only)
- Duplicate Request Cache (v3 path)
NFSv4 · 4.1 · 4.2
single COMPOUND handler, minorversion 0–2
Mature core
✓Done
- 4.0 base — every RFC 7530 operation has a real handler on the async VFS
- 4.1 sessions & state — EXCHANGE_ID, CREATE_SESSION, SEQUENCE, RECLAIM_COMPLETE, layout ops
- 4.2 — ALLOCATE, DEALLOCATE, SEEK, intra-server COPY, RFC 8276 xattrs
- Delegations — read/write, callback channel, recall timeout (config-gated, default off)
- pNFS — MDS + DS, flex-files primary; block & SCSI layout types
- Full NFSv4 ACL model end-to-end
- v4.0 duplicate-request cache keyed by XID
~Partial
- Reboot recovery: grace/recovery framework exists but persist hooks are stubs — clients and state are not remembered across a restart
- SET_SSV accepts but returns an empty digest (SSV-secured RPC not wired)
- SECINFO_NO_NAME returns a single hardcoded flavor
- Exclusive-CREATE verifier not persisted
−Missing
- RPCSEC_GSS / Kerberos — SECINFO advertises a krb5 OID but the RPC layer only does AUTH_SYS/AUTH_NONE
- 4.2: READ_PLUS, CLONE, WRITE_SAME, IO_ADVISE, inter-server COPY
- BIND_CONN_TO_SESSION, GET_DIR_DELEGATION
- OPENATTR / named-attribute directories (user xattrs served via 4.2 ops instead)
- CLAIM_DELEGATE_PREV (delegation reclaim after client reboot)
SMB2 · SMB3
dialects 2.1 – 3.1.1 · all 19 commands
Broad coverage
✓Done
- All 19 SMB2 commands with real handlers
- Dialects 2.1 / 3.0 / 3.0.2 / 3.1.1, with 3.1.1 negotiate contexts (preauth integrity, signing, encryption)
- Auth: NTLM/NTLMSSP, Kerberos (GSSAPI/krb5 + SPNEGO), guest, winbind/AD
- Signing: HMAC-SHA256, AES-CMAC, AES-GMAC
- Encryption: AES-128/256 CCM & GCM
- Oplocks & leases (R/RW/RWH) on VFS caching leases
- Multichannel and SMB Direct / RDMA transport
- Durable & persistent handles; named streams; change-notify (inotify-backed)
- Security descriptors / ACLs with NT↔VFS mapping; rich FSCTL set
~Partial
- SMB Direct / RDMA: SMB 3.0 framing only — the 3.1.1 transform (encrypted) variant is not yet wired
- Durable handles: in-memory registry; cross-restart depends on record/recover, not a full store
- Credits granted simplistically (no real windowing)
- Byte-range locks work, but multi-lock requests (LockCount > 1) rejected
- SACL emitted empty (DACL/owner/group are real)
−Missing
- DFS, Witness protocol
- Extended Attributes (accept-and-ignore)
- SMB3 compression (context parsed, never applied)
S3
HTTP-to-VFS bridge · object data path
Object path only
✓Done
- Object ops: Put, Get (ranged), Head, Delete, batch DeleteObjects, server-side CopyObject
- Multipart: full set — create, upload, complete, abort, list
- Auth: AWS Signature V4 and V2
- Streaming (aws-chunked) uploads
- Listing with prefix; keep-alive; structured XML errors
~Partial
- ETag is not content-MD5 (it's a hash of size/mtime/handle) — clients validating ETag==MD5 will mismatch
- ListObjects incomplete: no pagination / continuation token, no delimiter / CommonPrefixes
- Multipart & CopyObject disabled on diskfs (backend bug); other backends fine
- Single root credential — key is authenticated but not mapped to a VFS identity (no per-user authz)
- No presigned URLs / anonymous access
−Missing
- All bucket-level APIs — buckets exist only as static config
- Bucket policy / ACL / versioning / lifecycle / CORS / tagging
- Object ACL, tagging, object lock / retention
- Server-side encryption (SSE / SSE-KMS / SSE-C)
- User metadata (
x-amz-meta-*); conditional requests
§ 04 Authentication, in one place
security: read this if you’re evaluating
Strong authentication (Kerberos / GSSAPI) is implemented and working for
SMB, but not for NFS — the NFS RPC layer processes AUTH_SYS / AUTH_NONE
only, and the krb5 advertisement in SECINFO is not yet implemented.
On the S3 side the access key is authenticated but not mapped to a VFS identity, so
there is no per-user authorization yet — all operations run as root.
§ 05 How it's tested
Chimera registers ~11,370 tests via CTest, run in CI on a multi-image, dual-arch
(amd64 / arm64), Release + Debug matrix. We use real-Linux-client conformance suites,
not just our own unit tests.
~11,370
tests registered & gated in CI
67.9%
of the full external SMB2/3 conformance surface (smbtorture) passes
real clients
Linux NFS & SMB clients in KVM, plus in-process binding
// how to read these numbers
CI gates on every test it runs, so the honest claim is "everything we wire up
passes." But two different things are being measured. smbtorture,
WPTS, and KVM pNFS register their entire external conformance
surface and then explicitly disable what doesn't pass — so their percentages are a true
fraction of a real-world surface. Every other suite registers only the cases it expects to
pass, so a 100% there means "100% of what we chose to wire up," not 100% of the
protocol. Both are marked below.
Suite
What it validates
Tests
Pass
smbtorture
Samba SMB2/3 protocol conformance — the full external surface, with non-passing subtests explicitly disabled per backend.
828
67.9%
KVM pNFS
flex / block / SCSI layout over a real Linux client. The 12.5% gap is all SCSI-layout — a QEMU SCSI-reservation harness limit, not a server defect.
192
87.5%
pynfs
NFSv4.0 / 4.1 / 4.2 protocol conformance, across every backend and minor version.
6,689
100% *
posix-cthon
Connectathon NFS correctness, in-process client across all backends and NFS versions.
794
100% *
posix stress / fsx
fsx, fsstress, dirstress, nametest, fstest, rewinddir — in-process.
1,390
100% *
KVM xfstests
fsstress / fsx / etc. over a real Linux client, NFS 3 / 4.x.
576
100% *
KVM cthon
Connectathon over a real Linux client.
288
100% *
KVM SMB
SMB cthon / xfstests over a real Linux client.
216
100% *
WPTS
Microsoft MS-SMB2 server conformance (.NET) — the full suite across all 5 capability modes (base, persistent, compression, multichannel, encryption), with feature-N/A and non-passing cases disabled. Daemon stays crash-free in every mode.
267
57.3%
S3 (boto3)
S3 functional behavior — put / get / head / delete / list / copy / multipart / streaming, V4 and V2.
52
100% *
unit + submodule
VFS, client, server internals, plus libevpl / xdrzcc / prometheus-c dependency suites.
~278
100%
* 100% by construction — only
expected-pass cases are registered, so this reflects coverage of what's wired up, not
the full protocol surface. A pynfs/s3-tests number comparable to the smbtorture figure
would require running the complete upstream suites without curated registration, which
CI does not currently encode.
§ 06 smbtorture, by backend
Because smbtorture measures against the full SMB2/3 surface, it's the clearest read on
real conformance. memfs leads with the complete feature set (including named
streams); the passthrough backends trail because they can't persist btime / DOS
attributes and don't support alternate data streams, so those subtests stay disabled.
Backend
Enabled
Disabled
Pass %
diskfs (io_uring / aio)
101
37
73.2%
linux / io_uring (passthrough)
76
62
55.1%
A real-Windows-client SMB suite exists on a feature branch but is not yet wired into
mainline CI. KVM suites require nested virtualization and run only on KVM-capable
runners.
// the short version
The data-path and metadata operations across NFSv3, NFSv4, and SMB2/3 are mature and
pass real-client conformance suites. The most significant gaps to know about before
leaning on Chimera in production: no Kerberos for NFS; NFSv4 reboot-recovery
state isn't persisted across a server restart; and the S3 server is
object-data-path only — no bucket management, versioning, ACLs, SSE, or conditional
requests. Several advanced SMB features (encryption, persistent handles, Kerberos) ship
disabled by default.
This page is a summary. For line-by-line operation support, current bugs, and the
roadmap, see the issue tracker on GitHub
or ask in Discord.