I consider him a mentor and his approach to software is something I really resonate with. He has a keen focus on software quality but understands he can't make everything perfect in one sitting. This approach helped me get away from decision paralysis in my projects and at work.
This isn't even mentioning how much I've learned about software in general from his videos. Whether it's debugging kernel bootstrap assembly, porting doom, writing a live feedback GUI editor, implementing syscalls, to messing around with the dynamic loader. He's really got a video for it all.
And he tackles each video with such clarity and careful consideration. I really can't speak higher of the man.
Ed: i really enjoyed the video, but I feel it could have been even better (and shorter) if he used a proper debugger for the second part. But I don't know if that is available in the os.
The more I use a debugger, the more I realize I should use a debugger, and the earlier I should use a debugger.
Advice/directions to start early with a debugger might be the best part of Zed Shaws "Learn C the hard way". Eg:
https://github.com/zedshaw/learn-c-the-hard-way-lectures/blo...
(not a full featured chapter, but note that this is fairly early - exercise 4).
On a related note, it appears Shaw doesn't use the/any debugger at all in the ruby book, which is frankly quite crazy - ruby has great debuggers and repl. But that's a digression.
For a blog post that illustrate how one might do "debug driven" (or "debug first) development, see: https://nikhilism.com/post/2021/experiencing-smalltalk/
(Smalltalk and lisp does this very well - you can't AFAIK quite go that far with c++, but it's what all systems should aspire to, as a baseline (70s debug experience) ).
Eventually, I learned to write code that was so obviously correct and had such good error messages that I haven’t needed to use a debugger in a long time.
In fact, I don’t even know how to invoke a debugger for most languages I know.
Edit: The other good trick is to write your code so that it keeps enough state on the heap to extract useful information from core dumps. For instance, you can keep global references to lists of state that helps track issues down, and make sure they work as expected in -O3 builds. I have definitely played that game in the past.
Incidentally Linus doesn’t use a debugger either.
Actually that was were we were going to before Java took over the stage.
"Lucid Energize Demo VHS 1993"- https://www.youtube.com/watch?v=pQQTScuApWk
https://dreamsongs.com/Cadillac.html
IBM also built on those ideas for the 4th release of Visual Age for C++.
http://www.edm2.com/0704/vacpp4/vacpp4.html
https://books.google.de/books?id=ZwHxz0UaB54C&pg=PA206&redir...
Normally, I can't focus longer than 5 minutes on programming videos, but Andreas's are fantastic to watch! Porting Diablo was just inspiring to see, missing a syscall? No worries, we'll just implement it!
https://www.youtube.com/watch?v=KehSJ_fdTxU
It has a tour of features for SerenityOS... They have built an impressive amount of stuff at an incredibly high pace.
Anyways I always told myself I should chip in for all of the great content over the years and so now I've joined your Patreon - here's to hoping more are able to as well and you can continue living the dream!
With all the FAANG and the Leetcodes and promotions and L6 - L7 TC and all of this nonsense, true hacker spirit and the fun of just building cool stuff with technology has gone from the hacker space. In fact, the hacker space is actually shrinking.
Projects like these and people like Andreas Kling, are a beacon of hope and light during these troubled times.
May more people be inspired with this and commit to the path of a true hacker.
Just curious - what have been the negative effects you've found of the hacker space shrinking? And what reasons do you think account for it shrinking?
Now you can't take a step without hearing people talk about how they are joining Slack or whatever with great comp as a Team Lead and building slow as hell software.
SerenityOS: Writing a Full Chain Exploit - https://news.ycombinator.com/item?id=26115141 - Feb 2021 (9 comments)
Introduction to SerenityOS Programming - https://news.ycombinator.com/item?id=22479132 - March 2020 (43 comments)
Pledge() and Unveil() in SerenityOS - https://news.ycombinator.com/item?id=22116914 - Jan 2020 (28 comments)
SerenityOS: From Zero to HTML in a Year - https://news.ycombinator.com/item?id=21212294 - Oct 2019 (52 comments)
SerenityOS – a graphical Unix-like OS for x86, with 90s aesthetics - https://news.ycombinator.com/item?id=19986126 - May 2019 (179 comments)
I just watched a couple of your video on participating in Open Source - like https://youtu.be/GU_ISkNml-A - and just read a ton of really nice things about you below and read your story.
And honestly I really have no idea how SerenityOS would relate to me or my company – but I do know that everything under the hood of our hosting and our clouds is Open Source.
So for sure I can say for just being an Open Source champion and an all around nice guy, for the next year at least, count on me personally at $100 a month (just did it in Github) and my company InMotion Hosting for another $100 month (just did it on Patreon).
Open Source constantly struggles with needing super talented professional but also struggles on how to make sure they make a good living. I know $200/mo isn't a lot when it comes to life, but hopefully it helps you know others out here believe in this kind of work and taking this kind of chance!
One of the few times lately I've woken up, looked at the internet and felt good about being a human being.
Light grey, rectilinear, clear delineation, all contributed to being easy on the eye and functional.
Glad to see it make a comeback.
I never liked Windows NT aesthetics-wise. Personally I find the Windows Explorer ugly and I don't like the Start menu either.
I was hoping Serenity looked a bit more like Macintosh System 7 [0], NeXTStep [1] or BeOS [2]. So I was kinda disappointed when I visited the site.
---
[0]: https://en.wikipedia.org/wiki/System_7
It's a good idea to keep the chrome be chrome-like so color can be reserved for meaningful elements (like red for warning, green for safe, blue for selection etc.).
Notice that although end-user apps are all colorful and fancy these days, that most pro apps have remained very conservative, erring to light or dark gray and using color semantically only (think photoshop, 3dsmax, autocad etc.). This tells us something.
Windows until recently could be reskinned to look like Win2K, though I doubt that Windows 10 still can.
I had genuinely freaked out when I rebuilt the system just after Andreas moved it to be more Windows-like: I ran Serenity browser and in the first moment it looked eerily like an old-school Internet Explorer.
Win2k brought the NT kernel to the masses, which was a huge improvement. True multi-user support, for starters.
Versions 8 and 10 may be even better, engineering-wise -- 10 certainly crashes or hangs even less frequently than 7 -- but since they won't let you you fix the crappy GUI any more, their usability suffers much more than the increased stability can compensate for.
___
[1]: Pretty much like Vista, with that super-annoying "Glass"(?) transparency bumf as default... I think.
[2]: This, too, was whittled down over time. In XP, and I think in Vista too, you could set window border width to any value down to and including 0 in TweakUI. By W7, you needed to edit a Registry value to get this below 1.
I hope you are aware, that this is highly subjective?
(and maybe nostalgia related?)
Because I don't know any person who likes it, who didn't use it back then a lot.
edit: unsurprisingly notaware it seems. I advice to make a test : ask any person who did not use this aesthetic back then, and see if you find anyone who likes it
otherwise each to his own
Also, as mentioned previously, it's really not that hard to build it (even if you run Windows thanks to WSL 2). People are very willing to help you, and most of it is just waiting for the toolchain to compile (custom gcc and the likes).
Graphical Unix-like operating system for x86 computers.
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.
> Current hardware support is extremely limited. [...] x86 [...] Most successful hard disk installations have been on Pentium 4 era hardware [...] 2 GB parallel ATA or SATA IDE disk [...] no support for USB but some machines will emulate PS/2 keyboards and mice in the BIOS via USB [...] having real PS/2 input devices is recommended [...] A minimum of 128 MB RAM and a Pentium III class CPU [...] No GPU suport [...] VESA BIOS [...] No wifi [...] only three network card chipset [...] The sole sound card supported is the SoundBlaster 16 ISA
The HW compatibility list [2] is pretty short also.
[1] https://github.com/SerenityOS/serenity/blob/master/Documenta...
[2] https://github.com/SerenityOS/serenity/blob/master/Documenta...
The only other effort like that has been on my mind for a long time is bcachefs that is mostly churned on by a single developer slowly making progress and aiming high.
I could only wish the very best to people and projects like this!!
Programming has become my purpose and the thing that brings me joy. Unfortunately, they way I have to program at work really sucks the joy out of it. I would gladly take a pay cut to be able to work on things and in a manner that bring me joy again.
I haven't written something for fun since high school. 22 years ago. But I've been a professional programmer ever since.
Edit: Oops, didn't see the "open source" clause. So Trident, EdgeHTML, and Presto don't count.
All of that being said, it all depends on your expectations. You can totally make a browser that is capable of going to web forums and posting on Hacker News, browsing the SerenityOS website and maybe even Wikipedia for instance. If you want to build something that supports pre-2005 HTML/JS, that's probably quite feasible.
There is no rule that says a "browser" must match Google's in-house Chrome or its outsourced Firefox (all salaries of Firefox developers are currently paid with money from a deal with Google).
Look at how many browsers exist already for Gemini. How many were funded by advertising. Probably zero. The multi-million dollar corporations have a vested interest in keeping the notion of "browser" so complex that independent authors cannot even contemplate it.
Running this on real hardware would be great. Future weekend project...
I love it. Good luck.
[1] At some point, I probably have to do bitmapped text, but I'm trying to keep my scope narrow, and graphics aren't for me. :)
Having watched this project for a bit it probably will gain an ARM port in the next year or two.
Since there is already a emulator, it will probably gain the ability to run x86 serenity OS apps at some point after that.
What are you looking for that those aren't covering?
I mean, If I want to build say a fully autonomous portable software defined radio that boots in a handful of seconds straight to its GUI on a very small board, I'd have a hard time doing that with a full Linux distro, no matter how optimized it is, since it still is a full UNIX-like OS with all the bells and whistles that would make it runnable on a supercomputer. I think that those small OSes could potentially fill a gap between smaller things such as no OS at all or smaller ones such as FreeRTOS and complete Linux systems, but to really appreciate them they should also run on hardware such as ARM, RISC-V, etc.
They are too big, and well established projects.
I cant just plop down over a weekend and make some kind of meaningful contribution. Most of the low hanging fruit is already dealt with. Those are great systems to work with, or if you want to build on top of. Not that great if you just want to hack on core system.
It's not that you can't because people definitively are. But expectations are bigger, scope is bigger, you need to keep multiple architectures in mind, people will use it on all kinds of hardware. You need to coordinate with dozens or more people.
Everything takes more time.
More like a love letter to Windows 95 :) It doesn't really have much in common with the Unix GUIs available around that time, which were mostly Motif-based (think FVWM, CDE etc).
In fact it looks so Windows-like (including the applications) that my first impression was that this was another go at making something like ReactOS. But clearly it isn't.
It looks nice though I was never a big fan of the W95 UI. I'm interested to see what it's about. I'll give it a spin.
PS: Fair play for being so open about your addiction. It will help other people face the problem too.
Too many elite programmers are total jerks!
Also, there's the sociological fallacy of assuming the biggest jerk must be the most talented, when it may well be a façade to impress people. There are some talented jerks, but all the talent in the world doesn't matter if no one will work with you.
PS: Shout-out to Steve Kablink for being awesome.
no, this is not a hate comment, but a sad one, as rarely people ask why so many opensource projects are led by single person, and very rarely by more than 3 active developers. maybe it has to do with the fact that arrogant top-notch jerks also like to showoff as they expose narcissistic traits and opensource is a good venue to do so.
perhaps also because is difficult to argue with total jerk (have you tried). or convince him/her/they/them that your not-so-up-to-the-standard code is still worth, and that in reality most of the code running the world is a total mess (for various reasons) but still runs (for various reasons).
the gift to be able to work with nice people that also develop nice code is close to blessing.
Another aspect is that in a lot of disciplines, a certain level of maniacal persistence increases your chance of success. To take the "mythical" 10k hours to mastery, it's a lot easier to get to 10k hours if you're not spending time getting in 10k hours of socialisation.
I say this as someone who myself would much rather code than spend time socialising most days - it's certainly not meant to imply that everyone introvert or who spends most of their time coding are assholes (that'd implicate myself...), but that there's a level of correlation between being good and spending lots of time practising and not spending as much time thinking about social niceties, and not everyone manages to strike the right balance.
- https://github.com/sponsors/awesomekling/
- https://www.patreon.com/serenityos
- https://www.paypal.com/paypalme/awesomekling
(source: https://awesomekling.github.io/about/)
Programming in assembly is like playing with Legos. Last year I started creating my own pet OS in a Bochs virtual machine, compiling with nasm. Created the boot loader and UI, but then realized what I really wanted to implement wasn't the low level layer.
For that reason I placed the project aside and moved to the highest level, creating a distributed command-line console in Javascript that connects to Node.js based servers. If I ever complete my dreamed OS then I can either translate it into assembly, or build a JS interpreter.
At this point the console allows creating programs with UI controls, launch processes without blocking the console, and terminating them just clicking a button, as well as connecting to other servers to perform tasks.
It's nice that he's able to indulge in this kind of hobby programming, but he must have an incredibly generous and understanding family. Clearly he can hold down programming jobs at major tech firms and could therefore give his family a much higher quality of life than $2k/month will bring, but chooses not to. Well, OK. I'd like to write an OS too, but my family has slightly higher expectations ...
We just need good, legible displays. And modern tech delivers. But the software needs to match.
I need to get my mental space together (from the ADHD mess that it currently is), and start working on some of software engineering projects/goals.
I really hope I can.
Of course this can be easier to do in your personal life than in your work life; often at work someone else is setting the goals...
On the other hand, maybe I'm reading way too much into a couple sentences from a stranger on the internet and this doesn't apply to you...
There is a popular book that talks about accepting and embracing life as a dabbler and explorer called Refuse to Choose. (Personally I wouldn't buy it because then I would just feel bad about not reading it, but my wife told me about some ideas in it and it seems reasonable...)
Checked out his youtube channel and the video on porting Diablo to SerenityOS in an hour is pretty interesting to watch if you've ever wondered what its like to port software.
i've reed a bit of the faq and it seems Andreas originally thought about using C and then realized it wasn't a good idea.
Any opinion or more infos on that point ?
Watching even half of one of the videos, it's clear that Andreas is thoughtful individual with a talent for explaining things, who has managed to gather a vibrant community around him. This is such an inspiration that I headed right on over to patreon and signed up, too :)
OS/2 with C/Set++, Motif++ on UNIX, BeOS, Symbian, Windows with OWL/VCL/MFC, Mac OS with MPW/PowerPlant, Copland (granted this one went nowhere).
Then FOSS UNIX with C everywhere as part of GNU manifesto, the Java million dollar push happened, and the rest is history.
Just don't be reluctant to delete code when its time has come, and it can continue improving indefinitely.
The monthly progress videos are also nice in that regard.
Apart from lack of coo-processor (which I understand), I do not understand why nearly ALL modern operating systems(Including Linux since 2.4 I believe) are hard-coding the kernel to not boot under 4/8 MB of RAM, even if it could in theory.
Why there is hard-limit of 4, 8, 64 MB of RAM in many kernels of various operating systems?
Is it fail safe "just to be safe" or because there some internal routines, vector tables that REALLY requires 4MB ram to work?[memory partitions/blocks ?!]
I asked the same question here:
- https://news.ycombinator.com/item?id=26979499 [Why Linux requires 4MB of RAM no matter of kernel size?]
SerenityOS is an inspiring from scratch grassroots OS effort which plans to build the entire POSIX OS, Kernel and core Apps from scratch, one of the Apps their is their LibWeb browser engine complete with their own LibJS JS VM which already passes the ECMAScript test suite. One of its USPs is that the entire OS is contained within its single source tree where anyone can make changes to its code-base and instantly reboot the OS in seconds with the changes, never seen this done for an OS before, the turn around time allows for some impressive dev iteration speed.
A good preview of this hackability is in his Diablo port, whether it's missing C++ APIs, unsupported lang features, missing SDL port impl, toggling kernel features - it all gets done in 1 sit down session to produce a shiny new Diablo port:
Andreas videos on developing LibWeb/LibJS is one of the best resources I've found explaining how to implement a multi-process web browser, e.g. in this video he goes through the HTML Specs which have enough info in them to develop a HTML spec parser whose behavior is the same across all browser engines:
https://www.youtube.com/watch?v=7ZdKlyXV2vw
It's been awesome to see LibWeb/LibJS evolve over time, every time he sits down it gets a bit more capable. Typically it's to implement features for rendering a different website. Here's a nice example where LibWeb gains missing JS APIs (including eval) to render "Canvas Cycle" JS demos:
https://youtu.be/b3a5V45LLss which he optimizes in his next video https://youtu.be/tGmaO8agfY4
With full control over the entire OS, Kernel, GUI, etc. It's got lots of tightly integrated innovative features like its GUI GML language for creating native UIs where he creates a GML Playground in this video https://youtu.be/1QYBvTy9QKE then uses it to be build the OS's new Font UI Picker dialog in the next https://youtu.be/Fa9SwYfH2NI which is now so sophisticated that the WidgetGallery has been converted to using it https://github.com/SerenityOS/serenity/pull/5741
Since Andreas is so productive he's the only developer who I'm able to watch live coding which makes for an inspirational background score whilst coding, his commentary explaining his thoughts whilst he codes is so informative that they're basically HowTo's on how to implement each OS/App/Browser feature.
Hopefully this activity going on will help make alternative operating systems popular like Haiku popular among developers.
It's nice to hear the positive feedback on this guy. Sounds like he's doing well.
1. Start with a QEMU emulated device. QEMU is more forgiving than real hardware and you can study, understand, and debug the "hardware impersonation side" of the QEMU code to see what happens when you set a bit in some register.
2. Pick a simple device. Don't start with the USB stack or Ethernet. Maybe try to reimplement the UART driver first.
3. Don't freak out about "device driver architecture" stuff like whether you need lock-free queues or allocation-free algorithms or ring buffers or... whatever. Just get it working.
4. Write a userspace program that uses the driver you'd like to see working. That'll motivate you to finish it.
5. Repeat. Until eventually you know how to write device drivers. :)
A UART driver is great; then if you want to do Ethernet, virtio-net is a good start, and then carefully pick your physical ethernet card; something descriptor based will let you reuse the descriptor concepts you already learned. Realtek cards get a lot of shade, but aren't too bad to interface with and they're very popular; if you've got a bunch of computers, you've probably got at least a few realtek nics. Ethernet is cool, because then you can start communicating with the world (although there's a lot of stuff to get tcp going)
SerenityOS currently doesn't have a lot of tooling to help debugging drivers aside from kprintf() and kubsan. Other operating systems may offer more advanced capabilities, such as NetBSD's rump kernel where you can run drivers in userland for example.
Indeed, the desktop theme looks very similar to Windows 95 or ReactOS.
https://github.com/SerenityOS/serenity/blob/master/Documenta...
> Whilst it is possible to run Serenity on physical x86-compatible hardware, it is not yet ready to be used by non-technical users who aren't prepared to report bugs or assist with its development. For this reason, there are currently no pre-built install images so a bare-metal installation requires that you build an installation image from source.
Ed: there's also the FAQ: https://github.com/SerenityOS/serenity/blob/master/Documenta...
> Where are the ISO images?
> There are no ISO images. This project does not cater to non-technical users.
And I also found the reason for it being 32 bit, which feels rather quaint..
> Why is the system 32-bit?
> That's what Andreas was most familiar with when starting out. There's some interest in supporting 64-bit systems and that will eventually happen, but it's just another feature.
Just want a disk image to plop in Qemu or VirtualBox or Hyper-V to see what this feels like before I delve in the code.
What's the explanation for this?
I'm just one of many but I'm guessing his sincerity combined with his technical abilities make it all very compelling to watch and contribute with money or code, even though the system isn't at a point where you would want to use it.
Basically: it's a fun, open, ambitious project whose story is being told mainly through videos, with a kind and interesting person behind it.
At first I never expected SerenityOS would ever be advanced enough to use, but seeing how much it has progressed and the active community that's garnered around it has made me a believer.
Up until now he's been developing as a side project, I'm excited to see where he can take it working on it full-time.
Huzzah!
Whats with operating systems and religion
https://news.ycombinator.com/newsguidelines.html
Edit: unfortunately it looks like that's basically all you've been posting to HN. We ban such accounts, so I've banned this one. If you don't want to be banned, you're welcome to email hn@ycombinator.com and give us reason to believe that you'll follow the rules in the future.
"(God), give me grace
to accept with serenity
the things that cannot be changed,
Courage to change the things
which should be changed,
and the Wisdom to distinguish
the one from the other." God, grant me the Serenity
To accept the things I cannot change...
Courage to change the things I can,
And Wisdom to know the difference.Many daemons lurk in OSes. Sometimes religion provides the comfort and safety you need to face the horrors hiding in operating systems.
Confirmation bias; religion is everywhere, no reason to expect it to be exceptionally absent from computing/programming/operating systems etc.
"The got rid of CD/DVD. they are coming for our guns."
(Sorry, had to)
How is it possible that someone who has the skill to find remote code execution exploits is in need of $5?
Because SerenityOS’s single, young modern C++ code base is so hackable it’s a lot easier to understand how everything works.
Here’s an interesting analysis by Live Overflow who discovered a kernel exploit with ptrace explaining that SerenityOS’s code base is ideal for learning about OS’s because it’s much more readable than Linux’s code base. The whole analysis is very interesting and provides great insight into how kernel exploits are discovered: