Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
SerenityOS: Year 3 in Review (serenityos.org)
251 points by ingve on Oct 10, 2021 | hide | past | favorite | 46 comments


One of SerenityOS goals I find as its most compelling USP is that it aims to be a "pure" OS free of any 3rd Party libs/binaries so that everything is in the project source tree and nothing needs to rely on or sync with any other upstream project, resulting in anyone can always fix & test any issue or add any feature immediately. A good highlight of this is in the Diablo port to SerenityOS:

https://www.youtube.com/watch?v=ZOzZ8R4gphE

Whether it's missing C++ APIs, unsupported lang features, missing SDL port impl, toggling kernel features - it all gets done in a 1hr sit down session to produce a shiny new Diablo port.

It was a characteristic Andreas experienced at Apple where all code and expertise for macOS was maintained in-house. This does mean everything inc. the OS, Kernel & all default Apps like the Browser needs to be developed from scratch for SerenityOS, but its Browser is making good progress as seems the SerenityOS project and development approach resonates with a lot of devs where it's been able to attract a vibrant community with a number of active contributors.

I see a number of benefits of this approach starting with SerenityOS has to be one of the best code-bases to study and learn about OS development where you can see how all components integrate together in a consistent code-base (as well as being able to follow it being developed in real-time with 100s of videos on youtube.com/andreaskling), it enables cohesive behavior and appearance with everything using the same singular library set, it's easier to implement OS spanning features like being able to capture full-system profiles in its profiler, the code-base is easier to improve and refactor with full static code analysis and no need to maintain legacy/frozen ABIs.


Something I really like about watching Andreas work is that he is so comfortable working and talking very clearly through the process. He is at least as proficient as I am when I'm just working, and with the added overhead of talking through your thought process that is rather impressive. It feels like just watching him work improves my own thinking.


That seems nice for educational purposes, but what would happen once it became popular and many applications were built on these API’s? Then it’s not a closed world where you have all the source anymore. Backwards compatibility with existing apps becomes a big issue.


That's correct however the purpose of the project is not to become the next Windows or MacOS but to always be a hackable operating system.


I so wish this could become an operating system a dedicated hacker could use full-time. I think the biggest hurdle is fleshing out their web browser, which is probably the hardest thing to build and maintain in this day and age.

But my secret second wish, is that the whole UI side of SerenityOS could be ported in its entirety to Linux. Finally, for the first time in decades, a pragmatic kernel with a pragmatic user interface. I would happily ditch GNOME, KDE, Sway, i3, Wayland, Pulseaudio, pipewire, Freetype2, Network Manager and the other myriad of components of the current Linux UI stack for something designed with passion and a coherent vision.

I am thankful SerenityOS exists and Andreas is working on it full time, well done people!


>I so wish this could become an operating system a dedicated hacker could use full-time.

Which problems with existing operating systems does SerenityOS solve?


GUI wise, I'd say focus .

All of gnome, kde, win10 and osx give me an endless stream of distractions. Lots of superficial glitter, but every few minutes something minor bugs out, which is incredibly distracting. Alerts for the dumbest things everywhere. Nanyware. Blah blah something something experience really needs looking at. Oh no updates to install before next week which requires a paternalistic message, no matter if I shut of the computer daily.

The problem isn't what to add, but what to delete. And as win95 was damn usefull with 4mb of RAM, there's a lot to delete.

I'm using KDE as least worst option.


As a recent switcher from macOS to Linux, I find KDE configurability most comfortable and focused on professional UX.

Gnome UI looks childish and overblown to me.

As an UI designer I can confirm that in recent years the trends to maximize engagement trough overuse of animation and unusable distractions is making me mad as hell. The useful and really effective design is invisible.

Or as the new generations of "tech founders" classify polished professional UI work - it is "not exciting enough". I have a different view on interfaces: Never use form over function methodology, the main goal of interfaces are to be useful and accessible.


Gnome UI is perfectly fine on a touch-driven device. Less so on a desktop, but since there are a number of viable alternatives (MATE, Xfce) that still integrate OK with Gnome components the UI itself doesn't matter all that much.


In my professional view touch UI and desktop UI must never be interchangeable or have similarities, the ergonomic interactions of using a mouse pointer are vastly different from the processes when using a finger.

UI matters for a vast majority of users and use-cases, I can live comfortably with tiling windows manager, but this is not the expected default.

That's why I stayed on Catalina for a long time, Apple has lost the focus from the past (and must reread some old HIG documentation for a change). Beauty is not a function of usability (example: the new Safari), the process of making interfaces more "exciting" and "fashionable" has his roots in marketing, not in product design.

I have tried in recent months all forms of DE's for Linux, the simplicity of Cinnamon and Mate was appealing but somewhat limiting.

KDE is modern and extendable, there are a ton of native apps and the experience of customizing the UI is more coherent and logical.

The only gripe that I have with KDE is the built-in telemetry, but luckily PureOS KDE is older implementation, so for now I am ok.:)


KDE's telemetry is opt-in. It does no telemetry by default. Why is that a concern? If you don't like it, don't turn it on?


>KDE's telemetry is opt-in. It does no telemetry by default. Why is that a concern? If you don't like it, don't turn it on?

I am newbie in this world (from a desktop perspective), I guess I consumed more GNU philosophy in latest months.:)

May be I have unreasonable expectations, but you are right, the telemetry is opt in.

https://www.youtube.com/watch?v=Gh_p91XrdeQ


I personally am pretty much a GNU person too. So is KDE. I don't think you can find many communities that care about software freedom like KDE does.

But don't worry. KDE as as free as it gets.


why not just use something like i3?


4? Reallistically, you needed 12-16MB of RAM.


Win95 actually run quite good with 4MB RAM. At that time I was using also OS/2 Warp as multitasker for networked Clipper DOS programs (two DOS windows with shared storage on the same desktop emulating two networked DOS machines) and OS/2 although advertised as running with 4MB RAM actually struggled with that amount and needed at least 8MB to be usable, while Win95 run perfectly with 4MB. In the end however I had to put 8MB and use OS2 since its DOS subsystem compatibility was a lot better than the Win95 one, which was very prone to crashes when used to develop networked Clipper software that way.

Edit: minor typo


I ran it with 4MB for years. I could use it for programming(visual basic, djgpp), page design (pagemaker), office (lotus smartsuite), etc... It could play MP3s in the background without stutter once I bought a sound card. No, it wasn't perfect, but it ran better than the win10 I use at work with 16GB.

For games, I had to reboot to dos. Doom II ran with 4MB if you threw smartdrv out, except the very last level was more a kind of slide show because it tried to load all monster graphics at the same time.


You should try a tilling window manager if you haven't already.


The constant schisms in the linux desktop community mean that it's in a perpetual state of various levels of broken. SerenityOS is breath of fresh air if you've ever tried to put a pixel on a screen without relying on an ever increasing pile of abstractions.


hard to stay consistent and coherent as your system grows. hard to control every single aspect of it.

SerenityOS is shining right now because there is a modicum of control from a few people over many aspects of it.

user land in linux is the wild west.


The BSDs manage to do it much better, in having a more cathredal like approach to the whole OS stack.


> Finally, for the first time in decades, a pragmatic kernel with a pragmatic user interface. I would happily ditch GNOME, KDE, Sway, i3, Wayland, Pulseaudio, pipewire, Freetype2, Network Manager and the other myriad of components of the current Linux UI stack for something designed with passion and a coherent vision.

All of what you have described already existed in projects like RedoxOS, Fuchsia and Haiku.

Maybe those projects (Including SerenityOS) have more in common of being a complete and unified OS than having tons of fragmented system components and projects competing against each other like what you see in the linux desktop ecosystem.


Doesn’t BSD also do that better than Linux too?

Maybe this whole confusion stems from the Linux model dominating the FOSS space when other open source OS’s don’t conform to that approach.


For the GUI stack?


If this GUI stack were ported tok Linux, it would just be another Linux DE. You want coherent, just use and stick to GNOME/KDE/XFCE/whatever; if ~3 options didn't help, ~4 won't. And once it's on Linux, inevitably you'll want to run Firefox (GTK) or wireshark (QT) or whatever, and there goes your coherence.


Yeah, and why Serenity OS?

Why not Haiku or something else?


I would say that the premise of those are quite different. While both are hobby OSes at this point, my impression is that Haiku is more of a "product" something that the developers want to provide to a general public. Serenity is written just to tickle to itches of the contributors, accepted by the judgement of Andreas. At least from the inception, I suspect that the OS was not meant to be used by people who also don't want to work on the code. But ofcourse motivations may change.

From a development perspective I think this leads to Serenity building just enough of a foundation for the application/feature someone want. When the ad-hoc code starts to smell, clean up and abstract. Then repeat.


Custom OS, custom GUI, custom browser, custom libraries. All from scratch, c++. All working. Within a few years. Very humbling.

I took a few minutes to look at the included snake game because I recently wrote a cross platform snake game using SFML and thought I could quickly get a feel for how things were done. Simply and efficiently, it turns out.


> I started building this system after finishing a 3-month rehabilitation program for drug addiction in 2018.

not something I expected to read, kudos on turning life around and being open about it


i recommend watching his video, a great and humble explanation from a smart person about his fight with addiction https://youtu.be/j3JkNGKZtqM


He quit his job to focus full time on the project. First time for me supporting a project on github, the author seems to be a good person to support https://awesomekling.github.io/I-quit-my-job-to-focus-on-Ser...


I like that one of the news posts is on exploits that were discovered. He's not trying to sweep problems under the rug.


I don't think it's at the stage yet where exploits are worried about. They are even still part of the fun, there is even a playlist on the youtube channel about finding, exploiting and fixing them. I do thing the youtube channel is the reason this project has gotten popular. It even motivated me to make two kernel PR's and drop a ruby port! It was a fun experience and watching some of the videos demystified the process.



If anyone is sponsoring Andreas please use GitHub sponsors if you can as he gets the most money through that.


He should put a direct pay to his account or bitcoin or whatever, then he would get all the money without fattening anyone else in the process.

Remember folks, GitHub IS Microsoft, and going through GitHub money you are fattening Microsoft as well.


I wonder how good it will be wrt hardware support, drivers etc. It's continuously moving target: you support a sound card, a printer or some SDR dongle, all fine and dandy, then two months later a new piece of iron is out and it needs adjustments to the drivers when not a full rewrite, all while maintaining compatibility with the old peripherals. So I wonder if SerenityOS can count on some help by Linux drivers, I mean if they could be roughly taken as a starting point to speed up native support of hardware. Otherwise it would be a really time consuming task.


Last time I checked it only ran in qemu.


Was curious does Serenity use _any_ external libraries?

For example crypto, font rendering, etc


None in the default OS, it uses existing C++ build tools to build the OS, but the OS itself (inc. Kernel, GUI & default Apps) was built from scratch. Including Font Editor (https://github.com/SerenityOS/serenity/tree/master/Userland/...), rendering and Crypto impl (https://github.com/SerenityOS/serenity/tree/master/Userland/...).

It does maintain a large number of ports you can install as add-ons to be able to use existing software, tools, languages & games, etc in SerenityOS.

https://github.com/SerenityOS/serenity/tree/master/Ports


Wow just browsing the libraries directory is impressive

https://github.com/SerenityOS/serenity/tree/master/Userland/...


It looks like they default to using recursive mutexes. In my experience those are a recipe for hard to debug deadlocks because if you acquire multiple locks, it's hard to ensure you always acquire them in the same order.


Like anything and everything in Serenity, if you think it could be better, make it so.


there's an old trick for that that works pretty well; always acquire all locks you need in alphabetical (or some sorted) order


The problem is that you can't statically confirm this via static analysis when you use recursive locks. You can only use runtime lock dep analysis to figure out when you might have gotten it wrong. Often you may not acquire locks in the same function, so it's not very intuitive based on control flow to understand whether or not you've acquired them in the wrong order.


> Can we do [a] better [OS]? can we improve security and robustness? can we prevent unexpected interactions between applications?

No, you cannot as long as you don't completely ditch all those considerations that lead to the crap that pretends to be an os.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: