I recently downloaded and ran a 1981-era copy of VisiCalc. The VC.COM file weighs in at less than 28KB, which, as co-creator
Dan Bricklin says, is smaller than many GIF and JPG files on today's Web.
Recounting the birth of the spreadsheet, Bricklin makes several other cogent observations. The essential nature of the spreadsheet, he rightly notes, has changed
very little in nearly a quarter century, from VisiCalc's introduction in 1979 to Microsoft Excel's 2003 upgrade. Perhaps equally
remarkable is that VisiCalc can still run on today's computers — in a DOS box on Windows Server 2003, for example.
Curmudgeons love to pounce on these facts as evidence that we've squandered the riches bequeathed to us by Moore's law. Compared
with a 1981 PC, a modern one is 500 times faster, has 2,000 times as many transistors, and can store 8,000 times as much data.
It would be hard to argue convincingly that Excel 2003 surpasses VisiCalc by these orders of magnitude. Even so, few would
choose to go back. Software advances at a different rate, but it does move forward.
It's not the rate of advance that worries me so much as the method of propulsion. The arc of software progress is defined
not by increasing speed or capacity, but by the growing complexity of the data, events, messages, and relationships flowing
through software systems. We deal with that complexity by layering abstractions on top of abstractions. A file system abstracts
block device drivers; the Java and .Net virtual machines abstract CPUs. It's a brilliant strategy. We get to focus on the
higher-order abstractions and pretend that the primitive ones don't exist. But in reality they still do. Nothing that's been
hidden ever really goes away. And when abstractions leak, as they always do, things can get messy.
Recently, while working with the latest versions of Windows Server, Exchange, Office, SharePoint Services, and Live Communication
Server, I ran into a classic leaky-abstraction problem. As has often been the case throughout the years, it had to do with
IIS and security permissions. Back in the '90s, there was already confusion between lower-level permissions applied to the
NTFS (NT File System) and higher-level permissions that were defined in the IIS metabase and that governed virtual Web sites.
The new century brings another level of abstraction: .Net. After checking all the usual suspects, I remembered that the service
giving me trouble — SharePoint — is based on ASP.Net. In that realm, there's a new layer of security permissions that segregate
sets of .Net assemblies into trust zones. These permissions are declared in a file called machine.config, and it was there
that I found and fixed the problem.
This isn't just a Windows phenomenon, of course. Every major software system has, at its core, what Dave Winer likes to call
a lizard brain. The roots of Linux reach down through many layers to its lizard brain. Mac OS X archeologists can explore
not only that same deep history but also a parallel 15-year NextStep legacy. Every software architect longs for a chance to
reorganize — or as they like to say, "refactor" — to a simpler and stronger foundation for new layered abstractions. Few organizations
have the resources to maintain and evolve a working system while mercilessly refactoring to produce its successor. Microsoft
is among the lucky few. We'll see, in a couple of years, how well Longhorn has exploited that rare opportunity.