Files
nt-lite/readme.md
T

197 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```text
"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.
## how to build
- open the VS x64 build tools as administrator
- 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
```text
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
async_apc.exe
async_cancel.exe
doom.exe
video.exe
httpget.exe
tcpserve.exe
udp.exe
resolve.exe
ping.exe
```
## screenshots
![video.exe running bink video 2](image.png)
## 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: todo
Q: Does it run Doom?
A: `doom.exe`
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.