173 lines
3.7 KiB
Markdown
173 lines
3.7 KiB
Markdown
# NT-Lite -- an x86-64 kernel
|
|
|
|
“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, launches programs, runs Doom, talks TCP/IP, and occasionally reminds you that it is still a hobby kernel.
|
|
|
|
## paths
|
|
|
|
You thought it would be easy, would you?
|
|
|
|
```text
|
|
"apps/shell_native.exe" -> current working directory
|
|
"/SystemRoot/apps/shell_native.exe" -> system volume, symlink to /Device/HarddiskVolumeN
|
|
"/Device/HarddiskVolume1/boot.ini" -> system volume
|
|
"C:\apps\doom.exe" -> /SystemRoot/apps/doom.exe through win32.dll
|
|
"\apps\doom.exe" -> /SystemRoot/apps/doom.exe through win32.dll
|
|
"/apps/video.exe" -> /SystemRoot/apps/video.exe through posix.dll
|
|
```
|
|
|
|
## networking
|
|
|
|
The socket syscalls are BSD-shaped, but 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. Except the DNS resolver. Ergonomics, am I right?
|
|
|
|
## 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
|
|
|
|
The ESP is just the boot anchor:
|
|
|
|
```text
|
|
efi/boot/
|
|
bootx64.efi
|
|
efi/ntlite/fs/
|
|
...
|
|
boot.ini
|
|
```
|
|
|
|
The configured system volume carries the OS:
|
|
|
|
```text
|
|
system/
|
|
colonel.exe
|
|
hal.dll
|
|
init.exe
|
|
rssrv.exe
|
|
syscall.dll
|
|
win32.dll
|
|
posix.dll
|
|
settings.ini
|
|
drivers/
|
|
drivers.ini
|
|
ahci.sys
|
|
ata.sys
|
|
fat.sys
|
|
hda.sys
|
|
lwip.sys
|
|
ntfs.sys
|
|
ext4.sys
|
|
pci.sys
|
|
ps2.sys
|
|
rtl816x.sys
|
|
rtl8139.sys
|
|
cereal.sys
|
|
usb.sys
|
|
vmwaresvga.sys
|
|
apps/
|
|
shell_native.exe
|
|
shell_win32.exe
|
|
shell_posix.exe
|
|
doom.exe
|
|
video.exe
|
|
edit.exe
|
|
httpget.exe
|
|
tcpserve.exe
|
|
udp.exe
|
|
resolve.exe
|
|
ping.exe
|
|
memtop.exe
|
|
```
|
|
|
|
## screenshots
|
|
|
|

|
|
|
|
## 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: API wise, yes. Binary compatibility wise, close but no.
|
|
|
|
Q: Are processes isolated?
|
|
A: No. But IPC is free. And you can't steal handles. 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: Does it look finished?
|
|
|
|
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 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.
|