- C 98.2%
- Shell 1.2%
- Makefile 0.3%
- Assembly 0.1%
- Python 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| boot | ||
| drivers | ||
| include | ||
| kernel | ||
| programs | ||
| screenshots | ||
| sdk | ||
| third-party/terminus-font | ||
| .gitattributes | ||
| .gitignore | ||
| deploy.sh | ||
| LICENSE | ||
| linker.ld | ||
| Makefile | ||
| qemu.sh | ||
| README.md | ||
| release.sh | ||
🐟 Koi-DOS
A DOS-like operating system for modern PCs. Boots from a USB stick on a real UEFI machine. No Windows or Linux underneath.
⬇️ Download · What it can do · Commands · FAQ
🚀 Try it in 3 steps
- Download
koi-dos-0.9.img.zipfrom Releases and unzip it. - Write it to a USB stick with Rufus (choose DD image mode) or balenaEtcher.
- Boot from the stick (usually F12, F11, F8 or Esc at power on).
You get a Z:\> prompt. Look around, then type SETUP if you want to install it on a disk.
Warning
SETUPerases the whole disk you pick. It never offers the stick you booted from and asks you to type the disk name to confirm, but if the computer has anything important on it, try Koi-DOS in a virtual machine first.
🖥️ Run it in a virtual machine instead
VirtualBox: new machine, type Other, version Other/Unknown (64-bit).
In System, tick Enable EFI. Attach koi-dos-0.9.vdi to the SATA controller.
QEMU (Linux):
qemu-system-x86_64 -m 2G -machine q35 -drive format=raw,file=koi-dos-0.9.img \
-drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/ovmf/OVMF_CODE.fd
✨ What it can do
| 💻 Feels like DOS | Z:\> prompt, dir, copy, cd, batch files, AUTOEXEC.BAT, pipes and > redirection |
| 📁 Real files | Reads and writes FAT32 on hard drives, SSDs (SATA and NVMe) and USB sticks. Long file names work |
| ⌨️ Keyboard and mouse | PS/2 and USB, touchpads with two-finger scrolling. English, Russian, Ukrainian and Greek layouts (Alt+Shift) |
| 🌐 Internet | Wired Intel network cards and phone USB tethering. ping, downloads over HTTP and HTTPS |
| 📦 Package manager | dosget install fetches signed programs and drivers from the internet |
| 🔊 Sound | Built-in sound on most laptops and desktops (Intel HD Audio). Plays WAV files |
| 🖼️ Pictures | Views PNG, JPEG, GIF and BMP |
| 🗂️ File manager | Koi-Commander: two panels, mouse, file viewer and notepad |
| 🎮 Games | A pack of seven games, DOOM (bring your own DOOM.WAD), Quake shareware |
| 🧵 Modern inside | 64-bit kernel written from scratch, programs in their own protected memory, threads, TLS 1.3 |
🚫 What it cannot do (yet)
- ❌ Wi-Fi. Use a network cable or USB tethering from your phone.
- ❌ Old DOS programs. It looks like DOS but runs its own 64-bit programs, not MS-DOS
.EXEor.COMfiles. - ❌ Old BIOS-only PCs. It needs a UEFI machine (almost everything from 2012 onward).
- ❌ Secure Boot. Turn it off in the firmware settings.
- ❌ NTFS, exFAT, ext4. Only FAT32 disks are readable.
- ❌ Windows. One program owns the screen at a time.
- ❌ Printers, Bluetooth, webcams.
- ⚠️ 3D graphics only on Intel HD 2000/3000 (Sandy Bridge) and in QEMU.
📖 Commands
Type help at the prompt for the short list. Anything that is not a command is started as a program.
📁 Files and folders
| Command | What it does |
|---|---|
dir [path] [/w] |
List files. /w shows names only |
cd <folder> |
Go into a folder. cd .. goes up |
Y: |
Switch to drive Y: |
type <file> |
Show a text file |
more <file> |
Show a file one screen at a time |
copy <from> <to> |
Copy a file. copy *.txt backup works too |
xcopy <folder> <folder> |
Copy a folder with everything inside |
del <file> |
Delete a file (erase also works) |
ren <old> <new> |
Rename (rename also works) |
md <name> |
Make a folder (mkdir) |
rd <name> |
Remove an empty folder (rmdir) |
tree [path] |
Draw the folder tree |
attrib [+-RHSA] <file> |
Show or change read-only, hidden, system, archive |
find "text" [file] |
Lines containing the text. /v /c /n /i |
sort [file] |
Sort lines. /r reverses |
edit <file> |
Text editor |
show <picture> |
Picture viewer |
play <file.wav> |
Play a sound file |
💽 Disks
| Command | What it does |
|---|---|
vol, label |
The volume name |
disk |
All disks and partitions |
chkdsk [d:] [/F] |
Check a disk. /F repairs |
format <partition> |
⚠️ New empty filesystem. Erases everything on it |
part <disk> |
⚠️ New partition table. Erases the whole disk |
setup |
⚠️ Install Koi-DOS on a disk |
sysvol [d:] |
Which drive the system lives on |
🌐 Network and packages
| Command | What it does |
|---|---|
net |
Network status |
net start |
Get an address automatically (DHCP) |
net set <address> ... |
Set an address by hand |
ping <host> |
Check that a host answers |
get <host>[/path] [file] |
Download a page or file |
dosget list |
Programs available to install |
dosget install <name> |
Install a program |
dosget update |
Update everything installed |
dosget drivers |
Install drivers this computer needs |
dosget remove <name> |
Uninstall |
drivers |
Which drivers are loaded |
⚙️ System
| Command | What it does |
|---|---|
ver |
Version and build |
mem |
Memory, devices and drives |
pci |
Everything on the PCI bus |
date [y-m-d], time [hh:mm] |
Show or set the clock |
layout [en|ru|uk|el] |
Keyboard layout |
screen [WxH|max|default] |
Screen resolution |
color |
Change the prompt colours |
sound, sound volume <0-100> |
Sound device and volume |
beep [hz] [ms] |
Play a tone |
set [name=value] |
Environment variables (PATH, PROMPT) |
start <program> |
Run a program without waiting for it |
reg |
Registry editor for the prompt |
log [file] |
The system log. log KOI.LOG saves it to a file |
selftest, crypto |
Self checks |
keys, pointer |
Test the keyboard and the mouse |
cls |
Clear the screen |
shutdown, reboot |
Power off or restart |
credits |
Who made this |
📜 Batch files
Put commands in a .BAT file and run it by name. AUTOEXEC.BAT in the root of the system drive runs at startup.
echo, rem, pause, goto label, if exist, if errorlevel, if a==b, if not, for %%f in (...) do, call, shift, %1...%9, %NAME%. Ctrl+C stops a program or a batch file.
@echo off
if "%1"=="" goto usage
copy %1 Y:\backup
echo Saved %1
goto end
:usage
echo Usage: backup file
:end
↪️ Redirection and pipes
dir > list.txt save output to a file
echo more >> list.txt add to a file
sort < list.txt read input from a file
dir | find "BAT" pass output to another command
📦 Packages
Installed with dosget install <name>:
| Package | |
|---|---|
commander |
Koi-Commander, two-panel file manager |
games |
Seven games in one program |
dosfetch |
System info screen |
lua |
The Lua programming language |
doom |
DOOM (needs your own DOOM.WAD) |
quake |
Quake shareware episode (needs 3D graphics) |
Drivers (i915 for Intel HD 2000/3000, virtgpu for QEMU) are installed by dosget drivers.
❓ FAQ
Why is the system drive Z: and not C:?
A: and B: were for floppies, C: was simply the first free letter. Koi-DOS starts from the other end: the system is Z:, other drives get Y:, X: and so on.
My computer does not boot from the stick.
Turn on UEFI boot in the firmware settings and turn off Secure Boot. Legacy/CSM mode is not supported.
No internet.
Only wired Intel network cards and USB tethering from a phone work. Plug in, then type net start. net shows what was found.
Something does not work on my hardware.
Type log KOI.LOG, copy that file to a USB stick and open an issue with it attached.
🛠️ For developers
Building from source
On Fedora:
sudo dnf install gcc binutils mingw64-gcc qemu-system-x86-core edk2-ovmf dosfstools mtools
make # loader, kernel, programs, drivers, sdk/
./qemu.sh # build test disks and boot in QEMU
Debian/Ubuntu: gcc binutils gcc-mingw-w64-x86-64 qemu-system-x86 ovmf dosfstools mtools. Windows: use WSL2.
qemu.sh settings: KEEP_IMAGE=1 reuses disks, KOI_SPLIT=1 uses the installed layout, KOI_AUDIO_WAV=out.wav records sound. Extra arguments go to QEMU.
Writing programs
sdk/ has everything needed: koi.h, koicc and the linker script. See sdk/README.md.
#include "koi.h"
int main(const char* arguments) {
koi_print("Hello from Koi-DOS!\n");
return 0;
}
sdk/koicc hello.c # makes HELLO.EXE
Source layout
| Folder | |
|---|---|
boot/ |
UEFI loader |
kernel/ |
kernel, drivers, shell, network |
drivers/ |
loadable drivers (.SYS) |
programs/ |
built-in programs and libraries |
sdk/ |
kit for writing programs |
include/ |
shared headers |
💖 Credits
Made by Koi Ayame. Font: Terminus by Dimitar Toshkov Zhekov.
Built through intense pain and heartbreak. I miss you so much... Rest in peace, @nonconformie.
📄 License
MIT, see LICENSE. Programs installed as packages may have their own licences. The font is under the SIL Open Font License 1.1.