About AtomicityOS

About AtomicityOS

Welcome.  This blog chronicles the design, implementation, development, and (maybe some day) execution of my home-grown operating system with the working title "Atomicity".

What is it?

Atomicity is an operating system written primarily in C with various assembly language sections where required.  It targets the x86 processor, and although some consideration is given to 64-bit processing this isn't a goal of the project.

I have taken inspiration from many sources such as Minix, Linux, FreeBSD, AmigaDOS, and the OS Dev community, but the ultimate design is unique (no-one else would do it this badly) and will probably never be as polished as any of these.

The approach I am taking to the development of Atomicity is probably quite unorthodox as there is no over-arching plan for the progression of the system, and I tend to jump around between development topics which may appear to have very little relevance to operating system development at all.  However, everything has its place I have good reasons for the sections I am exploring, even if they may not be immediately apparent.  If I ever post the SQL code that allows creation of basic images in a database, you'll see what I mean.

General Principles

The primary goal of the project is to learn.  The project is to help me to develop a better understanding of how operating systems do things, to generally expand my knowledge of software development as a whole, and to give me more techniques that I can apply to my real (i.e. paid) development.  (However, it has lead to frustration when working in high-level languages such as "But if this were C, I'd just manipulate the pointer".)

A secondary goal of the project is to create a working OS.  This goal may or may not ever be realised.

I aim for the development to focus on flexibility before performance.  I'm not going to deliberately write really slow code (if I can help it), but at the same time I'm not going to eek out every percentage point of speed from the algorithms used, especially where such optimisation would significantly impact the readability of the code.  The Amiga provided an incredibly rich and responsive interface with a 7MHz processor the likes of which is rarely seen these days, so with a few GHz in a typical target platform, I'm hoping I can get somewhere near.

Another main principle during the development is to write everything myself.  If I ever decide I need an XML library, I'll write one.  This may sound like a "Not Invented Here" approach, but the main goal is to learn by doing.
This approach hasn't always been practical, so I have used some elements of third-party code temporarily to allow some other part of the development to progress.
The first of these is a printf implementation which has since been superseded by my own, more complete version.
The second of these is the Grand Unified Bootloader.  I have spent a significant amount of time working out all the permutations and required functions of a bootloader environment and came up with a complete end-to-end design (this may get posted).  However, it would have been a significant investment in time to develop, and would never have supported as many systems, devices and configurations as GRUB does.  I would like to address this at some point in the future, but I probably won't.

About this Blog

The development of the system has been a long-term project for a number of years already.  I have amassed a lot of code and a lot of log entries already, most of which will be back-dated into this blog.

Development of this project is always sporadic.  I have other commitments and sometimes there are months where I cannot find time to progress anything.

The topics covered will mainly be operating system development related, but I'm likely to delve into topics not normally associated with this field such as computers graphics, audio synthesis, game development, etc.

I reserve the right to post random gibberish and nonsensical thoughts in order to attempt to generate motivation to actually write code.  I shall endeavour to mark these as gibberish where possible so as to not be confusing to the unwary reader.

Intended Audience

Software developers are most likely to find this blog of interest, but it is entirely possible that the content here will appeal to no-one at all.

Credits

All of the content on here has been authored by me, including the blog entries and any code, but this may change in future.  I would like to thank Pink, Richard, Leah and Chris for all the help they have provided in filling in gaps in my knowledge, providing advice and assistance when things don't go to plan, and for all the other help they have been during this project.

Licensing

I retain copyright to all the blog content and code posted here.  No permission is given to reproduce any of my content from this site.  Individual requests for permission to reproduce my content may be considered.

Once I work out a better license model, I will likely be moving all of my posted code on this blog into the public domain, but that is not yet.  By all means learn from this code, but don't copy it.