Slashdot Mirror


How Microsoft Dropped the Ball With Developers

cremou writes "As part of an Ars Technica series on how one developer migrated from Windows to OS X (and why), this second article concentrates on how Microsoft bungled the transition from XP to Vista. The author looks at some unfortunate decisions Microsoft made that have made Windows an unpleasant development platform. 'So Windows is just a disaster to write programs for. It's miserable. It's quite nice if you want to use the same techniques you learned 15 years ago and not bother to change how you do, well, anything, but for anyone else it's all pain... And it's not just third parties who suffer. It causes trouble for Microsoft, too. The code isn't just inconsistent and ugly on the outside; it's that way on the inside, too. There's a lot of software for Windows, a lot of business-critical software, that's not maintained any more. And that software is usually buggy. It passes bad parameters to API calls, uses memory that it has released, assumes that files live in particular hard-coded locations, all sorts of things that it shouldn't do.'"

22 of 814 comments (clear)

  1. With those arguements, any platform can suck by dreamchaser · · Score: 5, Insightful

    "It passes bad parameters to API calls, uses memory that it has released, assumes that files live in particular hard-coded locations, all sorts of things that it shouldn't do."

    Those are basically programming errors, not problems with the API. Don't get me wrong, I find Win32 to be a pain in the ass sometimes, but this article just reeks of flamebait.

    1. Re:With those arguements, any platform can suck by Ulfalizer · · Score: 5, Insightful

      I think you missed the point.

      The problem is that many major legacy applications depend on undocumented behavior because they make sloppy use of the Windows API (e.g. by assuming that a particular function will not segfault when passed a bad argument). For those to keep working, newer revisions of the API implementation must have the same undocumented behavior, which causes a maintenance nightmare.

    2. Re:With those arguements, any platform can suck by 0123456 · · Score: 5, Insightful

      "Those are basically programming errors, not problems with the API."

      I think you missed the point. For the sake of backwards compatibility, Microsoft supports applications which do all these things, and drags all the associated crap into future versions of Windows so they still run.

      For that matter, so do hardware developers: back when I was writing drivers for Windows I had to deliberately put bugs in our code to support applications which only worked because of bugs in the Microsoft versions of the drivers and would crash if we didn't replicate those bugs ourselves. We also spent weeks working around abuse of the API by a certain big computer company that can't program PCs worth a damn (or even, apparently, read API documentation).

    3. Re:With those arguements, any platform can suck by 0123456 · · Score: 4, Insightful

      Pretty much; if they stop supporting old bugs, a lot of old software will break. I'm sure I found an old Windows 3.1 bug in XP some time back, but I can't remember what it was (something to do with driver installation, I think).

      Linux, in comparison, provides a fair amount of backwards compatibility, but doesn't have to overly worry because most software comes in source form and can be fixed when a kernel or library change breaks it. Windows doesn't have that option.

    4. Re:With those arguements, any platform can suck by fimbulvetr · · Score: 5, Insightful

      Maybe the point was that MS fosters bad programming by keeping legacy API calls around indefintely, whilst other systems do not. I'm the last guy to ever go pro-apple on /., having "been there, done that", but he really does have a point. MS is afraid to deprecate bad ways in favor of keeping some minor share of customers happy.

      While this has short term benefits, the long term imposes a hefty penalty, the same penalty MS (and some of its developers) is paying now.

    5. Re:With those arguements, any platform can suck by drinkypoo · · Score: 4, Insightful

      Yes, even HAVING undocumented API's is bad as well.

      I thought we discussed this when Apple did it? Undocumented APIs are there for the use of operating system developers and other people who feel the need to tickle the operating system at a low enough level to fool it into doing things that it was never intended to do for you. This is your prerogative; it's possible to sniff through the structure of the binaries to find new functions, and it's possible to debug functions to see what they're calling, so no one can really stop you anyway.

      At the same time, being upset when they stop functioning correctly is the mark of a whiny idiot, because let's face it, they're undocumented. If you want that functionality exposed, by all means, cry to the OS vendor. Or, you know, you could support open source and/or free software and work with an environment in which you have all the source code and can at least make relatively responsible use of the undocumented functions, and if you are feeling froggy, even submit patches which express this functionality consistently with a documented API.

      Seriously though, undocumented functions are par for the course. If the functions are never intended to be used by anything other than the operating system, and the functionality is expressed through the OS in some fashion (use of undocumented APIs in Win32 has often been done to work around a bug) then there's really no problem. The portions of the OS that need to be changed when the libraries change can be changed in such a situation (and hopefully will fail tests if someone doesn't think to do it beforehand.)

      --
      "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
  2. Cult of Backward Compatibility by clintp · · Score: 4, Insightful

    The False God of Backward Compatibility has Microsoft by the short hairs. Even new programming environments like .Net have Win32, Win16, and DOS lurking right around the corner. There's no fresh start anywhere in the Microsoft environment, everything reeks of DOS.

    Which would have been find if DOS (Win16, Win32, etc..) were a multi-platform, extensible OS to begin with -- but it wasn't. It was a quick hack that lives on and on.

    I'm a developer that works primarily in Windows, with 15 years of heavy-hitting Unix programming experience behind me.

    --
    Get off my lawn.
    1. Re:Cult of Backward Compatibility by daemonenwind · · Score: 4, Insightful

      It's not a false god, not when you're coding for a business that has to meet both regulators and profitability expectations.

      Code written for Windows 95/NT (back in 1996) still works today on the Windows platform. 12 years later.

      Try that with System 7 code on OS X.

      Yes, this is part of why writing business-logic code sucks. You seldom get to just re-write anything to be really, truly good instead of something perennially built-upon and increasingly hacked-together. No one will pay for a change that doesn't deliver "business value". (And no, greater stability/performance is almost never enough, as that argument usually demands an associated headcount reduction) But at least the app still works and can continue to deliver. And since some will doubt, yes, I do maintain/enhance such code.

      The market speaks - this sort of backwards compatibility is a conscious choice by MS, and it does sell their OS. Not concidentially, it also sells mainframes and *UX systems. And I'm convinced it's one of the big reasons Apple isn't bigger in the corporate world. Steve's demands for newer/better/faster totally supplanting the old are well known, and rightly feared.

  3. Windows programming by buss_error · · Score: 5, Insightful

    Back before my current gig, I was a software developer for companies that hired me to do their work and for several packages I wrote for my own profit. This story comes from the programs I developed for my own profit.

    Because the software I wrote was also licensed for source code if the user wanted it, I picked Visual Basic as the platform to use. I wanted to use Visual C, but you could more easly find programmers that could get by in Visual Basic than VC. I should have picked VC rather than VB for a lot of reasons, the main one being that if you had experience in VC, you were at least likely not to be a total idiot. Not so with VB. I found that VB programmers were idiots at the approximate rate of 7:10, while VC programmers were likely to be idiots at an estimated 1:10 ratio... which isn't to say that all VB programmers were idiots, only that they were cheaper labor, and therefore less likely to have a solid background in programming logic.

    That said, we'll focus only on my own development problems, just so we are dealing with only one (possible) idiot... me. I started out with VB 2.x. The upgrade to 3.x went fine, with very few problems. When 4.0 came out, I found I had to rewrite about 20% of my code. Sure, there were conversion programs, but they didn't quite fit in with exactly what I wanted the program to do. It'd get it about 90% right, but then I'd have to slog through the rest of the automated code to correct that last 10%. It was faster to discard that code and re-write it.

    Then 5.x came out. Only about 50% of my code still worked. And again, the automated process to "ease" transisition left something to be desired. When Visual Studio 6.0 came out, it was a nightmare. only 20% of the code ported. At that point, I sent the 5.x code out to all the people that bought the program (with source or not), and told them that the code was now moribund, I would not be maintaining it, and that I was releaseing the source code to the public domain (5 floppies included). As I recall, that was about 1998-1999 or so.

    As late as March 2008, I've been contacted about the code. Of course, it's morphed far past anything I'd written, and I could only help with the general business case logic involved, not the actual code. But having to deal once again with Microsoft development tools, one would have to offer me far, far more money than it would be worth. No, I'm done with Microsoft "development" games. I'm done with school yard bullies trying to take my lunch money. I'm done, PERIOD, with closed source, whenever I have a choice.

    --
    Necessity is the plea for every infringement of human freedom. It is the argument of tyrants; it is the creed of slaves.
  4. The appalling GUI inconsistency by Coryoth · · Score: 4, Insightful

    One of the nice things from this article was actually this nice screenshot of a selection of current versions of MS software running on Vista. The thing to notice is that not a single one of those applications has a GUI the same as any of the others. There are different toolkits, completely different look and feel, some have menus, some don't; it's a horrible, horrible mess. And yet despite that, we still get people complaining about GNOME vs. KDE and the clash of different toolkits and how that's what is holding Linux back. You can run GNOME and KDE apps side by side and, while they'll have differences, they'll sit together far more elegantly than the mishmash that is Windows. I think I'll have bookmark that screenshot so I can bring it up the next time a Windows fanboy starts decrying the excessive number of GUI toolkits on Linux.

  5. not sure they have a choice by abes · · Score: 4, Insightful

    I'm not big on the M$ love. I'm a mac/linux proponent. However, I think that M$'s current problem with a really horrible API (I'm saying this having programmed for win32, GTK, QT, WX, and Cocoa) isn't an easy to solve problem.

    They could pull an Apple, and completely redo their windowing system. Apple benefited from using NeXT's system, which was well thought out, uses a language well suited to windowing systems (objective-c), and could be altered based on previous user experience.

    However, in doing so they would lose all compatibility they current have. Keeping compatibility, even if it creates a developer's nightmare, is in the end what keeps them on top of the market.

    That is not to say it's not impossible for them to do so. Apple did provide a virtual machine to run old OS9 software with the first releases of OS X. However, since both Mac and Linux machines also have the same options (currently running Parallels on my machine), it would still take the clear advantage M$ has in the market away.

    It's not clear whether their bad API spells the eventual doom of the company. The more pragmatic developers will still value making products that more people can use over writing nice looking code. Additionally, wrapper libraries, such as WxWidgets or Qt can help hide much of the ugliness.

  6. What part of "Undocumented" is hard to understand? by WED+Fan · · Score: 4, Insightful

    The problem is that many major legacy applications depend on undocumented behavior because they make sloppy use of the Windows API (e.g. by assuming that a particular function will not segfault when passed a bad argument). For those to keep working, newer revisions of the API implementation must have the same undocumented behavior, which causes a maintenance nightmare.

    So, you problem is that programmers make use of undocumented API calls. While "undocumented" does not always equal "unsupported", using them is just plain stupid. Whether it is Windows, Linux, MS-DOS, DR-DOS, OSux using the system in an undocumented/unsupported way is well, U N S U P P O R T E D. Don't blame the OS or the those that coded it, blame those that wrote against the API in an unsupported way.

    RTFA turns out to be a effort in slogging through another of the author's attempts to explain why anyone on Windows is just benighted. He blames HIS short comings on the OS.

    --
    Politics is the art of looking for trouble, finding it everywhere, diagnosing it incorrectly and applying the wrong fix.
  7. Re:Long Answer? by Winckle · · Score: 4, Insightful

    I have my taskbar at the top, because it effectively reverses the order of the start menu. This makes shutdown the bottom option, which is where it should be, as i use it precisely once per session.

  8. Re:Long Answer? by murdocj · · Score: 5, Insightful

    He has an axe to grind, but I'm not sure he has a point. For example, he talks about how .Net was supposed to insulate you from the vagaries of the Win32 interface,but failed. Then he talks about how the Win32 API returns the length of a file as two 32 values that have to be combined, instead of a 64 bit value. The part he leaves out is that .Net's system.IO.FileInfo does exactly what he wants... it returns the file length as a long 64 bit value. So why bring up the old 32 bit interface when you don't have to deal with it anymore? If that's the best he can do, his argument is in trouble.

  9. Re:Long Answer? by Anonymous Coward · · Score: 5, Insightful

    Then he talks about how the Win32 API returns the length of a file as two 32 values that have to be combined, instead of a 64 bit value. The part he leaves out is that .Net's system.IO.FileInfo does exactly what he wants This was a complaint about Win64. He had different specific complaints about .NET.

    If that's the best he can do, his argument is in trouble. If you can't even read his argument without getting mixed up, then your future is in trouble. (OTOH you have a bright future as a Slashdot poster. Not reading TFA is henceforth passé; reading it and getting it entirely wrong is the new standard.)
  10. Re:Long Answer? by dcam · · Score: 4, Insightful

    Everything I have read and heard about Microsoft suggests that they are cowboys.

    Code first, design later. For example, I note with interest the amount of pain involved in trying to provide server protocol documentation for the EU. Some of the foot dragging is deliberate but some of it is that they don't have quality internal documentation.

    There is a severe lack of direction and leadership at Microsoft. They are just not forward planning. As a result they are tearing themselves to pieces, doing the same work again and again.

    --
    meh
  11. Re:What part of "Undocumented" is hard to understa by gmack · · Score: 5, Insightful

    To make it more amusing those third party APIs slog through the win32 API hell so you don't have to.

    I think that's why Microsoft is afraid of breaking the old APIs. Once you have to go through the pain of porting to a new API why not just go cross platform?

  12. Re:Long Answer? by thetoadwarrior · · Score: 5, Insightful

    Im no programmer but the article seams short on facts & details and high on ms bashing & skimming. Is the article right or is it just well presented trolling? How can you say it seems to lack info when you're not even a programmer. For anyone who has done programming between good languages and MS languages will know he's spot on and it's been well documented that MS went back on their word to build a .Net based OS that started fresh.

    The problem is they know a lot of people aren't happy with Windows but it runs all their programs. Once the scrap that backwards compatibility and build something solid, despite the fact it may be their best OS ever, it's on a level playing field with the rest which means people have to find an alternative to their old programs and they might just pick something that isn't Windows and MS isn't having that.
  13. Re:Long Answer? by CodeBuster · · Score: 4, Insightful

    The argument that .NET is limited by the attempt to be simplistic is asinine I agree. It sounds to me like this guy used .NET for a year or so around 2002 when it was brand new and then left and hasn't looked again for the last six (6) years. He is the first person that I have heard accuse .NET of being "too simplistic". The .NET class library (and Java class library as well) is the definition of everything and the kitchen sink. These are extremly powerful languages and libraries that are if anything too complex.

    Before I even get into the technical components of his argument, if he's trying to say that Java is better in this area, then he needs to get his eyes checked. Again, I totally agree. The .NET Framework class libraries and the C# language are the definition of "The Right Way" to organize and structure code. They are technically sophisticated, architecturally beautiful, and make use of all of the best ideas at the culmination of nearly three (3) decades of object oriented programming theory and software engineering. If he is going to criticize .NET for its "lack of capability" then he is basically saying that Java is crap too, because .NET borrowed heavily from Java which in turn borrowed heavily from C++, smalltalk, and all the way back through C to Algol 60.

    portable across environments, but that's not what .NET development is being used for It is supported and in the future it will become more and more common. The great innovation on the part of .NET was the common runtime type description language and metadata in addition to the common language assembly. This is what allows different programming languages to fully share types across libraries compiled from different source languages (including cross langague debugging). This was the feature that Java was missing and this is a major reason why .NET is so popular, it has the potential to end the "my programming language is better than yours" debate because the common types and assembly make the argument irrelevant. Use C# or use VB.NET or use Eiffel or whatever other language you want.

    I can say with experience that .NET is very powerful and can be very pleasant to work with. I have been using .NET for six (6) years now and I can honestly say that it has fulfilled all of my expectations with very few dissapointments and it is improving substantially with each subsequent version. I know that I sound like a hopeless fanboy, but .NET really is a pleasure to work with, especially given the breadth and depth of the libraries and languages with a tool for every job and every job done with the right tool.

    I honestly think that .NET is a crowning achievement of theirs. Although it probably doesn't hold much water with the Slashdot crowd, I think that it is fair to say that .NET is the best thing ever to come out of Microsoft, even though it wasn't a completely original idea (but how many completely original ideas have there been in computer science anyway? Everyone benefits from the work of predecessors and ones who have come before us).
  14. Re:Long Answer? by KutuluWare · · Score: 4, Insightful

    You must have had access to the sooper sekrit article with all the illustrations in it. The Ars article I read a blatent Mac fanboy bragging about Cocoa, with an extra two tacked-on pages of hyperbole and baseless accusations about how much .NET sucks, backed up with exactly 1 concrete example: that you have to know which Windows Forms operations are thread-safe (hint: none of them). He even finishes that thought by pointing out that most other GUI frameworks have exactly the same problem. I can probably rattle two dozen cases from memory in the old Win32 API where MS made obviously retarded design choices, but he can't even come up with a single actual .NET class method that he doesn't like when he's writing an article about it?

    I am in that third group of developers this article was supposedly written for. I absolutely abhor poorly written code, cheap workarounds, etc. And I make a living off .NET and I love it. I usually find that the Framework already does anything I'd expect a base class library to do and a bunch more. The code I write against it is way more elegant than what I typically see from, say, your random GTK app. Is that because .NET is inherently better than gtk, glib, glibc, etc? No, I don't sit around whining about how Microsoft "blew it with developers" because they didn't write all my code for me... I spend my time writing good code.

  15. Re:Long Answer? by DrPizza · · Score: 5, Insightful

    No, he is saying that the argument is confused because it mixes up Win32 and .NET. That's a problem with TFA. But the article doesn't do that, except when describing how details of Win32 leak into .NET.

    If you want to compare Windows and OS X as modern platforms, you need to compare the modern APIs, that is, .NET against Cocoa, nothing else. But you can't. MS has added new features to Win32 (and VC++/MFC), and MS is going to continue to do so in Windows Seven. For example, Vista has a new transacted (database-style ACID transactions, not just journalled) filesystem. .NET doesn't support it; you've got to use Win32 to use it. Even though .NET does have transaction support (for COM+ transactions and database transactions) it doesn't support TxNTFS. So you've gotta use Win32. Or how about an MS-supported ribbon control? You've got to use MFC, and in Windows Seven there should be a native code ribbon control as part of the OS proper. In both cases, no managed code.

    Having to drop into Win32 to call some legacy thing that no-one should really be doing but which you have to do for backwards compatibility, that I could sort of understand. But having to drop into Win32 to call new features that have only just been added? Anyone saying "stop using Win32, just use .NET" doesn't know what they're talking about.

  16. Re:Long Answer? by DrPizza · · Score: 4, Insightful

    The article didn't actually describe any accurate parts of Win32 that leak into .NET, except that WinForms is based on the WinProc event model of GUI development. That's one of the many valid ways to implement GUIs, and there's no reasoning as to why this isn't a valid design decision for Microsoft to make.

    Well, there is a good reason why it's not valid: because it makes .NET developers give a damn about HWNDs, message pumps, and the interactions between the two.

    Other than that, he points out a bunch of flaws in Win32 and implies that they "leak into .NET" but he fails to actually demonstrate any of them.

    Off the top of my head we have, for example:

    • the entire crypto lib (including e.g. certificate handling as well as core crypto functions)
    • SSL handling equally has Windows-specific portions
    • SocketException (especially ErrorCode)
    • Socket.UseOverlappedIO
    • Socket.IOControl
    • System.ServiceProcess.* (this stuff should be in Microsoft.whatever, not System!)
    • System.Management.* (ditto)
    • System.Data.SqlClient.*, System.Data.OracleClient.* ((a) the core interfaces should be better (b) the vendor-specific providers should not be in System)
    • The "Handle" properties found in e.g. Socket, FileStream, and the aforementioned System.Windows.Forms
    • Large tracts of System.EnterpriseServices

    Win32isms are abundant.

    Further, your arguments that somehow cutting edge enhancements like Vista's new TxNTFS should magically appear in .NET by now make no sense to me.

    Let's just recap the argument, shall we?

    1) Claim: Win32 is clunky and horrible

    2) Response: Write in .NET

    3) Claim: .NET can't do everything Win32 can do, forcing me to use Win32

    4) Response: "your arguments [...] make no sense to me"

    Look, if the argument is going to be "Don't use Win32, use .NET" then .NET has to do all the things that Win32 can do. So which is it?

    Either I should be using .NET--in which case MS's failure to add new Win32 features to .NET is a problem--or I should be using Win32--in which case "use .NET" is not a suitable response to cited flaws with Win32. You can't have it both ways, so which is it to be?