Organization & build flow
This project is currently divided into two sub-projects (interactive - links are clickable):
magnetite_os/boot- (WIP) custom legacy bootloader written in assembler and Rustmagnetite_os/kern- (planned) kernel written in Rustmagnetite_os/common- (WIP) common definitionsmagnetite_os/DECISIONS- decisions record
Toolchain requirements
This project primarily uses
maketo keep track of progress, resolve dependencies, and orchestrate component builds,cargo(from the Rustnightlytoolchain) to compile Rust sourcesnasmto compile x86 assembly sources,ld(frombinutils) to link binaries with custom layouts,mkfs.fatandmcopy(fromdosfstoolsandmtools) to generate FAT16 disk images containing system files, andbochsto run the project in a virtual machine
Testing
To build and debug the bootloader, simply run
make debug_boot
Rationale
This project explores how, and whether, the essential components of an operating system can be developed on top of a pure assembler + Rust development stack (as opposed to the traditional assembler + C/C++ stack).
In short, this project is for educational and self-growth purposes.
Key concepts & terminology
Specific concepts and terminology are more appropriately explained in their respective contexts:
- boot-related breakdown in
magnetite_os/boot/README.md, and - kernel-related breakdown in
magnetite_os/kern/README.md
Resources
This project, like many other hobby OS development projects, would be next to impossible without reading into relevant literature.
A good place to look up basics and details would be the OSDev wiki page.
Licensing
This project is licensed under the MIT license. A copy can be found in the project root folder.
Acknowledgements
This project uses portions derived from the Rust standard library, originally licensed under the MIT license.