MINIX 3 is a free, open-source operating system designed to be highly reliable, flexible, and secure. Unlike traditional monolithic kernels (like Linux or Windows) where a single driver crash can bring down the entire system, MINIX 3 is built on a tiny microkernel architecture.
The project's primary goal is to create a "self-healing" system that can detect and repair its own faults on the fly without user intervention.
Note: This repository is a fork maintained by David Montero and is NOT maintained by the Stichting MINIX Research Foundation. See What's New for changes relative to upstream.
- Fault Tolerance — Most of the OS runs as isolated user-mode processes. If a driver crashes, it is automatically restarted by the Reincarnation Server without affecting the rest of the system.
- Microkernel Design — The kernel itself is only about 6,000 lines of executable code, making it easier to verify and secure.
- POSIX Compliant — Supports a wide range of standard UNIX software.
- NetBSD Compatibility — Uses the NetBSD pkgsrc package management system, giving access to thousands of prebuilt packages.
- Multi-Architecture — Runs on x86 (IA-32), x86-64 (amd64), and ARM.
- SMP Support — Symmetric multi-processing up to 32 CPUs.
- Educational Foundation — Originally created by Andrew S. Tanenbaum; a world-class resource for learning OS design and implementation.
MINIX 3 is structured in four layers:
| Layer | Name | Responsibility |
|---|---|---|
| 1 | Microkernel | Interrupts, scheduling, message passing |
| 2 | Device Drivers | Run in user space (disk, network, USB, ...) |
| 3 | Server Processes | VFS, Process Manager, Reincarnation Server |
| 4 | User Programs | Shells, editors, applications |
The headline change is a working x86-64 (amd64) kernel port that boots to a login prompt on both legacy BIOS and UEFI firmware, with SMP, an IPC fastpath, modern CPU features, and most NetBSD userland tools intact. Other highlights since the upstream base:
- amd64 SMP — full AP bring-up, per-CPU GDT/IDT/TSS, BKL serialization,
validated on
-smp 2/4/8up to 32 CPUs. (See the "amd64 subsystem state" table below.) - IPC fastpath + colocation — SENDREC same-CPU fastpath plus a Tier 1
scheduler that migrates servers to their dominant client's CPU; 4.86×
SMP IPC throughput improvement on
-smp 4(p50 78k → 16k cycles). - Hybrid BIOS + UEFI boot — single CD image boots on either firmware via El Torito with a GRUB-built EFI System Partition. Multiboot 2.0 + ACPI RSDP handoff implemented; linear-framebuffer text console for headless UEFI environments.
- Modern CPU features — NX/XD enforcement, XSAVE/AVX FPU context, eager FPU dispatch on amd64, SSE4 / AVX2 / AES-NI / RDRAND / x2APIC / PCID detection.
- New drivers — Intel I225/I226 2.5 GbE (
igc), EHCI USB host (Phase 1), OHCI scaffolding (Phase 3a), multi-controllerusbd, AHCI / legacy IDE auto-detect at boot. - Allocator — switched libc to
jemalloc. - Security hardening — tree-wide audit replacing unsafe
strcpy/sprintf/system()patterns; buffer-overflow fixes inkgets,backup,fdisk,minix-service; ELF auxvec UID/GID populated correctly. - Performance — 30+ O(N²)
strlen-in-loop patterns eliminated across the tree. - Build & toolchain — GCC 15 compatibility, LLVM/clang by default,
NetBSD 10 host-tools sync, C++ ATF and
kyua-clitests re-enabled. - Test coverage — new ATF tests for
dup2, libc string functions, the ISC event timer library,hgfs,cd9660, and PMptrace.
For the full change log, see RELEASE_NOTES.md.
A snapshot of where each piece of the amd64 port stands. ✓ = production-grade, ↻ = working with caveats, ⌛ = in progress, ✗ = not implemented.
| Subsystem | Status |
|---|---|
| Boot (legacy BIOS) | ✓ |
| Boot (UEFI / GPT, q35) | ✓ via hybrid El Torito; Multiboot 2.0 handoff |
| SMP | ✓ up to 32 CPUs; validated on -smp 2/4/8 |
| IPC fastpath + Tier 1 colocation | ✓ 4.86× SMP win (p50 78k → 16k cycles) |
| FPU / SSE | ✓ eager dispatch |
| Storage (AHCI + IDE) | ✓ auto-detect + graceful fallback |
| Console (serial) | ✓ |
| Console (linear framebuffer) | ✓ for UEFI / GOP environments |
| ACPI / APIC | ✓ |
Intel igc 2.5 GbE |
↻ basic send/receive; no coalescing/multi-queue/stats |
| USB EHCI (USB 2.0) | ↻ Phase 1 transfer model; no isoch, no suspend/resume |
| USB OHCI (USB 1.1) | ⌛ Phase 3a scaffolding (PCI + DMA pools); transfer scheduling next |
| USB UHCI | ✗ |
| USB xHCI (USB 3.x) | ✗ |
| UEFI runtime services | ✗ shutdown/reboot via ACPI only |
| Secure Boot | ✗ |
| Area | Status |
|---|---|
| Intel igc driver | Initial send/receive only. No interrupt coalescing, multi-queue, or statistics support yet. |
| EHCI USB (amd64) | Phase 1 only. Isochronous transfers and suspend/resume not implemented. |
| amd64 USB OHCI | Phase 3a scaffolding only (PCI discovery + DMA pools). Transfer scheduling next. |
| amd64 USB UHCI / xHCI | Not yet wired. |
| UEFI runtime services | No EFI_RUNTIME_SERVICES integration. Shutdown and reboot rely on ACPI paths only. |
| Secure Boot | Not supported. Requires a signed shim and signed GRUB image. |
For the best experience, run MINIX 3 inside a virtual machine.
- Hypervisor: VirtualBox, VMware, or QEMU
- Image: build from source (see below) or download from the upstream Official Downloads Page
# i386 (original upstream target)
sh build.sh -j4 -mi386 -O ../obj.i386 -U release
bash releasetools/x86_cdimage.sh
# amd64 (this fork) — replace 24 with your CPU core count
sh build.sh -m amd64 -U -j24 -O ../obj.amd64 release
OBJ=../obj.amd64 bash releasetools/amd64_cdimage.shThe build produces minix_amd64.iso in the current directory.
Important —
-cpu hostis required for amd64. MINIX uses theWRFSBASEinstruction for TLS setup; QEMU's defaultkvm64CPU model does not expose that feature (CPUID leaf 7 EBX bit 0), so the kernel will panic at boot without it.
# amd64 — bootloader path (recommended)
qemu-system-x86_64 --enable-kvm -cpu host -smp 4 -m 256 \
-cdrom minix_amd64.iso
# amd64 — direct kernel path (faster iteration)
qemu-system-x86_64 --enable-kvm -cpu host \
-kernel ../obj.amd64/minix/kernel/kernel \
-append "bootcd=1 cdproberoot=1" \
-cdrom minix_amd64.iso
# i386
qemu-system-i386 --enable-kvm -m 256 -cdrom minix_i386.iso
# amd64 HDD image
qemu-system-x86_64 --enable-kvm -cpu host -m 256 -hda minix_amd64.img- Create a VM (256 MB RAM, 2 GB+ HDD).
- Mount the ISO and boot (use
-cpu hostfor amd64 in QEMU). - Log in as
root(no password). - Run
setupand follow the prompts. - Power off, remove the ISO, reboot.
For detailed instructions see the MINIX 3 Installation Guide.
- Official Wiki: wiki.minix3.org
- User Guide: Getting Started
- Release Notes:
RELEASE_NOTES.md— detailed changelog since the fork - Book: Operating Systems: Design and Implementation (3rd ed.) — Tanenbaum & Woodhull
Pull requests are welcome. Whether you are fixing bugs, porting drivers, or improving documentation:
- Source tree is at
/usr/srcon a running MINIX system. - Please follow existing BSD code style.
- Prefer
strlcpy/strlcatoverstrcpy/strcat;snprintfoversprintf. - For security-sensitive changes, reference the relevant CWE in the commit message.
MINIX 3 is released under the BSD-3-Clause License. See the LICENSE file
for details.