badly written open-source generic operating system made for fun written in rust! i am attempting to make something like ChromeOS with native wasm support this is my first OS!
star the repo!
you need a linux system with bash
, git
, xorriso
, make
, cargo
and qemu-system-x86_64
(you need kvm otherwise run with no-kvm
argument) to run do
cargo run
to build do
cargo build
this will make an iso navios.iso
to run without kvm do
cargo run -- no-kvm
- basics (x86_64: IDT, GDT, interrupts, ACPI, APIC, APIC keyboard, APIC timer, ...)
- pmm (bitmap allocator)
- linked-list heap allocator
- generic keyboard driver
- ps/2 scancode set 1 support
- basic ring0 framebuffer terminal
- scheduler with one-thread processes
- VFS with RamFS (ustar unpacking support)
- init ramdisk
- userspace:
- resources
- userspace elf executing
- argc && argv
- C stdlib
- alot of syscalls (TODO: make a list)
- program break and (sbrk (untested))
currently using the limine bootloader
note: i dont know much about osdev (this is my first OS), stuff prefixed with ? is missing info and more stuff may be added in the feature
- sync
- improve the peformance of the frame_allocator it takes 5 seconds to map 7*4 mbs without kvm?
- replace the current linked list allocator with a good buddy allocator
- x86_64 basics
- GDT
- interrupts
- APIC
- framebuffer terminal
- framebuffer terminal
- scrolling
- locking the terminal (threading, context switching)
- maybe try to RWLock the terminal instead of just locking the viewport?
- terminal shell process
- ACPI parsing
- RSDT parsing
- XSDT parsing
- MADT parsing
- FADT parsing
- DSDT parsing (not planned, acpi sucks)
- ACPI powermangment
- keyboard
- ps/2 keyboard interrupt handling
- usb keyboard handling
- keyboard driver
- key mapping
- memory
- pagging
- kernel heap
- a slab allocator
- move more stuff to linked list and rely more on the slab allocator
- figure out how should i give apps memory?
- higher half kernel
- fs
- basic vfs
- ramfs
- fat32
- networking
- OSI Model
- Layer 1:
- Manage Network Driver (NIC)
- Layer 2:
- Manage data from the layer 1:
- NIC (Manage the physical network)
- Ethernet frame
- ARP (For the ip adress)
- Manage data from the layer 1:
- Layer 3:
- IPv4
- ICMP (For commande like ping)
- Layer 4:
- TCP
- UDP
- Layer 1:
- OSI Model
- GUI
- ?
- apps
- context switching, and simple processes
- more advanced context switching, (pid, name, each process has it's own page table)
- process resources
- the ability for each process to have multiple threads
- userspace
- ELF support
- wasm VM
- more wasm