Table of Contents

Frequently Asked Questions

General Questions

What is MINIX 3?

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.

What hardware do I need to run MINIX 3?

See HardwareRequirements.

Where can I get MINIX 3?

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.

Where can I get the MINIX 3 source code?

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.

Where can I get help with MINIX 3?

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.

I am a beginner. Where can I learn about MINIX 3 programming?

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.

Somebody must have seen my problem before. Is the newsgroup archived?

Yes. You can see the following archives:

A page I once saw is gone. Is there a way to find it?

Maybe. Try the Wayback machine.

Where can I find information about using MINIX 3 for teaching?

A good place to start is this Teaching Web page.

Can I become a MINIX 3 developer?

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.

How do I submit a patch?

Alternatively, you can email a patch to the Google Group. You can use git send-email or TopGit (tg mail) for this.

Can you help me with my MINIX homework / lab assignment / I need to implement lottery scheduling / how do I add a system call?

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.

What is the MINIX 3 license?

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.

Why didn't you use the GPL?

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.

What is the relationship between MINIX and Linux?

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.

Linus has been accused of stealing Linux from MINIX. Is that true?

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.

What license does included third-party software use?

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.

Technical Questions

How do I boot the USB image?

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.

Can I cross-compile it?

Of course! See Crosscompiling.

Why don't you use GCC?

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.

How do I change the network configuration after an install?

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.

No network driver is detected under VMware

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.

I can not get the Network to work using VMware, what should I do?

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.

Will MINIX be ported to ARM/MIPS/SPARC/x86-64/Raspberry Pi?

ARM

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.

Other

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.

I want to port Minix to the ARM/MIPS/SPARC/x86-64

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.

My SATA drive doesn't work with MINIX

MINIX 3 claims to be POSIX compliant. What is POSIX?

See this document on POSIX.

How can I boot multiple operating systems on the same computer?

See Running Multiple Operating Systems.

How do I boot MINIX3 from GRUB?

See Running Multiple Operating Systems.

How can I avoid problems with the vol command and floppy disks?

See this document on vol.

Is it possible to exchange data between file systems of different operating systems?

Yes. See this document on data exchange.

How do I view a draft man page that hasn't been installed yet?

Use

nroff -man //man_file// | more

What is the performance of MINIX 3 like?

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.

I get an error with pkgsrc saying NWIOTCPCONN: connection timed out

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.

I get an error with / openssh / svn / /dev/random

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 just tells me "nothing to do"

pkgin isn't very chatty about some things. Two main causes for this:

  1. pkgin didn't recognize the package name: try the exact full name including 'nb', e.g. pkgin in clang-3.1nb2 instead of clang-3.1
  2. package database is confused. rebuild it with pkg_admin rebuild.

Running Minix 3 on a Virtual Machine

Can I run MINIX 3 on VMware?

Yes. See Running Minix on VMWare.

Can I transfer data between a MINIX 3 guest on VMware and the host?

See FileTransfer.

Can I use the Bochs emulator to run MINIX 3?

Yes. See Running MINIX on Bochs.

Can I run MINIX 3 on top of Windows using Virtual PC?

Yes. See this document on MINIX and Virtual PC.

Can I run MINIX 3 in VirtualBox

Yes. See Running MINIX on VirtualBox.

It doesn't work

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.