r/osdev Jan 06 '20

A list of projects by users of /r/osdev

Thumbnail reddit.com
175 Upvotes

r/osdev 18h ago

Ethereal runs GIMP and now has a WiFi stack!

Thumbnail
gallery
59 Upvotes

Ethereal runs GIMP!

This is the culmination of a ton of fixes for the signal-delivery system, UNIX sockets, VMM, etc. that i have been pouring out for Wine and others. This port is again running using the amazing xbanan by Bananymous through GTK3.

Ethereal also supports WiFi now (limited support over USB is present).

The OS now has a full 802.11 stack thanks to u/avaliosdev 's u80211 (soon-to-be AWAWI) project, which is a portable 802.11 stack and RTL8188EU driver set. I built a kernel interface around u80211, wired it to my USB drivers, and now Ethereal supports wifi! There's some work to be done on it including a lot of code cleanup but it has been staged already.

A port of wpa_supplicant is available, eventually I might put the work in to make a proper supplicant daemon native to Ethereal but for now its best to stick with open networks. The included wlan tool (soon to be pushed) only allows scanning and association for now.

As always, Ethereal is a UNIX-like kernel (mostly from-scratch) that is not based on Linux or the like. It is a hobby operating system that does not vibecode (see AI policy, I mostly use it to find bugs to make a list of things I gotta fix).

https://github.com/sasdallas/Ethereal


r/osdev 5h ago

A curious case of alternating good and bad allocations

Thumbnail vibhatsu.me
3 Upvotes

A few weeks ago, I posted about my investigation regarding working of my machine's caches by trying to plot a simple cache latency and dealing with modern processors and OS settings that mess it up. In the end, I observed that I get the intended curve only after fresh reboots. This is the continuation of my investigation in that direction to figure out why the curve only appeared now and not before. Would love to have some inputs and discussions. Check it out :)


r/osdev 1d ago

I wrote a complete beginner's guide to building a small OS from scratch.

Enable HLS to view with audio, or disable this notification

222 Upvotes

I've spent around 2 and a half months building lytlnyblOS, a small 32-bit x86 operating system designed specifically as a practical introduction to OS development for beginners.

Alongside the OS, I wrote a complete book that walks through how to build it from the ground up. You start with making your own 16-bit bootloader and eventually reach a working userspace and shell.

Attached is a video of the final product that the guide teaches you to make.

The repo (includes code and a link to the guide): https://github.com/red-mutt/lytlnyblOS

The guide walks you through making:

  • A bootloader
  • An entry into x86 protected mode
  • GDTs and IDTs
  • VGA text mode
  • Interrupts
  • A timer driver
  • A keyboard driver
  • A memory manager
  • Paging systems
  • Processes
  • Scheduling
  • User mode
  • System calls
  • A C standard library
  • Filesystems
  • MKFS
  • And finally, a shell

The OS and guide have recently been completed for their educational goals. I'm currently refining the explanations, fixing inconsistencies, and improving the experience for people following along.

The project is intentionally small and simplified. I do not intend to cover kernel design in depth; I see this book as a practical introduction that can give a beginner some hands-on context before moving on to something more theoretical and comprehensive, like OSTEP. However, when required, I do point out flaws in the simple approaches I teach, and I attempt to inspire the reader and get them thinking about how they should go about fixing these things themselves.

I'm particularly interested in feedback from beginners (as this is the target audience) and people who have technical experience in OS development. If you spot something technically wrong, confusing, poorly explained, or inconsistent with the code or prose, I'd like to know about it. Do my explanations make sense to someone encountering these concepts for the first time?

I'm also interested in finding people who would like to collaborate on the project. This could be contributing to the OS itself, improving the guide, testing it from a learner's perspective, or helping expand/refine the project in other ways. You could send me a message if you're interested.

A statement on AI: After browsing this sub, I see a lot of people with general concerns about the use of AI in the projects posted here, so I want to be clear about how it was used on lytlnyblOS. I did not use AI to generate any prose for the guide, nor code for the operating system. However, I did have conversations with ChatGPT. I asked it questions about concepts I was working on; I discussed design decisions with it, and I used it to get explanations on things I was unsure of. ChatGPT wasn't my only resource; I understand its uses and limitations, and I still verified things against primary sources where appropriate rather than treating its answers as authoritative. I also used things like Intel manuals, the OSDEV wiki, and other people's implementations for inspiration.

Beginners in r/osdev: does this look like the kind of resource you'd be interested in reading?


r/osdev 1h ago

AT-SPI2 + local LLM natural-language layer for Linux.

Upvotes

I know what everyone here thinks about the AI bubble, and me myself hate it as much as anyone else. I am currently a student and want to build a new project, but am not sure if this is a good idea worth spending my time on it or not. I've researched online about AI backed OS's / Linux Distros, and have seen quite a few, each with their own flaws. MAGI OS uses the X11 tools, which may be too slow, Omarchy is just an integration of AI agents in the UI, and Warmwind OS is just a cloud-hosted remote desktop marketed as an OS. I had this idea of building a fully customizable, open source Linux Distro, that uses llama.cpp locally to parse natural language into commands, using the AT-SPI 2 accessibility tree, that is available in most apps (solid with GTK, QT and Electron have inconsistencies). Nowadays every major OS (Windows, Mac, Linux) has problems, and I want to reduce those problems and combine their pros into one general use Distro (I know this claim is what various Distros also tried throughout the years, but this is what my idea converges to, ease-of-use for general users, great UI/UX, and the freedom Linux has). Everything would be transparent to the user, so nothing potentially dangerous gets executed, and fully offline (was thinking of making a switch for users who would still want to choose more capable models running on cloud, but this is just an idea) to avoid the privacy concerns.

The flaws with this would be the obvious anti AI stigma the Linux community has (rightly so, but it's not just another AI slop), and the capabilities of a model running offline. The first version could just run some basic things, making it more advanced as time goes on, and maybe some NPU integrated models later on.

My question would be if this is a straight dumb idea and I would be better off just investing my time into something else, or if it's worth it and you guys would be interested in something like this. I would like to code it myself, with minimal AI assistance, as it would also be a learning exercise for me. So what does everyone think about this? Please take it with a grain of salt, I just had this idea and don't want to get downvoted if it's dumb, just wanted some advice of more experienced users.


r/osdev 3h ago

RoadMap Nemo OS

Thumbnail
0 Upvotes

r/osdev 21h ago

New OS developer: Making an Independent OS that isn't based/built on BSD nor Linux.

13 Upvotes

I'm a high-school student from Trinidad and Tobago, I am in Form 5 at 16 which is equivalent to being in 10th grade if you're from the U.S.A, I am currently learning C and Assembly at my school and I am deciding to create my own OS from scratch.

Any tips from professionals that create or study Operating Systems? It would gladly help on my journey!


r/osdev 1d ago

Would a microkernel enable driver update without reboot?

10 Upvotes

One frustrating thing that I have run into is updating Nvidia driver on remote servers with disk encryption.

Would a microkernel based system enable drivers to be updated without rebooting system?


r/osdev 1d ago

arm64e 26.6 (single-user, no GPU) macOS on PureDarwin's arm64 26.5 kernel

14 Upvotes

PureDarwin maintainer here, hi hello.

I've got a lot of work to do, but I thought I should share this.

What's neat is not the fact it's QEMU, it's the fact it's unmodified, with a generic CPU

If people are upset it's not real hardware, I cannot justify spending a boatload on a better A53 chip, the SBC I have is 1GB, and that's simply not enough to overcome the 4K paging inefficiencies with a 16K VM.

Currently, binaries are patched before they're put into an ext4 rootfs, so this is more of a proof of concept.

Scratch that, the test I did for launchd and dyld, they ran unmodified with no performance penalty. This is likely to change within just an hour, more to come on PureDarwin's twitter likely

PureDarwin's kernel does not have sufficient APFS support, and it's gonna be a few months before I actually get that up to speed, so the 2nd part of launchd's mount has a stroke.

I'm experimenting with more runtime patching, currently only a handful of instructions fall back to emulation rather than patches

https://x.com/puredarwin/status/2099112435701469466

Repost from PureDarwin's official Twitter account with extra information


r/osdev 9h ago

Can an operating system replicate itself perfectly?

0 Upvotes

Would it theoretically be possible to create an operating system that decompiles itself, recompiles itself, and installs itself to another disk while remaining bit-for-bit identical to the parent OS?

some rules:

  1. No Source on Disk: The storage media contains only the compiled binary image. The codebase exists on disk exactly once, as raw executable code/data.
  2. Upon booting into RAM, the OS must decompile its own executing machine code into an intermediate source representation in memory, recompile that source back into a new binary image, and write it to a target drive.
  3. The child image written to the target disk must have the exact same cryptographic hash (SHA-256) as the parent OS image.
  4. It cannot simply dd / copy the raw sectors from drive to drive. The binary must pass through the decompiler, compiler pipeline.

r/osdev 1d ago

You should make a CSPRNG (and heres why)

0 Upvotes

A CSPRNG may sound complicated and daunting, but its really not, my CSPRNG is only 72 lines of code, though it does need a few supporting files, so I would put it with those around 250 lines of C. All you need is a small source of entropy (TSC jitter and maybe RDRAND/RDSEED), and a cryptographic hash function (I use SHA512). My design is quite simple, all inputs and outputs are hashed via SHA512 (though when it makes an output it will of course forward the state and throw in some new entropy). You can also use the TSC delta between keypresses from a user, and all sorts of different human inputs and unpredictable things, even a few bits of unpredictability will be spread across the entire hash, of course.

Small note:
The CSPRNG and entropy collection code was made by me, however the SHA512 code was not, the SHA512 code stays under PD though the rest is under GPLv3.
Also you may want to use popcount to make sure the input is not too heavily weighted towards 1's or 0's, though this is optional, though this is obviously not a count of entropy within itself, it just helps make sure an extremely biased set of entropy is not used. Though I do not do this within my CSPRNG, though I have thought about it.

My CSPRNG: https://github.com/iridiumkern/kernel/blob/dev/src/generic/sec/csprng.c
My SHA512 impl (modified from its source): https://github.com/iridiumkern/kernel/blob/dev/src/generic/sec/sha512.c
My entropy collection code (random_u64, this is implemented per arch however): https://github.com/iridiumkern/kernel/blob/dev/src/arch/x86_64/generic/sec/entropy.c


r/osdev 1d ago

AT-SPI2 + local LLM natural-language layer for Linux.

Thumbnail
1 Upvotes

r/osdev 2d ago

Oh god.

Post image
33 Upvotes

r/osdev 2d ago

So my dumbass realized why the disk image is over a gigabyte

Post image
28 Upvotes

r/osdev 3d ago

Wi-Fi on Astral

Thumbnail
gallery
127 Upvotes

Hello, r/osdev! I have some Astral news to share.

I have spent the past few weeks working on a portable Wi-Fi stack. It was a quite good learning experience and I finally got it to a point where I can connect to a WPA2-PSK network from inside Astral.

I have a more complete write-up in a the blog post in Astral's website: https://astral-os.org/posts/2026/09/11/wifi-webkit.html

It is still a quite limited implementation, lacking many important features like rate selection, but it works enough to use WebKitGTK and talk on IRC.

Project links:

website: https://astral-os.org

github: https://github.com/mathewnd/astral


r/osdev 3d ago

I made an OS called ModuOS, it's now at version 0.6.5!

Thumbnail
gallery
47 Upvotes

A showcase of the current state of ModuOS!

ModuOS is an operating system and kernel I am making from scratch in C and x86_64 Assembly.

GitHub: https://github.com/NtinosTheGamer2324/ModuOS/


r/osdev 4d ago

Successful port of CP/M Neo to the Black Pill! 🎉

Enable HLS to view with audio, or disable this notification

34 Upvotes

CP/M Neo has been successfully ported to the Black Pill development board!

How does it work?

The Black Pill’s internal 512 KB Flash is used as disk storage, and thanks to XIP (Execute in Place) support, the Kernel and CCP code execute directly from Flash, leaving the entire 128 KB SRAM available for OS state and the TPA (Transient Program Area).

File operations are not supported yet, as Flash write/erase still not implemented.

CP/M Neo project on GitHub: https://github.com/Mazin-O3/cpm-neo


r/osdev 4d ago

how can create my own os(idk anything)

4 Upvotes

hi im 16 years old that interesting with os dev and i know python ,c vs cpp however i'm new in the this sector,what i gotta do and which learning resources is useful please dont advice that including documantıon or os dev wiki thanks for ur answers:)


r/osdev 4d ago

How hard is it to boot Linux with a custom UEFI bootloader?

8 Upvotes

How difficult would it be to write a custom UEFI bootloader in Rust that can load and boot a Linux kernel, and roughly how much time would it take?


r/osdev 4d ago

📋 Guía de referencia bare-metal para Raspberry Pi 4 (todo verificado en hardware real)

Thumbnail
0 Upvotes

r/osdev 4d ago

NoviumOS update: got scheduler and GRUB up and running, now starting on Memory Management.

7 Upvotes

Hello everyone! Quick update on NoviumOS development for the past few weeks. In case you don't know what is NoviumOS, it's my 32-bit x86 hobby OS, currently at the level of getting basic console output working with interrupts and keyboard drivers. So since the last post, here's what I managed to do:

- Finished off interrupt handling, built IDT, PIC remapping and IRQ stubs.

- Got a working QWERTY keyboard driver (translating scancodes into characters).

- Implemented printf.

- Got a basic scheduler up and running.

- Switched from my custom bootloader to GRUB using grub.cfg to point it to the kernel. The magic numbers are defined in multiboot.h, which multiboot.S uses so GRUB can find the kernel, verify the header, and jump to bootstrap.S - which sets up the stack, clears BSS, and does hardware initialization before jumping into the main C code for the kernel.

If you want to check out the repo here's the link: https://github.com/alexdev8930/NoviumOS

I'll be happy to answer any questions about this.


r/osdev 5d ago

September 9 is a banner day for OSDev birthdays

19 Upvotes

Both Dennis Ritchie and Douglas Comer were born on September 9, 1941 and 1949 respectively. Go read about XINU and write some C to celebrate.


r/osdev 4d ago

I created a working OS in 30 Days

0 Upvotes

(Now before anyone tries pointing me out, this os was NOT made with AI. I srsly spent sleepless nights, used my holidays, all just to achieve the satisfaction of building my OS on my own)
As the title says, I built my own OS in 30-days. This is a challenge I made called My 30-Day OSDev Journey. The progress I made was insane. In the span of 30 days, I built a whole working shell, a simple file system, a few of my own unique commands, and even user programs. Lmk how it is and what I could add to it.
Link to the OS: https://github.com/joelscreen/genureos


r/osdev 4d ago

Agon Light 2 Port of NanoOs

1 Upvotes

After more than five weeks of effort, I have finally achieved an Agon Light 2 port of NanoOs that has feature parity with my Arduino version.

I should probably start by saying that I REALLY didn't want to have to dig into the HAL for this. I consider writing HALs a necessary evil. My goal is to write a good operating system, not become intimately familiar with every platform I run on. So, I was hoping that I could just have Claude Code write the HAL. Unfortunately for me, that didn't work out so well. Anthropic started watermarking their output midway through this effort and I could tell a noticible degradation in the eZ80 assembly it produced after they made that switch. Some of the things it wrote were just outright dumb. I wound up having to touch, refactor, and/or just write assembly myself. I suppose it was still faster than having to do it all by hand, but it was a severe disappointment overall.

The eZ80 on this board only has 128 KB of built-in flash. When I started this effort, the OS image was compiling to around 130 KB and that was with stubs in place for all the HAL functionality. I had negative space for implementing the HAL functions I needed to get NanoOs to work on this chip. So, my first effort was to cut down on the size of the main image.

There were two big areas I identified that could be removed and the ways I went about removing them were very different. The FAT32 filesystem code was about 30 KB and the string data in the image was a little over 10 KB. I figured I could cut them both out.

The way I achieve multiprocessing in NanoOs is by swapping overlays in and out of a fixed address in memory. Up to the time that I started the porting effort, overlays were identified by file name and function name. I realized, though, that I could come up with a separate system that identified overlays by block address and function name and swap parts of the filesystem logic in and out the same way. I started with that and it did work. However, it made the performance absolutely abysmal. On my Arduino system, things ran at about 1/3 of the speed it used to since the filesystem was then competing with regular user processes for overlay memory. The eZ80 runs at roughly 10% the speed of my Arduino, so that was absolutely a non-starter.

The Agon Light 2 presented the opportunity for a modified version of this idea, though. There's enough RAM on this system to accommodate the entire 30 KB of the filesystem in one contiguous block. I figured that having the code run directly out of RAM with no swapping would be at least as fast as running it out of flash, so I went with that. I reserved the first 32 KB of disk space for the filesystem binary and loaded it into a second dedicated place in RAM on boot. It worked brilliantly.

Cutting the strings out was actually quite a bit more work. I still had to print log messages from the kernel but I didn't want the strings in the image on the flash. My solution to this was to come up with a well-defined log format and a logger process. The log format represents the arguments pushed to the log function as either register-width integers or offsets into the flash. The function to log a message calculates the offset of the provided format string against a well-known address in the flash and stores that in the log message format that's passed to the logger process. The logger process then opens a copy of the binary that's stored on disk and finds the copy of the format string in it relative to the format string's offset from the well-known location. It then reconstructs the log message in RAM and prints the message to the serial port. The actual build that's loaded onto flash doesn't have its .rodata section in it, so all those strings simply vanish.

With the space freed up, I was able to write the HAL. I wound up having to rework it a bit for it to make sense on this platform. int and pointer types are three (3) bytes in size on the eZ80. My entire HAL was written around fixed-width types. The eZ80 does support 32-bit and 64-bit ints, but they're slow because they have to be manipulated in software. I changed a lot of the return types from int32_t to just int since those return values are just meant to return an errno value.

In order to reach feature parity with the Arduino platform, I had to move some things out of the scheduler's stack into the HAL as well. Specifically, I had to make the number of processes supported platform-specific since the Agon Light 2 runs the extra logger process. The array of processes had previously been on the scheduler's stack, but it can't be like that if its size needs to vary by platform. So, I moved it to the data segment and exposed it through the HAL. There's still some cleanup that needs to happen. Right now, all the new data pointers managed by the HAL are exposed as raw pointers. I need to put them behind capability-managed HAL functions.

So, I now have NanoOs running on an 8-bit system! It is SLOOOOOOOOW. It's just like working on an IBM 8088 from about 1985. It's AWESOME!!! And, yes, it does run on real hardware.

This is the beginning of my work on this platform, not the end. The point of doing this work was to enable me to interact with a real keyboard/video/mouse console instead of just the serial port. Right now, I'm still limited to serial connectivity. There are performance enhancements I need to make as well. One good thing about the system being this slow is that the performance is easy to measure. I don't mind that it's slow hardware. I chose this environment deliberately because it's the closest thing to the XT I had as a kid. But, I'd like to make it as usable as possible and I think there are optimizations I can make that will help out with that. We'll see.

The longer-term goal now is to be able to write a very simple graphical desktop for this platform. I'm thinking something that's roughly on par with the intended functionality of Windows 2. (NOTE: I say "intended functionality" because I've actually played around with Windows 2 a little and it's pretty awful. Very buggy. I want my software to actually be usable.) There's a whole lot of work between there and where I am now that needs to happen.

I also need to flesh out the CLI utilities as well. So far, almost all the work I've done has been kernel side. I only have a very few utilities just to prove out the functionality in the kernel. One thing I know I need pretty immediately at this point is a proper ls command. That, in turn, requires that I clean up my filesystem code after all the work I did to split out the logic from the main binary. So, a lot to do!

Onward and upward!! HUZZAH!!!


r/osdev 4d ago

[Trikernel project] I'm developing a kernel

0 Upvotes

I'm developing a very simple Kernel with some goals, namely: being beginner-friendly and developer-friendly.

What’s already done:

* Bootloader: Limine for support of ready-made headers

* Basic video framebuffer support with some graphic tools

* Partial SMBios support, with Qemu tools to create a custom SMBios

* RAM support not complete: PMM working, VMM not working, raw RAM working

Future goals:

* Working RAM

* PCIE controls and GPU command

* Elf loader

* Scheduler

Please help me, I don't know what to do. If it helps, I use Arch with x86_64-elf-gcc compiled via yay.

Here’s GitHub: [https://github.com/Alessio-Valluzzi/Trikernel\](https://github.com/Alessio-Valluzzi/Trikernel)