- C 98.8%
- Shell 0.7%
- Makefile 0.2%
- Assembly 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| boot | ||
| desktop | ||
| drivers | ||
| include | ||
| kernel | ||
| programs | ||
| screenshots | ||
| sdk | ||
| third-party/terminus-font | ||
| .gitattributes | ||
| .gitignore | ||
| LICENSE | ||
| linker.ld | ||
| Makefile | ||
| qemu.sh | ||
| README.md | ||
| release.sh | ||
🌊 Mizu MX 27
A small desktop operating system with a 90s soul. Windows, a Start menu, a web browser and a music player, on a kernel written from scratch. Boots from a USB stick on a real UEFI PC.
⬇️ Download · Features · Apps · Shortcuts · FAQ
Mizu (水) means water. Nami (波), the browser, is a wave.
🚀 Try it in 3 steps
- Download
mizu-mx27-preview.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). Secure Boot must be off.
The first start opens Mizu Setup: pick a language, check the clock, type your name. A minute later you are on the desktop. Everything you do is saved on the stick.
🖥️ Run it in a virtual machine instead
VirtualBox: new machine, type Other, version Other/Unknown (64-bit), 2 GB RAM.
In System, tick Enable EFI. Attach mizu-mx27-preview.vdi to the SATA controller.
QEMU (Linux):
qemu-system-x86_64 -enable-kvm -m 2G -machine q35 \
-drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/ovmf/OVMF_CODE.fd \
-drive format=raw,file=mizu-mx27-preview.img \
-device qemu-xhci -device usb-mouse -device usb-kbd \
-device e1000e,netdev=n -netdev user,id=n -device intel-hda -device hda-output
✨ Features
| 🪟 Real windows | Overlapping, draggable, resizable windows with minimise, maximise, tile and a taskbar |
| 🏁 Start menu | Programs, Accessories and System Tools, plus Run... for anything else |
| 🌐 Web browser | Nami Explorer: HTTP and HTTPS, stylesheets, tables, PNG, JPEG and animated GIF |
| 🎵 Music | Plays MP3 and WAV with a seek bar |
| 🎨 Make it yours | Colour schemes, any picture as wallpaper, desktop shortcuts |
| 🖥️ Screen resolution | Changes live on Intel HD 2000/3000 and in QEMU, with "Keep this resolution?" |
| 📶 Network | Wired Intel cards and phone USB tethering, DHCP or a fixed address, network icon in the tray |
| 🌍 Languages | English, Russian, Ukrainian and Greek, switched live. Alt+Shift changes the keyboard layout |
| 🧰 Looks after itself | Task Manager, Registry Editor, Updates, App Store, recycle bin, startup programs |
| 🔒 Protected | Programs run in their own memory at ring 3; if the desktop crashes, it restarts by itself |
| 🔌 Drivers | Loaded automatically for the hardware that is found |
🚫 Not yet
- ❌ Installing onto a hard disk. The new installer (with its own partitions next to Windows or Linux) is being written. For now Mizu runs from the stick.
- ❌ Updates over the internet. The update channel is being set up.
- ❌ Wi-Fi. Use a cable or USB tethering from your phone.
- ❌ Secure Boot and old BIOS-only PCs.
- ❌ NTFS, exFAT, ext4. Only FAT32 disks for now.
- ⚠️ 3D graphics only on Intel HD 2000/3000 and in QEMU.
📦 Apps
| App | What it does |
|---|---|
| 📁 Files | Browse drives and folders, copy, move, rename, recycle bin |
| 📝 NoteEdit | Notepad with bold, italic and underline |
| 🖌️ Paint | Pencil, lines, shapes, fill, opens BMP/PNG/GIF/JPEG, saves BMP |
| 🖼️ Picture | Image viewer |
| 🎵 Player | MP3 and WAV |
| 🌐 Nami Explorer | Web browser |
| ⬛ Command Prompt | The system's shell in a window: dir, mem, ping, net... |
| 🧊 kUBIK | A spinning cube, with FPS counter |
| 📊 Task Manager | Windows, running tasks, CPU and memory graphs, startup programs |
| 🗂️ Registry Editor | Every setting of the system, as a tree |
| ⬇️ Updates / 🛍️ App Store | System updates and extra programs |
| ⚙️ Control Panel | Display, Appearance, Sound, Network, Language, Date & time, System |
Extra programs on the stick: a pack of seven games and dosfetch.
⌨️ Keyboard shortcuts
| Keys | Does |
|---|---|
| Win or Ctrl+Esc | Start menu |
| Win+R | Run... |
| Alt+F4 | Close the window (on an empty desktop: shut down) |
| Esc | Close the window in front |
| Ctrl+Shift+Esc | Task Manager |
| Alt+Shift | Switch keyboard layout |
| Ctrl+C / X / V | Copy, cut, paste |
In the Run box, explorer opens Files and cmd opens the Command Prompt.
❓ FAQ
How is this related to Koi-DOS?
Mizu MX 27 is built on the Koi-DOS kernel. Koi-DOS stays a DOS-like system with a command prompt; Mizu MX 27 is the desktop system grown from it. The prompt is still here, in a window.
Why is the system drive Z:?
Inherited from Koi-DOS: A: and B: were for floppies and C: was just the first free letter, so the system starts from the other end of the alphabet.
The desktop does not start.
If the desktop stops three times in a row within a few seconds, Mizu leaves you at a recovery prompt. Type desktop to try again, or log KOI.LOG to save the log and open an issue with it.
No internet.
Only wired Intel network cards and USB tethering from a phone work. Look at the network icon in the tray, or open Control Panel > Network.
🗺️ Roadmap
- 🔁 Safe updates: two system slots (A/B) with automatic rollback if an update does not boot
- 💿 New installer: whole disk or only free space, next to other systems
- ⬇️ Updates over the internet into the spare slot
- 📁 exFAT for files over 4 GB
- 🧩 Device Manager with live driver updates
🛠️ 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/ and the desktop
./qemu.sh # build test disks and boot in QEMU (first start runs Setup)
./release.sh # build mizu-mx27-preview.img and .vdi
KOI_DESKTOP=0 ./qemu.sh boots to the prompt instead of the desktop. KEEP_IMAGE=1 reuses the disks.
Writing an app
An app is a module that Mizu loads and gives a table of functions (see desktop/mizu.h):
#include "mizu.h"
static const MIZU_API* mizu;
static void paint(WINDOW* window, int x, int y, int width, int height) {
mizu->label(x + 10, y + 10, "Hello from Mizu!", mizu->color(MIZU_COLOR_TEXT));
}
static WINDOW* open(void) {
WINDOW* window = mizu->window_new("Hello", 40, 40, 300, 200);
if (window) window->paint = paint;
return window;
}
static MIZU_APP me = { "Hello", 1, open, 0, 0 };
MIZU_APPLICATION(start)
static MIZU_APP* start(const MIZU_API* api) { mizu = api; return &me; }
Built with sdk/koicc -m hello.c into HELLO.APP. Plain programs use sdk/ directly.
Source layout
| Folder | |
|---|---|
boot/ |
UEFI loader |
kernel/ |
kernel, drivers, shell, network |
drivers/ |
loadable drivers (.SYS) |
programs/ |
system programs and libraries |
desktop/ |
Mizu: desktop, Setup, apps in desktop/apps/ |
sdk/ |
kit for writing programs |
include/ |
shared headers |
💖 Credits
Made by Koi Ayame. Kernel from Koi-DOS. Font: Terminus by Dimitar Toshkov Zhekov. MP3 decoding: minimp3 by lieff.
Built through intense pain and heartbreak. I miss you so much... Rest in peace, @nonconformie.
📄 License
MIT, see LICENSE. The font is under the SIL Open Font License 1.1; minimp3 is public domain.