The name yaos stands for Yet Another Operating System. This is my first attempt at making a simple and small x86 operating system to learn more about OS development.
To compile and run yaos, you will need:
- A cross-compiler for i686-elf
- A virtual machine to run the OS (I used qemu in this project)
Simply use the Makefile provided as follows:
# Compile the OS
$ make
# Run yaos in a virtual machine (qemu)
# You may need to use the manual command according to your system:
# qemu-system-YOUR_ARCH -cdrom yaos.iso
$ make run
- OSDev.org
- Bran's Kernel Development Tutorial
- Operating System Development Series
- How to Make a Computer Operating System
- ToaruOS
- Incitatus-OS
- (French) Programmer son propre noyau
- Intel 80386 Reference Programmer's Manual
- osdever.net
- The little book about OS development
- /r/osdev/
- basekernel
- os5
- axle
Since this is my first attempt at making an operating system, I learned a lot about OS development. But, I also made a tons of mistakes, and because I am planning on creating another OS in the future, here are some tips for my future self:
- Plan ahead: since I had no idea of what I was going to implement and how, I pretty much had no design for my OS, and I thought I didn't really need one because I wasn't aiming for a big operating system after all. But, I was totally wrong. Planning the design of the OS and the implementation of its components is a necessity, otherwise you will have a hard time building it because of huge design flaws. I often had to rewrite parts of the kernel, but at a point, it would need to be rewritten from scratch because of this lack of planning.
- Code everything by yourself: GRUB is great, but I would have learned even more by doing a small bootloader by myself, and I would have been much more in control of my OS. Also, don't follow specific tutorials too much, since almost all of them are either outdated, incomplete, or simply wrong, and sticking too much to one tutorial's design is again a mistake. Read as much documentation and information on the topic as possible, plan the implementation, and then code it your way.
- Take time for testing: each component should be heavily tested/reviewed before moving on to another one, and you should know the limits and the possible improvements you can make on components.
All the source code is licensed under the MIT license.