Skip to content
/ ViOS Public template

ViOS — A handcrafted 64-bit multithreaded x86 OS kernel built in Assembly and C, designed as a learning platform and tribute to low-level hacker culture.

Notifications You must be signed in to change notification settings

PinkQween/ViOS

Repository files navigation

ViOS – A Custom x86 Multithreaded Kernel

🧠 A handcrafted 64-bit x86 Operating System
🕯️ Built in memory of Vio from SiegedSec

ViOS Logo


📊 Repository Stats

License: MIT Platform: x86_64 GitHub Repo Size Files in Repo Last Commit Release Downloads


ViOS Toolchain Versions

The following components are versioned together and must be used in compatible versions:

GitHub Release GitHub Release GitHub Release


🔧 Build Status

Build: Libc Build: Binutils Build: OS (ViOS)


🧠 Community and Contribution

GitHub Discussions Forks Commit Activity Total Issues Total PRs

📚 Table of Contents


🕯️ In Memory of Vio

Vio was a voice for transparency, a low-level coder, and a hacker who believed in teaching others how systems truly work. This OS is a tribute to that spirit. It is open, raw, and built to teach by showing—not just telling.


⚙️ About ViOS

ViOS is a learning-focused multithreaded operating system for the x86 (32-bit) architecture. It features a full bootloader-to-kernel stack written in Assembly and C, and aims to be both an educational platform and a statement about digital autonomy.


🧩 Features

  • 🧬 Real Mode Bootloader (Assembly)

  • 🧠 Long Mode kernel (C)

  • 🧷 Paging, heap, memory management

  • 📁 FAT16 Filesystem parser

  • 🧵 Process and task switching (multitasking support)

  • 🧩 ELF executable loader

  • 🔐 Virtual memory

  • 📟 IO port & IRQ support

  • 🌀 Disk reading/streamer layer

  • ⌨️ Keyboard driver

  • 💬 Minimal shell (WIP)

  • 🛠️ Designed for use with GDB and QEMU


🗂️ Project Structure

.
├── bin
│   ├── kernel.bin
│   ├── kernel.elf
│   └── ViOS.efi
├── build.sh
├── clean.sh
├── images
│   └── logo.png
├── mnt
├── README.md
├── run.sh
├── ViOS.c
├── ViOS.inf
├── ViOS.uni
├── ViOS64Bit
│   ├── assets
│   │   ├── blank
│   │   │   ├── blank_test.elf
│   │   │   ├── blank.c
│   │   │   ├── blank.elf
│   │   │   ├── build
│   │   │   ├── linker.ld
│   │   │   └── Makefile
│   │   ├── shell
│   │   │   ├── build
│   │   │   ├── linker.ld
│   │   │   ├── Makefile
│   │   │   └── src
│   │   │       ├── shell.c
│   │   │       └── shell.h
│   │   ├── simple
│   │   │   ├── build
│   │   │   │   └── simple.bin
│   │   │   ├── Makefile
│   │   │   └── src
│   │   │       └── simple.asm
│   │   └── stdlib
│   │       ├── build
│   │       ├── Makefile
│   │       └── src
│   │           ├── memory.c
│   │           ├── memory.h
│   │           ├── start.asm
│   │           ├── start.c
│   │           ├── stdio.c
│   │           ├── stdio.h
│   │           ├── stdlib.c
│   │           ├── stdlib.h
│   │           ├── string.c
│   │           ├── string.h
│   │           ├── vios.asm
│   │           ├── vios.c
│   │           └── vios.h
│   ├── build.sh
│   ├── compile_commands.json
│   ├── data
│   │   └── images
│   │       ├── bkground.bmp
│   │       ├── clsicon.bmp
│   │       └── fonts
│   │           └── sysfont.bmp
│   ├── Makefile
│   ├── run.sh
│   ├── src
│   │   ├── boot
│   │   │   └── boot.asm
│   │   ├── config.h
│   │   ├── disk
│   │   │   ├── disk.c
│   │   │   ├── disk.h
│   │   │   ├── gpt.c
│   │   │   ├── gpt.h
│   │   │   ├── streamer.c
│   │   │   └── streamer.h
│   │   ├── fs
│   │   │   ├── fat
│   │   │   │   ├── fat16.c
│   │   │   │   └── fat16.h
│   │   │   ├── file.c
│   │   │   ├── file.h
│   │   │   ├── pparser.c
│   │   │   └── pparser.h
│   │   ├── gdt
│   │   │   ├── gdt.asm
│   │   │   ├── gdt.c
│   │   │   └── gdt.h
│   │   ├── graphics
│   │   │   ├── font.c
│   │   │   ├── font.h
│   │   │   ├── graphics.c
│   │   │   ├── graphics.h
│   │   │   ├── image
│   │   │   │   ├── bmp.c
│   │   │   │   ├── bmp.h
│   │   │   │   ├── image.c
│   │   │   │   └── image.h
│   │   │   ├── terminal.c
│   │   │   └── terminal.h
│   │   ├── idt
│   │   │   ├── idt.asm
│   │   │   ├── idt.c
│   │   │   ├── idt.h
│   │   │   ├── irq.c
│   │   │   └── irq.h
│   │   ├── io
│   │   │   ├── io.asm
│   │   │   └── io.h
│   │   ├── isr80h
│   │   │   ├── heap.c
│   │   │   ├── heap.h
│   │   │   ├── io.c
│   │   │   ├── io.h
│   │   │   ├── isr80h.c
│   │   │   ├── isr80h.h
│   │   │   ├── misc.c
│   │   │   ├── misc.h
│   │   │   ├── process.c
│   │   │   └── process.h
│   │   ├── kernel.asm
│   │   ├── kernel.c
│   │   ├── kernel.h
│   │   ├── keyboard
│   │   │   ├── classic.c
│   │   │   ├── classic.h
│   │   │   ├── keyboard.c
│   │   │   └── keyboard.h
│   │   ├── lib
│   │   │   └── vector
│   │   │       ├── vector.c
│   │   │       └── vector.h
│   │   ├── linker.ld
│   │   ├── loader
│   │   │   └── formats
│   │   │       ├── elf.c
│   │   │       ├── elf.h
│   │   │       ├── elfloader.c
│   │   │       └── elfloader.h
│   │   ├── memory
│   │   │   ├── heap
│   │   │   │   ├── heap.c
│   │   │   │   ├── heap.h
│   │   │   │   ├── kheap.c
│   │   │   │   ├── kheap.h
│   │   │   │   ├── multiheap.c
│   │   │   │   └── multiheap.h
│   │   │   ├── memory.c
│   │   │   ├── memory.h
│   │   │   └── paging
│   │   │       ├── paging.asm
│   │   │       ├── paging.c
│   │   │       └── paging.h
│   │   ├── status.h
│   │   ├── string
│   │   │   ├── string.c
│   │   │   └── string.h
│   │   ├── task
│   │   │   ├── process.c
│   │   │   ├── process.h
│   │   │   ├── task.asm
│   │   │   ├── task.c
│   │   │   ├── task.h
│   │   │   ├── tss.asm
│   │   │   └── tss.h
│   │   └── types.h
│   └── utilities
│       └── updateBoot.sh
├── ViOSExtra.uni
└── ViOSStr.uni

42 directories, 127 files

🚧 Build Requirements

Install the following:

  • nasm – Assembler

  • x86_64-elf-gcc – Cross-compiler

  • qemu – Emulator (optional)

  • grub-mkrescue – ISO generation (optional)

macOS (Homebrew)

brew install nasm qemu x86_64-elf-gcc

Ubuntu/Debian

sudo apt install build-essential nasm qemu gcc-multilib grub-pc-bin xorriso

🚀 Building ViOS

To build the OS:

./build.sh

This will:

  1. Assemble the bootloader and kernel
  2. Compile all components
  3. Link the final kernel binary to ./bin/os.bin
  4. (If grub-mkrescue is installed) Generate a bootable ISO image as ./bin/os_disk.img

To emulate with QEMU:

qemu-system-x86_64 -kernel bin/os.bin

🌈 Why ViOS?

ViOS is a platform for those who want to go deep into systems programming. It’s handcrafted, educational, and designed to be extended. Whether you’re learning how memory works or building custom features, ViOS is for you.


🤝 Contributing

Contributions are highly encouraged and deeply appreciated. ViOS is more than an OS—it's a learning tool and a tribute to hacker culture. Whether you're fixing a bug, improving documentation, or building a whole new feature, your work helps keep the spirit of Vio and low-level computing alive.

🧭 How to Contribute

  1. Fork the Repo
    Click the Fork button on GitHub to create your own copy of the project.

  2. Clone Your Fork

    git clone https://github.com/YOUR_USERNAME/ViOS.git
    cd ViOS
  3. Create a New Branch

    git checkout -b your-feature-name
  4. Make Your Changes
    Add your code, fix bugs, write docs, or improve the build system.

  5. Test Your Changes
    Run ./build.sh and test the OS in QEMU:

    qemu-system-x86_64 -kernel bin/os.bin
  6. Commit & Push

    git add .
    git commit -m "Add: [short description of your change]"
    git push origin your-feature-name
  7. Open a Pull Request
    Go to your fork on GitHub and click New pull request.


🧼 Contribution Guidelines

  • Keep commits clean and descriptive.

  • If you’re adding new files, place them in a logical subdirectory.

  • Contributions can include:

    • 🔧 Bug fixes

    • 📄 Documentation

    • ⚙️ Drivers or kernel features

    • 💬 Shell improvements

    • 📦 File system or memory improvements


🧪 Ideas to Get Involved

  • 🌐 Implement networking functionality (e.g. TCP/IP stack or USB Ethernet)

  • 🌐 Implement networking functionality (e.g. TCP/IP stack or USB Ethernet)

  • 📦 Add support for system updates or patching mechanism

  • 🧠 Add new syscalls or user-mode execution support

  • 🛠️ Expand the shell with built-in commands (like ls, cat, cd)

  • 🧳 Build a lightweight init system or process manager

  • 🧾 Add support for EXT4 or exFAT filesystems

  • 🎮 Build demo applications or a TUI-based game on top of ViOS

  • 🧬 Add long mode (x86_64) support

  • 🧱 Add support for other architectures


🧵 Just Starting?

No worries! Open an issue with a question, start a discussion, or contribute to the documentation to get your feet wet. Everyone starts somewhere—and every little bit helps.

"The OS belongs to everyone who dares to open the binary."
– You, after your first PR


🪪 License

MIT License — use it, fork it, build on it.
Just don’t forget where you came from.


✍️ Author

Built and maintained by Hanna Skairipa
🔗 PinkQween on GitHub

"Not all hackers wear masks. Some wear purpose."
Vio (SiegedSec)

About

ViOS — A handcrafted 64-bit multithreaded x86 OS kernel built in Assembly and C, designed as a learning platform and tribute to low-level hacker culture.

Resources

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Contributors 7