Minix 3

Last updated
Minix 3
Rocky Raccoon mascot of MINIX 3.jpg
Minix 3.png
Minix 3 running X11 with twm as Window Manager
Developer Andrew S. Tanenbaum et al.
Written in C, assembly language
OS family Unix-like
Working stateAbandoned
Source model Open source
Initial release24 October 2005;18 years ago (2005-10-24)
Latest release 3.3.0 / September 16, 2014;9 years ago (2014-09-16)
Latest preview 3.4.0 rc6 / May 9, 2017;6 years ago (2017-05-09)
Repository
Marketing target Embedded systems, education
Available in English
Platforms IA-32, ARM
Kernel type Microkernel
Userland Minix, NetBSD
Default
user interface
ash
License 2005: BSD-3-Clause [lower-alpha 1] [1]
Original: BSD-3-Clause
Preceded by Minix 1.0, 1.5 and 2.0
Official website www.minix3.org

Minix 3 is a small, Unix-like operating system. It is published under a BSD-3-Clause [lower-alpha 1] license and is a successor project to the earlier versions, Minix 1 and 2. [1]

Contents

The project's main goal is for the system to be fault-tolerant by detecting and repairing its faults on the fly, with no user intervention. The main uses of the system are envisaged to be embedded systems and education. [2]

As of 2017, Minix 3 supports IA-32 and ARM architecture processors. [3] It can also run on emulators or virtual machines, such as Bochs, [4] [5] VMware Workstation, [6] Microsoft Virtual PC, [7] Oracle VirtualBox, [8] and QEMU. A port to PowerPC architecture is in development. [9] The distribution comes on a live CD and does not support live USB installation. [10] The project has been dormant since 2018, [11] and the latest release is 3.4.0 rc6 from 2017, [12] although the Minix 3 discussion group is still active. [13]

Minix 3 is believed to have inspired the Intel Management Engine (ME) OS found in Intel's Platform Controller Hub, starting with the introduction of ME 11, which is used with Skylake and Kaby Lake processors. [14] [15] It was debated that Minix could have been the most widely used OS on x86/AMD64 processors, with more installations than Microsoft Windows, Linux, or macOS, because of its use in the Intel ME. [16]

Goals of the project

Structure of monolithic kernel and microkernel-based operating systems, respectively OS-structure.svg
Structure of monolithic kernel and microkernel-based operating systems, respectively

Reflecting on the nature of monolithic kernel based systems, where a driver (which has, according to Minix creator Tanenbaum, approximately 3–7 times as many bugs as a usual program) [17] can bring down the whole system, [18] Minix 3 aims to create an operating system that is a "reliable, self-healing, multiserver Unix clone". [19]

To achieve that, the code running in kernel must be minimal, with the file server, process server, and each device driver running as separate user-mode processes. Each driver is carefully monitored by a part of the system named the reincarnation server. If a driver fails to respond to pings from this server, it is shut down and replaced by a fresh copy of the driver.

In a monolithic system, a bug in a driver can easily crash the whole kernel. This is far less likely to occur in Minix 3. [20]

History

MINIX 3 versions [21] [22]
VersionRelease dateDescription
3.1.0
(OSDI3)
2005-10-18
3.1.1
(SOSP)
2005-10-24
3.1.22006-04-18
3.1.2a2006-05-29
  • New Packman package manager.
  • Fixed an installation issue with auto-partitioning disks.
3.1.32007-04-13
3.1.3a2007-06-08
  • Bug fixes.
3.1.42009-06-09
3.1.52009-11-05
  • Improvements performance
  • Shared memory
  • setitimer function
  • ISO 9660 file system
  • Open Sound System
  • Trap NULL accesses now, for user convenience
  • Improved signal handling
  • Better support for debuggers (ptrace improvements, etc.)
  • Network card autodetection (for supported PCI cards), improved network configuration
3.1.62010-02-08
  • New Network drivers: Atheros L2, Intel E1000, Realtek 8169, DEC Tulip
  • PipeFS – removed pipe handling from filesystem drivers
  • HGFS – support for mounting VMware shared folders as file system
  • VFS: supplemental group support and sticky bit support
  • Floating-point unit support
  • System Event Framework (SEF)
  • Experimental APIC support
3.1.72010-06-16
  • Userspace scheduling and a scheduling server [26]
  • Proper support for multiple Ethernet cards of the same type
  • Boot monitor allows loading images > 16 MB
  • Buildsystem support for building Minix with GCC
  • Support for Windows-1251 and KOI8-U charsets
3.1.82010-10-04
3.2.02012-02-29
  • Porting GNU Debugger to Minix 3 and implementing core dumping support
  • FUSE support with experimental NTFS-3G file system
  • Gradually replacing userland, from Minix to NetBSD
  • Replacing the default compiler ACK with Clang; GCC is also supported
  • Switch to ELF and NetBSD libc libraries
  • Pkgsrc upstreaming and application porting
  • Asynchronous virtual filesystem (VFS) server
  • Replacing the bootloader from Minix to NetBSD
  • NCQ support in the AHCI driver
3.2.12013-02-21
3.3.0 [27] 2014-09-15
  • ARM architecture support; cross-compilable
  • Support for mmap() I/O mechanism; allows for shared dynamic libraries and lower memory needs
  • New input infrastructure: input server and keyboard driver separated from TTY
  • VND: vnode disk (loopback) block driver
  • LLVM Bitcode build of the system
  • Import of LLVM and clang in the sources
  • Unified block cache shared by FSes and VM
  • Improved NetBSD compatibility: utilities, calls, types (lots of 64-bit), toolchain, codebase, and packages
  • C type for messages: cleaner, bigger[ clarification needed ]
  • Improved driver modularity: UDS separate from PFS, PTY from TTY, one controller per at_wini instance, LOG removed from boot image
  • Packages are now dynamically linked
3.4.0 rc62017-05-09X11 is now part of the operating system.
  •   Book Release
  •   Old release
  •   Current stable release
  •   Current development release

Minix 3 was publicly announced on 24 October 2005 by Andrew Tanenbaum during his keynote speech on top of the Association for Computing Machinery (ACM) Symposium Operating Systems Principles conference. Although it still serves as an example for the new edition of Tanenbaum and Woodhull's textbook, it is comprehensively redesigned to be "usable as a serious system on resource-limited and embedded computers and for applications requiring high reliability."

Initially released under the same BSD-3-Clause license that Minix was licensed under since 2000. [23] [24] In late 2005, the copyright owner was changed and a fourth clause was added. [1] [25] [28]

Reliability policies

One of the main goals of Minix 3 is reliability. Below, some of the more important principles that enhance its reliability are discussed.

Reduce kernel size

Monolithic operating systems such as Linux and FreeBSD and hybrids like Windows have millions of lines of kernel code. In contrast, Minix 3 has about 6,000 lines of executable kernel code, [29] which can make problems easier to find in the code.

Cage the bugs

In monolithic kernels, device drivers reside in the kernel. Thus, when a new peripheral is installed, unknown, untrusted code is inserted in the kernel. One bad line of code in a driver can bring down the system.

Instead, in Minix 3, each device driver is a separate user-mode process. Drivers cannot execute privileged instructions, change the page tables, perform arbitrary input/output (I/O), or write to absolute memory. They must make kernel calls for these services and the kernel checks each call for authority.

Limit drivers' memory access

In monolithic kernels, a driver can write to any word of memory and thus accidentally corrupt user programs.

In Minix 3, when a user expects data from, for example, the file system, it builds a descriptor telling who has access and at what addresses. It then passes an index to this descriptor to the file system, which may pass it to a driver. The file system or driver then asks the kernel to write via the descriptor, making it impossible for them to write to addresses outside the buffer.

Survive bad pointers

Dereferencing a bad pointer within a driver will crash the driver process, but will have no effect on the system as a whole. The reincarnation server will restart the crashed driver automatically. Users will not notice recovery for some drivers (e.g., disk and network) but for others (e.g., audio and printer), they might. In monolithic kernels, dereferencing a bad pointer in a driver normally leads to a system crash.

Tame infinite loops

If a driver gets into an infinite loop, the scheduler will gradually lower its priority until it becomes idle. Eventually the reincarnation server will see that it is not responding to status requests, so it will kill and restart the looping driver. In a monolithic kernel, a looping driver could hang the system.

Limit damage from buffer overflows

Minix 3 uses fixed-length messages for internal communication, which eliminates certain buffer overflows and buffer management problems. Also, many exploits work by overrunning a buffer to trick the program into returning from a function call using an overwritten stack return address pointing into attacker controlled memory, usually the overrun buffer. In Minix 3, this attack is mitigated because instruction and data space are split and only code in (read-only) instruction space can be executed, termed executable space protection. However, attacks which rely on running legitimately executable memory in a malicious way (return-to-libc, return-oriented programming) are not prevented by this mitigation.

Restrict access to kernel functions

Device drivers obtain kernel services (such as copying data to users' address spaces) by making kernel calls. The Minix 3 kernel has a bit map for each driver specifying which calls it is authorized to make. In monolithic kernels, every driver can call every kernel function, authorized or not.

Restrict access to I/O ports

The kernel also maintains a table telling which I/O ports each driver may access. Thus, a driver can only touch its own I/O ports. In monolithic kernels, a buggy driver can access I/O ports belonging to another device.

Restrict communication with OS components

Not every driver and server needs to communicate with every other driver and server. Accordingly, a per-process bit map determines which destinations each process may send to.

Reincarnate dead or sick drivers

A special process, called the reincarnation server, periodically pings each device driver. If the driver dies or fails to respond correctly to pings, the reincarnation server automatically replaces it with a fresh copy. Detecting and replacing non-functioning drivers is automatic, with no user action needed. This feature does not work for disk drivers at present, but in the next release the system will be able to recover even disk drivers, which will be shadowed in random-access memory (RAM). Driver recovery does not affect running processes.

Integrate interrupts and messages

When an interrupt occurs, it is converted at a low level to a notification sent to the appropriate driver. If the driver is waiting for a message, it gets the interrupt immediately; otherwise it gets the notification the next time it does a RECEIVE to get a message. This scheme eliminates nested interrupts and makes driver programming easier.

Architecture

The architecture of Minix 3 The MINIX 3 Microkernel Architecture.png
The architecture of Minix 3

As can be seen, at the bottom level is the microkernel, which is about 4,000 lines of code (mostly in C, plus a small amount of assembly language). It handles interrupts, scheduling, and message passing. It also supports an application programming interface (API) of about 30 kernel calls that authorized servers and drivers can make. User programs cannot make these calls. Instead, they can issue POSIX system calls which send messages to the servers. The kernel calls perform functions such as setting interrupts and copying data between address spaces.

At the next level up, there are the device drivers, each one running as a separate userland process. Each one controls some I/O device, such as a disk or printer. The drivers do not have access to the I/O port space and cannot issue I/O instructions directly. Instead, they must make kernel calls giving a list of I/O ports to write to and the values to be written. While there is a small amount of overhead in doing this (typically 500 ns), this scheme makes it possible for the kernel to check authorization, so that, for example, the audio driver cannot write on the disk.

At the next level there are the servers. This is where nearly all the operating system functionality is located. User processes obtain file service, for example, by sending messages to the file server to open, close, read, and write files. In turn, the file server gets disk I/O performed by sending messages to the disk driver, which controls the disk.

One of the key servers is the reincarnation server. Its job is to poll all the other servers and drivers to check on their health periodically. If a component fails to respond correctly, or exits, or gets into an infinite loop, the reincarnation server (which is the parent process of the drivers and servers) kills the faulty component and replaces it with a fresh copy. In this way the system is automatically made self-healing without interfering with running programs.

Currently the reincarnation server, the process server, and the microkernel are part of the trusted computing base. If any of them fail, the system crashes. Nevertheless, reducing the trusted computing base from 3-5 million lines of code, as in Linux and Windows systems, to about 20,000 lines greatly enhances system reliability.[ citation needed ]

Differences between Minix 3 and prior versions

Diagram of the relationships between several Unix-like systems Unix history-simple.svg
Diagram of the relationships between several Unix-like systems

Minix 1.0, 1.5, and 2.0 were developed as tools to help people learn about the design of operating systems.

Minix 1.0, released in 1987, was 12,000 lines of C and some x86 assembly language. Source code of the kernel, memory manager, and file system of Minix 1.0 are printed in the book. Tanenbaum originally developed Minix for compatibility with the IBM PC and IBM PC/AT microcomputers available at the time.

Minix 1.5, released in 1991, included support for MicroChannel IBM PS/2 systems and was also ported to the Motorola 68000 and SPARC architectures, supporting the Atari ST, Commodore Amiga, Apple Macintosh and Sun Microsystems SPARCstation computer platforms. A version of Minix running as a user process under SunOS was also available.

Minix 2.0, released in 1997, was only available for the x86 and Solaris-hosted SPARC architectures. Minix-vmd was created by two Vrije Universiteit researchers, and added virtual memory and support for the X Window System.

Minix 3 does the same, and provides a modern operating system with many newer tools and many Unix applications. [30] Prof. Tanenbaum once said:

Please be aware that MINIX 3 is not your grandfather's MINIX ... MINIX 1 was written as an educational tool ... MINIX 3 is that plus a start at building a highly reliable, self-healing, bloat-free operating system ... MINIX 1 and MINIX 3 are related in the same way as Windows 3.1 and Windows XP are: same first name. [19]

Many improvements have also been made in the structure of the kernel since the Minix 2 release, making the system more reliable. [31] Minix version 3.1.5 was released 5 Nov 2009. It contains X11, Emacs, vi, cc, GCC, Perl, Python, Almquist shell, Bash, Z shell, FTP client, SSH client, Telnet client, Pine, and over 400 other common Unix utility programs. With the addition of X11, this version marks the transition away from a text-only system. Another feature of this version, which will be improved in future ones, is the ability of the system to withstand device driver crashes, and in many cases having them automatically replaced without affecting running processes. In this way, Minix is self-healing and can be used in applications demanding high reliability.

Minix 3.2.0 was released in February 2012. This version has many new features, including the Clang compiler, experimental symmetric multiprocessing support, procfs and ext2fs filesystem support, and GNU Debugger (GDB). Several parts of NetBSD are also integrated in the release, including the bootloader, libc and various utilities and other libraries. [32]

Minix 3.3.0 was released in September 2014. This release is the first version to support the ARM architecture in addition to x86. It also supports a NetBSD userland, with thousands of NetBSD packages running right out of the box.

Mascot

Rocky Raccoon, the mascot of Minix 3. Rocky Raccoon mascot of MINIX 3.jpg
Rocky Raccoon, the mascot of Minix 3.

Rocky Raccoon is the mascot of Minix 3. [33]

MINIXCon

MINIXCon is a conference on sharing talks, efforts and researches related to Minix.

It was held once in 2016. MINIXCon2017 was cancelled due to lack of talks submitted. [34] [35]

See also

Notes

  1. 1 2 3 BSD-3-Clause with a fourth clause.

Related Research Articles

<span class="mw-page-title-main">Andrew S. Tanenbaum</span> American-Dutch computer scientist (born 1944)

Andrew Stuart Tanenbaum, sometimes referred to by the handle ast, is an American–Dutch computer scientist and professor emeritus of computer science at the Vrije Universiteit Amsterdam in the Netherlands.

<span class="mw-page-title-main">Minix</span> Unix-like operating system

MINIX is a Unix-like operating system based on a microkernel architecture. Since version 2.0, it has been Portable Operating System Interface (POSIX) compliant.

<span class="mw-page-title-main">Microkernel</span> Kernel that provides fewer services than a traditional kernel

In computer science, a microkernel is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system (OS). These mechanisms include low-level address space management, thread management, and inter-process communication (IPC).

A monolithic kernel is an operating system architecture where the entire operating system is working in kernel space. The monolithic model differs from other operating system architectures in that it alone defines a high-level virtual interface over computer hardware. A set of primitives or system calls implement all operating system services such as process management, concurrency, and memory management. Device drivers can be added to the kernel as modules.

Mach is a kernel developed at Carnegie Mellon University by Richard Rashid and Avie Tevanian to support operating system research, primarily distributed and parallel computing. Mach is often considered one of the earliest examples of a microkernel. However, not all versions of Mach are microkernels. Mach's derivatives are the basis of the operating system kernel in GNU Hurd and of Apple's XNU kernel used in macOS, iOS, iPadOS, tvOS, and watchOS.

<span class="mw-page-title-main">Operating system</span> Software that manages computer hardware resources

An operating system (OS) is system software that manages computer hardware and software resources, and provides common services for computer programs.

<span class="mw-page-title-main">QNX</span> Real-time operating system (RTOS) software

QNX is a commercial Unix-like real-time operating system, aimed primarily at the embedded systems market.

<span class="mw-page-title-main">DragonFly BSD</span> Free and open-source Unix-like operating system

DragonFly BSD is a free and open-source Unix-like operating system forked from FreeBSD 4.8. Matthew Dillon, an Amiga developer in the late 1980s and early 1990s and FreeBSD developer between 1994 and 2003, began working on DragonFly BSD in June 2003 and announced it on the FreeBSD mailing lists on 16 July 2003.

<span class="mw-page-title-main">XNU</span> Computer operating system kernel

XNU is the computer operating system (OS) kernel developed at Apple Inc. since December 1996 for use in the Mac OS X operating system and released as free and open-source software as part of the Darwin OS, which in addition to macOS is also the basis for the Apple TV Software, iOS, iPadOS, watchOS, visionOS, and tvOS OSes.

<span class="mw-page-title-main">UEFI</span> Operating system and firmware specification

Unified Extensible Firmware Interface is a specification that defines the architecture of the platform firmware used for booting the computer hardware and its interface for interaction with the operating system. Examples of firmware that implement the specification are AMI Aptio, Phoenix SecureCore, TianoCore EDK II, InsydeH2O. UEFI replaces the BIOS which was present in the boot ROM of all personal computers that are IBM PC compatible, although it can provide backwards compatibility with the BIOS using CSM booting. Intel developed the original Extensible Firmware Interface (EFI) specification. Some of the EFI's practices and data formats mirror those of Microsoft Windows. In 2005, UEFI deprecated EFI 1.10.

<span class="mw-page-title-main">QEMU</span> Free virtualization and emulation software

QEMU is a free and open-source emulator. It emulates a computer's processor through dynamic binary translation and provides a set of different hardware and device models for the machine, enabling it to run a variety of guest operating systems. It can interoperate with Kernel-based Virtual Machine (KVM) to run virtual machines at near-native speed. QEMU can also do emulation for user-level processes, allowing applications compiled for one architecture to run on another.

A kernel is a component of a computer operating system. A comparison of system kernels can provide insight into the design and architectural choices made by the developers of particular operating systems.

<span class="mw-page-title-main">Tanenbaum–Torvalds debate</span> 1990s debate regarding the Linux kernel

The Tanenbaum–Torvalds debate was a written debate between Andrew S. Tanenbaum and Linus Torvalds, regarding the Linux kernel and kernel architecture in general. Tanenbaum, the creator of Minix, began the debate in 1992 on the Usenet discussion group comp.os.minix, arguing that microkernels are superior to monolithic kernels and therefore Linux was, even in 1992, obsolete. The debate has sometimes been considered a flame war.

<span class="mw-page-title-main">Linux</span> Family of Unix-like operating systems

Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution (distro), which includes the kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses and recommends the name "GNU/Linux" to emphasize the use and importance of GNU software in many distributions, causing some controversy.

Linux began in 1991 as a personal project by Finnish student Linus Torvalds to create a new free operating system kernel. The resulting Linux kernel has been marked by constant growth throughout its history. Since the initial release of its source code in 1991, it has grown from a small number of C files under a license prohibiting commercial distribution to the 4.15 version in 2018 with more than 23.3 million lines of source code, not counting comments, under the GNU General Public License v2 with a syscall exception meaning anything that uses the kernel via system calls are not subject to the GNU GPL.

<span class="mw-page-title-main">Kernel (operating system)</span> Core of a computer operating system

The kernel is a computer program at the core of a computer's operating system and generally has complete control over everything in the system. The kernel is also responsible for preventing and mitigating conflicts between different processes. It is the portion of the operating system code that is always resident in memory and facilitates interactions between hardware and software components. A full kernel controls all hardware resources via device drivers, arbitrates conflicts between processes concerning such resources, and optimizes the utilization of common resources e.g. CPU & cache usage, file systems, and network sockets. On most systems, the kernel is one of the first programs loaded on startup. It handles the rest of startup as well as memory, peripherals, and input/output (I/O) requests from software, translating them into data-processing instructions for the central processing unit.

<span class="mw-page-title-main">Linux kernel</span> Operating system kernel

The Linux kernel is a free and open-source, monolithic, modular, multitasking, Unix-like operating system kernel. It was originally written in 1991 by Linus Torvalds for his i386-based PC, and it was soon adopted as the kernel for the GNU operating system, which was written to be a free (libre) replacement for Unix.

<span class="mw-page-title-main">NetBSD</span> Free and open-source Unix-like operating system

NetBSD is a free and open-source Unix operating system based on the Berkeley Software Distribution (BSD). It was the first open-source BSD descendant officially released after 386BSD was forked. It continues to be actively developed and is available for many platforms, including servers, desktops, handheld devices, and embedded systems.

<span class="mw-page-title-main">Rump kernel</span> Software run in userspace that offers kernel functionality

The NetBSD rump kernel is the first implementation of the "anykernel" concept where drivers either can be compiled into or run in the monolithic kernel or in user space on top of a light-weight kernel. The NetBSD drivers can be used on top of the rump kernel on a wide range of POSIX operating systems, such as the Hurd, Linux, NetBSD, DragonFly BSD, Solaris kernels and even Cygwin, along with the file system utilities built with the rump libraries. The rump kernels can also run without POSIX directly on top of the Xen hypervisor, an L4 microkernel using the Genode OS Framework or even on "OS-less" bare metal.

References

  1. 1 2 3 "The Minix license". Archived from the original on 2005-11-24. Retrieved 2005-11-24.
  2. corbet (2005-10-24). "Minix 3 hits the net". Lwn.net. Retrieved 2014-05-01.
  3. "minix3.org". minix3.org. Retrieved 2017-04-16.
  4. "Getting Started with Minix on Bochs on Mac OS". Woodhull.com. Retrieved 2014-05-01.
  5. "OSNews.com". OSNews.com. Retrieved 2014-05-01.
  6. "Minix under VMWare Installation How-To". Patrick.wagstrom.net. Archived from the original on 2013-11-12. Retrieved 2014-05-01.
  7. "Minix on Virtual PC: first look". Woodhull.com. Retrieved 2014-05-01.
  8. "Minix 3 on Virtual box". inopinion.org. 6 August 2014.
  9. Alting, Ingmar. "A port of the MINIX OS to the PowerPC platform" (PDF).
  10. "Minix3". Minix3. Retrieved 2014-05-01.
  11. "git.minix3.org Git - minix.git/summary". git.minix3.org. Retrieved 2022-05-03.
  12. "Index of /Iso/Snapshot/".
  13. "minix3 - Google Groups". groups.google.com. Retrieved 2022-05-03.
  14. "Intel ME: The Way of Static Analysis". blog.ptsecurity.com. Archived from the original on 2017-07-01. Retrieved 2017-08-28.
  15. Corna, Nicola (2017-08-28). "me_cleaner: Tool for partial deblobbing of Intel ME/TXE firmware images". GitHub . Retrieved 2017-08-28.
  16. Tanenbaum, Andrew S. "An Open Letter to Intel". Archived from the original on 2022-06-17. Retrieved 2022-09-06.
  17. Tanenbaum, Andy (2006-09-25). "Introduction to MINIX 3". OSnew. OSnews. Retrieved 2008-07-04. From Rebirth section: "Various studies have shown that software broadly contains something like 6-16 bugs per 1000 lines of code and that device drivers have 3-7 times as many bugs as the rest of the operating system. When combined with the fact that 70% of a typical operating system consists of device drivers, it is clear that device drivers are a big source of trouble. For Windows XP, 85% of the crashes are due to bugs in device drivers. Obviously, to make OSes reliable, something has to be done to deal with buggy device drivers. Building a reliable system despite the inevitable bugs in device drivers was the original driving force behind Minix 3."
  18. "CSAIL Event Calendar". Csail.mit.edu. Archived from the original on 2012-02-04. Retrieved 2014-05-01.
  19. 1 2 "Tanenbaum-Torvalds debate, Part II". Cs.vu.nl. 2006-05-12. Retrieved 2014-05-01.
  20. "Reliability". www.MINIX3.org. Archived from the original on July 1, 2006.
  21. "MinixReleases – Minix Wiki". Wiki.minix3.org. Retrieved 2014-05-01.
  22. "Minix versions and their use in teaching". Archived from the original on 2006-07-11. Retrieved 2021-06-16.
  23. 1 2 "LICENSE (3.1.0)". GitHub . Retrieved 2021-06-16.
  24. 1 2 "LICENSE (3.1.1)" . Retrieved 2021-06-16.
  25. 1 2 "LICENSE (3.1.2)". GitHub . Retrieved 2021-06-16.
  26. Swift, Björn Patrick. "Individual Programming Assignment User Mode Scheduling in Minix 3" (PDF). Minix3.org.
  27. MINIX Release 3.3.0
  28. "Minix1: Copying and Use Policies". 2007-02-13. Archived from the original on 2020-06-14.
  29. "The MINIX 3 Operating System". minix3.org. Archived from the original on 2012-01-13.
  30. "FAQ – Minix Wiki". Minix3.org. 2013-11-09. Retrieved 2014-05-01.
  31. "Improvements since V2". www.minix3.org. Archived from the original on April 17, 2006.
  32. "MINIX Releases". wiki.minix3.org. Archived from the original on 21 June 2012. Retrieved 29 February 2012.
  33. "mascot [Wiki]". wiki.minix3.org. Retrieved 2017-07-20.
  34. "Minix3". Archived from the original on 10 November 2017. Retrieved 5 July 2006.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  35. "Minix3". www.minix3.org. Retrieved 2017-11-11.

Further reading