🧠 A handcrafted 64-bit x86 Operating System
🕯️ Built in memory of Vio from SiegedSec
The following components are versioned together and must be used in compatible versions:
- In Memory of Vio
- About ViOS
- Features
- Project Structure
- Build Requirements
- Building ViOS
- Why ViOS?
- Contributing
- Contribution Guidelines
- Ideas to Get Involved
- Just Starting?
- License
- Author
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.
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.
-
🧬 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
.
├── 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
Install the following:
-
nasm– Assembler -
x86_64-elf-gcc– Cross-compiler -
qemu– Emulator (optional) -
grub-mkrescue– ISO generation (optional)
brew install nasm qemu x86_64-elf-gccsudo apt install build-essential nasm qemu gcc-multilib grub-pc-bin xorrisoTo build the OS:
./build.shThis will:
- Assemble the bootloader and kernel
- Compile all components
- Link the final kernel binary to
./bin/os.bin - (If
grub-mkrescueis installed) Generate a bootable ISO image as./bin/os_disk.img
To emulate with QEMU:
qemu-system-x86_64 -kernel bin/os.binViOS 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.
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.
-
Fork the Repo
Click the Fork button on GitHub to create your own copy of the project. -
Clone Your Fork
git clone https://github.com/YOUR_USERNAME/ViOS.git cd ViOS -
Create a New Branch
git checkout -b your-feature-name
-
Make Your Changes
Add your code, fix bugs, write docs, or improve the build system. -
Test Your Changes
Run./build.shand test the OS in QEMU:qemu-system-x86_64 -kernel bin/os.bin
-
Commit & Push
git add . git commit -m "Add: [short description of your change]" git push origin your-feature-name
-
Open a Pull Request
Go to your fork on GitHub and click New pull request.
-
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
-
-
🌐 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
initsystem 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
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
MIT License — use it, fork it, build on it.
Just don’t forget where you came from.
Built and maintained by Hanna Skairipa
🔗 PinkQween on GitHub
"Not all hackers wear masks. Some wear purpose."
— Vio (SiegedSec)
