John Carmack is God. A while back he posted his thoughts in his plan file on the various operating systems in use today. I thought it was so good that it should be preserved for posterity. Here is the text, more or less in its entirety. I have taken the liberty of cleaning up a typo or two, and HTMLifying things a bit. The original finger posting is archived on QuakeFinger.
Mar 18 [1997]
I have gotten a significant amount of response on the Quake 2 extension mechanism. I do read everything that comes my way (I can't respond to all of it, though), and I have learned a few things from the mail.
Nothing is set in stone yet, but it is still looking like a dll is going to be the primary interface. I have been seriously considering a java interface, but the tradeoffs (time spent implementing takes away from something else...) just don't quite add up. Other options, like enhancing qc or using other languages like perl have very remote chances.
One of the primary reasons is that you can always build UP -- put more functionality on top of a dll, but you can't always build DOWN -- accessing the registry from java for instance.
For Id Software to develop a game, a dll will be most efficient. We have more cpu power, and we can debug it more easily. We are directing significant effort towards making Quake 2 a better GAME, as well as just a better mutliplayer virtual world. Quake 1 was pretty messed up from a game standpoint, and we don't plan on doing that again.
What I can offer the qc hacking crowd is a public release of the qc interface and interpreter code from Quake 1 when Quake 2 is released. The user community can then bolt things together so that there can be one publicly trusted DLL that executes an updated and modified qc language for portable, secure add ons.
I really do care about portability, but it is just one factor that needs to be balanced against all the others. Things just aren't clear cut.
Speaking of portability, to remove the guesswork that goes on, here are my current opinions on the various platforms:
Win32
- Win32 rules the world. You are sticking your head in the sand if you think otherwise. The upside is that windows really doesn't suck nowdays. Win 95/NT 4.0 are pretty decent systems for what they are targeted at. I currently develop mostly on NT, and Quake 2 will almost certainly be delivered on win32 first. Our games should run as well as possible in NT, we won't require any '95 only features.
DOS
- We are not going to do another dos game. No amount of flaming hate mail is going to change my mind on this (PLEASE don't!). The advantages of good TCP/IP support, dynamic linking, powerfull virtual memory, device drivers, etc, are just too much to overcome. Yes, all of those can be provided under dos in various ways, but it just isn't worth it.
Linux
- I consider Linux the second most important platform after win32 for id. From a biz standpoint it would be ludicrous to place it even on par with Mac or OS/2, but for our types of games that are designed to be hacked, Linux has a big plus: the highest hacker to user ratio of any os. I don't personally develop on Linux, because I do my Unixy things with NEXTSTEP, but I have a lot of technical respect for it.
MacOS
- From a money making standpoint, the only OS other than win32 that matters, and it doesn't matter all that much. We have professional ports done to MacOS instead of unsupported hack ports, which is a mixed blessing. They come out a lot later (still waiting for quake...), but are more full featured. I have zero respect for the MacOS on a technical basis. They just stood still and let Microsoft run right over them from waaay behind. I wouldn't develop on it.
OS/2
- A native OS/2 port of any of our products is unlikely. We just don't care enough, and we are unwilling to take time away from anything else.
SGI
- I don't particularly care for IRIX as a development environment (compared to NT or NEXTSTEP), but SGI has the coolest hardware to run GL apps on. Safe to assume future IRIX ports, but its not exactly a top priority.
AIX / OSF / HPUX / SOLARIS
- I wouldn't start a port to any of these, but if a trusted party (Zoid) wanted to do them, I probably wouldn't object.
Be OS
- I bought a BeBox because I am a solid believer in SMP, and I like clean, from-scratch systems. I was left fairly non plussed by it. Yes, it is lean and mean and does a couple things better than any other OS I have seen, but I just don't see any dramatic advantages to it over, say, NEXTSTEP. Lion (the company doing the Mac quake port) has a BeOS port of quake sort of working, and have my full support in releasing it, but it will be strictly an act of charity on their part, so don't expect too much.
Plan 9
- I spent a few months running Plan9. It has an achingly elegent internal structure, but a user interface that has been asleep for the past decade. I had an older version of quake dedicated server running on it (don't ask me for it -- I lost it somewhere) and I was writing a civilized window manager for it in my spare time, but my spare time turned out to be only a couple hours a month, and it just got prioritized out of existance.
NextStep
- My favorite environment. NT and Linux both have advantages in some areas, but if they were on equal footing I would choose NEXTSTEP hands down. It has all the power of Unix (there are lots of things I miss in NT), the best UI (IMHO, of course), and it just makes sense on so many more levels than windows. Yes, you can make windows do anything you want to if you have enough time to beat on it, but you can come out of it feeling like you just walked through a sewer.
In the real world, things aren't on equal footing, and I do most of my work on NT now. I hold out hope that it may not stay that way. If apple Does The Right Thing with Rhapsody, I will be behind them as much as I can. NEXTSTEP needs a couple things to support games properly (video mode changing and low level sound access). If Apple/Next will provide them, I will personally port our current win32 products over.
If I can convince apple to do a good hardware accelerated OpenGL in Rhapsody, I would be very likely to give my win NT machine the cold shoulder and do future development on Rhapsody. (I really don't need Quickdraw3D evangelists preaching to me right now, thank you).
So, there you have it, the thoughts of a leading-edge programmer on the relative merits of most of the modern operating systems in use today. Interesting is what he doesn't mention... Amiga is conspicuous by its absense.
Brian Hook, another programmer working at id Software made some related comments in his own plan file (bwh@idsoftware.com) regarding the current status of ports.
Several people asked about a BeOS port, and I wasn't going to worry too much about it. However today I got a message from someone at Be asking us if we were interested in a port, and John and I discussed this and decided it was something interesting.
While Be itself doesn't knock us dead technically, the fact that it supports OpenGL is a pretty big plus, so we're willing to support them. Just so there's no suspense, here are our list of implementations and their relative priorities:
Win32 x86
- Duh. This is what we're working on full-time.
Win32 AXP
- We've reached a good waypoint with the DEC Alpha port, and probably won't worry about it until Q2TEST's release is imminent. I'm responsible for this.
Rhapsody
- John is handling this one and doing it whenever he finds the time. It's about the same priority as the Win32 AXP port -- they're both important for different reasons. Rhapsody demonstrates our portability to a radically different OS; Win32 AXP demonstrates our portability to non-Intel CPUs.
SGI
- This will likely be the result of a collaboration between SGI and id, and will probably involve having an SGI engineer on-site for a week or so to get things up and running. This is important to us because SGI is the premiere OpenGL platform, and it's just damn cool to know that out there are SGI Onyx2 InfiniteReality platforms that are running GLQuake. We want the same thing for Quake2.
Linux x86
- Zoid is handling this, and this is his biggest porting priority. We have lots of Linux fans and we want to support them, and Linux also has a pretty solid OpenGL presence.
BeOS
- We'd like to see BeOS supported after Zoid gets done with the Linux x86 port, since BeOS is yet another radically different OS and also runs on multiple CPUs (PPC and x86). Also, BeOS supports OpenGL, and we give preference to platforms with good OpenGL support.
Linux (other)
- Just as an existence proof Zoid is going to port Quake2 to all the other Linux implementations out there and see how well that works.
Unix (other)
- HP, IBM, etc. are probably going to contact us or Zoid about Unix ports in the future, and we're not opposed to these, but we're not allocating time for them until they become an issue.
OS/2
- Only if IBM does all the work.
misc others
- Other ports are "to be determined". I can say right now that there is NO WAY we're going to do a DOS version! An Amiga version is probably out of the question (before you flood me with e-mails, I LIKE the Amiga), as are Atari ST versions and other oddball legacy computers.