A Tour of the Microsoft TFS Cross-Platform Build Lab

October 25, 2013

Recently Jesse Houwing, one of the Team Foundation Server MVPs, wrote a helpful blog post outlining client/server compatibility in TFS. One of the interesting points in this list is that our cross-platform TFS tooling, Team Explorer Everywhere, is compatible with a wide range of TFS servers, going all the way back to the first version of Team Foundation Server. Having worked with this team for many years now, this isn't surprising to me; this is a team that takes compatibility very seriously.

You can see this passion in the requirements sheet - it reads more like a who's-who of modern operating systems than a typical supported platform list from Microsoft (and, frankly, some of these platforms are starting to feel... less than modern). But one thing most people don't see is the actual infrastructure that we use to support all these platforms. The machine room in the TFS North Carolina office is home to the TEE build and test lab, much of the hardware becoming increasingly rare anywhere but certainly these machines are unique at Microsoft. Only a handful of people are familiar with this lab, but this is one of my favorite places in the Raleigh-Durham office, so I was certain to snap a few pictures the last time I was in town.

The first thing you notice when you walk into our lab is a cabinet full of servers and, unsurprisingly, these workhorses wouldn't look out of place in any lab in any Microsoft building. These are a few large multi-core servers with big fast disks that run Hyper-V and handle virtual machines for our x86 amd amd64 build hosts:

  • Linux
  • Solaris
  • FreeBSD
  • Windows 8

We run VMs for all of these platforms on both x86 and amd64, comprising our primary build and test hosts for their respective platforms. They contain the most recent JDK update to the oldest JDK that we support (currently 1.5). On the platforms where we support the plug-in for Eclipse (everywhere but FreeBSD), we have Eclipse versions from 3.5 through 4.2 for compatibility testing through the range of versions.

In addition, these hosts maintain a variety of other test VMs. Our largest install base is Windows, as you might imagine, so we have a bunch of Windows VMs to test TEE in various Windows versions (all the way back to XP!) and with various Eclipse products, different JVMs, odd networking setups and other idiosyncrasies that have been problematic for us in the past.

Outside of the server cabinet you'll find a very popular x86-based platform that we can't virtualize through Hyper-V: Mac OS. Instead, we have a lovely aluminum Apple tower that provides builds for our Mac OS platforms. An astute observer will notice that this tower looks a little odd - as if this Mac Pro is missing one of its optical drives. That's because this machine is not a Mac Pro; it's a PowerMac G5.

You may recall that when Apple wants to support multiple architectures they just added cross-compilers to Xcode and gave the toolchain the ability to produce a single fat binary that concatenated all the architectures together. Thus a "universal" file can contain 32- and 64-bit PowerPC and 32- and 64-bit Intel all in a single executable. Unfortunately, recent Xcodes won't cross-compile to PowerPC (and because it was a short-lived architecture at Apple, very few versions of Xcode are able to target PPC64), so we keep this lovely old machine running for our Mac OS builds. I admit we probably don't have too many people using Team Explorer Everywhere on PowerMacs these days, but this has always been our Mac build machine, and it's a great piece of hardware, so I haven't seen any reason to change it.

In fact, we like those old PowerMacs so much that we even have two. The second is our build and test machine for Linux PPC, a platform that has waned in popularity a bit since we first started supporting it (almost a decade ago), but a platform that we still love nonetheless.

Like Apple, Hewlett-Packard changed architectures on their workstations a few years ago, from PA-RISC to Itanium. Unlike Apple, who chose a technology called "Rosetta" for their backward compatibility story, emulating their old hardware, HP actually decided to slap both processors in a chassis and call it a day. They only did this for select machines, though, and these machines have names like "Superdome", which kept them a little bit out of my price range. Instead, we have two HP-UX machines, one for each platform.

Our HP-UX Itanium build and test machine is a ZX-6000. The ZX-6000 is a fine machine: dual 1.5GHz IA-64s, 8GB of RAM and Ultra320 SCSI. But it's a little uninspired with it's black 2U chassis and it gets lost in a cabinet full of other similar-looking machines.

Our PA-RISC machine, on the other hand, has no risk of getting of getting lost anywhere. It's a Visualize J5600, weighing in at a whopping 11U that, while not as big as something called a "Superdome", is still the largest machine in the lab by at least double. This monster was quite a machine in its heydey over a decade ago, with dual PA-8600 processors and 1GB of RAM. I have a soft spot in my heart for the Visualize workstations -- I had a C240 on my desk so many years ago -- and I think that this classy machine offsets the sterility of its Itanium cousin.

Another machine I have a soft spot for is our Sun. This one's a SunBlade 2000 which, in the fine tradition of confusingly named Sun products, is not a blade server at all but just a normal tower-format workstation.

It's not the most powerful machine, just a single UltraSPARC-III clocked at 900MHz with only 1GB of RAM. And the funny curved purple plastic chassis makes it look like it's a workstation out of a cartoon, or maybe an early-90's SGI workstation. Or both. And it's running that newfangled Solaris 2 which is always a sad reminder that Sun threw away their fine BSD roots. Despite all that, though, this machine still manages to bring a smile to my face every time I log in and I see "SunOS", reminding me just a little bit of all the Sun servers and workstations I used earlier in my career.

And then there's our AIX box, an RS/6000 Model 44P-170 sporting a 400MHz Power3 and 1GB of RAM. I must admit that despite my general and unabashed love of old Unix machines, I've never really "clicked" with AIX. I've never been a big fan of SMIT, its graphical administration console, and even less a fan of the not-quite-BSD, not-quite-SysV config files you have to work with if you avoid it. Plus the IBM JVM has a tendency to treat filenames in Latin1. (But hey, at least it doesn't speak EBCDIC.) Still, personal preferences aside, this machine has been a workhorse for us.

Finally, the newest build machine is not in the lab at all, but at yet another branch office, this one in Northern Ireland. Martin Woodward has a Raspberry Pi for our Linux ARM builds which are not officially on the supported platform list, though we are certain to always update the binaries in our distribution.

Some people look at this lab and wonder why we bother supporting some of these old platforms. I look at it and I see a commitment fulfilled, back when Team Explorer Everywhere was acquired, that we would support developers on all platforms. So I'm very proud that Microsoft has continued their investment in Team Explorer Everywhere and I'm impressed by the hard work the TFS Cross-Platform Team does to support all these platforms.