Today I came across this comment in a bit of open source code I was trying to compile:
This is the STL header. Because Microsoft makes it hard to use STL and no longer automatically installs the STL files, we supply the necessary ones with our source code. They are these *.H files (no *.C or *.CPP files): algobase.h, bool.h, defalloc.h, function.h, iterator.h, pair.h, and vector.h. More STL *.H files exist, but the ones listed are the only ones needed to make vector.h work. I might mention here that Microsoft’s motivation for withdrawing support of STL is probably to push programmers to use the Microsft [sic] CArray class, which entails using MFC. According to some of my students using BoundsChecker, the CArray class as [sic] a memory leak as implemented. This would be typical of Microsoft, to greedily undermine a stable industry standard to push the use of their own in-house standard, and to then implment [sic] this new force-fed standard in a buggy way. RR 5/19/98.
I find this is the typical attitude of the “Microsoft haters”. If you disagree with their attempts to characterize everything that Microsoft does as a greedy power grab, then the haters label you as “Microsoft fanboy”. To blindly defend as well as to blindly criticize are two sides of the same false coin. To some, it is simply fashionable to criticize everything Microsoft because Microsoft is the industry giant. In decades past, the fashion was to criticize everything IBM for essentially the same reason. Does anyone remember that the big “monopolizer” accusation used to fall at the feet of IBM before it fell before Microsoft?
Before we delve into the larger more general social phenomenon of the “haters” and the “fanboys”, let’s take a closer look at the specific accusation here:
I might mention here that Microsoft’s motivation for withdrawing support of STL is probably to push programmers to use the Microsft [sic] CArray class, which entails using MFC.
No evidence is provided for this allegation and indeed the writer declares their ignorance up front about the situation by characterizing their asserted motivation by Microsoft as a “probably”. They didn’t find out why sometimes the STL headers are not installed (and to be honest, they’ve always been installed in every release of VC6 that I ever used, but I didn’t use the earlier service pack versions), instead upon not finding them installed the writer simply assumes that its part of an evil Microsoft takeover attempt. The idea that people would be pushed away from using the C++ Standard Library and into using MFC, is just simply stupid. In VC6, MFC didn’t contain hardly a fraction of the functionality in the C++ Standard Library and you couldn’t very well call your compiler standard C++ if you don’t support the C++ Standard Library. Even now, with much more functionality added to MFC since the days of VC6, MFC still doesn’t encompass the functionality of the C++ Standard Library. MFC has array and list classes because it needed them before there was a C++ Standard Library that had std::vector and std::list. It wasn’t a response to the C++ Standard Library in an attempt to inculcate vendor lock-in among C++ developers.
The next allegation is not really anything to do with the C++ Standard Library, but an attack on the CArray class in MFC:
According to some of my students using BoundsChecker, the CArray class as [sic] a memory leak as implemented.
Here the assertion is provided third-hand without the specifics of the problem in CArray. So without specifics, we don’t know if we should concur with this analysis of CArray. What I find telling about this “bug report” is that while great chest-thumping accompanies the comment buried in this source file announcing the inferiority of CArray to std::vector because it has a memory leak, no mention is made of whether or not the bug was reported back to Microsoft. Instead, its provided as another “drive-by” ad-hominem attack on the character and quality of code originating from Microsoft. It doesn’t have anything to do with the C++ Standard Library, but is provided as an anecdotal example of the poor quality of code from Microsoft.
Finally, we have the punch to the face:
This would be typical of Microsoft, to greedily undermine a stable industry standard to push the use of their own in-house standard, and to then implment [sic] this new force-fed standard in a buggy way. RR 5/19/98.
Here the bald-faced assertion is made that Microsoft is attempting to undermine an industry standard to replace it with their own, creating vendor lock-in for C++ developers. No evidence has been provided for this, other than the assertion that sometimes VC6 doesn’t install the STL headers. In VC6, you could customize the install at a fairly fine-grained level and select and deselect optional components for installation. It could be that the “missing headers” were just a result of someone deselecting an option they thought they didn’t need when they installed VC6. Without detailed information on the situations that characterize the missing headers, we just have to take the writer’s word for it that this wasn’t user error and was indeed part of some nefarious plot by Microsoft to engulf and devour an industry standard.
Now you might say that this is all with the benefit of almost 10 years of hindsight, and you might have a point with that. Yet, the issue at hand is whether or not the writer’s point of view did materialize as reality, even as a hinted attempt to subvert the Standard C++ Library and replace it with MFC(!?).
During the past 9 years since this comment was written, one could argue that Microsoft’s C++ compiler team have acted in the exact opposite manner implied by the writer. Each successive release of Microsoft’s C++ compiler has been more and more standards compliant than the last. Visual Studio 2005 is even available as a C++ Express edition for free, so you don’t even need to pay Microsoft money in order to obtain a first class C++ compiler from them. The STL implementation has improved dramatically since VC6 (the STL implementation doesn’t come from Microsoft, but from P.J. Plaugher) as well as other parts of the C++ Standard Library, which is more than STL.
Does pointing out the “hater” in this comment make me a fanboy? Absolutely not. I have criticisms for some (not all) of the things Microsoft does and sometimes for the way it does them. In the USA, we have the assumption of innocence in our legal system, but the haters start with an assumption of guilt. Instead of investigating the issue surrounding the presence of the include files, or reporting a memory leak bug in CArray, the assumption of guilt is elevated to the first consideration and the immediate conclusion is a greedy conspiracy designed to subvert the C++ Standard Library. This may be sufficient to get the other “haters” to chime in saying “yeah! yeah!” but it doesn’t convince me. So far, not one of the conspiracies alleged by “haters” has proven to be true when I’ve investigated them. That ought to speak for itself right there.