An operating system written in Rust.
To build the OS, make sure to use nightly rust build.
This is required due to the usage of some unstable flags and properties that are
only available in the nightly build.
Note: the target has been specified in the
.cargo/config.toml.
cargo buildNote: if compiling for custom a target, you can override the target using the
--target <target>flag.
cargo build --target x86_64-fractal_os.jsonTo create a bootable image, we are using bootloader dependency. Alongside, we will
be using bootimage tool to compile the kernel and bootloader and link them together.
Make sure you have bootimage installed.
cargo install bootimageNote: to run bootimage and building the bootloader, you need to have the
llvm-tools-previewrustup component installed.
rustup component add llvm-tools-previewAfter the dependencies and tools have been installed, you can run cargo bootimage to create a bootable disk image.
cargo bootimageAfter generating a bootable image file, you can run Fractal easily on an emulator such as QEMU.
qemu-system-x86_64 -drive format=raw,file=target/x86_64-fractal_os/debug/bootimage-fractal_os.binYou can also run it with a cargo runner with the help of bootimage runner.
cargo runThe above will point to the last build of the bootable image and will start an instance of QEMU. You can also provide specific target and pass through QEMU options.
cargo run --target <target> -- [QEMU options]Everything after the -- will be passed to QEMU.
To run the custom test framework for FractalOS, you can run the cargo test command.
cargo testThis will run all the unit and integration tests.
Note: the integration tests are located under
/testsdirectory, whilst unit tests are self-contained in the/srcconcrete implementation files.
The kernel is using the compiler_builtins crate along with its mem implementation.
The functions however are quite unoptimized. There is currently an open PR against this issue,
so either this needs to use our own implementation of functions such as memcmp and memcpy or wait till this
PR gets merged in.
As a software engineer with a background in EEE (Electric and Electronic Engineering), I always love to find out what makes things tick, and what better way to find out how operating systems work together with all the hardware, and the software is other than writing your own?
At the same time of exploring what makes all the elements of a clean operating system, I am also learning Rust. I find it very enjoyable.
These are just some essentials that are on their way to be implemented. Not in order.