DESOSA 2022

SerenityOS - Product Vision and Problem Analysis

The project aims

SerenityOS is a free and open-source operating system, the operating interface simulates the interface of the 90s (picture shows below).

Figure: Serenity OS User Interface

The system aims to be a modern Unix-like operating system, and supports the x86 and x86-84 instruction sets, with a preemptive kernel. Support for multiple applications on the system, such as a proprietary Web browser and integrated development environment (IDE), as well as the ability to change system themes and run simple games. 1

The creator Andreas Kling said that the initial goal of the development was to have a daily driver system of his own. As more and more enthusiasts became involved, the system went from a personal development project to an enthusiast development project.

The domain model

As a free and open-source operating system, its creators initially developed it only as a daily driver operating system. In the process, the project has attracted more and more retro OS enthusiasts to join.

For users who want to experience a different operating system, it lies in the domain of computer systems first. SerenityOS has free opensource and a great user community experience, making it possible for a person to go from understanding to running the system in half an hour, which is very “newbie friendly”.

Secondly, from the perspective of a somewhat experienced OS developer, it is in the domain of system development. Kling, the creator, provides a quality development environment for team members and other contributors involved in the project, he offers a bounty program to reward contributors for some of their excellent output, and he regularly updates the system’s progress on YouTube, adding interest and visual visibility to the project2. Over the course of many commits, these enthusiasts have communicated and progressed together to bring SerenityOS closer to a full-fledged driver operating system.[^Senenityreview ]

Capabilities of SerenityOS

Next, let us look more at the capabilities of SerneityOS. SerenityOS is designed to be a simple Unix-like operating system inspired by the user interfaces common among desktop computers in the 1990s. As the main contributor and biggest developer, Kling started building SerenityOS not for the purpose of trying to attract users or appeal to anyone other than himself. However, the project has extremely large scale that is comparable to many other well-known open source projects on Github such as Firefox and NVDA. 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, consisting of custom-built kernel, display manager, shell and so on. According to Andreas Kling, Serenity OS doesn’t contain any third-party code. That means, there is absolutely no C standard library functions.

As an operating system, SerenityOS consists of many features ranging from user programs to sysadmin tools. Although the whole list of capabilities of SerenityOS is too long to present, it is worthwhile to list a few key points:

  • A 32-bit Kernel with preventative multitasking
  • An IPv4 network stack with ARP, TCP, UDP and ICMP protocols
  • -An ext2 filesystem
  • A graphics toolkit (LibGUI) and 2D graphics libraries (LibGfx)
  • A proprietary composition window manager

Many new features are being added rapidly and Kling has the goal of eventually making SerenityOS his primary operating system, for which he needs it to be self-hosting.

For end users who have never used anything in it before, SerenityOS feels immediately familiar. At first glance, SerenityOS looks like Windows NT in particular. The Unix-like consoles, stack traces and 90s-era tabbed interface definitely brings users’ memory back to late-1990s. Inside of teh late-90s era theme system, users can find the old-fashioned start menu, simple window dressing, and aggressively plain system font.

In a console, there is a fully featured shell which is similar to Bash. The shell has many of the system utilities that also exist on a Unixlike system, including but not limited to find, grep, and sysctl. If unfortunately one of SerenityOS’s applications are crashed, the Crash Reporter would feature a stack trace, contents of the CPU registers, and environment variables in a simple tabbed interface just look like one on Windows. The file system which self-reports as “Ext2FS” is also very old, dating back to 1998.

SerenityOS is incredibly fast, and its performance is consistent in a way that operating systems haven’t seen in a long time. That is partly because SerenityOS’s kernel is not Symmetrical Multi-Processing (SMP) aware, which means its special virtual machine only uses a single thread of your host computer’s physical CPU. Although this feature may limit the system for many real-world tasks, SerenityOS enjoys Beautiful simplicity and can’t run any slower than a single CPU core of the host computer does. [^ Serenityreview ]

The context in which SerenityOS operates

SerenityOS is generally used by two types of users; the programmer like Kling himself that uses the operating system to carry out daily work as main system and old age users who love the classical system style with 90s-era aesthetic. Of course you can be both.

In most cases, SerenityOS works in virtual machine. In Windows, SerenityOS should be built using WSL2 with dependencies needed include:

  • cmake
  • curl
  • mpfr
  • libmpc
  • gmp
  • e2fsprogs
  • ninja
  • qemu
  • qemu-arch-extra
  • ccache
  • rsync
  • unzip

However, if you are really enthusiastic, it is also possible to run on bare metal. In this case, the physical hardware should be x86-compatible. SerenityOS requires a >= 2 GB parallel ATA or SATA IDE disk. Some older SATA chipsets already operate in IDE mode whilst some newer ones will depend upon adjusting a BIOS option to run your SATA controller in IDE (sometimes referred to as Legacy or PATA) mode. SATA AHCI is supported, but may not work on every controller due to bugs in the implementation. NVMe drives are supported but it is recommended to use nvme_poll boot parameter in newer hardwares as we lack MSI(X) support at the moment. SCSI, SAS and eMMC HBAs are all presently unsupported. SerenityOS currently has no support for USB but some machines will emulate PS/2 keyboards and mice in the BIOS via USB.

At present there is no real GPU support so don’t expect OpenGL, Vulkan nor accelerated video playback and encoding support. SerenityOS currently relies upon VESA BIOS extensions to provide its display output and so it only runs on BIOS-based PCs. There is no WiFi support and the only three network card chipsets are currently supported: Realtek RTL8139, Novell NE2000 and Intel e1000. The e1000 driver has only been tested with qemu and VirtualBox although it may work with NICs such as those using the Intel 82545XX, 82540XX, 82546XX or similar chipsets. The sole sound card supported is the SoundBlaster 16 ISA.[^Githubinstallrequirement]

Stakeholders involved in the project

As mentioned previously, SerenityOS is an open-source project and does not target attracting users from the beginning. Therefore, the stakeholders that participate in the project are interested in the goal of merging the 90s user interface aesthetic and power-user accessibility of the modern *nix system. Serenity is built up from scratch with C++20 standard without using third-party code.3 And from the project sponsor’s view, it is more like a playground for developers. The issue policy also indicates that the ‘target audience is its own developers.’4

Therefore there should be two general types of stakeholders, Users and Development&Operations, and in most cases, the users are the developers. The users and developers are the people who are interested in the 90s aesthetic modern system. Besides that, developers may be interested in building an operating system from scratch, OS, or software development. Through this open-source project, users can enjoy a modern operating system with a 90s aesthetic user interface. Developers can practice coding operating systems and software and learn more about them.

Key quality attributes the system must meet

To build an Operating System, the first key quality attribute it must meet is functionality. The computer should give a proper reaction when the user sends instructions from SenerityOS. It can also be seen from daily issues and pull requests that most of the discussions are about debugging or improvement instead of requesting new functions or applications. The project goal has indicated the other two attributes, Aesthetics and Usability. The Aesthetics of the user interface should have a 90s aesthetic. And power-suer have high accessibility to the operating system.

Besides these attributes, Consistency is also a key quality attribute to this project. Code submission policy is indicated in the project. Because the SenerityOS is built up from scratch without any third-party code and basically all users are also developers for the project, the code should have a uniform style everyone can understand. Code submission policy is indicated in the project.

Product’s roadmap

Andreas Kling is the author of SerenityOS, the main roadmap is a marriage between the aesthetic of late-1990s productivity software and the power-user accessibility of late-2000s *nix. 1

Unlike traditional Open-source projects, SerenityOS was mainly written by Andreas Kling himself. When asked what is the goal for SerenityOS, Andreas said: “My goal is to build a desktop system for myself to use. I’m not trying to attract users or appeal to anyone other than myself. Since I started, other people have joined the project with their own motivations, and I have no control over what motivates them. And I don’t have a plan for features/technologies/etc to implement.” 5

Although there is no clear Roadmap for SerenityOS, the community of SerenityOS has many discussions on future features and made a lot of contributions to the project on the aspect of the kernel, userland, audio, browser, cryptography, fonts, hack-studio, js, OpenGL, UI, and bare metal. Andreas Kling’s passion for developing Own late-1990s Operating System has had a great impact on other SDEs. They are willing to make contributions to make the SerenityOS more complete.

SerenityOS welcomes new features, new fonts, new games for the OS to improve the competence, 35k issues and requests will guide the project to perfect.

Ethical considerations

As an open-source project, SerenityOS can be used freely by companies and individuals, to use Serenity OS as their own operating system. The community of SerenityOS(Discord) has more than 1500 developers daily discussing this project. Also, there are a total of 35k commits,18.2k and 2k forks in Github, the open-source project is trusted by every individual who would like to use it as his/her own OS. Trust is relevant.

One of the project’s core principles is to have no third-party runtime dependencies, which the developers presume rules out using libc++/libstdc++. Not having dependencies means more development work but that work involves actual coding (fun!) not the packaging, filing upstream bugs, and so on. It can also be made suitable for use in the kernel, unlike the STL.

SerenityOS is a Unix operating system and it ought to place emphasis on accuracy, security, and privacy for users. In fact, security and privacy are important aspects of SerenityOS and many details are improved by the community. The author chose the 2-clause BSD license for SerenityOS. SerenityOS accomplishes a code of conduct to make sure a peaceful, collaborative, supportive community. Every month, the author organizes a conference for any developers to discuss the feature details. The aim of Andreas Kling(the author) is to have fun with coding and let each individual have fun with his or her own style of the Operating system. Have fun!

Reference


  1. SerenityOS. Github for SerenityOS. Retrieved February 27, 2022, from https://github.com/SerenityOS/serenity ↩︎

  2. Andreas Kling’s channel https://www.youtube.com/andreaskling ↩︎

  3. Anastasia Kazakova. Talking to SerenityOS Contributors About a Scratch-built C++ Developer’s Playground in Modern C++ Retrieved March 2, 2022 https://blog.jetbrains.com/clion/2021/11/talking-to-serenityos-contributors/ ↩︎

  4. SerenityOS Retrieved March 2, 2022 https://github.com/SerenityOS/serenity/blob/master/CONTRIBUTING.md#issue-policy ↩︎

  5. SerenityOS. FAQ. Retrieved February 27, 2022, from https://awesomekling.github.io/faq/ ↩︎

Serenity Os
Authors
Siyuan Fang
Xiaoyu Liang
Fanyuan Li
Tianyi Liu