Preferences

Hello friends! I'm the original author of SerenityOS and it's a lovely surprise to see it on the front page of HN :^)

This project has been quite the journey for me, from starting it from scratch ~3 years ago, to quitting my job ~3 months ago to focus on this full time. [1] It's also grown from a 1-man project into a bustling open source community with 475 contributors and counting.

If anyone has questions about the system I'm happy to answer them! I also have a huge library of content on my YouTube channel [2], where I've uploaded hundreds of videos of me working on the system in real time, and also monthly update videos (since April 2019) where I demo recent developments.

Our main community hub is over on Discord for anyone interested in joining development. [3]

1. https://awesomekling.github.io/I-quit-my-job-to-focus-on-Ser...

2. https://www.youtube.com/andreaskling

3. https://discord.gg/serenityos


Hello, thanks for helping make SerenityOS, it looks very interesting! I'm afraid i don't have the skills/time to contribute to development, but i'm interested to follow discussions. Is there a way to join your room from a free/libre decentralized client like IRC/XMPP?

A bridging bot like matterbridge is fairly easy to setup these days, and i'm happy to provide free hosting for it (on a small volunteer-run infra) if for some reason you wouldn't know where to host it. I'm always a little sad to see amazing volunteer projects organize on Facebook/Discord ;)

Fantastic work on SerenityOS and great videos explaining your progress. My main complaint is that you are solving many of the same problems that Haiku is also struggling with (such as slow git checkout speed) while building a '90's era C++ based operating system. There's a good chance that your little OS may beat ours in the end. You could have built a great C++ OS on top of Haiku instead but you went your own way with SerenityOS which is valid. You may have gotten discouraged by the sometimes thorny Haiku community development process anyway.
Hi Andreas,

It's astonishing how much you've achieved with SerenityOS. The sheer amount of high-quality YouTube videos explaining the process is unprecedented. Keep up the good work!

Inspiring work. When you started working on Serenity it had a floating dock and macOS-like menu bars. Now it looks more like Windows 2000 in style. What made you switch to this design? Familiarity?
I removed the global menu bar after realizing that it's incredibly tedious to use at large resolutions. It made some sense at 640x480 and 800x600, but at 1080p and beyond, you run into a great deal of mouse travel between a window and its menu bar.
Travel distance is not the right metric. The question is how easy is it to acquire the desired menu as a target and select it.

https://en.wikipedia.org/wiki/Fitts%27s_law

Putting the menu bar at the edge of the screen effectively makes it an infinite sized target so it is much easier to target and select. Menus at the top of a window are easily overshot and missed. Travel distance is easily solved by appropriate acceleration in the pointer driver.

I much rather have my browser tabs there as I need to switch them much more often than accessing the menu.
> but at 1080p and beyond, you run into a great deal of mouse travel between a window and its menu bar.

1. Somehow this feels Okay on Mac.

2. You don't actually have to travel the mouse if you use hot keys.

3. The coolest thing the global menu system can give is application-agnostic menu searching.

3. can be achieved without a global menu. Menus just have to be registered with a global API.
Obviously. But I doubt app authors will bother registering menus with a global API if the global menu is not a platform standard every user expects them to follow (which is how it is in the Mac world).
If the speed and acceleration is correctly configured, the mouse doesn't have more travel to do at a higher resolution.
The DPI is also relevant. I find the global menu fine on my 13" MacBook even though it's 2560x1600, but it can be a bit tedious on my 28" display when I have multiple applications open side-by-side.
The biggest downside of the Mac's global menu bar, to me personally, is that sometimes I lost track of what the active application is at the moment, and e.g. look for menu options for Chrome, can't find them, look to the left, and discover that the menu bar is for Terminal. It doesn't happen often, but often enough, and very annoying when it does.

With a menu bar in each window, there's very little chance of this kind of confusion.

The trade-off for the mouse travel is only needing to align the click on the X-axis.
Exactly: if implemented right and there's no gap between the menu and the top of the screen where the cursor does nothing, then you can just mostly jam the mouse in the general direction of the menu item.

Notably, Microsoft managed to bungle this initially in Windows with the task bar: there was a one-pixel gap between the buttons and the bottom of the screen, so you had to aim for the buttons or to readjust the cursor each time. (Though personally I find the downward motion more awkward anyway, both because the wrist action is weird and because the wrist and the wrist support are in the way.)

That's only one way. Don't forget about the return trip.
A minute of silence for Ubuntu's unity, where they completely solved top bar UX by having the option to have it in the window title bar. God I wish they hadn't abandoned development on it.
Technically gnome expands on this, allowing you to put even more stuff in the top bar.

But yeah, I miss unity too.

I really prefer the ubuntu way to the Gnome one. Currently, very few actually productive apps use the gnome 3 way, and it's not nearly as standardized across Desktops as the menu bar is. On top of that, menu bars behave the same way across all applications. You click them, and get corresponding actions and menu items you can read and skim through. The Gnome 3 way is a lot less unified, because you'll have to decipher icons and guess at what they do ( save for the simple ones like a +).

This is extra frustrating to me since I absolutely love everything else about the modern Gnome UX, but the refusal to bring in a top menu bar or at least integrate it for powerful apps like gimp, vscode or blender stings and makes it so many times you have 3 top bars wasting vertical space in maximized apps when it could be two or even one.(Activities-button bar, Window title, GIMP menu bar)

This makes a lot of sense. I wish Apple did this, too.
>Now it looks more like Windows 2000 in style

It looks like FVWM95 to me, which was supposed to look like Windows 95.

http://fvwm95.sourceforge.net/screenshot-full.gif

Andreas, I love your videos. You have clearly managed to develop a very friendly community. I like how pleasant and accessible the community is! I am sure you guys will go very far and I look forward to using Serenity OS on a daily basis.
It's been really amazing watching serenity progress over the years.

I once tried porting Ruby to Serenity by watching your other porting videos but I got stuck on pthread errors.

Perhaps I'll try again sometime

Ruby would definitely be a fun port to add to our roster! The SerenityOS pthread implementation has improved substantially in the last year, so you might find it easier to get things working now.
I love the project and have it bookmarked. Your progress has been remarkable! I'm not sure what I'm going to use it for yet, but I really want to for something!
Is it possible to compile and run existing unix programs ?
Certainly! We have a growing library of ports [1] that you can build with a single command to add 3rd party software to the system.

Note that unlike many other operating systems, SerenityOS aims to be completely free of 3rd party software in the default install. So we build everything ourselves, all the way from the kernel to the web browser. It's great fun!

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

Is the hostname "courage" in the screenshot a dig at Apple's infamous "courage" comment when they removed headphones from the iPhone?[0]

[0] https://www.theverge.com/2016/9/7/12838024/apple-iphone-7-pl...

Most likely a reference to the word in the serenity prayer, which is what SerenityOS is named after (Andreas mentioned it a few times in his videos).
That's right, the system name and its default hostname are both references to the serenity prayer. :)
I have seen the screenshots: I love it! It looks practical, a work-oriented environment.

But not the font - too rounded, too jocular (I must have seen it a million times, but with distance it is not convincing). I remember having remained ecstatic with some thick versions of Futura on the Amiga OS in the mid nineties, maybe you could make some test.

By default, we have Liberation Serif and you just have to drag in TTF fonts into /res/fonts to make them usable for the system font. So it's not hard to change many parts of the visuals if you don't like them.
Can LibGUI be used independently from SerenityOS, much like we do with wxWidgets and Qt?
https://github.com/jcs/serenity

jcs@ from OpenBSD it's trying to port Serenity OS' GUI to OpenBSD. I would like it. I use CWM, but sometimes using an environment from my teenage days make me feel relaxed.

I love your content, really inspirational! What are your favorite resources for learning about the variety of topics you've tackled, from drivers, to cryptography, to compilers?
In most cases: whatever specification document exists for the particular thing I'm trying to do.

For things that are more open, like API's, I like to look at what mature API's that do what I want to do already look like. And then work backwards from that. :)

Is there already a Qt version available on SerenityOS, or did anyone plan to migrate it?
There's a port of Qt 6 in the works (not yet merged) here: https://github.com/SerenityOS/serenity/pull/9362

While hackish, it does look pretty promising: https://twitter.com/linusgroh/status/1426904775623385095/

That's cool, thanks for the links; I probably would have migrated Qt5 thought because it is much more stable and battle tested and uses C++98 which likely avoids many linker issues.
Qt6 is built with CMake which I feel way more comfortable with compared to the configure script from Qt5 (actually, I probably wouldn't be able to do this with just configure).

However, most of the code I've changed is used in the old buildsystem as well so somebody could possibly reuse what I'm doing in a Qt5 port. I'm not planning to do that though, Qt 6.2 will be perfectly good for my personal and selfish needs. :)

Thanks; I assume it's a challenge anyway.
SerenityOS widely uses modern C++, so I'd assume there's little point in restricting yourself to old C++ when porting a library.
>> modern C++

Well, according to Stroustrup himself C++98/03 is considered "modern C++" (see e.g. https://www.stroustrup.com/DnE2005.pdf ); and I can confirm from personal experience that C++98 and STL were a big step compared to what we had before. C++11 and later have some advantages, but nothing I couldn't live without (personally I don't consider policy based design the way to go). Actually Qt itself nicely demonstrated how to do perfectly well without e.g. move semantics.

Qt5 switched to C++11 with 5.7.
But it's not mandatory, is it? Anyway, I would likely use the 5.6.3 version which was the last with LGPL 2.
What typeface did you use? Looks great.
This is a beautiful project, and you are a most gracious host. I get a strong Bob Ross vibe.

I would be happier following if discussion happened on an open protocol like Matrix, rather than the wholly proprietary Discord.

Port Nethack and Slashem. And Frotz, but Frotz it's trivial to port.

Ah, NH and Frotz are already in ports, cool :D.

Then: https://github.com/BarclayII/slashem-up

This item has no comments currently.

Keyboard Shortcuts

Story Lists

j
Next story
k
Previous story
Shift+j
Last story
Shift+k
First story
o Enter
Go to story URL
c
Go to comments
u
Go to author

Navigation

Shift+t
Go to top stories
Shift+n
Go to new stories
Shift+b
Go to best stories
Shift+a
Go to Ask HN
Shift+s
Go to Show HN

Miscellaneous

?
Show this modal