MINIX 3 is a small and free UNIX clone designed for very high reliability. It is especially well-suited for low-end PCs, resource-constrained systems, and embedded applications. It is available with all the source code, which makes it well-suited to classroom or self-study by people wanting to learn how an operating system works.
See HardwareRequirements.
MINIX 3 can be downloaded from the MINIX 3 download page. MINIX 3.1.0 is also distributed on a CD-ROM included with the book Operating Systems Design and Implementation, 3/e by Andrew S. Tanenbaum and Albert S. Woodhull.
You can find the MINIX 3 source code in the /usr/src directory of your MINIX installation. You can also grab the code from our authoritative git repository. An official mirror is available on GitHub.
Post your question to our Google group, and we'll be glad to help. If you are looking for extensive support, some of the core developers are available for hire.
See the DevelopersGuide as a start.
You can also buy the MINIX3 book, which covers quite an old MINIX version, 3.1.0. Architecturally speaking, several things have changed since then - but it's much easier to understand those changes once you know the basics, and the book covers all that.
Yes. You can see the following archives:
Maybe. Try the Wayback machine.
A good place to start is this Teaching Web page.
If you have the requisite time, interest, and knowledge, you are welcome to join the MINIX 3 community. See the DevelopersGuide for some starting points.
Alternatively, you can email a patch to the Google Group. You can use git send-email
or TopGit (tg mail
) for this.
Probably not. You're supposed to do it yourself, that's why it's homework / an assignment. Think about talking to your supervisor or classmates first. If you suspect a MINIX bug, verify it's present in the latest version and post details on how to reproduce it.
If you must ask questions, make them very specific. Read How To Ask Questions The Smart Way. As in “how does the widget changing in the dinkling system work?”, not “<long source code paste>, what's wrong with my dinkling system?” Or, worse, simply post your assignment, add 'help plz,' and not tell us it's an assignment.
The MINIX 3 license is a clone of the Berkeley (BSD) license. In plain English, it says you can do whatever you like with the system provided that (1) you agree not to sue us under any conditions, and (2) you keep the credit lines in the source, documentation, and publicity unless other arrangements have been made. Specifically, you are free to modify the source code, redistribute it, incorporate it into commercial products with only the above restrictions.
We feel the GPL is too restrictive. Companies that put a lot of money into further developing open-source software do not want to give it their competitors. Since MINIX 3 has clear applications in embedded systems, we felt the BSD license was more appropriate.
MINIX was released in 1987 as a small easy-to-understand UNIX clone for use in courses teaching operating systems. Linus Torvalds, then a student at the University of Helsinki, studied MINIX in an operating systems course and was sufficiently impressed that he bought a PC to run it. He then used MINIX as a platform, guide, and inspiration to develop a MINIX clone, named Linux, which he released in 1991. Here is his announcement of Linux.
No. Absolutely not. Ken Brown of the Alexis de Tocqueville Institution wrote a report, funded in part by Microsoft, claiming that Linus stole Linux from MINIX. Brown's conclusion was that companies should not use Linux because the ownership of the intellectual property rights is unclear. This is complete garbage. While it is most unlikely that a 21-year-old student would have been capable of writing his own operating system had he not had the complete source code for a similar operating system available to use, study and modify, Linus wrote the initial version of the Linux code himself. The Brown report and a response from the creator of MINIX was discussed in detail on Slashdot.
The license of accompanying third-party software can be found in the software's LICENSE file, in its documentation, or in the headers of the software's source code. Information about the software and its source code can be found in the MINIX repository.
First, USB images are a legacy offer which was provided specifically for MINIX 3.1.x. They do not work with the more recent 3.2.x releases, and are futile with 3.3.0 which does support native USB peripherals.
Write the USB image file to the USB device sector-by-sector (e.g. with dd). In other words, don't write it to a FAT filesystem on the USB device, but write the file to it starting at the first sector (Sector 0). This will, of course, effectively wipe all other information that was stored on the USB device.
Then you can boot from the USB device, if your BIOS supports that.
Of course! See Crosscompiling.
By default clang is used as the compiler on native MINIX installs because of its BSD license. GCC is available (install it with pkgin) and you can build the base system with it by setting CC=gcc.
For cross-builds GCC is the default.
You can use the
netconf
tool to select your network chip and configure your IP address automatically using DHCP, or manually by providing the address, netmask, gateway, and other information. That tool is limited to one network card only. More advanced settings have to be done by hand. To do that, edit “/etc/inet.conf”. Usually, the format is:
eth0 fxp 0 { default; };
where fxp is the name of the ethernet driver you want to start (it is the name of the process inet looks for, to talk to, for ethernet). Take a look at “/usr/etc/rc” to learn how ethernet drivers are started. Currently, the choices are:
lance rtl8139 rtl8169 fxp e1000 dpeth dp8390 orinoco atl2 dec21140A
For details on inet.conf, please see the inet.conf manpage.
New VMware versions (starting workstation 8 it seems) try to give MINIX installs an e1000 driver instead of lance. Edit your .vmx file and change this line:
ethernet0.virtualDev = “e1000”
to say “vlance” instead. Then re-run netconf
under Minix.
So how do they differ, the old version has NO network Driver specified in it's “.vmx” file so MINIX must try everything and chooses the Lance driver. It would be better if [8] worked but I found that a bug causes panics with the IRQs to be printed to the console every few seconds.
To get things working with VMware do this:
1. Download the latest ISO image from the download page, and use 7Zip (or other) to extract the “.iso”.
2. Fire up VMware and create a new machine (“other” and “other 64 bit” DO work on 32-Bit WinXP).
3. Create one 16GB disk and populate it so it won't have to grow (and wreck havoc with defragmentation).
4. You can specify 1024 MB of memory (older versions of MINIX only use +880KB).
5. You can choose more than one processor; handy if you rebuild using gcc and
CONFIG_SMP=y CONFIG_MAX_CPUS=8"
6. You might as well add USB, a floppy, and parallel / serial ports.
7. Choose “NAT”.
8. Boot your “Virtual Machine” to the “.iso” (or the BIOS if you want to make changes), install MINIX by typing “setup /usr”.
9. Use “non-expert Partitioning” (default) and set “/home” to 512K, that makes the last Partition within Minix's limits.
10. When it says to shutdown note the 'Boot Command' (it will likely be “boot d0p0”). DO NOT Re-boot, type “off” instead.
11. When Minix exits and you are back to VMware goto the Directory where you created your Machine.
12. Use “Notepad” and edit the “.vmx” file.
Here is the “Trick”: REMOVE the line that says (somthing similar to): ' ethernet0.virtualDev = “e1000” '
You might wish to remove all the '“ethernet” Lines' and just have this:
ethernet0.present = "TRUE" ethernet0.addressType = "generated" ethernet0.generatedAddress = "00:xx:xx:xx:xx:xx" ethernet0.generatedAddressOffset = "0" ethernet0.connectionType = "nat"
Replace the line ' ethernet0.generatedAddress = “00:xx:xx:xx:xx:xx” ' with your old one.
12. Now start your Machine and type the “Boot Command” (likely “boot d0p0”), don't re-run the Installer by mistake ;) .
13. You can type “netconf” to configure Networking. If it scans the Adapters FAST then it did not work, look at “lspci”.
If it scans the Adapters SLOWly then there should be a “*” next to [7] (Lance) so choose “7” and then “1” for “dhcp” .
14. Type “reboot”.
15. Now you have a Machine that has many Peripherals, a nice 1/2 GB home and over 15GB of free space - with working Networking.
16. Use “pkgin update”, “pkgin upgrade” to Update to the current “Release”, if you want something that you can not get this way then they are in ftp://ftp.minix3.org/pub/minix/packages/3.1.9/i386/All/ (EG: subversion-base-1.6.9nb1.tgz) and some of the 'origonal sources' seem to be in ftp://ftp.minix3.org/pub/minix/distfiles-backup/ .
17. Read this Wiki and TrackingCurrent for latest info.
Added by Rob.
Yes. Porting to ARM is a top priority for the MINIX team.
The code is published in the current MINIX git master branch and the basics are working. For information on how to get started, see the Minix on ARM wiki page.
We are initially targeting the BeagleBoard-xM, BeagleBone, and BeagleBone Black.
The target processor is the ARM Cortex-A8, which supports the ARM v7 instruction set.
There are no plans at this time for other ports. We are focused on the MINIX/ARM port and providing excellent support for the hardware on the BeagleBoard-xM and BeagleBones. You can follow our progress at the Minix/arm Feature Matrix.
That's great, but try something more basic first.
Want to help with the ARM port? After the initial release, help to get more of the device working (e.g. hardware support, help with getting crosscompiling packages working, reducing code duplication, there will no doubt be an endless list of things to do and fix still) would be more than welcome.
See this document on POSIX.
See this document on vol.
Yes. See this document on data exchange.
Use
nroff -man //man_file// | more
We made measurements of the performance of MINIX 3 (user-mode drivers) versus MINIX 2 (kernel-mode drivers) and MINIX 3 is 5-10% slower. We have not compared it to other systems because there are so many other differences. The biggest difference is that MINIX 3 represents about a handful man-year of work so far and other systems represent thousands of man-years of work and our priority has been reliability, not performance.
The latest development sources for Minix has a new ftp client that is incompatible with the old ftp client that shipped with Minix 3.2.1. pkgsrc was updated to use the new ftp client. So you have to rebuild your system according to TrackingCurrent, or install with a newer snapshot iso.
openssh error: PRNG not seeded svn error: SSL handshake failed due to lack of entropy
This is a problem with /dev/random. Specifically, the random number generation doesn't work.
See if it's the case:
strings /dev/random
(ctrl+c to stop reading)
If you receive an error message, do:
echo "<insert random characters here>" > /dev/random
pkgin isn't very chatty about some things. Two main causes for this:
pkgin in clang-3.1nb2
instead of clang-3.1pkg_admin rebuild
.Yes. See Running Minix on VMWare.
See FileTransfer.
Yes. See Running MINIX on Bochs.
Yes. See this document on MINIX and Virtual PC.
Yes. See Running MINIX on VirtualBox.
After booting the CD, if you see an error like
A critical error has occurred while running the virtual machine and the machine execution has been stopped.
then you must enable hardware virtualization in vbox. (Settings → System → Acceleration → Enable VT-x/AMD-V.) If you can't, please read the Workarounds for VirtualBox.