pdp7-unix
retrobsd
pdp7-unix | retrobsd | |
---|---|---|
4 | 1 | |
411 | 323 | |
- | 0.6% | |
2.6 | 2.4 | |
8 months ago | 10 months ago | |
Assembly | C | |
GNU General Public License v3.0 only | BSD 3-clause "New" or "Revised" License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
pdp7-unix
-
Making NetBSD Multiboot-Compatible (2007)
TIL there is a version of UNIX for PDP-7, and PDP-7 did not have MMU, therefore UNIX by definition do not require MMU, and that version of UNIX had been archeologied in a runnable form on GitHub[1]
1: https://github.com/DoctorWkt/pdp7-unix
- Unix Edition Zero
-
Where to find the original Unix image file?
I've never heard of a copy being used outside of the original authors' site. However, it can be built from source code and run on a PDP-7 emulator. https://github.com/DoctorWkt/pdp7-unix.
-
Apple M1 Assembly Language Hello World
Well first of all I was wrong -- the PDP7 did have syscalls, I'm just bad at reading PDP7 assembly and missed the dispatcher. Curiously, it looks like the sequence is entirely different, although there could be some magic that makes the order different than it appears at first glance.
https://github.com/DoctorWkt/pdp7-unix/blob/master/src/sys/s...
It's all just guessing, but I figure the explanation is much simpler -- for PDP11 UNIX, they just kept using the same syscalls up till V7 / 2BSD, and there should have been a sort of "rolling release" binary compatibility. For the VAX, the first port (32v) probably just retained the original numbering since there was no reason to deviate from it, which colored 3BSD and 4BSD, hence {Net,Free,Open}BSD and Darwin and friends.
Worth pointing out that several versions of Linux have rather different syscall tables. 32 bit ARM and x86 are more-or-less matches, with ARM differing on a few early syscalls, while 64 bit ARM and amd64 differing quite dramatically. The old ABI for 32bit MIPS also matches, but both the n32 and n64 ABIs use slightly variant syscall tables. PowerPC 32/64 bit is also a close match, although it has some impedance (I think it matches closer to AIX by design)
At the end of the day, I think the similarity is mostly a mixture of coincidence, system developers being influenced by their bootstrap system's syscall tables, and no real reason to change them up. No reason to not change them, either, since it's pretty trivial to use different dispatch tables for different types of processes, like how the BSD's handle other-OS compat.
retrobsd
-
Making NetBSD Multiboot-Compatible (2007)
MMU is also responsible for translating between physical and virtual memory addresses. Making virtual memory support optional is a non-trivial design goal; you're not only allowing userspace to peek at (or straight up overwrite) kernel memory, you also need every executable to be a PIE, or to swap it out to disk as a part of a context switch.
Check out RetroBSD <https://github.com/RetroBSD/retrobsd> and LiteBSD <https://github.com/sergev/LiteBSD>; there's a PID 0 (or 1? IIRC) that is called the "swapper" process, which is in charge of implementing the context switching. Fascinating stuff!
What are some alternatives?
m1n1 - A bootloader and experimentation playground for Apple Silicon
LiteBSD - Variant of 4.4BSD Unix for microcontrollers
HelloSilicon - An introduction to ARM64 assembly on Apple Silicon Macs
unix-history-repo - Continuous Unix commit history from 1970 until today
unix-jun72 - The working source code to PDP-11 Unix from 1972.
unix-v6 - UNIX 6th Edition Kernel Source Code
rss-proxy - RSS-proxy allows you to do create an RSS or ATOM feed of almost any website, just by analyzing just the static HTML structure.