Hacker News new | past | comments | ask | show | jobs | submit login
SerenityOS – a graphical Unix-like OS for x86, with 90s aesthetics (github.com/serenityos)
469 points by yankcrime on May 22, 2019 | hide | past | favorite | 179 comments



Hello friends, author here! Fun to see my project on HN again.

If you would like to see the system in action, I did a demo video in March[1] and one in April[2].

I’m happy to answer any questions you might have about the system. I’m not an expert on operating systems, but I can be pretty productive :)

[1] https://youtu.be/hE52D-zbX3g

[2] https://youtu.be/RBr5If8GrM4


I honestly cannot believe the massive scope of this project, it’s astonishing. What an accomplishment!

You singlehandedly created something that took many programmers many decades to build.


10% of this is knowing in advance what UI/UX paradigms you're matching/mimicking.

The original developers had to come up with the concept of, say, a taskbar from scratch.

They understood it has to run separately from other parts of the OS in case of crashes, it should support icons that are references to the same icons that windows have, etc.

But they were also limited by the resources of their day, and had to get clever about resource allocation. That's extremely time-consuming.

But that said, 90% of this project is simply a very good creator, being incredibly productive.

The mythical 100x programmer isn't always a myth.

I'm in awe.


You are absolutely right about the benefits of mimicking existing UI paradigms. It saves so much time already knowing basically how I want things to look and work. And not having to worry as much about resources as people did in the past is a huge load off. (Although I do all my development with 128MB of RAM or less, because I enjoy that sort of challenge..)

Serenity is an unapologetic remix/mash-up of all the things I like in software. Not just visually, but also code-wise. If you look into the sources, you'll find C++ heavily inspired by Qt and WebKit.


> I do all my development with 128MB of RAM or less, because I enjoy that sort of challenge

I remember being excited that I was able to splurge on a 486 with 4 Mb RAM.


I love working with 2kb of RAM. What is your point?


The point is that the device with 2KB RAM is a single-purpose embedded controller, and the device with 4MB RAM used to be a full-blown universal desktop daily productivity machine.


Though I remember that it was more or less necessary to have 8MB to browse the Web on those Windows 3.11 486s :)


I was browsing on Windows 3.11 with 4mb. Opera 3.62 + Trumpet Winsock could handle it.


Well, the first computer on which I wrote programs was a ZX-81[1]. The 486 DX4-75[2] with 4 Mb memory, however, helped me learn C using DJGPP and later build my first Linux kernel (on Debian 1.1), browse Gopher and WWW sites, read newsgroups, play with Cello[3]. I also wrote first versions of my economics experiments on it. Later, I upgraded to Windows 95 from Windows 3.11 WfW so I could have a decent Java experience.

I don't think I have much of a point except that you could do development on that machine in relatively modern ways in a way I could never imagine on a ZX-81 or ZX Spectrum.

[1]: https://en.wikipedia.org/wiki/ZX81 [2]: https://en.wikipedia.org/wiki/Intel_DX4 [3]: https://en.wikipedia.org/wiki/Cello_(web_browser)


Awesome, this looks really exciting!

Will it be possible at some time to compile Qt based applications in SerenityOS?


Anything is possible! It would take quite a lot of work to bring up a Qt port, so it's not really a priority right now as there are many other important things that need attention. But some day.


Looking forward to this day :) I'll be watching the project, keep up the great work.


This is seriously awesome work. Productive is an understatement, damn.


Second that statement. I don’t know how you have time or money to develop something mine this. Shock and awe!


Thanks Phil, that warms my heart.


Whenever I see these kinds of videos, I’m struck by how much time and work it must have taken to be able to announce a new slider component.

From the state a month ago, it’s very reasonable. From scratch however...

How do you even start building an OS?


You can actually see how much work the slider took, because I recorded the process :) https://www.youtube.com/watch?v=lMRJClRrGps

I don't know if any two operating systems started out the same.. Serenity came into this world because I found myself with a lot of free time and in need of a programming project.

The first three components I wrote were an ELF parser, an Ext2 filesystem dumper, and a GUI library (on top of SDL.) They all ran independently on my Linux box. Once they worked well enough, I glued it all together with a simple x86 kernel and just kept going.


"How do you even start building an OS?"

Probably not the answer you wanted, but I assume from a poc/toy bootloader. I wasn't disciplined enough to go further, but I did play around getting a toy OS working, and stopped a little bit past that part.

This effort, from a one man show, is amazing.


I decided I wanted to try this about a year ago.

So far I've learned C [0], x86 asm [1], read OSTEP [2] and begun hacking on xv6 ...and I still feel like I have years to go.

[0] http://www.knking.com/books/c2/index.html

[1] http://opensecuritytraining.info/

[2] http://pages.cs.wisc.edu/~remzi/OSTEP/


What's the future goal for this project? Will it ever reach a point where you say "it's done"? I quite like the idea of loading this onto an old laptop I have laying around for the purpose of using it as a distraction free portable editor (if it won't crash and lose everything).

Now that you have networking and a compiler, you could build a "simple" package manager. It could be just a list of supported Git repositories that are downloaded (downloader) and built (gcc), that would at least allow people to write stand-alone applications (no libraries) for your system that others could use.


The goal is basically open. I would like to make this system good enough that I can spend most of my time on it. Without losing track of the original ideas.

A package manager is definitely coming sooner or later. There's actually an SDL port in the works (done by a stellar contributor, not myself.) I suspect that we're gonna need some sort of ports system in the Serenity tree to be able to maintain it. :)


If the shell and compiler are posixy enough pkgsrc may well work with minor changes!


This is some awesome work! From the looks of it, your window server architecture is similar to wayland's, so would it be possible to port the GUI library to Linux/Wayland? Then someone could write a wayland compositor using wlroots that mimics the W95 aesthetics and there you have it: the ultimate 90's UI on a system that's actually usable for day to day tasks.


Sure, the GUI library could definitely be ported to anywhere POSIX-y. The IPC messaging is already based on AF_LOCAL sockets so that should "just work"

The bitmap sharing between WindowServer and clients is using a custom Serenity API ("create_shared_buffer") which is specifically tailored for this system. It can probably be replaced with some equivalent X11/Wayland mechanism in a few hours, if someone felt inclined to do that. :)


Just curious if you were familiar with Wirths work on the Oberon system and what he and another contributor were able accomplish, when starting this project? What were some of your inspirations?


I was not aware of the Oberon system. It looks interesting, I will read more about it, thank you :)

The inspiration for this system comes from using Visual Basic as a kid and just having fun trying to mimic the Microsoft Office look&feel of those days. It also comes from using Slackware Linux and realizing that everything can be done with text commands, and configured with text files.


I noticed the form designer and properties in the screenshot posted in the repo.

Does that system only design forms, and you have to manually "glue" them to code - or is there a visual programming system behind it?

I guess what I'm getting at is that you mentioned here being inspired by VB from your youth - so I was wondering how far you have taken that particular part?

I worked professionally with VB for over a decade (from VB3 to VB6) years ago; BASIC in general, and VB as well - both hold places in my heart, since that is where I started my coding journey to a career in it (I started when I was 10-11 years old, back in 1984, using a TRS-80 Color Computer 2, which ran a version of BASIC from Microsoft).

This is a great project, something I've seen posted before here and elsewhere, but it's always worth another look when it pops up.


Yeah, so far the form designer is just to help you create layouts which are then turned into C++ code. There's a bit of smoke & mirrors here though, I haven't even started on the tool that converts a saved form into C++.. but all in good time!

It would be fun to build a visual programming system in the style of VB6~, but it's not something I've started on. :)


Does it run on real hardware?

Any plans for 64 bit?

Any plans for SMP?

The old readme mentions a gcc patch. Is it still needed? What does it do? Just the final executable's format?

Is there an FAQ somewhere that I missed? :)


I haven't tried running it on real hardware yet, I'm too comfortable with my VM-based workflow at the moment. It'll eventually get there though, but I'm not in a hurry. :)

The answer is basically the same for 64-bit and SMP support. Some day I'll wake up with the burning desire to implement those things, and then I'll start on it. Or someone will show up with patches. We'll see! Nothing really depends on those features, although they would certainly be huge improvements to the architecture.

Yeah we still need patches for binutils and GCC. Any custom operating system does, you can see the patches here: https://github.com/SerenityOS/serenity/tree/master/Toolchain...

It's all about setting up the executable formats, providing the system names, and telling the compiler how we like things linked, etc.

There's no FAQ but maybe I should compile one..


You are wonderful, just wanted to say that.

I hope your OS finds a stable niche to live in, and you get lots of great contributors. Thank you for writing this, its existence makes me deeply happy :)


Thanks for replying! So no specific reasons not to do any of these, sounds good. Was thinking about taking some old hardware collecting dust for a ride with this. Maybe some day. :-)


what's the secret to being a 10x programmer?


Aiming for 100x.


> I’m not an expert on operating systems

understatement of the century


Did you mean to be insulting, or did you misspeak?


Roughly speaking, the goal is a marriage between the aesthetic of late-1990s productivity software and the power-user accessibility of late-2000s nix.*

In other words, a Windows GUI with a Unix-like CLI? That's something I can certainly agree with --- Windows has traditionally been very lacking with its CLI, while the Unix-ish systems (including Linux) seem to be quite fragmented and awkward at GUIs.

I also thought the terminal font looked familiar, then realised it's either the same as or a very close version of the "misc-fixed" fonts[1] that I use in my terminals and for editing plaintext (including source code) --- it even has the slashed zero that I added to mine, and which the original fonts lacked. The general UI font looks like a proportional version of it, which I've honestly never seen before but think it's quite pleasing too.

[1] https://en.wikipedia.org/wiki/Fixed_(typeface)


Totally agree about Windows GUI's and Unix CLI's. Sprinkle some MacOS on there and you have my vision for Serenity.

All the fonts are hand-bitmapped by me, using the included FontEditor application. I was trying to construct the imaginary love-child of Tahoma and Fixed, so you are definitely on the right track there.


Surely OpenSTEP does this?



did you post about this on /g/? I could’ve sworn i’ve seen something like this posted in a dpt or something in the past few months


Yeah, I visit /dpt/ regularly. "You can check out any time you like, but you can never leave."


I would put Amiga, BeOS and NeXTSTEP on that context.

Although AmigaDOS isn't UNIX compatible, it had lots of cool features.

And in what concerns having a GUI with REPL-like CLI, workstation OSes from Xerox, ETHZ and the last iteraction of Plan9, Inferno.


I think this is an impressive achievement, and certainly something I could never do. But I'm a little disappointed in the state of desktop operating systems these days. I don't see any innovation. Every OS is just splashing chrome on the same WIMP paradigm that's been available to consumers for 35 years.

Maybe I'm looking for the equivalent of a flying car, but I wish someone would come up with an OS, or even just an OS feature that makes people say "wow!"

Is there a college lab or a research department or some other place where people are trying really different things?


At the risk of sounding inflammatory (which is not my intention), what I'd like to see is the FP and RIIR crowds getting their hands dirty and write a hobby OS like this up to this level in their language of choice. If that means they need to assemble a stable ABI/API that other programmers can build against, then that's the challenge.

C/C++ programmers have been building their own hobby OS's non-stop since Linux came out. There's lots of example code out there for initializing the bare metal, writing bootloaders, task switching, controlling the MMU there for those languages. I even got a certain distance myself nearly 20 years ago, and I'm a complete hack. I only gave up because I never figured out how to initialize VESA graphics from protected mode, and I sure as hell didn't want do it with 16-bit code from the bootloader.

We all know what a disaster area C/C++ are, the number of CVE's we see in the Linux kernel and userland because of this, etc etc, we hear about it every day on HN. So I personally like to see some of those people put their money where their mouth is. I think that would be an innovation.


RIIR = Rewriting It In Rust for those that don't know


The Redox OS project is doing this, in Rust. https://www.redox-os.org/


Yes I'm aware of this one as well. Although again, the GUI toolkit doesn't look like much yet compared to the example we're discussing. And this one is written by one guy, Redox not so much.

Great to see examples that are getting close though, although I think my point stands that they are nowhere near as numerous or complete as their C/C++ counterparts.


True, although I'd personally rather see a focus on getting the backend right -- I think that's what Redox is focusing on. There are many options for "pretty" frontends, especially on Linux, but there are very few OSes out there with a decent approach to security. (Rust's inherent safety should help with that, although it's not magic security fairy dust by any means.)



Nice! Great example. I remember seeing this a while ago and being impressed. Even more impressive is that there are no .c or .s files in that repo at all that I can see.

Although it's not clear that it has a GUI toolkit up to the level of complexity that SerenityOS is showing though. If it does it's not being shown off, and I'd love to see the performance.

I'd love to see more examples if anyone can find them.


IIRC it includes a macroassembler as a DSL in lisp; booting bare-metal with zero assembly is just not possible.


> booting bare-metal with zero assembly is just not possible

Well that makes sense on Intel anyway, the first stage bootloader has to fit into a single 512-byte sector (the MBR) doesn't it? Not sure if this still true in these modern days of EFI.


Yeah, EFI sectors are larger.


> I don't see any innovation.

To me to Windows95 UI (not the OS) is peak productivity usability. All UI innovations that came later were just distractions except maybe tiling window managers and the "Exposé" function in Mac Os X which later was completely botched in Snow Leopard. At some point no further innovation is required.

I'd rather see innovation on another level: Do away with C and introduce a new programming language which gets rid of the need for a MMU or preemptive Multitasking at compile time.


You don't need a new programming language for that - any type safe, memory safe language with capabilities can do it. Java or C# are good candidates. Especially with the work on Project Loom in the JVM, you could get cooperative multi-tasking controlled by the compiler rather than using processor interrupts (in theory). See Singularity for an example of what kind of interesting OS architectures are enabled by it.

The elephant in the room is Spectre. It's no longer clear you can actually keep any secrets inside an address space on speculating CPUs. So if all your code runs in a single address space, even if it works in theory, it may not work in practice. But this opens up the interesting research problem of Spectre mitigations :)

One idea I've wondered about is whether you can use the very new Intel features to rapidly change access permissions on page table entries, such that you could have a totally unified but segmented heap, but entering or leaving lower privileged code modules triggers a fast address space transition.


It turns out the perfect OS already exists: Inferno OS [1]. It doesn't need a MMU and runs with less than 1 MB of RAM. I did not dive into Limbo yet but at first glance it looks rather sane.

[1]: https://en.wikipedia.org/wiki/Inferno_(operating_system)


I think “remote resources are files” paradigm has been definitively attempted and rejected.

At its heart it’s a lie: network resources are not files. They are not yet in RAM.

Unifying two abstractions into one is great, IF the data behaves in a perfectly analogous way. Otherwise the “unification” actually makes the domain of interaction more complex.

There’s a reason HTTP has succeeded.


" All UI innovations that came later were just distractions"

Don't forget search. Especially if it can correctly guess what the user is probably trying to get to. Search in Vista let me ditch SlickRun for quickly getting to stuff.

"Do away with C and introduce a new programming language which gets rid of the need for a MMU or preemptive Multitasking at compile time."

You'll still need it for hardware or compiler failures. Cosmic rays being a big source of them. On compilers, they'll sometimes optimize away security checks. Then there's side channels which require low-level view of hardware and software interactions. Probably better to keep the MMU's or some hardware protections for defense in depth.


Under the hood, there is already a very very long list covering those 35 years.. virtual memory, pre-emptive multitasking, micro kernels, mandatory and discretionary access control, advancements in file systems, system administration, etc, etc

As far as the UI is concerned, are you talking about increased productivity or just looking for the wow factor? I'm not convinced a change in UI paradigms is necessary for what people use computers for. Touch UIs are OK for consumption, but I feel severely handicapped without a keyboard/mouse when doing any moderately involved task. Email - slow, chat - slow, browsing - slow, file/photo/document management - slooow, content creation - slow, gaming - okay, programming - heh.


I think there is plenty of room for innovation in desktop operating systems but the standard paradigm doesn't really need to be rethought. But where I differ from a lot of my fellow nerds is that I think desktop operating systems with arbitrary window placement and so on are best for desktop computers with huge screens, not laptops. I think the iOS/Android/Windows 8 approach of full-screen apps (with some tiling/split screen) and a different root layer than the "Desktop" makes more sense on smaller devices.


Rust has Redox (desktop focused) and TockOS (embedded).

I happen to (wishfullly) think the next major OS will have capability-based permissions at the core level, a model a bit like Mobile permissions but composable. Good thing that Google's Fuschia is based on capabilities. It's in C++ though.


I know what you mean. but I'm also not sure what innovation can be expected from something as utilitarian as an OS. Do you have any ideas of what you'd want to see?


Boot up an old Linux distro from around 2001 and compare WindowMaker, AfterStep, Fluxbox, KDE, Gnome, Enlightenment, and half a dozen others. Compare those to fictional UIs seen in movies, Hypercard, visual development systems like the ancient Klik n Play or modern Scratch or MaxMSP, etc. Learn about OLE (object linking and embedding) and document-centric vs. app-centric computing. Think about all the different ways data can flow between components of a system and how those flows can be grouped differently. Look at alt and historic OSes like Be, TempleOS, SunOS, IRIX, DOS, VMS, OS/2, old UIs like Dosshell, Commander. Look at tablets vs phones vs desktops vs. game consoles vs appliances. Remember that bytes and bits and addresses and instructions and files and programs don't necessarily have to be the fundamental units of an OS.

Then, after all that, come back and tell us that a modern desktop is the utilitarian endgame of OS innovation :).


This strikes me as profound and I would like to hear more.

Do you have other writings?

Are there any books about this?

Do you think about this often?


There's a small, if somewhat contrarian move, especially in the *nix/free software communities, that goes along those lines. You'll find a lot of people fed up with hamburger menus and nondescript icons and widgets, poor API stability (and, therefore, lack of easy scriptability (is that a word?)) and other questionable developments of the more "modern" approach to building desktop systems.

Some of the folks in this camp are firmly in the traditional Unix "camp" and mock cat -v, but there's a pretty refreshing diversity of views there. Some swear by the Unix Haters' Handbook, others come from (what's left of) the Amiga community.

I don't know if there's a central gathering place, but if you look around the Fediverse, IRC, various tildeverse servers, you'll eventually run into someone :).


I want to see a power user OS. Something designed for humans who need to analyze huge amounts of data in arbitrary ways. Something that knows how to work with cloud resources to profile new data sources, simplifying the whole ETL challenge. With great APIs at the program level, so I can always pull datasets between apps, use the best app for the job, and automate everything I need to do twice.


My blog is mostly just tech demos or tutorials with dry writing. I do think about the very deep unmet potential for technology often.

A 1995 book that somehow ended up in my old home town's public library called Tog On Software Design, describing a project at Sun to build a desktop of the future, was one influence as a kid. Definitely check out the celebrity endorsements on Amazon.


On a historical note (and most of it has come to pass, though maybe not in the way they wanted it, and certainly not as "unified" as they conceptualized it), check out the Xerox PARC project that was termed "tabs, pads, and boards":

https://norrisnode.com/tabs-pads-and-boards/

http://lowendmac.com/ed/rosen/10ar/ubiquitous-computing.html

https://www.ics.uci.edu/~redmiles/ics203b-SQ05/papers/Weiser...


> TempleOS

RIP Terry Davis.


RIP King Terry


> Is there a college lab or a research department or some other place where people are trying really different things?

From a UI perspective, I've found this to be very innovative and interesting - but I'm not sure how practical it is:

https://dynamicland.org/

...and in a more open fashion and inspired by it:

https://paperprograms.org/

Both of these appear to be something known as "tangible user interfaces" - or are a subset of such; if you google around, you'll find a ton of research on such systems. A similar kind of interface is the "augmented reality sandbox":

https://arsandbox.ucdavis.edu/

And indeed AR is a part of all of this; but rather than wearing a headset (or using a phone) to overlay virtual objects or such on the real world, instead projectors are used, which in effect makes it easier to use and more natural, while also allowing for easier collaboration.

I have a theory that LISP or a LISP-inspired language (perhaps LOGO) might also be something that could be incorporated into a new system (I honestly believe that both of these languages haven't been as fully explored as they deserve - LOGO moreso than LISP).

Lastly - the idea of a DSL (Domain Specific Language) might also have relevance to a new paradigm; I've mentioned this particular offering in the past:

https://www.jetbrains.com/mps/

https://github.com/JetBrains/MPS

I'm only as familiar with it as what I've read about it, both on JetBrains site and elsewhere, but it looks both interesting and promising.


I feel the same way about desktop OSs, and OSs in general really, these days. I mean, no disrespect to the author of this one because it's an impressive amount of work, but it's yet another unix. Unix is freaking ancient and even its developers went on to do it better in Plan9, but everyone keeps copying unix and its archaic paradigms. Well, except the l4 people, who seem content to keep their work completely academic.

I have a different conception of what a desktop OS should be than you seem to, though. I want one that embraces simplicity. It should elicit a resounding "meh" because it doesn't do anything particularly impressive and is just a really good execution of already existing ideas.


This is one of the most interesting OS projects I've seen in recent years: https://github.com/dzavalishin/phantomuserland



My favorite somewhat-rethought OS is GoboLinux, which is not as different as Plan9 since it's basically just Linux, but it totally throws out the traditional Unix folder hierarchy of /bin, /etc, /var and so on. I also like the simplicity of classic Mac OS where you install a system extension by just copying it to a special folder and you uninstall an app by just deleting it (which sort of works with current macOS but apps still strew preferences all over the place).


Believe it or not, there have been several attempts to bring that kind of application management simplicity to Linux: ROX AppDirs, GNUStep's AppBundle implementation, Klik, and AppImage to name a few.

They have all been rejected by the community at large, sadly.


Yeah the usual argument is that package managers make worrying about the tidiness of the file system unnecessary. But on Linux at least it just never really works out.


you're gonna be constraint by keyboard and a pointer device. For those two combinations, you ain't going to have much to work with.



34 year old here.. about every year I set up a whole OS 9 emulation deal because of my obsession with Mac OS 9, I dont know if I am sad and dwelling on the past, but I just loved that OS so much and keep trying to get back to it and I know I am not alone. I love to see projects like these


Screenshots of 90s operating systems are so relaxing. I miss interfaces that looked like interfaces, and distinct from content.


BeOS is another one that comes to mind.


That BeOS didn't become a serious, long-term contender in the desktop OS market is a sure sign we're not living in the best of all possible worlds.


That Amiga never achieved any success outside of niche SFX markets is a sure sign we're not living in the best of all possible worlds. (Although that's more 80s than 90s.)


There's a timeline out there where WindowMaker/GNUStep became the dominant desktop for Linux too.

In many ways, I think the state of modern personal computing is evidence we are, in fact, in the darkest possible timeline for it.


If you have not seen it, check out the BeOS-inspired Haiku

https://www.haiku-os.org/



I think the early to mid 2000s Gnome had that same focus on full functionality presented with simplicity, rarely seen in today's interfaces.


OS/2 for me.


I loved the interface dearly. I miss MacOS classic and feel OSX is a step backwards in many ways, UX wise. But I don’t miss how primitive the OS itself was. Tracking down extension conflicts? Manually allocating memory? Cooperative multitasking? I’ll pass on those.


That's why Rhapsody was absolute peak for me. Haiku might beat it, though I'm probably stuck on Linux anyway.


I'm more of a System 7 guy, but I still have two G4 towers, a G3 Powerbook, as well as some beige 68ks.

They're still useful for making music and get used for that occasionally, but I honestly love just booting them up and using the Finder. I wish I could still use them for communication somehow.


>I wish I could still use them for communication somehow.

Bitlbee + IRC client.


A lot of good stuff happened on OS 9. There wasn't a lot of extra cruft, because programmers had to use the whole machine to implement their vision.


I love the idea of a modern OS with the 90s function-over-form aesthetic. There’s immense beauty for me in function, and the 90s was without a doubt the peak of OS design.


> and the 90s was without a doubt the peak of OS design. reply

Also, and surely not at all correlated with my youth, it was the peak of good music.


90s kid, you’re both wrong. OSX was a forreal big deal. Would google or Apple have built smartphones on FOSS OSes without an OSX? Music has definitely blown up and gone full post modern though. You can probably get an endless stream of whatever sound floats your boat for 10$/ month. Or free.


OS X Server 1.0, which I agree is an amazing OS, came out in 1999.

It was based on NeXTSTEP, first released in 1988 and developed up to 2000.


I'll never stop buying CDs or tapes. No ads, no WiFi needed, and when I'm playing them on my stereo they don't use any processing power. Plus I can rip the FLACs very easily.


Also, no year since 1999 has surpassed it for quality and variety of movies.


I love the aesthetic of 90's/00's desktop interfaces and use bb4win and openbox to recreate the look. It's too bad everything is so much flatter and antialiased in most recent operating systems. I purposely got myself a lower resolution monitor (in 4:3) so the bitmapped fonts I use are easier to see. I wonder if there's a WM that can mimic the look of old versions of GNOME/KDE more closely.


> I purposely got myself a lower resolution monitor (in 4:3) so the bitmapped fonts I use are easier to see.

Unless you use a CRT, i'd recommend to get a 1366x768 monitor with a VA panel. The low DPI makes pixels look crisp, if you game you'll get great performance even with low end hardware while you'll be able to play a lot of older games in a natively supported resolution (1024x768, centered) without UI issues and (the reason for VA) you get deep blacks (not as deep as OLED but certainly better than the washed out garbage you get with IPS panels) which are great on both movies and games. The main negative of VA is low refresh, but unless you are playing competitive games you should be fine.

If you use a CRT, then carry on. Although note that those guns wont live forever and they do wear out. I use mine only on the occasion i want to play some old 2D game that simply doesn't work with anything other than its "native" resolution.


CRT rot... the grim reaper lurking behind the few remaining good monitors. I wish someone would make high-quality CRTs again, every time I use my C1701 I feel like I'm slowly desecrating an artifact- that I shouldn't be so shamelessly using such a limited resource. I suppose there's a chance I'll be able to keep up using CRTs until I die but I really am not ready to switch my old setup to an LCD.


It's interesting that no one does. Between the various retro-gaming and computing crowds one would think there's enough of a market for CRTs that at least one company would still be making them.


Well, most CRTs had mediocre image quality and people today remember a only the best of them (Sony, LG) which limits options and even then AFAIK it isn't exactly easy to make and distribute them which means a new CRT of good quality will cost a lot (in the four digit category). Also consider that it is already impossible to find OLED PC monitors and OLED panels are still is mass production so the machinery is there (CRT production machinery is probably either rotting or gone).

But yeah, if there was a brand new one i'd buy it without much thought.


openbox + fbpanel can approximate early gnome pretty closely with a tiny bit of work.


I prefer fluxbox but that work too

rox filer for the file manager and shortcuts and it’s pretty nice


Kinda broke right now but consider his patreon the world needs more of this!!


Thank you for shouting out my Patreon![1]

I'm never going to ask anyone for money, but I'm extremely grateful that some people have chosen to support this project financially.

The only "goal" I have set up on Patreon is hitting 1000 supporters. If things ever get that crazy, I'll stop whatever I'm doing and focus only on Serenity. For now that's just a fun daydream though :)

[1] https://www.patreon.com/serenityos


If you don't mind me asking, how do you support yourself and why did you choose to dedicate your time to this project?


Sure, I don't mind. I've been living off of savings for a while, trying to figure out what to do with myself. Savings don't last forever though, so I'm actually starting a programming job next week.

I originally thought I would learn something new instead of programming, but then I started working on this and got caught up in all the fun. It wasn't a "business decision" of any kind :)


What a hero!

I sympathize since I am also doing open source projects full time so I know that the struggle is real!


best kind of decision


I love the retro look and feel, would be cool to have something like this as a theme or window manager for (modern) linux.


CDE project also should move from SourceForge to GitHub or GitLab to gain better visibility, and more contributors.


I'm somewhat disappointed that they didn't call it SerenityNOW...


An Operating System for The Rest of Us.


I've been conditioned to think crashy windows 95 when I see that aesthetic. Which is unfair. Because it's really quite clean and straightforward.


I would so love to contribute to this! I love the layout, aesthetic, and the approach to the internals that you've taken; I would use this in a heartbeat to be honest.

Unfortunately although I know C++ I don't really know much about OSdev. If there's any way I can help, I have a few months of free time (summer break) that I'm looking to fill!


There’s so much more to operating systems than what people usually think of as “OS dev”.

Wanna write a Tetris game for an obscure new OS? Here’s your chance! How about a bitmap editor (like MS Paint)? Maybe some cool graphical effect demos? Perhaps you’d like to write a telnet client? An FTP client? Or a disk usage visualization tool! Just look at all the stuff that comes with an OS like Win2K or your average Linux distro. :)


That's very true! Just starting out working on your project with the File Manager showed me that there's a lot I can contribute.

My short term goal is to make a settings manager.


Why "unix-like" and not just Linux underneath, with the (really) cool 90s productivity software on top?


probably because that’s just not as fun, i would imagine a huge part of it is implementing everything from the low level to the high, and seeing how it all works together ^_^


Correct! It's fun to control the whole stack. And while I've been programming on POSIX systems for over 10 years, I've learned more about POSIX programming in the last year than in all the preceding years. There's no better way to understand something than to implement it.

And staying within a Unix-y paradigm means that if some part(s) become too good, they can be semi-easily ripped out and turned into portable libraries/programs instead.


This looks amazing. I love the aesthetic. I wish I could bring myself to commit to such a large hobby project.


Looks a lot like Linux with a fvwm95 interface on top. I mean, it's always great and so exciting to see something totally new being created from scratch! But you don't actually need to switch to some entirely homegrown, untested kernel for that 1990s UI fix! ;-)


One could always also throw together a virtual machine for running Windows 3.1 like I keep doing.


For most non-technical people, a Windows 3.1 type GUI is all they need.


Stop this. It's condescending and part of the reason no one like tech people. It's also one of the core reasons the Linux Desktop never took off: "you don't need that, you just need (simple usecase that I envisioned because it was easy)."


Really? I'd argue that Android and iOS have proven that the simpler the GUI, the easier it is for the masses to use them.

Imagine if working a car was as complicated as your average desktop OS. There would be a lot less people driving that's for sure.


A lot less people driving, but the people who did drive would have a higher chance of being able to repair them without going to a specialist.


Until they maximize one of the program group windows and suddenly "where are all my programs?" :-P


I would rather use the original fvwm actually. :)


Dude, the "VB6 like" window builder is amazing. The whole process of put button on form, double click button to put code inside button is what got me started in programming. Will you have something like this?


Hi pcdoodle. I am also very fond of that style of programming, and it's something I'd like to explore down the line.

In the immediate future though, the visual builder tool is limited to generating C++ that you then glue together with the rest of your program. But one day :)


Also, a good example of a clean modern C++ code.


Mostly. A good portion of the AK subdirectory should be replaced with standard and/or boost functionality, though:

https://github.com/SerenityOS/serenity/tree/9153666e72effdf5...


Presumably the intent is not to depend on boost, but rather only standardized parts of the language.

Also using something like boost ties you to a specific version of boost due to the wonders of c++ abi - your OS libraries can’t expose anything that explicitly or implicitly includes things that aren’t ABI stable.

(I’m sure kling is already requiring 100% stable abi :) )


Anything that ever ran on Serenity must continue running, otherwise I've failed. :P

There are some parts of the code where I don't want to depend on anything other than the C++ language. Some folks are working on porting parts of this to some very constrained platforms, and bringing in boost or even STL would really gum things up.

But let's also be honest: It's fun making string and vector classes, and designing them to work just the way I like. :)


Fair, but I was replying to this being a good example of modern C++. It's atypical that implementing your own vector and string is even a good idea, let alone exemplary.


The C++ stdlib versions of vectors have different design goals, including a bunch of ABI constraints for very old code (things like the vector<char> specializations). Likewise there are questionable spec behaviors like unordered_map that specifies suboptimal implementation.


Follow on thought - what happens for operator new[]() in kernel space? Does it depend on a malloc (vs. traditional kmalloc)?


It's currently ending up in kmalloc(). The compiler handles the new[]/delete[] element count and I don't ask any questions about how.


On the contrary, the standard vector and string classes are garbage UX-wise (e.g. unlike pretty much every other single dynamic array implementation in existence, vector does not have something like an "index of element" method and instead you are supposed to use std::find and subtract iterators with a special check for when the element wasn't found... like, WTF).


OK, fine. Then use std::string_view, etc., which are cleaner and more efficient usually. There are several reasons why C++ open source is hard to reuse, and not using standard types appropriately is one of them.


This entire project is about implementing already-existing functionality in its own way, with minimal dependencies, for fun.

Its use of the C++ language strives to be modern. There is no attempt to use modern 3rd-party C++ frameworks.


I just wrote that the API is garbage and then you recommend me to use the API? :-P The entire STL/StdC++ has the same design style, it is garbage all the way down.

I'd rather use something like Qt (which is far from great, but better than STL/StdC++). Well, personally i'd rather not use C++ in the first place, but if i'm going to use C++ i'd rather use something else (which frankly, would be my own container and string classes that provide a much better API).


Awesome work!

Just curious: Why did you choose to take on the entire OS instead of building on top of an existing distro as a base?


Thanks hardbop200! Partly it's because I'm the kind of person who just loves hacking on tall stacks. Before this, I was doing browsers for many years, which has many traits in common with operating systems.

Speaking more emotionally, I feel like *nix used to be a lot of fun and full of hacker's spirit, and it's just not like that anymore. Things aren't simple anymore, and they can't easily be taken apart and understood in an evening, like they used to. So I figured I can just make my own then, just the way I like it :)


If you like understandable tools, you might enjoy some of the projects the bootstrapping crowd posted to the page below. It's not very organized since it was just a dump site for work that a small crowd of people were taking inspiration from.

https://bootstrapping.miraheze.org/wiki/Main_Page


This is awesome. Love the 90s aesthetic!


Can't say that the screenshot made me feel at peace. It seems like a sweet spot for non newb usages.


Interesting project. How far are you away from including a native compiler/assembler?


GNU's binutils and GCC have both been ported to Serenity and work right now. So not very far away at all! I got it working properly ~1 month ago, here's a video I posted that day: https://www.youtube.com/watch?v=lO4XBggjZGk

(A lot of performance work followed after that recording. There's still a lot to do, but the 30 second compile time is now down to ~2.5 seconds. 80% of the speedup was from implementing DMA disk transfers, and the other 20% from a faster malloc().)


Joining the best of both worlds, i love it. Kudos :)


Looks like Windows 95.


Which looks like nextstep.


Does it, though?

Windows 95: https://en.wikipedia.org/wiki/Windows_95#/media/File:Windows...

vs Nextstep: https://en.wikipedia.org/wiki/NeXTSTEP#/media/File:NeXTSTEP_...

Yeah they're both light grey, but other than that, they don't really look similar to me...


When comparing Windows 95 to other Operating Systems of its era (Windows 3.1, Mac OS 7.1/7.5 or OS/2) it becomes more apparent that they must have gotten inspired by NeXTSTEP.


Yes, grey embossed boxes everywhere, taskbar/list, [x] button top right to close window. Don't let the different apps fool you.


Pretty sure Motif was the originator of the 90s era concrete slabs look. “Initially released in July 1989.”

https://en.wikipedia.org/wiki/Motif_(software)


Nextstep and 95 both had a thin ~1px emboss depth. Also note the window decorations. Windows 3.1 looked more like Motif.


Thought that was the Amiga.


>A graphical OS for x86, with 90s aesthetics

>90s

>aesthetics

wat?


Yes. Simplicity and function over form. 90s buttons looked like buttons, for instance. And theming was a simple matter of changing your fonts and colors. Windows 95 didn't need a special 'dark mode' supported by the OS, because you just changed your colors in the GUI tool for changing colors and fonts and you were done.

Modern GUIs are ridiculous and stupid and overcomplicated. Much like most of modern computing.


> Windows 95 didn't need a special 'dark mode' supported by the OS, because you just changed your colors in the GUI tool for changing colors and fonts and you were done.

You're over-romanticizing the past. There were plenty of apps even in the Windows 95 era that drew their own widgets and only half-respected the colors you set in the control panel, and that consequently looked like pureed ass if you changed the colors from the default.


Yes, and just like today that was stupid. It was just a lot less common than today's Electron bullshit. Hell, there were games that used native widgets.

One of the big complaints about Java used to be that it didn't use native widgets and consequently looked out of place, but nowadays that is basically every application.

It's ridiculous.


Serenity now!


Sure the aesthetic is old-school, but look how much more informative a proper GUI is. You can tell immediately which item in the task bar is active.

"Flat" UI is both lazy and an overreaction to the ridiculous skeuomorphism that plagued us years ago.


> "Flat" UI is both lazy and an overreaction to the ridiculous skeuomorphism that plagued us years ago.

I like to think that by trial and error we will eventually get back there. Microsoft is already moving away from the flat aesthetic to a more "materialish" design.


couldn't you just contribute to lxde or xfce or something?


Get Actual Pixel Artists To Design The UI


I don't have the money to spend on that sort of thing. I do have a dreamer Patreon for the project, but it's all very modest :)

I'll continue iterating on the look though. Here's a more recent demo that shows a bunch of pixel-related improvements: https://www.youtube.com/watch?v=pS56tlXFmEk


May I suggest using the Windows 2000 warm grey instead of the Windows 95 grey?

It does a lot to make the UI feel less dark


That's not a bad idea! I spend a lot of time hacking at night, with my monitor in "night mode" (warmer colors), so I didn't think much about how cold they look in the daylight.

I should eventually add color theming so this can be done from a single place, and then I'll be sure to add a warmer option, too. And probably make it the default after I see how nice it looks :)


Even better, haha! Seriously impressive work though - one of these projects that show just how absurdly bloated and slow mainstream OS development has become.

Also for reference for those unfamiliar with the difference in greys: http://actsofvolition.com/images/screenshots/Display-95-thro...


To make art is to be an artist.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

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

Search: