View on GitHub

PR-OS

A x86 Operating System based on existing kernel analysis

Developer Guide

This is a installation and verification guidelines for the tools used in this project

Git

  1. Install and verify the version
     # to install git via the terminal
     sudo dnf install git -y
    
     # to verify git version
     git --version
    
    • for debian and ubuntu replace dnf with apt
    • for arch replace dnf with pacman -S
  2. setup and verification of username and user email
     # to set username and email
     git config --global user.name "username"
     git config --global user.email "email@email.com"
    
     # to check username and email
     git config --global user.name
     git config --global user.email
    
    • the user email should be the same as the one used in GitHub account
  3. setup of ssh key
     # to set up ssh 
     ssh-keygen -t ed25519
    
    • this generates a private and a public file
    • add the public file to the GitHub account
    • it is recommended to use ssh
  4. Cloning a remote repository to the local device
     # this is to clone a remote repository to the local disk
     git clone <ssh_link>
    
  5. Commands
     # to get changes from the remote repository and merge them to the local machine
     git pull
    
     # tells the status of new, changed, or unchanged files
     git status
    
     # adds all the newly created, modified, and deleted files into 	the staging area
     git add .
    
     # adds the specific files to the staging area
     git add <file_name>
    
     # commits the changes in the staging area with message
     git commit -m "enter the commit message"
    
     # opens an text editor (vim, nano) to write the commit message for the staging area
     git commit 
    
     # creates a tag with a message for the commit, useful for versioning
     git tag -a <tag_number> -m "tag message"
    
     # pushes the specified tag to the remote repository
     git push origin <tag_number>
    
     # pushes the committed changes to the remote repository sometimes the main branch is also known as master
     git push origin main
    
     # shows the detailed information about the tag
     git show <tag_number>
    
     # shows all the tag that are in the repository
     git tag
    
     # shows the commit history
     git log
    

VIM

  1. Installation and Verification
     # to install vim
     sudo dnf install vim -y
    
     #for verification and version detail
     vim --version
    
    • for debian and ubuntu replace dnf with apt
    • for arch replace dnf with pacman -S
  2. To create/open a file in vim
     vim <filename>
    
  3. Basic Vim Keybindings
     modes:
     i => insert mode
         used for text insertion
     v => visual mode 
         used for text selection
     Esc => normal mode
         used for text navigation
    	
    	
     Navigation:
     h 	=> left
     j 	=> down
     k 	=> up
     l 	=> right
     gg 	=> first line of the file
     G 	=> last line of the file	
     w 	=> next word
     b	=> previous word
     :<line number> 	=> move to the specified line number
     use of arrow keys is also supported
    
    
     exiting and saving vim:
     :q	=> exit (only works if file is not changed)
     :q!	=> force exit
     :wq => saving and exiting
     :w	=> saving the file
    	
    

    For in depth vim usage please refer: Vim book converted by Tomas Vasko

Rust + Cargo + Rust Nightly

  1. Installing stable Rust
     # command to download and run the shell script installs Rust, cargo, and Rustup and adds the path to the environment
     curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    
     #  to load Rust into the current shell, alternatively you could close and reopen the terminal
     . "$HOME/.cargo/env"
    
  2. Install Rust Nightly and rust-src
     # nightly provides us with experimental features, and support for unstable language support 
      	rustup install nightly
    	
     #  installs the rust source code, it comes with libraries that are essential for low level, bare metal programming
     rustup component add rust-src
    	
     #  to load Rust into the current shell, alternatively you could close and reopen the terminal
     . "$HOME/.cargo/env"
    
  3. verify the installation
     # shows version information for rustc which is the rust compiler
     rustc --version
      	
     # shows the version information for cargo which is the rust package managger
     cargo --version
    	
     # shows the current active setup 
     rustup show
    
    • the project should use the same version throughout the development phase
    • cargo : cargo 1.93.0 (083ac5135 2025-12-15)
    • rustc : rustc 1.93.0 (254b59607 2026-01-19)
    • rustc nightly: rustc 1.95.0-nightly (9e79395f9 2026-02-10)
  4. RUST NIGHTLY IMPORTANT
    • DO NOT SET Rust Nightly as the default it is not recommended
     # this make nightly default everywhere, not recommended
     rustup default nightly
    
    • instead use rust nightly when necessary i.e the project folder only as shown below:
     # makes a new directory for the os
     mkdir my_os
    
     # navigating into that directory
     cd my_os
    
     # making it so that rust nightly is default only for this project folder and not the whole system
     rustup override set nightly
    
  5. Rust commands
     # a new rust project
     cargo new my_project
    
     # existing project as a rust project
     cd existing_project
     cargo init
    
     # compile in debug mode
     cargo build
    
     # compile in release mode
     cargo build --release
    
     # compile and run in debug mode 
     cargo run
    
     # check if the code compiles
     cargo check
    
     # compile for a custom target 
     cargo build --target <custom file to compile to> 
     #for example if we want to compile to i686-unknown-none.json
     # this means using i686(32 bit architecture)
     # compile for bare metal programming no vendor
     # there is no os
     # as a json file
     cargo build --target i686-unknown-none.json
    
     # compile bare-metal + build core library 
     cargo build -Z build-std=core --target i686-unknown-none.json
    
     # testing in QEMU
     qemu-system-i386 -kernel <path to the binary file that needs to be tested>
     # says qemu to use 32 bit architecture
     # telling we are testing a kernel
     # and providing the path to the kernel binary file
    
     qemu-system-i386 -kernel target/i686-unknown-none/debug/my_os.bin
     # target/<target-name>/<build-mode>/<your-binary>
     # syntax:  creates a target folder within the main project with a sub folder and builds our binary there
    
    

Microsoft Edge

  1. install using Flatpak, flatpak comes installed in fedora by default
     # to check the package id for the app, and if it exits	
     flatpak search edge
    
     # install edge from flathub
     flatpak install flathub com.microsoft.Edge
    
  2. to update edge
     flatpak update com.microsoft.Edge
    
  3. to uninstall edge
     flatpak uninstall com.microsoft.Edge
    
    
  4. or just use the Software application, or you could install flatpak in your disto as well
    • Arch: sudo pacman -S flatpak
    • Debian, Ubuntu: sudo apt install flatpak

QEMU

  1. Installation
     sudo dnf install @virtualization -y
    
    • for other distros, OS, asd source code compilation please refer: Download QEMU
  2. Verification
     # for 32 bit verification
     qemu-system-i386 --version
    
     # for 64 bit verification
     qemu-system-x86_64 --version
    
  3. the project uses the following versions:
    • qemu-system-i386 –version: QEMU emulator version 10.1.3 (qemu-10.1.3-1.fc43)
    • qemu-system-x86_64 –version: QEMU emulator version 10.1.3 (qemu-10.1.3-1.fc43)

Gnome Boxes

  1. install using Flatpak, flatpak comes installed in fedora by default
     # to check the package id for the app, and if it exits	
     flatpak search boxes
    
     # install edge from flathub
     flatpak install flathub  org.gnome.Boxes
    
  2. to update GNOME boxes
     flatpak update  org.gnome.Boxes
    
  3. to uninstall GNOME boxes
     flatpak uninstall org.gnome.Boxes
    
    
  4. or just use the Software application, or you could install flatpak in your disto as well
    • Arch: sudo pacman -S flatpak
    • Debian, Ubuntu: sudo apt install flatpak
  5. or it can be installed from dnf
     # to search for the application
     dnf search gnome-boxes
    
     # to install the application 
     sudo dnf install gnome-boxes
    
  6. after installation
    1. open the application
    2. click on the + icon on the top left corner of the screen
    3. either choose your iso or browse and download the ones available from the app
    4. select the firmware, memory, and storage specifications
    5. set up the virtual machine

LibreOffice

  1. Install from dnf
     # to search for the application
     dnf search libreoffice
    
     # to install the application 
     sudo dnf install libreoffice
    
    • for debian and ubuntu replace dnf with apt
    • for arch replace dnf with pacman -S
  2. to check the installation
     libreoffice
     # or
     libreoffice --version
    

Google Docs, Drive, Mail, Meet, Sheet, Slides

  1. open Microsoft Edge
  2. create a Google account or sign in
  3. search for the service that needs to be used use it

Github

  1. open Microsoft Edge
  2. search for GitHub
  3. create a account or sign in
  4. add a ssh key : mentioned in git section
  5. create a repository, or for a repository and start using the service

Apostrophe

  1. install using Flatpak, flatpak comes installed in fedora by default
     # to check the package id for the app, and if it exits	
     flatpak search apostrophe
    
     # install apostrophe from flathub
     flatpak install flathub  org.gnome.gitlab.somas.Apostrophe
    
  2. to update GNOME apostrophe
     flatpak update  org.gnome.gitlab.somas.Apostrophe
    
  3. to uninstall GNOME apostrophe
     flatpak uninstall org.gnome.gitlab.somas.Apostrophe
    
    
  4. or just use the Software application, or you could install flatpak in your disto as well
    • Arch: sudo pacman -S flatpak
    • Debian, Ubuntu: sudo apt install flatpak
  5. or it can be installed from dnf
     # to search for the application
     dnf search apostrophe
    
     # to install the application 
     sudo dnf install apostrophe
    
    • just use flatpak

Microsoft Project

  1. Open windows virtual machine in a virtualization software like GNOME Boxes or use a windows based machine
  2. Open the browser
  3. Search for office customization tool
  4. Customize the file and export it as Configuration.xml
  5. Create a folder named office
  6. Move the file to the office folder
  7. Again search for office deployment tool in the browser
  8. run the office deployment tool as administrator
  9. extract the files at the office folder created earlier
  10. Delete all the files created by office deployment tool not the one created through customization tool
  11. open command prompt as administrator in the folder and type
    setup.exe/configure configuration.xml
    
  12. after installation login with the email provided by the university/any other email having proper ms project access

Notepad++

  1. Open a browser
  2. browse to notepad++
  3. select the version needed
  4. download based on the architecture that is required

HTML, CSS, JS

  1. no need to install HTML, CSS, JS
  2. create a file with the correct extentions such as index.html, style.css, scripts.js
  3. and make the webpage

NASM (Netwide Assembler)

  1. install NASM
     sudo dnf install nasm
    
  2. verify installation
     nasm --version
    
    • the version used in this project is : NASM version 2.16.03 compiled on Jul 24 2025

    • for debian and ubuntu replace dnf with apt
    • for arch replace dnf with pacman -S

GCC

  1. install gcc
     sudo dnf install gcc -y
    
  2. verify gcc version
     gcc --version
    
    • the project uses: gcc (GCC) 15.2.1 20260123 (Red Hat 15.2.1-7)

    • for debian and ubuntu replace dnf with apt
    • for arch replace dnf with pacman -S

GDB (The GNU Project Debugger)

  1. install gdb
     sudo dnf install gdb -y
    
  2. verify gdb version
     gdb --version
    
    • the project uses: GNU gdb (Fedora Linux) 17.1-1.fc43

    • for debian and ubuntu replace dnf with apt
    • for arch replace dnf with pacman -S

DD

  1. install dd
     sudo dnf install dd -y
    
  2. verify dd version
     dd --version
    
    • the project uses: dd (coreutils) 9.7

    • for debian and ubuntu replace dnf with apt
    • for arch replace dnf with pacman -S

MAKE

  1. install make
     sudo dnf install make -y
    
  2. verify make version
     make --version
    
    • the project uses: GNU Make 4.4.1

    • for debian and ubuntu replace dnf with apt
    • for arch replace dnf with pacman -S

Binutils

  1. install binutils
     sudo dnf install binutils -y
    
  2. verify binutils version
     as --version
     ld --version 
    
    • the project uses: GNU assembler version 2.45.1-4.fc43; GNU ld version 2.45.1-4.fc43

    • for debian and ubuntu replace dnf with apt
    • for arch replace dnf with pacman -S