Today, I test-drove an in-development operating system project that seems almost disturbingly tailored to me specifically: SerenityOS. I cannot possibly introduce SerenityOS more accurately than its own website does:
SerenityOS is a love letter to ’90s user interfaces with a custom Unix-like core. It flatters with sincerity by stealing beautiful ideas from various other systems. Roughly speaking, the goal is a marriage between the aesthetic of late-1990s productivity software and the power-user accessibility of late-2000s *nix. This is a system by us, for us, based on the things we like.
Every word of this introduction is almost surgically accurate. To someone in SerenityOS’s target demographic—someone like myself (and likely many Arsians), who grew up with NT4 systems but matured on modern Linux and BSD—SerenityOS hits like a love letter from the ex you never quite forgot.
SerenityOS isn’t Linux—and it’s not BSD, either
What that brief intro doesn’t get across is the scale of the project. You might think that SerenityOS is just a Linux distro with an unusually ambitious vaporwave aesthetic, but it’s actually an entire operating system built from the ground up. That means custom-built kernel, display manager, shell… everything.
According to founding SerenityOS developer Andreas Kling, there is absolutely no third-party code in SerenityOS. “When we started,” Kling told Ars, “we imported four or five C standard library functions from NetBSD or something like that. But those were gotten rid of over time. We’re free of third-party code now, with the exception of the build process.”
The build process Kling refers to is something you’ll need to get familiar with if you want to test-drive SerenityOS. There aren’t any actual releases at this point, and there’s no ISO file to download. Instead, you’ll need to
git clone the project onto your own machine and compile the OS from source. This produces—and automatically runs—a special SerenityOS virtual machine.
Although SerenityOS doesn’t use code from either Linux or BSD under its hood, it does borrow a couple of concepts from FreeBSD—its license (2-clause BSD), and a “ports tree” software management system similar to FreeBSD’s.
There is a catch to SerenityOS’s implementation of the ports tree, though: it does not operate within SerenityOS itself. Instead, the user builds the port on the host operating system, then rebuilds the SerenityOS image to include the freshly built port.
“It’s a Unix system! I know this!”
Although I had technically never used anything in SerenityOS before, the system felt immediately familiar. Unixlike consoles, stack traces, and hardware information blend seamlessly with simple, ’90s-era tabbed interfaces—if you’re familiar with both Windows NT and with any vaguely modern Unixlike operating system, you’ll be familiar with SerenityOS from the moment you see its desktop.
Heck, SerenityOS looks enough like Windows NT to be Windows NT at first glance. It even includes a theme system that looks and works incredibly like the ones found on late-90s era Windows operating systems. But inside the old-fashioned Start menu, simple window dressings, and aggressively plain system font are Unix underpinnings used to good effect.
In a console, a fully featured shell similar to Bash awaits. The shell has many of the system utilities you’d expect to find on a Unixlike system—including but not limited to
sysctl. If you manage to crash one of SerenityOS’s applications—and if we’re honest here, you probably will—the Crash Reporter dialog looks like one on Windows. It features, however, a stack trace, contents of the CPU registers, and environment variables in a simple tabbed interface.
My least favorite feature of SerenityOS is its current filesystem, which self-reports as “Ext2FS.” Linux’s
ext2 filesystem was pretty good for its time—it’s just that time ended in 1998. I hope SerenityOS eventually gets a more modern filesystem, with proper journaling support for powerloss/crash safety.
1990s-era performance… in a good way
The system is also fast, in much the same way NT 4.0 was fast in its day. And SerenityOS’ performance is consistent in a way that operating systems haven’t seen in a long time. For the moment, SerenityOS’s kernel is not Symmetrical Multi-Processing (SMP) aware—its special virtual machine only uses a single thread of your host computer’s physical CPU.
Obviously, a lack of SMP support will limit the system for many real-world tasks. SerenityOS is only able to get away with its single-threaded model because the entire thing was built with that expectation, but that expectation forced Kling and the contributors who came later to write exceptionally clean, cruft-free code.
The result of this single-threaded environment? Beautiful simplicity. SerenityOS can’t run any faster than a single CPU core of your host computer does—but it doesn’t run any slower, either.
Although SerenityOS is currently limited to a single thread, Kling tells us that he’s working on upgrading the kernel. “For the last two weeks, I’ve been working on multi-core support… [but] it’s still not stable enough for everybody to live on it. So far, the system usually deadlocks within a few minutes [if SMP is enabled].”