With the whole CLI, CTS, CLS, etc., not only did they release a powerful platform/infrastructure, but they released all the specs that describe it etc. It supports potentially infinite myriad languages, platforms, etc. This seems like an insane amount of work, even for a behemoth like Microsoft - especially since it turns out they did a damn good job.

How long were they working on this before releasing it (.NET 1.0)?

  • 7
    Six to eight weeks.
    – Tony Meyer
    Feb 17, 2011 at 7:21

2 Answers 2


You might find this Wikipedia article to be interesting and informative.

Microsoft started development on the .NET Framework in the late 1990s originally under the name of Next Generation Windows Services (NGWS). By late 2000 the first beta versions of .NET 1.0 were released.

An old press release for the .NET family alludes to its previous title of Next Generation Windows Services (NGWS). If sarcasm is more your cup of tea, this announcement from The Register is interesting as well.

And according to this Wikipedia article on Microsoft codenames, it appears that .NET/NGWS went by the names Lightning and Project 42.

Project Lightning was the original codename for the Common Language Runtime in 1997.[73] The team was based in building 42, hence Project 42. "Next Generation Windows Services" appeared in the earliest press releases about the upcoming platform.

Wikipedia links to an interview of Jay Roxe and an article from The Age as evidence for this information.

Jay tells us that development had begun in earnest at least by 1997, as that's when he joined the team:

OK, well let me give you the history. I joined what is now the .NET Framework team, or the Common Language Runtime team, back in November of 1997. [This was] back when it was called Project Lightning, then it became COM+, then it became Project 42, then we had this nice little re-org that made it Project 21 ? we lost half the team.

And so, I wrote things like String and StringBulder, and I wrote the initial implementation, although I did not own it forever, all of the base types like Int [16, 32, and 64], and double, and all of those. I did some of the work on Object and was Dev Lead for the System.IO classes, the globalization, and a bunch of the collections work as well.

A blog post by Jason Zander on an unrelated topic gives us the interesting tidbit of information that the "Lightning" codename was chosen by the founder of the CLR team, Mike Toutonghi:

The original name of the CLR team (chosen by team founder and former Microsoft Distinguished Engineer Mike Toutonghi) was "Lighting". Larry Sullivan's dev team created an ntsd extension dll to help facilitate the bootstrapping of v1.0. We called it strike.dll (get it? "Lightning Strike"? yeah, I know, ba'dump bum).

And James Kovacs's C#/.NET History Lesson fills in a few more of the gaps. This Stack Overflow question is also worth a read, for those interested in history.

  • Sweet sources. Thanks Cody. I wonder if they even knew how good it would be when they started.
    – richard
    Feb 17, 2011 at 5:52
  • 1
    @Richard: I think they had some idea. What they were doing was intended to be "revolutionary". Of course, that hardly guarantees that the end result would turn out to be a success, but it's difficult to work on a project like this one if you don't believe in it. Some sources indicate that it was originally a pet project of Bill Gates himself. Former Apple CEO John Sculley's Knowledge Navigator springs to mind as a similar "revolutionary" pet project, although he wasn't quite so successful in bringing that to market. (Jobs did, behold iPad.) Feb 17, 2011 at 6:03
  • Thanks again. Very informative. Wish I could vote up twice!
    – richard
    Feb 17, 2011 at 6:05
  • Ah, makes we wonder if the full name of SOS.DLL (Son Of Strike) is actually based on the name of the original ntsd extension "strike". Nice :-) Feb 17, 2011 at 6:18
  • @Christian.K Better late than never, see this Stack Overflow question. Feb 21, 2020 at 18:59

This project also became more practical as microprocessors in common use became more powerful. In some respects, "Java® paved the way." It became possible to build a "p-machine" architecture that would implement a number of different high-level languages efficiently, while disregarding as insignificant the "overhead" of doing it that way. Today, there is plenty of horsepower available to run what is typically a "business application."

Now, every language compiler works in more-or-less the same way: first, the source code is parsed into an intermediate representation, and this representation is not language-specific. (Consider how the gcc compiler suite is done.) You can then translate that into actual machine instructions, or it might actually turn out to be more efficient to translate it into instructions for a "p-machine." Which is what both Microsoft and Sun did. The only "overhead" becomes the p-machine loop. Architectural differences – which can become rather annoying in the case of Intel CPUs – can also be "buried" into that layer of code. All you have to do is to do a really good job of writing it.

Not the answer you're looking for? Browse other questions tagged or ask your own question.