I have always loved messing around with operating systems and desktop environments. I believe my first graphical operating system was AmigaOS. In the decades since I have worked through various Windows versions, every version of macOS since 7.0, different Linux flavors and combinations, and many other small niche OSs I have forgotten about in a sea of windows and menus.
In an alternative (maybe future?) life, I would like to have created fictional user interfaces for movies, TV shows, and games. One of my favorite books is "Make it so" which draws comparisons between interfaces in science fiction and real interfaces.
What is or was your favorite operating system? Let us know using this writing prompt.
I first heard about SerenityOS via a news item on the Changelog. They mentioned that a handful of open-source programmers were working on an alternative browser and browser engine, Ladybird. This is an exciting prospect to me as I am concerned by the Chromium-based browser hegemony, and there are few other options that aren't tightly controlled (WebKit) or slowly vanishing (Firefox). Ladybird doesn't pretend to be fully featured or ready yet but is developing quickly.
Then as I dug into Ladybird, I discovered it was a browser designed for an equally unique operating system, and I was intrigued! To clarify, Serenity isn't another Linux or BSD skin. It's something built from the ground up but heavily inspired by modern and classic OSs alike. It aims to be a fully-functional and usable OS for day-to-day usage.
In this post, I look at building and running Ladybird and SerenityOS on my M1 MacBookPro. Using Apple Silicon posed some complexities, but not too many, and the project's community is helpful and communicative when you experience problems.
Initially built as an experiment in creating a browser with the SerenityOS HTML libraries, recently, it grew into something that could be a new cross-platform browser option.
It uses the Qt UI library, so it doesn't look completely cross-platform but is usable on all platforms that support Qt and will mean there's plenty of scope for further enhancements.
I had no issues withfollowing the build prerequisites and instructions for your platform of choice. Since version 6.2, Qt supports Apple Silicon, so none of these presented an issue to me. Only that I had to install Xcode. There was a point where just installing Apple's Command Line Tools sufficed, but I find that I increasingly need tools that only Xcode provides.
The build steps take a little while, and then the browser should open. The browser's initial focus was to help people debug applications they were building with Serenity's HTML libraries, so there are a lot of debugging tools available, but not too much for end users yet. I initially experienced a font rendering issue, likely due to my Retina screen, but a question in the Serenity Discord server got a quick response (this is specific to macOS).
Right-click on the built binary in Build/ladybird and open the Contents/info.plist file (probably in Xcode, but any editor will do. Change the value of NSHighResolutionCapable
to "NO" and relaunch. The text rendering still looks a little odd, but it is readable.
I noticed that Ladybird doesn't render audio or video. Whether this is because it hasn't yet implemented that feature of HTML or due to licensing issues, I am not sure.
Building and running a browser is one thing, building and running an entire operating system is something entirely more complex. As Serenity is designed for X86_64 systems, this also means that I, as an Apple Silicon user, need to run it in an emulated environment. Fortunately, as Serenity is an entire OS, the community generally assumes you want to run it in a virtual machine and has already provided steps in the run scripts to use QEMU. With a couple of extra steps, you can get this working when running on Apple Silicon, too, albeit with something of a performance hit.
First, I followed the macOS build prerequisite instructions, and for Linux users, there are different prerequisite instructions. Then you can return to the general build instructions. These all worked fine but took a long time, which is reasonable for building an operating system.
Initially, running Serenity failed at the QEMU stage, and I had previously experienced some issues with QEMU for a general macOS virtualization and emulation article I am working on. However, another quick response in the Discord server and I had a solution.
In run.sh on line 256 (at the time of writing), add the following:
-machine pc-i440fx-7.0
That whole block defines the QEMU virtual machine Serenity will use, and "pc-i440fx-7.0" defines a particular PC configuration. After adding this, running Serenity worked. It's laggy due to using an emulated processor, but only slightly, with a second delay each time I clicked something. Not usable on a day-to-day basis, but acceptable for testing purposes.
Serenity definitely has early Windows UI vibes but with a Linux mindset. There is no official package manager, but ports are available to build. Instead, it bundles a lot of common applications with the OS build. There's a code editor, a browser (not Ladybird), games, and more.
There you have it. With a few tweaks and a lot of waiting for downloads and builds, you, too, can run a completely new and unique browser and operating system! I am not entirely sure what the end goal for the Serenity project is, as it started as something for a passion project for the main maintainers and grew into something bigger. That's one of the things I love about the project. It's created entirely by people enjoying the process of creating something they are proud of, and the open-source world needs more projects like that.
It’s hacktoberfest month, if you love open source projects like SerenityOS, tell us about your experiences contributing to open source using this prompt.
What is or was your favorite operating system? Let us know using this writing prompt.