My first desktop Mac was a IIcx, bought in about 1989, for the astounding sum of nearly £4000 (to put that in context, it took me a year of working between school and university to pay for it, and I could have bought a new Ford Fiesta for less).
Since then, as a Mac developer, I’ve owned and used many more, pretty much always the top spec of the current generation. There was certainly a time when having the latest, greatest desktop machine was essential (not to mention highly desirable for the sheer geeky joy of it).
However, since going back to indy development in 2010, I’ve only worked on my laptop, and I didn’t have a desktop machine at home for a good few years prior to that, despite regularly working from home on a big game with masses of data.
So the recent speculation leading up to WWDC about whether the Mac Pro would get an update, and the subsequent answer (“not really, well maybe slightly, but there’s something new coming next year”), lead me to ponder what I’d actually want. The four things that I can see a desktop might offer me are:
The conclusion I came to is that with all of these things, what I actually want isn’t really a desktop machine at all.
Conceptually what I want is one or more black boxes (well, maybe shiny aluminium boxes), that I can plug into my laptop (or perhaps hang on the network), which expand its capabilities.
In performance terms, these boxes should behave as near as possible as if they were inside the laptop, hanging directly off the main system bus, but other than that, they really don’t have to be housed in one big lump under my desk.
Whether Thunderbolt is up to the sort of load this would impose, I don’t know. For storage, I suspect that it is, and solutions are already there.
To some extent screen real estate may be too, although I’m not sure what sort of external monitor the new retina Mac Book Pro will be able to drive in addition to it’s own monster display.
If it were possible to house additional video hardware at the other end of a Thunderbolt cable (maybe it is?), so that one could effectively plug in additional video cards via the cable, this would pretty much remove the need for a desktop Mac as a way to drive a silly numbers of monitors.
Similarly, custom hardware, encoders and input cards, and so on, can and should probably live at the other end of a Thunderbolt cable.
All of which just leaves processing power and memory.
Given the bandwidth requirements of both, it’s clearly unlikely to be possible to add these directly to a laptop as if they were on the main logic board, but I’d love to see Apple try to get as close as it could to that.
Wouldn’t it be great to have a Mac-Mini / Airport Extreme sized box that required little or no configuration and just made your laptop more powerful when you plugged it in?
To some extent, things like distributed compilation offer this already. We used to have a pretty excellent setup for the Mac when I worked at SI, distributing to a large number of high end Mac Pros, and it really improved the build times. I think that got a bit broken with Xcode 4 though, and since then I’ve tried it at home with limited results, but only attempting to distribute to a machine with pretty much the same power as my laptop.
Given the increasingly distributed and task oriented nature of the code we all write these days, an approach which we need anyway to take advantage of the multiple cores already in our machines, it seems like some sort of generic solution allowing us to scale up the power of a machine ought to be a lot more achievable now than it was in the past.
Data is the big problem - getting the right stuff to the right processor in a timely fashion is tricky (just ask anyone who’s ever written code for a PS3) - but it’s not insurmountable.
Abstractions like GCD and NSOperation are probably a bit too fine grained to be transparently parcelled out to an external processor, but if we had another abstraction for encapsulating slightly larger chunks of work along with the data needed to do them, we’d have a chance of making this sort of thing fly. Things like XPC could really help here, allowing whole abstract services to run without the client process having to know or care where.
Nothing I’m talking about is revolutionary of course, but packing it up in a really clean, modular, elegant way that can be used by pro-consumers would be. And who better to do it than Apple?