2026-05-30 12:38:31 +02:00

NT-Lite -- an x86-64 kernel

“Not only is UNIX dead, it’s starting to smell really bad.” - Rob Pike

“UNIX has three operations: read, write, and lie through ioctl.”

what is it?

NT-Lite is a 64-bit operating system kernel written from scratch.

It boots into a shell, loads drivers, launches programs, survives application crashes, runs Doom, plays video, talks TCP/IP, and occasionally reminds you that it is still a hobby kernel.

The codebase is small enough to understand, but no longer small enough to pretend it is just a weekend project.

features

  • UEFI bootloader
  • real SMP
  • physical and virtual memory managers
  • kernel pool and user heap
  • single address-space design with user/supervisor page permissions
  • HAL split from the kernel
  • preemptive priority scheduler
  • processes and threads
  • per-process handles with rights checks
  • process exit state, reaping, and restartable init services
  • events, semaphores, mutexes, queues, named queues, and alertable waits
  • IRQL, DPCs, kernel APCs, and user APCs
  • native user-mode exception dispatch
  • Win32 vectored exception handlers
  • minimal runtime-registered SEH substrate
  • async file I/O with events, IOSBs, APC callbacks, and cancellation
  • VFS with IRPs
  • page cache with dirty writeback and invalidation
  • AHCI driver, interrupt-driven
  • IDE driver, PIO/DMA
  • FAT32 filesystem driver with VFAT long names
  • USB bus, xHCI, mass storage, and HID
  • VMware SVGA display driver
  • drive-number paths such as 0:/apps/shell.exe
  • PE import resolution and dynamic .sys driver loading
  • modular networking through lwIP
  • RTL8139 and RTL816x network drivers
  • native BSD-ish socket syscalls
  • DNS resolver syscall
  • length-tracked string-view syscall ABI
  • request-struct based syscalls for larger calls
  • native NTLSTATUS_* status codes
  • INI-based configuration
  • partial Win32 personality
  • partial (microsoft-level) POSIX personality
  • Doom
  • video playback
  • fully GDPR-compliant
  • everything but the kitchen sink

paths

"apps/shell.exe"      -> current working directory
"0:/apps/shell.exe"   -> volume 0, native path; works everywhere
"2:/data/config.ini"  -> volume 2, native path
"C:\apps\doom.exe"    -> volume 0 through win32.dll; C: maps to 0:, D: maps to 1:, etc.
"/apps/video.exe"     -> volume 0 through posix.dll
"/1/apps/video.exe"   -> volume 1 through posix.dll

Volumes 0-7 are available. A volume only works if a filesystem is registered on it.

The Win32 personality translates drive letters to volume numbers. The POSIX personality maps volumes into a tree.

networking

The socket syscalls are BSD-shaped, not BSD-compatible. Same nouns (AF_INET, SOCK_STREAM, IPPROTO_TCP), none of the baggage:
one fixed-size tagged address struct instead of the sockaddr_in/sockaddr_storage casting dance,
no htons/ntohl conversions, and DNS resolution is a syscall rather than a userspace library call.
That's right microkernel purists, cry some more. Ergonomics.
Async is first-class here too, same machinery as the filesystem.

how to build

  • get mtools
  • open the VS x64 build tools
  • change into this directory
  • run build.bat
  • use one of:
    • run.bat — IDE
    • rund.bat — IDE, debug
    • runa.bat — AHCI
    • runad.bat — AHCI, debug

how it looks when built

efi/boot/
  bootx64.efi
boot.ini
drivers/
  drivers.ini
  ahci.sys
  ata.sys
  fat32.sys
  lwip.sys
  pci.sys
  ps2.sys
  rtl816x.sys
  rtl8139.sys
  usb.sys
  vmwaresvga.sys
system/
  colonel.exe
  hal.dll
  init.exe
  syscall.dll
  win32.dll
  posix.dll
apps/
  shell_native.exe
  shell_win32.exe
  shell_posix.exe
  doom.exe
  video.exe
  httpget.exe
  tcpserve.exe
  udp.exe
  resolve.exe
  ping.exe

screenshots

video.exe running bink video 2

faq

Q: Is it secure? A: Don't connect to the internet with it.

Q: Who is this for? A: Me.

Q: What's next? A: Whatever I fixate on next.

Q: Does it run Doom?
A: doom.exe

Q: Can it play Crysis? A: Into the bucket list.

Q: Does USB work? A: It did for everything I threw at it.

Q: If I write a program now, will it run in the future? A: WE DO, in fact, BREAK USERSPACE.

Q: Can you read and write files?
A: As far as I'm aware.

Q: Does it have async I/O?
A: The best you'll get.

Q: Does the networking actually work? A: It didn't crash yet.

Q: Does it really have SMP? A: Watch out. It bites.

Q: Is the Win32 layer real?
A: Depends how you frame it. Real apps won't run but specifically prepared ones will.

Q: Are processes isolated?
A: No. But IPC is free. Is this how a serious modern OS should isolate processes? No. Are we a serious OS? No. Is it very convenient? Absolutely.

Q: How often does it crash?
A: It doesn't if you don't touch it.

Q: Can it recover from a crash?
A: Works on my machine.

Q: Is this finished?
A: It will be once I get a job.

Q: Will it corrupt my data?
A: It shouldn't.

Q: Why is the path syntax so weird?
A: It makes sense to me.

Q: Why both Win32 and POSIX? A: NT could do it, why can't I?

Q: Why are the logs so verbose?
A: Try debugging an interrupt path with vibes.

Q: What should I read first?
A: This document.

Q: How do I contribute? A: maksw@maksw.pl

Q: Can I use this in production?
A: Don't.

Project dedicated to the honorable, esteemed Professor Leszek Wójcik through whom I came to hate Unix.

S
Description
No description provided
Readme
37 MiB
0 Stars 1 Watchers 0 Forks
Languages
C 98.9%
Assembly 0.9%
C++ 0.1%