readme enhancement

This commit is contained in:
maksw committed 2026-05-22 09:08:05 +02:00
1 parent db175ab20a
commit 18b4dd0f61
1 file changed
+18 -49
+18 -49
View File
@@ -1,8 +1,8 @@
# NT-Lite -- an x86-64 kernel # NT-Lite -- an x86-64 kernel
## The Monster From ~~Redmond~~ Cracow “Not only is UNIX dead, it’s starting to smell really bad.” - Rob Pike
Boots. Runs processes. Loads drivers. Plays video. Runs Doom. Has opinions. “UNIX has three operations: read, write, and lie through ioctl.”
## what is it? ## what is it?
@@ -54,29 +54,9 @@ Single address space for the whole system. No separate kernel/user page tables.
Kernel lives in the higher half. User processes only see what they are explicitly given. Kernel pages are supervisor-only so user-mode code cannot touch them. User pages are isolated from each other through the allocator and process creation path, not by hardware address-space separation. One rogue pointer can't crash the kernel but it might corrupt other processes. But what are the chances? Kernel lives in the higher half. User processes only see what they are explicitly given. Kernel pages are supervisor-only so user-mode code cannot touch them. User pages are isolated from each other through the allocator and process creation path, not by hardware address-space separation. One rogue pointer can't crash the kernel but it might corrupt other processes. But what are the chances?
Is this how a serious modern OS should isolate processes? No. Is this how a serious modern OS should isolate processes? No.
Is it very convenient while building? Absolutely. Is it very convenient while building? Absolutely.
### boot chain
Bootloader loads config, pulls in the core images, sets up the higher-half mapping, then jumps to `KernelMain`.
From there:
```text
HAL init
interrupts
paging
scheduler
boot drivers
filesystems
runtime drivers
self-tests
init.exe
shell
```
### execution model ### execution model
NT-Lite has a Windows-flavored execution model, but a simplified one. NT-Lite has a Windows-flavored execution model, but a simplified one.
@@ -104,8 +84,6 @@ The important bit:
interrupt -> DPC -> IoCompleteRequest -> APC -> alertable wait/user callback interrupt -> DPC -> IoCompleteRequest -> APC -> alertable wait/user callback
``` ```
That is a real path, not a TODO scribbled in the margin.
### I/O and filesystems ### I/O and filesystems
Everything goes through the VFS. Disk access, filesystem parsing, path resolution, and process personalities are separate layers instead of one giant bowl of sadness. Everything goes through the VFS. Disk access, filesystem parsing, path resolution, and process personalities are separate layers instead of one giant bowl of sadness.
@@ -144,7 +122,7 @@ Currently shipping:
```text ```text
AHCI interrupt-driven SATA AHCI interrupt-driven SATA
IDE PIO/DMA IDE PIO/DMA
FAT32 filesystem driver with VFAT long filename support FAT32 filesystem driver with VFAT and all
``` ```
### processes, threads, and syscalls ### processes, threads, and syscalls
@@ -191,8 +169,6 @@ if (s == SYS_STATUS_PENDING)
If the request completes by user APC, the alertable wait returns `SYS_STATUS_USER_APC`, the callback runs in user mode, and the original execution continues afterward. If the request completes by user APC, the alertable wait returns `SYS_STATUS_USER_APC`, the callback runs in user mode, and the original execution continues afterward.
That sentence used to be science fiction. Now it is boring. Excellent.
## paths ## paths
```text ```text
@@ -204,9 +180,8 @@ That sentence used to be science fiction. Now it is boring. Excellent.
"/1/apps/video.exe" -> volume 1 "/1/apps/video.exe" -> volume 1
``` ```
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, while the POSIX personality maps volumes onto a tree. Volumes `0`-`7` are available. A volume only works if a filesystem is registered on it (duh).
The Win32 personality translates drive letters to volume numbers, while the POSIX personality maps volumes onto a tree.
`0:/` is a mounted namespace, not a Windows path. It merely enjoys cosplay.
## how to build ## how to build
@@ -247,20 +222,14 @@ apps/
video.exe video.exe
``` ```
## known truths
- FAT32 works well enough to save `.doomrc` properly.
- Doom runs.
- Video playback works.
- Async file I/O exists.
- Process isolation is not strong.
- This is not production software.
- This is absolutely the wrong way to spend a weekend.
## screenshots ## screenshots
![video.exe running bink video 2](image.png) ![video.exe running bink video 2](image.png)
## TODO
todo
## faq ## faq
Q: Why? Q: Why?
@@ -269,29 +238,29 @@ A: Learning. Fun. Spite.
Q: Does it run Doom? Q: Does it run Doom?
A: `doom.exe` A: `doom.exe`
Q: Does Doom save its config correctly? Q: Can you read and write files?
A: Yes. `.doomrc`, not cursed `.DOO` nonsense. VFAT forever! A: As far as I'm aware.
Q: Does it have async I/O? Q: Does it have async I/O?
A: Yes. Events, IOSBs, user APC callbacks, cancellation. Very suspiciously serious. A: You didn't read the features list?
Q: Is the Win32 layer real? Q: Is the Win32 layer real?
A: Real enough to load binaries that expect it. Not real enough to run Notepad. A: Depends how you frame it. Some apps will run, most will not.
Q: Are processes isolated? Q: Are processes isolated?
A: No. But IPC is free. A: No. But IPC is free.
Q: How often does it crash? Q: How often does it crash?
A: Less often than before, which is how civilizations begin. A: Less often than before.
Q: Can it recover from a crash? Q: Can it recover from a crash?
A: Usually. Unless the kernel shat itself. A: Yes. Unless the kernel faulted.
Q: Is this finished? Q: Is this finished?
A: No. And it never will be. A: No. And it never will be.
Q: Will it corrupt my data? Q: Will it corrupt my data?
A: It should not. A: It shouldn't.
Q: Why is the path syntax so weird? Q: Why is the path syntax so weird?
A: It makes sense to me. A: It makes sense to me.
@@ -300,7 +269,7 @@ Q: Why are the logs so verbose?
A: How else do I debug it? A: How else do I debug it?
Q: What should I read first? Q: What should I read first?
A: This document. Then the scheduler. Then whatever hurt you last. A: This document.
Q: Can I use this in production? Q: Can I use this in production?
A: Don't. A: Don't.