In honor of Island's tenth birthday, I am releasing the source code to the Foxpro matching engine as it appeared on 12/15/2003. This was the last version before the Java migration. While the Java version is some *very* nice code, and ran several orders of magnitude faster - this code it particularly interesting precisely because it ran on such a slow platform and is so easy to read, highlighting the idea that it is usually the architecture and algorithms that matter more then raw platform speed.
You can view the full source code here, but the only part that really matters is that actual matching engine, which is the enter2order procedure. To paraphrase...
That's it! The while thing is less than a page long, and is twice as long as necessary because the buy and sell paths are repeated for clarity. No magic here - simple is best.
Q: But wait, what about all the messaging and sequencing and indexing?
A: This code is only the matching engine, which sits on top of plenty of other
support software. All the networking and message sequencing code is written in
hard code C and ASM. Any place you see INT97that is a
call down to this code. But that is just plumbing. This also depends on FoxPro's
ISAM indexing engine which uses a B*tree and is still impressive in its
performance and reliability even 20 years later. Any place you see a
SEEK, that is a call down to the FoxPro indexer.
Q: What the hell kind of code is that?
A: FoxPro for DOS version
2.6! Make fun if you want, but neither Linux nor Windows can hold a candle to
MSDOS for reliability. I had DOS machines that were running continuously from
1992 until 2010. When I finally shut them down to move them to virtual machines,
I found out that their hard drives and BIOS batteries were long dead, but that
didn't stop them! See how long a Windows or Linux machine can run with a dead
hard drive...
Q: 10th birthday? How are you counting?
A: I am counting from the day that Island2 went live with real stocks. Island2
was the second design of the matching engine and was different than Island1 (at
the time just Island) because the first design was built on top of NASDAQ's
SelectNet system. BTW, the first version wen live on 2/9/96.
Q: How is this code fault tolerant?
A: It isn't. The fault tolerance came from the fact there were always (at least)
two copies of this program in different places on physically separate networks.
If one machine (or network, or data center) died, you'd just promote the other
one and everything would continue on from where it left off. I am a big fan of
this shared-nothing strategy and am shocked at how many systems in the world say
they are fault tolerant when they really are just moving the single point of
failure somewhere else.
4/22/2011: I just saw an old friend who now works at NASDAQ and he told me that the "Jerkboy" messages still come up in NASDAQ's error logs!!!!! The code lives after 15+ years!
9/22/2011: Added an old logo image I found.