I am happy to write these lines. It took me a lot of time to understand how operating systems behave. I have been dreaming to make my own operating system from scratch or at least based on Linux kernel. And today I am greatly happy to announce that I finish coding my operating system called “oudadOS” for educational purposes. The aim of writing it is to be used as a learning tool in operating systems classes around the world. I tried to show some concepts that were discussed in some operating systems book in order to fit its educational purposes. It is built with C++ as much as possible along side with Assembly in an object-oriented manner. It is meant to work on Intel 8086 architecture. The name of oudad comes up from the Amazigh language, and it means red deer in English. You can check it out from here: https://github.com/Lekssays/oudadOS . I will be posting some articles about each part of the operating system in my blog. In addition, I made an official website for oudadOS which can be accessed from here: http://oudados.lekssays.com. I will write a documentation for it in the next weeks. It will be posted here: https://lekssays.github.io/oudadOS/ .
Maybe you will notice that some parts are not well done or poorly designed. I tried my best to make it looks better. I believe that it reflects my level because I made a huge effort in making it. I faced many problems and I stopped writing it for weeks because I did not figure out how to implement some parts especially interrupts, multitasking, and GUI. So, please I invite you to raise an issue on the Github repository or make a pull request if you see that some parts should be changed or improved. As I mentioned in the README file, it is a learning experience for me. I am proud that I built it, but this does not mean that it is perfect or good. It reflects my understanding to the topics that I have implemented. For the future improvements, I will try to implement what I mentioned in the README file in the Github repository.
I posted some announcements about building a Moroccan Penetration Testing operating system, but I figured out that our community was not contributing. I was contacted by some friends which really made me happy because they were ready to help. However, I learned that I was not experienced enough to lead such projects. I have been looking for books and articles about building an operating system, and I found that I should first learn about computer architectures. This was a big step in my path to understand how operating systems work. I took computer architectures as a course at Al Akhawayn University in Ifrane, and it helped me a lot to achieve my goal. After that, I started reading about the conception of Linux Kernel. Then, I learned about cross compilers, makefiles, bootloaders, and many other topics.
I agree that building an operating system is not an easy task at all because it needs a good background in what I have discussed before in addition to passion. You cannot build an operating system if you do not master the programming language of your choice. Moreover, there are no clear or complete tutorials about how to build an operating system at least for what I have seen so far in operating systems tutorials or articles. You cannot copy and paste code because such topics are not usually discussed in StackOverflow. Another big issue is that if you found an operating system that is already implemented somewhere, it is hard to understand its logic because each programmer sees things differently. The bible of building an operating system is www.osdev.org , but it provides an abstract understanding of the concepts and sometimes a small implementation of a feature. You should know that OS developers community is hard because they will not help you if they found that you are copying someone else code or if they see that you do not understand even what you are doing. However, they are helpful a lot when it comes to complex problems, and I have faced this when I was implementing interrupts. So, please if you want to build you own operating system make sure that you understand well the theory and the programming language of your choice.
Operating systems design teaches you how to believe. You will notice that a lot of hexadecimal codes are already defined by manufacturers. For instance, the boot magic code 0x1badb002, ports connections for different devices, PCI devices IDs, PCI vendors IDs… . They tend to push you just to believe in them.
At this specific moment of my life, I have to acknowledge some people who helped me a lot in achieving this either by supporting me, giving me feedback, or helping me with design decisions. I would like to thank Viktor Engelmann for his series in YouTube “Make your own OS”. He gave me insights about how to build an operating system even if some parts are not well explained because some concepts are hard. I have been following his design for major parts of oudadOS. I would like to thank osdev community for the awesome wiki. I would like to thank Saad Taame for helping me with some design decisions and for giving me feedback when I get stuck in implementing some parts. I would like to thank Dr. Hamid Harroud and Abdelhamid Limami for supporting me to finish this work. I would like to thank also Abdelghafour Mourchid for taking care of the graphical side of the operating system and for the awesome logo.
I hope that the Moroccan community will contribute one day in building a different operating system for penetration testing because it is a great feeling to see that you have built an operating system. It is like your child. You really love it. Maybe some of you will say that there are plenty of penetration testing operating systems. I would argue that by saying that if other developers followed this idea, we would not see BugTraq, ParrotOS, BackBox, DEFT, BlackArch, and many others. I strongly believe that we have the ability to make it and that we need just to believe in it.
oudadOS is made with in Morocco, and it highly contributes to my ultimate goal which is sharing code, love, and knowledge. I hope that oudadOS will be an added value to the community. I wish it can motivate some of you to contribute to an OS, give you a better understanding of operating systems, or at least give you an overall idea about how operating systems are built.