Hi all,
I maintain MoobFS, an experimental, GPL-2.0 Linux kernel module: a stacked filesystem over ext4, btrfs or XFS where each memory is a file, its structured fields are typed extended attributes, and the kernel answers filter queries over them, scoped by ordinary file permissions. It was built with AI coding assistants, has one maintainer and has had no outside review, so please read everything below as a research prototype, not something to deploy.
To check that the design was not fitted to a single client, I wrote a BaseStore on top of it (namespace labels are directories, a key is a file, the value is the file’s JSON, each top-level scalar is an indexed attribute) and ran the same random operations against it and against InMemoryStore, comparing every get, search and list_namespaces. Over 18 000 operations and about 3 300 searches, with twelve filter shapes, the two agreed everywhere I compared them. Thank you for a store interface small enough that this took a day.
Three things I learnt that may be useful here:
-
About a third of the filter conditions my test generated could not be pushed down to the index:
$ne, list values, nested objects, and keys that are not simple names. The adapter evaluates those itself after reading the items. -
InMemoryStoreraisesTypeErrorwhen a range filter ($gt,$lt, …) meets an item that does not have the field, because of afloat(None). My adapter never sees such items, so the two stores differ there: one raises, the other answers. I do not know if raising is intended; if it is not, I can open an issue with a minimal reproduction. -
InMemoryStorekeeps listing a namespace after its last item is deleted. Same question: intended or not?
And the question I came to ask: in real applications, which search filters do you use? I am trying to decide what a storage layer must answer natively and what can stay in the client. Equality, ranges and prefixes on scalar fields are covered. If you rely on $ne, on membership in a list, on nested fields, or on something else, I would like to hear the concrete case.
Code and the test: GitHub - studiomoob/llmoobfs: Experimental Linux kernel module (GPL-2.0, no FUSE): a stacked filesystem layer over ext4, btrfs or XFS that adds typed xattr attributes, an in-memory index and a QUERY ioctl authorized by the caller's POSIX credentials. Intended as storage for LLM-agent memory. Research project, not for production. · GitHub (bench/client/langgraph_store.py, bench/client/langgraph-equality.py; the write-up is docs/history/0089). No latency numbers for this adapter yet, and it has not been run under LangGraph’s own test suite.
Claudio