JanStanleyWatt / ors

An experimental OS implementation with Rust

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ors

ors is an experimental x86_64 OS implementation with Rust.

Setup

# Rust nightly required at the moment
rustup default nightly

# Build ors-loader.efi and ors-kernel.elf
make

# Run on QEMU
make qemu
# ... is equivalent to
./qemu/make_and_run_image.sh \
    target/x86_64-unknown-uefi/debug/ors-loader.efi \
    target/x86_64-unknown-none-ors/debug/ors-kernel.elf

Comparison

ors is based on MikanOS, blog_os (Second Edition), and xv6.

ors MikanOS blog_os xv6
Target x86_64 x86_64 x86_64 x86 1
Written in Rust C++ Rust C
Boot by UEFI BIOS UEFI BIOS Legacy BIOS 2 Legacy BIOS
Screen Rendering GOP by UEFI GOP by UEFI VGA Text Mode VGA Text Mode
Serial Port 16550 UART - 16650 UART 16650 UART
Hardware Interrupts APIC APIC 8259 PIC APIC
Keyboard Support PS/2 USB (xHCI) PS/2 PS/2
Mouse Support - USB (xHCI) - -
Block Support VirtIO over PCI - 3 - IDE 4
Timers APIC + ACPI PM APIC + ACPI PM 8259 PIC APIC
Multitasking Preemptive Preemptive WIP 5 Preemptive
File System FAT FAT 6 - original 7

Roadmap

  • Complete ゼロからの OS 自作入門
    • Chapter 0-3: Boot loader
    • Chapter 4-5: Screen rendering
    • Chapter 6, 12: User inputs
    • Chapter 7: Interrupts
    • Chapter 8: Physical memory management
    • Chapter 9-10 (skipped)
    • Chapter 11: Timers
    • Chapter 13-14: Multitasking
    • Chapter 15-16: Terminal and comamnds
    • Chapter 17: File system
    • Chapter 18: User applications
    • Chapter 19: Paging
    • Chapter 20: System calls
    • TBD
    • Chapter 27: Application memory management
    • TBD
  • Complete Writing an OS in Rust (second edition)
    • Bare Bones
    • Interrupts
    • Memory Management
    • Multitasking (Incomplete)
  • Compare with xv6
  • Enable multicore
  • Try to implement TCP protocol stack

Resources

Footnotes

  1. Maintaining the x86 version have stopped, and switched to the RISC-V version

  2. UEFI is planned

  3. Supports only very limited reading (by UEFI Block I/O)

  4. RISC-V version of xv6 supports VirtIO over MMIO

  5. blog_os supports Cooperative Multitasking at the moment

  6. Read-only support

  7. Simpler but similar to modern UNIX file systems, including crash recovering

About

An experimental OS implementation with Rust

License:BSD 3-Clause "New" or "Revised" License


Languages

Language:Rust 98.4%Language:Assembly 0.9%Language:Shell 0.7%Language:Makefile 0.1%