cykusz-rs is a toy operating system written in Rust programming language.
cykusz-screen0.webm
- x86_64 monolithic kernel
- 4-level paging
- Preemptive per-cpu scheduler
- ACPI (ioapic, lapic, acpica)
- VM (elf loader, shared memory, COW)
- Filesystem (ext2)
- Page / Inode / Directory cache
- TTY with ansi escape codes
- Network Stack (e1000, ETH, ARP, IP, UDP, TCP, ICMP, DHCP, DNS)
- IPC: Pipes / Unix Sockets / SHM
- VESA framebuffer
- PS/2: Keyboard / Mouse
- Storage: IDE / AHCI
- Networking: e1000
- Sound: Intel HDA
- libc (mlibc port)
- Exec / fork
- Threads
- Thread local storage
- Fs mount/umount
- Posix signals
- Futexes
- Shared libs
- mlibc (https://github.com/rafalmiel/mlibc/tree/cykusz) (upstream)
- ncurses (https://github.com/rafalmiel/ncurses/tree/cykusz)
- readline (https://github.com/rafalmiel/readline/tree/cykusz)
- zlib (https://github.com/rafalmiel/zlib/tree/cykusz)
- libressl (https://github.com/rafalmiel/libressl-portable/tree/cykusz)
- libpsl (https://github.com/rafalmiel/libpsl/tree/cykusz)
- pcre2 (https://github.com/rafalmiel/pcre2/tree/cykusz)
- libunistring (https://github.com/rafalmiel/libunistring/tree/cykusz)
- libiconv (https://github.com/rafalmiel/libiconv/tree/cykusz)
- libidn2 (https://github.com/rafalmiel/libidn2/tree/cykusz)
- libffi (https://github.com/rafalmiel/libffi/tree/cykusz)
- libexpat (https://github.com/rafalmiel/libexpat/tree/cykusz)
- binutils (https://github.com/rafalmiel/binutils-gdb/tree/cykusz)
- gcc (https://github.com/rafalmiel/gcc/tree/cykusz)
- llvm (https://github.com/rafalmiel/llvm-project/tree/cykusz)
- zstd (https://github.com/rafalmiel/zstd/tree/cykusz)
- coreutils (https://github.com/rafalmiel/coreutils/tree/cykusz)
- nyancat (https://github.com/rafalmiel/nyancat/tree/cykusz)
- bash (https://github.com/rafalmiel/bash/tree/cykusz)
- nano (https://github.com/rafalmiel/nano/tree/cykusz)
- less (https://github.com/rafalmiel/less/tree/cykusz)
- doom (with sound) (https://github.com/rafalmiel/cykusz-rs/tree/master/userspace/doom)
- netcat (https://github.com/rafalmiel/netcat/tree/cykusz)
- wget (https://github.com/rafalmiel/wget/tree/cykusz)
- python (https://github.com/rafalmiel/cpython/tree/cykusz)
You will need following packages to compile and run the os:
- rust (rustup)
- nasm
- qemu
- grub2
- parted
- docker (for userspace docker build)
git clone https://github.com/rafalmiel/cykusz-rs.git
git submodule update --init --recursive
rustup override set nightly
rustup component add rust-src
make
./disk-scripts/create_disk.sh
It is recommended to use docker for building userspace for stable environment.
./sysroot/make_docker_image.sh
./sysroot/toolchain_docker.sh
./sysroot/toolchain.sh
make run
make bochs
# Run only once to import the image into VirtualBox
./create_vbox_image.sh
make vbox