has been a lot of confusion over exactly what Microsoft's .NET
strategy is. It's like the joke about the blind men and the
elephant; you get a different view depending on what part you grab.
Microsoft wants .NET services to become a key part of
the fabric of the mainstream Internet.
I have seen various articles from developers who have been
exposed to different parts of .NET, each claiming that they have
finally understood what it is all about. In fact, they only
understand the part that they have seen.
article in a Seattle paper is typical. It talks about accessing
data from non-PC devices, about aggregating data from multiple Web
sites, about subscribing to software instead of buying it, and of
course about C#, Microsoft's new language. These all miss the key
point about what .NET really is: .NET is Microsoft's attempt to turn
the Internet into a well-defined platform for application
Questions and Answers
Throughout its history, Microsoft has defined three platforms for
application developers: DOS, Win16, and Win32. You could argue that
COM is a separate platform or an extension of Win32, but the basic
idea is the same. At every stage of the development of the personal
computer, software developers have asked, "How do I write an
And Microsoft has provided the answer: Here is the runtime model,
here are the APIs you call, here are some tools you can use, here is
how to get help if you have problems.
Now substitute a web of connected personal computers -- the
Internet -- for a single one, and developers are still asking, "How
do I write an application?" And Microsoft's answer is, .NET.
DOS provided very few services to application writers, but with
the Windows APIs, things got more sophisticated: support for
graphics, for printing, for various other input and output devices,
and eventually for networking. These were filtered through a
standard Microsoft-provided operating system to various third-party
devices, each with their own device driver, which performed the
In the .NET world, the "API" will handle Internet-related issues
such as password verification, price calculation, payment, and so
on. The "operating system" will be a set of always-available Web
sites that may then dispatch the actual work to third-party sites --
the "device drivers" in the .NET model.
Where do .NET applications run? Just as Windows applications can
run on clients or servers, .NET applications may run on a client
machine connected to the Internet, on a server talking to other
machines in a server farm, or on a Web site providing services to
clients. In some of these situations writing a .NET application in
C# (or another portable language) makes sense, in others it doesn't.
In this model, a connection to the Internet will become a basic
part of booting up your computer. In the early days, machines booted
off the floppy. Establishing a connection with the hard drive was
optional. If the hard drive wasn't working or wasn't connected, it
didn't stop the machine from booting.
Eventually the hard drive became a requirement, but connecting to
the network became optional. Then in a Windows network, people
sometimes discovered that if the network was down they couldn't even
log on to their machine, or couldn't print to the printer physically
situated next to their own machine.
In the .NET world, you may be unable to use your machine if an
Internet connection cannot be established (or if some necessary
servers on the Internet aren't up).
What is the upside? Imagine being able to seamlessly choose to
print to the printer in your house, the printer in your office, or
the fancy printer at Kinko's in your neighborhood. Each choice will
have a cost associated with it, as well as possible restrictions on
number of pages, who has access, and so on. (The assumptions made in
the case of a "down Internet" should be locally controllable. An
admin could set it up so that if the server that calculated printing
costs was unavailable, every accessible printer was assumed to cost
an infinite amount of money, or they could set it up so it was
assumed to be free.)
Can Microsoft pull this off? It seems ludicrous at first glance,
given the vastness of the Internet. But there is no technical reason
why it can't be done. Sure, Microsoft could not prevent non-.NET
servers from being up, just as it can't prevent someone from booting
a non-Microsoft operating system on their personal computer.
What Microsoft cares about is that .NET services become a key
part of the fabric of the mainstream Internet, that service
providers make their services available via .NET first (or only via
.NET), that applications are written to assume a .NET
infrastructure, and so on.
There is much harrumphing about how Microsoft will ever make
money on this. This is the same as pointing out that today when
someone writes an application for Windows and sells it, Microsoft
makes no money directly. The money is made selling tools, selling
core technologies, and selling Microsoft's own applications that run
on the platform.
Most industry analysts, and a lot of software companies, say they
don't understand all of .NET, and aren't too concerned about it. In
fact, Microsoft doesn't necessarily understand .NET yet, and
certainly hasn't done a good job of explaining it. I have read what
I can about it, but what I describe here is not really what .NET is
now; it's what it has to become in order for Microsoft to succeed
Some of the examples listed above, such as accessing data from
non-PC devices and subscribing to software, are really just sample
.NET applications, not ones that exploit the real power of the
platform. Rest assured that Microsoft will eventually figure this
out, and figure out how to explain it to everyone.
Commitment to the Program
What does this mean to software developers? When the transition
was made from DOS to Win16, and from Win16 to Win32, a lot of
companies complained that they were happy with the current platform,
and didn't see any need to switch. Microsoft eventually gave up on
trying to explain it to everyone and simply went ahead and moved all
its applications to the new environment, and simultaneously started
Suddenly the light bulbs went on around the industry, but by then
it was too late for some companies. An example of this is within
WordPerfect. (Some of those companies then went around complaining
that Microsoft had an unfair advantage because it controlled the
platform and also wrote applications, but that is another story.)
Microsoft is right now moving all its applications to .NET.
Hotmail may seem like a simple application but in fact it is a
testing ground for many of the technologies in the .NET platform.
Given Microsoft's past history at engineering these paradigm
shifts, third-party software developers would be wise to not dismiss
it, but instead learn as much about it as they can. Those that don't
risk getting left behind once again.