http://bitsavers.org/pdf/ibm/system38/IBM_System_38_Technical_Developments_Dec1978.pdf
IBM created the System/38 in 1979, and it was still more advanced than even research OSes like Singularity and EROS today, but legacy support for the System/360 and System/34 kept it from becoming IBM's main computer. It had 128-bit capability-based addressing with strongly-typed protected pointers. Paging, multi-tasking, and dynamic linking were part of the hardware and microcode. Even the microcode was multi-threaded. Running a program and calling a dynamically linked function were the same. It had generalized queues for IPC, user I/O messages, I/O devices, and user storage. Communication between microcode modules, I/O processors, running processes, suspended processes, other System/38s, and users was done in the exact same manner. Variables were late-bound and dynamically typed at the Machine Interface level, so with a single instruction you could add e.g. packed decimal and binary, and store the result in a floating point number even if you didn't know the types of these objects when the program was compiled. There is no distinction between objects in RAM and objects on disk, so programs and other read-only data could be discarded and re-read from the original copy on disk instead of swapping. It was designed for a transition to bubble memory or other non-volatile storage so they made all data on the disks addressable by virtual addresses and had the microcode and I/O processors provide a single-level store with a single address space.