Andrew Stuart Tanenbaum is an American computer scientist and professor emeritus of computer science at the Vrije Universiteit Amsterdam in the Netherlands. He is best known as the author of MINIX, a free Unix-like operating system for teaching purposes, and for his computer science textbooks, regarded as standard texts in the field. He regards his teaching job as his most important work. Since 2004 he has operated Electoral-vote.com, a website dedicated to analysis of polling data in federal elections in the United States.

Can you tell our readers about yourself and your role nowadays?

I was a professor at the Vrije Universiteit in Amsterdam for 43 years. I officially retired in 2014, but I am still active. For example, I am still writing books and I am an ACM Distinguished Speaker, so I get invited to various universities to give talks. I am still involved with MINIX, including the planning for the MINIXCon 2017 conference in Munich, Germany, in Sept. 2017.

How you first got involved with programming?

I was a student at MIT. Somehow I learnt that MIT had acquired a PDP-1 minicomputer. I went over to it and asked if I could use it. They said yes and gave me a manual. I basically taught myself to program in PDP-1 assembly language. I also took courses on programming at MIT.

While having a wide field of expertise, which area do you put noticeably more emphasis

on and why?

I think my primary interest has always been operating systems. I am particularly concerned about dependability and security since there is so much poor software out there.

You created MINIX. Can you tell us the idea behind it? What was its purpose?

When UNIX V6 was released, it became an instant hit at universities. A professor in Australia, John Lions, wrote a book describing how it worked line by line. Many universities began using the Lions’ book in their courses. When Bell Labs released UNIX V7, the new license said it was forbidden to teach it in classes or write books about it. So, I and many other professors were stuck. I decided to write my own operating system from scratch, without any of the Bell Labs code, so that students could learn how an operating system worked. That led to MINIX being released in 1987. It was an instant hit.

Could you tell more about the correlation between Minix 3 and NetBSD that allows Minix to run thousands of NetBSD packages on it?

After MINIX 3 had been up and running for a couple of years, we decided that there were not enough packages for it. Therefore, we decided to make the outside of it (what the user sees) much more compatible with NetBSD. We also ported many NetBSD headers, libraries, compilers, tool chains, etc. Internally, MINIX 3 is a multi-server system with excellent fault tolerance properties. For example, each device driver runs as a separate user process, outside the kernel. If a driver crashes, it can be replaced on the fly without affecting the system. The result of this design is that one effectively has a fault-tolerant system that can run NetBSD packages.

Can MINIX run FreeBSD packages too?

We have never tested for this. Any FreeBSD package that can run on NetBSD will probably work.

What is your most interesting IT issues and why?

My biggest concern is reliability and security. For nearly all users, computers are more than fast enough, but they are still very unreliable compared to televisions and other devices. I think a computer should have a failure mean time of 50 years so that almost no one will ever experience a failure. We are a long way from there, and need a lot of work to get there.

What tools do you use most often and why?

I have a Mac Pro and a MacBook Pro that I use most of the time. I use emacs and the shell a lot for day-to-day work. I run a Website (www.electoral-vote.com) and a lot of the code there is in awk. The thing I really like about awk is that it is stable. Its updates are fairly infrequent. I think the last one was about 30 years ago. I dislike software that changes all the time. As a general rule, each new version of a program is bigger, slower, and less stable than its predecessor, all in the name of adding new features that almost no one wants.

What was the most difficult and challenging implementation you have done so far? Could you give us some details?

MINIX almost didn’t happen. It was working pretty well, but would crash after about an hour for no reason and no consistent pattern. I could not figure it out. As a last ditch effort, I wrote a hardware simulator and ran MINIX on the simulator to try to find out what was happening. It ran perfectly on the simulator, just not on the hardware. I could not figure it out. I came within a hair of giving up. If I had given up, there wouldn’t have been a Linux since Linus Torvalds was a big MINIX user and built Linux using MINIX. If there was no Linux, there would be no Android, since Android is built on Linux. I told one of my students that MINIX crashed after an hour for no reason and he said he heard that the CPU gave interrupt 15 if it got warm. There was nothing about this in the manual, and of course, the simulator didn’t have this interrupt. I changed the code to catch the interrupt and sure enough, that was the problem. But it took me six months to find it.

What future do you see for Open-Source systems?

I think it is being used more and more. A number of companies, especially startups, use open-source. I think it will have a good future.

Do you have any specific goals for the rest of this year?

I think I am going to work on a revision of one of my books. I am certainly going to the MINIXCon 2017 conference and some other conferences. If I get invitations as an ACM Distinguished Speaker, I might give some MINIX talks.

Do you have any untold thoughts that you want to share with the readers?

Gee, I can’t think of any off hand. I did write a paper: “Lessons learned from 30 years of MINIX.” You can read it at the ACM digital library (acm.org/dl)

What is the best advice you can give to programmers?

Put a tremendous amount of effort into making your code solid, portable, robust, and correct. Don’t worry about speed. For most applications, computers are more than fast enough already. But people get very annoyed when software crashes or hangs or doesn’t work correctly. Keep the code simple and clean, and don’t take shortcuts. Don’t optimize it until it is finished and you have measured its speed and determined that it is not fast enough. That rarely happens nowadays. Test it thoroughly. The goal is that it should work perfectly all the time. If you can’t achieve that, it isn’t a good code.

Thank you