Cthulix: a Single System Image construction kit that is currently in development
cthulix.com
cthulix.com
Sanity at last. Default access to a filesystem is the single biggest sin of Unix. It was a reasonable thing to do in the 1970s, but not since.
>Rather than having a filesystem, you would create an ETL that had multiple inputs (one from each producer) and multiple outputs (one to each consumer).
I strongly suggest a capability based approach to have read/writeable resources... but maybe that's not really the best way...
>Future work: build a gridapp that makes it easy to create bilateral File-like things.
Ok, I'm willing to ditch random access files because this is a multithreaded parallel world. A gridapp that allows for versioning of the state of a "file" and appending mutations that are enforced in a consistent manner, or are guaranteed to become consistent at some point, would be a very good thing. Think of the really old "Paradox" database that was internally append only and versioning, but appeared to be read/write when necessary.
---
I'd be happy to help write an implementation that spoke to Cthulix in Pascal on Windows/Linux/DOS/WebApp to have a second source in a completely different source tree.
Kah thu licks - right?
Novell Netware had what seemed to be a reasonable compromise some 30 years ago, called "Trustees" - it had a permission system (ACLs, if I remember correctly), but it was magical in the sense that you only needed to manage the ACLs of the leaf nodes; If you had access to a file in a path 7-directories deep, then you would automagically see the entire path (but only files you had access to in each directory); and if you didn't, neither the leaf not the 7 directories leading to it existed for you.
A billion times easier to manage/reason about than the NT or Unix mess.
Doesn't the widespread adoption of containers (Docker/OCI/K8s/etc) solve most of this 'sin'? You can make a container's root filesystem read-only (not always done, but recommended for maximum security), so its contents is always the immutable image from which the container was started. You can also provide the container with additional read-write volumes if it requires them (such as to persist state). In systems I've worked on, most of the containers are stateless, and they store their data in Cassandra/Postgres/S3/whatever, and it is only containers which host Cassandra/Postgres/etc themselves which have any persistent read-write volumes attached.
This part of a sibling comment deeply resonated with me:
> If you had access to a file in a path 7-directories deep, then you would automagically see the entire path (but only files you had access to in each directory); and if you didn't, neither the leaf not the 7 directories leading to it existed for you.
Most apps I've worked with don't use filesystem ACLs for user-facing security.
Suppose you are building a document management system. You might store each document as a file on a filesystem–but you probably won't store "who can access what document" as filesystem ACLs. You'll probably just have a filesystem ACL giving the application access to all the documents, and then enforce user-level access in the application code, with the user-level permissions stored in the application's database.
Human-managed permissions turn into a mess no matter what you do. But enforcing them at the application level, you can make the implementation actually understand some of the business rules which drive them. In a B2B setting, you might have a business rule that for each customer account there is a list of authorised employees allowed to work on that account, plus some workflow process to get approval to permanently or temporarily add an employee to that list. A lot less mess if you build a database and UI around that business rule, than if you just try to store that directly in filesystem ACLs.
A document management system can even export the documents as a network filesystem (WebDav, CIFS/SMB, NFS, etc) – but it doesn't have to properly implement filesystem ACLs in doing so, if users want to manage permissions you force them to use the Web UI instead.
Same here! Although i believe that's a shame we have to pile layers of "security" (or holes) on top of one another. I long for better tooling for FS ACLs and journaling!
You could certainly write a Unix/Linux/Windows program to run given a set of file handles instead of permission to the whole file system.
Pipe based utilities don't really need a file system, just the pipes.
Q: "What is released so far?" A: So far, there has been no release of code.
"The principal developer signed with a commercial venture in early 2021. There will be a period of inactivity for this project."
So, I'm not sure if it is in development...
> 2. Deployment. They pass the software to another team, who are responsible for deploying it.
Use ArgoCD to deploy to K8s, and then make the developers who write the code responsible for production deployment. To deploy to production, they just get their PR approved by the right managers, and then at the appointed time click the "merge" button and ArgoCD does the rest. And part of getting approval to deploy to production, they first have to demonstrate the PR can be successfully deployed (again by ArgoCD) to a pre-production environment (pre-prod environments are isolated from each other by having a separate K8s namespace and ArgoCD application for each; and the pre-prod environments are isolated from production by putting them in a separate K8s cluster.)
I've seen firsthand that model work. What is Cthulix adding to it?
There is a section "What about Kubernetes?" – but it doesn't clearly explain how Cthulix and K8s differ, and what problems the author sees with the K8s model, and how Cthulix will avoid them. "If you use K8s like that, it will lead to the algorithms-first mess warned about early in this paper" is a very vague statement, and even supposing it were (in some sense) true, it isn't clear why the solution to that "mess" has to be a whole new system as opposed to just a different way of using K8s, or some evolutionary changes to K8s (new operators or whatever)
But the rule of thumb they tell me is: If you try to use CPUs to move data to all these GPUs, your performance is going to tank. If at all possible, you want tech like RDMA, something that throws bits directly from your filesystems to your GPUs. This will only become more important as GPUs get more capable and data hungry.
Can Cthulix actually control enough I/O to build the future of distributed computing? The approach described wants to explicitly minimize filesystem use in favor of message passing. I’m not sure how that’s supposed to be implemented exactly? but there are only a few ways to get the I/O performance you want for the big heavy GPU workloads, and this doesn’t naively sound like it’s one of them, but maybe that’s because it’s a big question mark.
A friend of mine is working on Syndicate[0], and I find it interesting. Not really an OS metaphor; more like distributed, polyglot actors with shared memory secured via capabilities. I think of it sort of like the OSI model's missing session layer.
Also, if I were proposing a distributed system to my boss, I'd probably prefer a reference to "Syndicate" over "Cthulu."
> Pitch
> (Cthulix <=> MPI) is as (Unix <=> Multics)
comes off as quite ambitious.
How is it pronounced?
I imagine most people don't know how to pronounce Cthulhu... I only learned how to pronounce it about 30s ago when I Googled it. Apparently it is not "Cha Hu L'Hu"
Exercise caution.
bummer, I was hoping for some examples
…except instead of scoring symphonies, quants algorithmically encode rules for trading Jimmy Choo future default swaps which they think will eke out more picodollars per transaction than the other funds, which are then dutifully executed by the infrastructure teams.
https://careerkarma.com/blog/how-to-become-a-quantitative-an...