That’s a good way to word the mission statement of Project Empyrean.
But what is Project Empyrean?
I want to, and have wanted to, make an operating system for at least two years now. Something small, portable, reproducible, discoverable, understandable.
I think that’s quite a few years down the line, if I ever acquire the skill, and the time, and the dedication to make a full operating system. But now I hold a principle that I hadn’t held then: I have to start somewhere. Before Xlambda, Empyrean was a lofty goal, but now, it’s looking more and more like a real possibility. Whereas two years ago I didn’t have the skill, or the knowledge, to get started, now I do, and it’s very likely that this time around, I’ll get the ball rolling.
Enter Empyrean Linux.
In short, to get started, I want to make a small, understandable Linux distro, along the lines of CRUX, Sabotage, Stali, Morpheus, and other similar projects. I also want a distro with a strong distinction between the base system and its packages, like one of the *BSDs, so it’s much easier to guarantee a stable boot every time.
What’s different this time around is that I also want to make the entirety of the base system configurable in Scheme, like GuixSD, but without many of its features, and by extension, its complexities. I think GuixSD is a wonderful project, and I really love the idea of functional package management and unbreakable systems, but my interests are currently situated in making small systems, and I don’t think GuixSD is small enough for my purposes.
I want a distro in line with what OpenBSD’s been doing for a few years. Out with the old, in with the less. That is also a great tagline. Of course, I don’t claim I’ll do better than any of the things I want Empyrean to be an alternative to. This will serve as a learning experiment to me, as much as anything else. I just hope it is much more than a learning experiment, and that it becomes the project that I’ve wished for, for years now.
To get started, I’m forking CRUX. I say forking because the first iteration of Empyrean will be very much like the Ship of Theseus. I’ll retrace the steps I did three years ago. Here’s what I’ve already done:
- I’ve already forked some programs I’m interested in trimming/extending. I might not yet have knowledge on how exactly I’ll do what I want to do, but I know what I want to do, and I am working towards learning what I’m missing. I hope people who do know what they’re doing will find these ideas interesting, and that they’ll join me. Among these, I forked dracut and lilo. I think I’ll be able to change dracut to fit Empyrean’s purposes, but I’m not so sure about lilo, which is why any help there is appreciated.
- I’ve created a repo with a few ports I’m interested in putting in the base system. I want bcachefs to be available, because I quite like the premise of stability first. I also ported dracut, and lilly. I will import the required packages in CRUX’s core repo sometime this week, and I’ll want to not import any packages that I think would be a better fit outside the base system.
- Next week I’ll want to get started on making an easy install process, and I want to work on the documentation too. I want Empyrean to have extensive documentation, on how to use the software, why certain decisions were taken, and what does the roadmap look like, for all the parts that are developed for/with the system.
“Minimalism” is not a good enough descriptor, or goal.
To finish off this post, this is why I thought of the phrase “Systems easily understandable by one person.” to better describe where I’m headed and what I’m trying to do. I don’t think minimalism for the sake of minimalism is a good idea. But it’s a nice stand-in.
Like Ted Unangst said, out with the old, in with the less!
If you like these ideas, join #arrowheads on freenode to discuss them, and consider helping me develop Empyrean!