Show HN: I made my own OS from scratch because I was bored (jotalea.com.ar)
I've wanted to make my own OS since I started programming. Now, 5 years later, I did it (kind of).
Sure, it is really basic, has very little functionality, but I made it and I'm proud of that. Oh, and I'm just 16 btw.
90 comments
[ 2.9 ms ] story [ 156 ms ] threadJust note that there are three different "branches":
- stable: This is the one being distributed in the website
- neofetch: This one exists because I couldn't get the ASCII art to fit within 512 bytes along with the rest of features
- multistage (untested): Here I'm trying to work with jumps in memory to handle different commands and features (and include them all in one release). I read online that I can compile them separately and then merge the binaries to get jumps to work. But I haven't finished it, and it probably won't compile as it is right now.
That said, here is the source code for all of them: https://quickshare.samsungcloud.com/wB9kfq1umxW2
edit: fixed missing newlines
Out of curiosity why don’t you put the source code on github?
And that's all that matters for a hobby project. Congrats!
I like that you have the site in both Spanish and English!
Though following that logic, I should also make my OS in Spanish too... I guess I could add some kind of translation dictionary, I'm not sure. I guess I'll do it in the future.
> You're like a legend to him and his friends!
:D
https://johv.dk/blog/bare-metal-assembly-tutorial.html
Without source, and only those commands available, it's kind of difficult to see what you've implemented and how far you progressed.
Did you do anything with the MMU yet? Any hardware detection? Do you ever jump to a user space context?
Do you have any specific design goals you want to explore, or was this just a learning exercise?
Like Groundhog Day, I have been doing this over and over and over for the last 25 years.
So many toy kernels, so many ideas and tests and watching A's and B's and C's and D's flash on the screen. Memory dumps. Writing executable loaders. Poring over the Intel/AMD manuals (and later AARCH64). ACPI (ugh). Trying to implement the techniques from the latest papers (usually in an effort to maximize the performance of a microkernel-ish design).
It's all great fun of course, so I'm not lamenting that, but when you start to get to the userspace infrastructure, unless you're YOLO'ing it with libc and POSIX compatibility, everything is so opinionated, and there's SO MUCH TO BUILD, I just kind of peter out.
It's been about 18 months or so since I last had the itch, but it's inevitable that I'll do it all over again.
Best of luck!
> Did you do anything with the MMU yet? Any hardware detection?
No, not yet. I still have to learn that
> Do you ever jump to a user space context?
I mean, I haven't put any restrictions, just as I haven't put many features that I would consider user space.
> Do you have any specific design goals you want to explore, or was this just a learning exercise?
I saw a video about TempleOS, and got motivated to make my own OS from scratch. Of course, TOS is a ~15 years-in-work project, while mine has been just a couple days/weeks, these are very far from each other.
I guess my final goal with it would be to get Minecraft running? I don't know, getting a Java program (or Java itself) to run on an OS from scratch sounds too complicated for me.
My current goal is to get Bad Apple on ASCII to show up on this, but to do that I need to save a lot of variables, one for each frame, and there being ~6000 frames, it would take a huge lot more than 512 bytes, so I would need to get jumps in memory to work so I can have these many variables set, which is what I would be working on now, if I hadn't other stuff to do.
> Best of luck!
Thanks :)
Terry Davis, the author of TempleOS, was fairly well known online. He had a lot of struggles psychologically, and met an unfortunate end a few years ago. It's an interesting case, but I honestly wouldn't take too much from the project. He was a gifted developer, but he did things for reasons that were decidedly non-technical.
For building up your knowledge (you can't only read the reference manuals, after all), there's a ton of resources online, but a particularly good one is the OSDev wiki: https://wiki.osdev.org/Expanded_Main_Page. I can't speak for it as it exists today because I've been out of the game for too long, but it was maintained by helpful folks. I didn't check to see if the forums are still up, but there used to be a wealth of information in them back in the day too.
As a note, relying on BIOS is ok, but the whole write a bootsector in 512 bytes to switch to 386 protected mode, to then switch to long mode (64-bit) is kind of outdated (the modern computer boot process is handled by the UEFI firmware, and by the time your OS binary is loaded, the CPU is already in long mode with paging enabled and setup with a flat linear mapping of physical memory).
Not to say that the method/approach is worthless (it's all learning), it's just that you spend an awful lot of time doing things in the whole mode-switching dance that are basically tossed in the bin almost immediately, and most of it has nothing at all to do with OS development. UEFI at least allows you to start on the real meat & potatoes without spinning your wheels on code that isn't going to stick around very long.
I just analyzed and did what I read online and it seemed to work.
To be honest, I don't fully understand how these things work, but I'm here to learn ;)
what about bilingual people, do they have an average amount of interest for the source-code?
Most of the Spanish-speakers that I know, don't have advanced knowledge on technology (on things like Assembly, or the difference between x86 and x86_64), and those who do, it's granted that they know English, because we are told in school that "to be smart and succeed, you need to know how to speak English".
I like to browse a codebase in some way that I don’t have to download and unzip an unknown set of files.
> The "source code" for a work means the preferred form of the work for making modifications to it.
Certainly, in the past "a tarball of the source for whatever version you have" was absolutely considered sufficient for that. But these days the features provided by source control systems, such as "annotate"(/"blame"), "bisect", etc... could very well be argued to have raised the baseline for what "the preferred form of the work for making modifications to it" should mean.
It means you can get the code if you want it. If you have to pay for postage so someone can send you a floppy with the source code, it's still open source. It's open to you.
Indeed.
Although providing a browsable source tree is convenient, we shouldn't default that on Microsoft's private platform (which, after all, monetizes the code stored there by using it for LLM training).
If a project is free software or open source, Codeberg.org is an excellent solution, while there exists a whole host of other web git hosts as well.
Let's take advantage of the field's diversity, lest it narrows down on us abruptly.
>Dev Kit includes distribution of a cut down QEMU x86_64 emulator, ASM compiler and source code, along with extra utilities. These are packaged with a win32 platform in mind.
(imho)
[1]: https://fortune.com/2023/05/23/inflation-economy-consumer-fi...
They absolutely have the opportunity to change if they want to change.
One of the reasons why we respect artists is because we get what they had to give up to do it.
I'd say this is a bootable environment or something.
To be an OS it would have to have some way to run programs as well.
¹ Linus Torvalds, Just for Fun, pp.63
...or even better, don't use JS (which doesn't work on older browsers and prevents some optimizations), and read the Accept-Language header instead
You are welcome for 3 years of therapy in two sentences.
OP, way to funnel your energy into your project. Nice work!
Why? Because it forces them to problem solve and on most occasions they get pretty creative. I'll often get home from work and there will be a massive blanket fort through the living room, or some kind of obstacle course in the front yard.
Being bored is not a bad thing!
I know kids who have lived on iPads/TV/other devices from a young age, and they don't understand the concept of being bored and watching them try to grasp the concept of 'make believe' is downright painful.
And don't get me started on not being allowed to feel proud! Who hurt you?
Ahora, si estás en Linux me imagino que nomás necesitas nasm (el compilador) y build tools. Igual no estoy seguro..
https://www.amazon.com/Developing-32-Bit-Operating-System-Cd...
Find a copy on your favorite shadow library.
The server I use apparently blocks specific devices or ISPs, it has happened to me a couple times and I haven't found a solution other than using a VPN or a different device on a different network.
The tools they give me don't cover this device blocking, so I guess that either they manage it or it is managed automatically.
I will switch to self hosting once I get an actual server.