JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

The Future of Operating Systems

This rung walked the real operating systems, then the frontier — eBPF, unikernels, verified kernels, kernel-bypass, persistent memory, confidential computing. This closing guide steps back and asks the only question that ties them together: what is the kernel actually for in a world of one app per machine, programmable kernels, and hardware that no longer matches the textbook? You will leave able to read any new OS idea by where it draws its boundaries.

What stayed the same, and what cracked

You have spent this whole ladder learning a remarkably stable set of ideas. A process is not a program; the kernel is the building manager that runs in privileged mode and hands out the CPU, memory, and devices; virtual memory gives every process its own private address space through a page table and a TLB; a file system turns blocks into named files; an interrupt is the doorbell that pulls the CPU into the kernel. Those bones are decades old and they are not going anywhere. The frontier is not throwing them out — it is asking which of the assumptions wrapped around them still hold.

Three big assumptions cracked, and almost every frontier in this rung is a reaction to one of them. First, the textbook OS assumes many untrusting programs share one machine — but a cloud function or a single-purpose appliance is often one app per machine, so why pay for all that sharing machinery? Second, it assumes the kernel's policy is fixed at boot — but operators now want to reprogram the running kernel safely, which is the whole point of eBPF. Third, it assumes the hardware looks like the textbook: a slow disk, an honest CPU, RAM that forgets on power-off. Persistent memory, untrusted hosts, and devices faster than the kernel's own overhead all break that picture. Keep those three cracks in mind and the frontier stops feeling like a grab-bag of acronyms.

Crack one: do we still need the whole OS?

If a machine runs exactly one application, much of the kernel's job evaporates. There is no second program to protect against, so the wall between user mode and kernel mode that you spent rungs learning is now a wall between an app and itself — pure overhead. This is the bet behind the unikernel: compile your single application together with just the OS pieces it actually calls into one image that boots straight onto the hardware or a hypervisor, with no separation between app and kernel. It boots in milliseconds, the attack surface is tiny because unused code is simply not present, and a system call becomes an ordinary function call rather than a trap into the kernel.

Be honest about the catch, because it is the same catch as ever. A unikernel drops protection between app and OS precisely because there is only one app to protect — so a bug in the app can now stomp on the kernel data right beside it, with no dual-mode wall to stop it. It also throws away the comforts of a general OS: no shell to log in to, no second process to run a debugger, limited drivers. The cloud-and-serverless world makes this trade tempting because the outer isolation is provided elsewhere: you run each tiny unikernel inside its own VM on a hypervisor, so the strong wall lives at the hypervisor, and the unikernel itself can be unapologetically minimal. This is also the natural home for serverless: a function that runs for 40 ms wants to start in 1 ms, not boot a whole Linux.

Crack two: a kernel you can reprogram

The old way to change kernel behaviour was brutal: edit the kernel source, recompile, reboot — or write a kernel module in C and risk crashing the whole machine if you got a pointer wrong. eBPF is the frontier's elegant answer. You write a small program, the kernel runs it through a verifier that proves it cannot loop forever, cannot touch memory it should not, and will always terminate, and only then attaches it to a hook deep inside the running kernel — at a system call, a network packet, a driver event, a function entry. It is, in effect, a tiny safe sandbox for code that runs in kernel context, letting you observe and even steer the kernel without recompiling or rebooting it.

This is why the tracing and profiling toolkit from earlier in this rung — perf, ftrace, and friends — increasingly rests on eBPF. Instead of guessing why a server is slow, you attach a tiny eBPF program that counts exactly how long each page fault takes, or which process is hammering the disk, with overhead small enough to leave running in production. The same hook machinery now powers high-speed networking, security monitoring, and load balancing. The honest caveat: 'safe' means the verifier guarantees the program is well-behaved, not that you wrote the right logic — and the verifier itself is complex kernel code, so eBPF widens what an unprivileged-ish program can do inside the kernel, which is power that must be governed carefully.

Crack three: when the hardware breaks the textbook

Several frontiers exist purely because the hardware stopped matching the assumptions baked into the kernel. Take storage first. Your whole virtual memory and file-system design assumed a sharp cliff: fast RAM that forgets on power-off, slow disks that remember. Persistent memory (storage-class memory) sits in between — it plugs into the memory bus and is byte-addressable like RAM, yet keeps its contents after a power cut like a disk. Suddenly the journaling and buffer-cache machinery built around slow block I/O may be the wrong tool, because you could update a durable data structure with a plain memory write. That is a quietly radical change to a layer you thought was settled.

Now take speed. A modern network card or NVMe SSD can move data so fast that the kernel's own per-operation overhead — the context switch, the copy across the user/kernel boundary, the interrupt handling — becomes the bottleneck. Kernel-bypass is the radical fix: let a trusted application talk almost directly to the device, skipping the kernel on the hot path. Frameworks like DPDK do this for networking; io_uring softens it by giving you a shared ring of submitted and completed requests so you batch system calls instead of paying one trap per operation. The trade is exactly what you would expect from this whole ladder: you regain speed by giving up the kernel's mediation, and therefore some of its protection and fairness — so you only do it for trusted, performance-critical code.

Finally, take trust. The textbook assumes the OS and the hardware beneath your program are honest. But in the cloud your code runs on someone else's machine, under someone else's hypervisor and kernel. Confidential computing flips a deep assumption: with hardware support, your program runs inside an encrypted enclave whose memory the host OS and hypervisor cannot read, even though they are more privileged than you. It is the strange new world where the kernel is no longer automatically trusted by the app it serves — protection now runs in both directions, enforced by the CPU itself.

The structural question that never goes away

Underneath every frontier sits one ancient, unsettled question you met when you studied kernel structure: how much should live inside the privileged kernel, and how much outside? The monolithic camp puts drivers, file systems, and networking all inside one big kernel for speed (one function call, no boundary crossing). The microkernel camp pushes nearly all of that out into ordinary processes and keeps the kernel tiny, so a crashing driver cannot take down the system — at the cost of constant IPC messages across boundaries. Remember the honest framing: a microkernel trades IPC cost for robustness, and is not automatically 'better'. The whole industry mostly settled on hybrid designs as a pragmatic middle.

What is genuinely new at the frontier is that we can now sometimes have the microkernel's robustness without paying only in faith. Formal verification means proving, with mathematics, that the kernel's code matches its specification — that it has no buffer overflows, no privilege-escalation bugs, no way to violate isolation, for every possible input. seL4 is a microkernel that has been formally verified this way: not 'tested a lot and seems fine', but proven correct against its spec. That is a profound shift for anything where a kernel bug is catastrophic — aircraft, medical devices, security modules — and it nudges the old monolithic-vs-microkernel debate, because a tiny verified microkernel can offer a guarantee a huge monolithic kernel never realistically can.

Where you stand now

Look back at the whole climb. You started not knowing a program from a process, and you can now reason about scheduling, race conditions and the critical section, deadlock and its four conditions, paging and the page-number/offset split, page faults and thrashing, file systems and journaling, virtualization and containers, and now the open frontier. The frontier is not a wall at the top of the ladder; it is the place where the same handful of ideas you already own are being re-weighed against new hardware and new demands. You have the vocabulary and, more importantly, the instincts to follow it.

Be honest about what is still genuinely open, because that honesty is part of the craft. We do not have a settled answer for how to verify a kernel as large and fast as Linux. We do not know the best division of labour once memory is persistent and networks outrun the CPU. We do not have a clean story for an OS where the app does not trust the kernel beneath it. These are not gaps in your understanding — they are gaps in the field. Holding them as open questions, rather than pretending they are solved, is exactly the mindset that lets the next generation of operating systems get built. You are now ready to read those questions, and maybe one day to answer one.