Why the Windows API is Dying

By Deane Barker on June 17, 2004

How Microsoft Lost the API War: This is an incredibly long, but very interesting, article from Joel Spolsky in which he explains why the venerable Windows API is dying. He spends 6,252 fascinating words and a couple of dozen tangents getting to this point at the end:

[…] Microsoft’s API doesn’t matter so much. Web applications don’t require Windows. […]

I’m actually a little bit sad about this, myself. To me the Web is great but Web-based applications with their sucky, high-latency, inconsistent user interfaces are a huge step backwards in daily usability. I love my rich client applications and would go nuts if I had to use web versions of the applications I use daily […]

None of this bodes well for Microsoft and the profits it enjoyed thanks to its API power. The new API is HTML, and the new winners in the application development marketplace will be the people who can make HTML sing.

He also says this about .Net, which will make my friend Matt feel happy and vindicated because I razz him all the time about being a Microsoft whore:

Much as I hate to say it, a huge chunk of developers have long since moved to the web and refuse to move back. Most .NET developers are ASP.NET developers, developing for Microsoft’s web server. ASP.NET is brilliant; I’ve been working with web development for ten years and it’s really just a generation ahead of everything out there.

There you go Matt, now leave me alone.

What Links Here


  1. Most of these ideas are not lost on Microsoft. That’s why Longhorn will make extensive use of XAML, which is Microsoft’s version of Mozilla’s XUL, a markup language for ‘thick client’ forms. Between that and the fact that .NET is making inroads even on Linux, I think it may give Microsoft enough of an edge to remain competitve. The question is timing. GNOME is working with the Mozilla folks to possibly XUL-ify the Linux desktop. By the time it arrives in 2006, will XAML be too little too late?

  2. I still live in both worlds with my current job … some Win API stuff in VB6, writing ActiveX components still for some legacy systems …

    … and alot of new stuff in .NET that’s not just ASP.NET web stuff …

    I prefer working with the .NET framework as opposed to the WinAPI … I’d be a bigger friend if it all worked on Linux (yes, I know about Mono)

  3. Joe wrote >That’s why Longhorn will make extensive use of XAML

    When will that be Joe ? 2009 or as soon as 2006 ;)

    Or, shall we wait for IE7 to see if it gets even close to the ground-breaking and free Mozilla experience ?

  4. …sorry to double-post so soon but I got a bit giddy there and submitted the form…

    I can already write an app for Windows with XUL, truth be told I won’t because it’s a nasty and verbose language

    If I need to write a quick and/or dirty utility for your Windows box then I’ll use VB, it’s truly RAD IDE, it’s fairly stable – if a little feature-lame and a lot slow

    I think MS are missing a trick if they drop VB6, .it should be supported henceforth but renamed, and perhaps slimmed down to deliver only what it can do well, and is deliver fast-loading CPU-lite utilities

    I propose to BillGates (who I’m sure reads these pages) that he take control of this important project and runs it with a code-name ‘Microsoft Dot Quick’

    Failing that there is always BORLAND Delphi if you need the speed of VB’s RAD and an app that can outpace a snail for your task – so no Inprises there then ;)

  5. VB6 is indeed an available tool for the quick and dirty solution. The main problem with VB6 is, as you mentioned, the lack of features. The .Net runtime has a number of good ways around this issue, whereas with VB6, you’re stuck trying to poke your way into the low-level Windows API’s to get the functionality you need, or paying for some restrictively licensed third-party solution that does it for you.

    What keeps me from VB6 (other than the features you mentioned) is that I don’t know where or when I might run up against one of those walls put up by the missing features, and go from Rapid development to Nasty-Hack-and-Kludge development. I don’t get to dictate the requirements of the project, I just get to dictate how it’s written, and I may not find the limitations in VB until I’ve got most of my code written.

    If you need a ‘just do it’ Windows RAD tool, and you’re familiar with VB6, VB.Net is probably your best bet. You get a Forms Designer (like VB), you still have to deploy a runtime (like VB), and the syntax is basically VB, but in an actual OO environment. Having used both Java and VB, I went with C# when I started on the .Net platform, but Deane tells me that VB.net is also the Bee’s Knees.

  6. Hi J,

    Another good post m8, I think we pretty much agree

    If you have not already enquire about Delphi – it’s what VB should have been

  7. I’m going a bit off-topic here, sorry if it’s a big no-no in here – forgive me I’m new to the site; but I know that some mind and some don’t, so here I go

    Why did you pick C# over VB ?

    I’m completely baffled, you already knew one lingo/syntax, but you chose to use C# wherein I suspect you were pushed to say ‘Hello World’

    If there was a speed gain I could understand, but as I’m sure you know the .Net ‘exe’ is just that and ‘exe’ – it’s back to ye olde VB days with it’s PCode and INI files, albeit renamed ‘intermediate language’ and ‘config’ file methods

    I’m as glad as anybody to see the ‘DLL Hell’ is gone with .Net, but truth be told it’s a good IDE/Framework to code in that does not deliver a good (ie quick – and it’s all most of the end-users want) end-user experience

  8. Mostly a style choice. I was quite familiar with VB syntax from years of VB and ASP, and I was also really familiar with C/Java/PHP syntax, from, well, C/Java/PHP. I really had no more learning curve with C# than I would have on the VB side. There are a lot of former VB programmers in my shop that balked at Java, but have had no trouble picking up (and enjoying) C#.

    If you look at the level of community activity online, there seems to be more going on in the C# side of things. Most of the code MS publishes is in C# (sometimes they do both). Most of the community projects seem to use C#. Most traffic in online Q&A’s seems to lean towards C#.

    VB.Net is VB6 with new syntax to handle OO. C# is fairly Java-like, but it seems more designed from the ground up to use the CLR.

    You can usually mentally translate from one language to the other, and unless you use a few obscure features, both languages will interoperate. So no real downside to either.

    Also, every time you compile a program in VB.Net instead of C#, Bill Gates kill a puppy. You don’t hate puppies, do you? DO YOU?!

  9. Much as I am saddened by Mr Gates’ C# canine conversion coercion I think I’ll be sticking with VB

    I feel that keeping a hand in with the old style syntax is useful for those of us who have to jump between projects built with ‘legacy’ VB6, ‘classic’ ASP, Office VBA, even the odd bit of OS scripting.

    Whilst I can’t ever imagine forgetting the the basics of VB, I have enough trouble jumping between JavaScript, VBScript and TSQL; and I might be wrong about forgetting things, I’d struggle to remember the more complex bits of what (q)BASIC I ever knew

    So unless Billy boy starts culling kittens ( I’m a cat man ;) ) it’s VB for me

  10. If you used VB6 you should have no problem going to VB.NET. VB.NET is more powerful than VB6, all the limitations of VB6 have been addressed and you have a lot more control and power over applications you create. There are only a few features that set C# and VB.NET appart one is being able to control memory manger (Don’t know anyone at the moment who has really used it). If you haven’t moved over to VB.NET or C# yet you should.

  11. Hello Guys,

    I am surprised by how much little appreciation is given here of VB6. Looks like this site is mostly viewed by novice programmers who never coded much in now the say legacy VB6. But there so much advantages that still exist in this language that it is very hard to close one’s eyes on them.

    For example the environment for coding VB6 is still much better that VB.NET. When you run a simple window application in VB6, it in a moment pops up on your screen. While in .NET I have a feeling that windows are loading from the internet. .NET is a very slow, debugger is as advanced as in VB6, forcing you to compile application before you can run it. Edit and Continue in VB2005 remains to be seen. Also VB6 has many powerful grid controls. While .NET has only DataGrid which must be bound to data source. So far .NET is equivalent to VB version 1.1, I hope .NET 2.0 will match VB 4.0. Let’s Hope

  12. Hey guys,

    Well for those who have forgotten what the B means in VB6 it means BASIC which in turn stands for Beginners All -purpose Symbolic Instruction Code. Legacy? Oh so Assember is Legacy too hey? or C? and C++? What do you think those fancy little compilers and interpreters are made with?

    My point is using terms like Legacy is just an easy way to dismiss and the truth is that depending on the project you’re gonna use the right tool. Whether it is Assembler or ADA or COBOL. I’ve Been using VB since 3.0 on windows 3.11. It just has grown on me. Plus I do like the challenge of making things work in a language that’s NOT offering everything on a silver platter… Now for some people that;s not feasable (especially if they have deadlines to make which I totally respect).

    In my oppinion VB6 had and still has a long way to go, Think about what is missing from the Language. Inheritance, Ability to create standalone executables (remember QB it used to do that just by incorporating the runtime IN the executable) better win32 API Compliance and lots lots more. There’s still room for improvement but the Nice gentlemen in Redmond decided they want us to go to a different direction instead of improving and mending the one language that is most loved by the simple users (or more precicely they one they start with before they go on to learn C/C++/C#/Java)… Oh well :) There’s always legacy code,right? :)

Comments are closed. If you have something you really want to say, tweet @gadgetopia.