Why Can't Microsoft Ship Open Source Software?

July 2, 2008

In Codeplex wastes six months reinventing wheels, Ryan Davis has a bone to pick with Microsoft:

I saw an announcement [in March, 2007] that CodePlex, Microsoft's version of Sourceforge, has released a source control client.

This infuriates me. This cool thing they spent six months (six!) writing is called Subversion, and it had a 1.0.0 release [in early 2004]. Subversion had its first beta in late 2003, so the Codeplex folks are waaay behind the state of the art on this one.

As a whole, I think the state of software is abysmal. The only way to make it better is to stop writing new code. New code is always full of bugs, and its an expensive path to get from blank screen to stable program. We need to treat programming more like math, we need to build on our results. Development tools is a special market, as our needs are all very similar, and when we need a tool, we have the skills to make it.

It's a great rant -- you should read the whole thing -- but I'm not sure I entirely agree.

While I do empathize with the overall sentiment that Ryan is expressing here, I also found myself nodding along with Addy Santo, who left this comment:

Author seems to think that all software development is done in basements and dorms. The reality is that software is an industry like any other - and follows the same simple rules of economics. How many brands of sports shoes are there? How many different MP3 players? Flavors of toothpaste ? If you can walk down the soft drink isle and not be "infuriated" by Vanilla Cherry Diet Doctor Pepper then you might just be a hypocrite.

So if you think Microsoft's particular flavor of source control is redundant, you'll really hate Diet Cherry Chocolate Dr. Pepper.

Diet Cherry Chocolate Dr. Pepper

(I am now required by law to link Tay Zonday's Cherry Chocolate Rain video. My apologies in advance. And if that makes no sense to you, see here.)

Are there meaningful differences between Microsoft's Team Foundation flavor of version control and Subversion? The short answer is that there aren't -- if all you're looking for is a carbonated beverage. If all you require is run of the mill, basic centralized source control duties, they're basically the same product. So why not go with the free one?

But Team Foundation is much more than just source control. Of course there are open source equivalents to much of the functionality offered in Team System, as Ryan is quick to point out.

The Codeplex staff stated they needed to write their own client in order to integrate with the TFS server infrastructure. According to an MSDN article (Get All Your Devs In A Row With Visual Studio 2005 Team System), TFS seems to be a complicated tool to help manage your developers. Reading the description, TFS is an issue tracker, unit tester, continuous integration, source control system, and Visual Studio plugin. So, basically a combination of Trac, NUnit, CruiseControl.NET, Subversion, and a Visual Studio plugin. Why not just write the Visual Studio plugin, and hook into the tools people are already using? All those tools have rich plugin-architectures that would probably support any sensible addition you'd want to make.

The answer, of course, is that Microsoft does all that painful integration work for you -- at a price.

If you have the time to look closer, you'll find more flavorful differences between Subversion and TFS source control. Differences more akin to, say, Dr. Pepper and Mr. Pibb.

Mr. Pibb

I'm not going to enumerate all the subtle and not-so-subtle differences between the two here; picking a fight between two modern centralized version control systems is not my goal. They're both great. Choose whatever modern source control system you prefer, and take the time to learn it in depth. Source control is the bedrock of modern software engineering, and I've found precious few developers that truly understand how it works. All that time we were going to spend arguing whether your source control system can beat up my source control system? I've got a radical idea: let's spend it on learning the damn stuff instead.

Still, there is a much deeper, more endemic problem here that Ryan alludes to, and it deserves to be addressed.

One of Microsoft's biggest challenges in the last few years has been that its competitors are free to ship what are, by now, fairly mature open source components as parts of their operating systems. When was the last time you ever saw any open source anything shipping in a Microsoft product? On some deep, dark corporate level, Microsoft must feel compelled to rewrite everything to completely own the source code. Sometimes -- a more cynical person might say "often" -- this results in poor quality copies instead of actual innovation, such as Microsoft's much-maligned MSTest unit test framework. It's a clone of NUnit with all new bugs and no new features, but it can be included in the box with Visual Studio and integrated into the product. It's a one step forward, two steps back sort of affair.

Everybody I know -- including our own Stack Overflow team -- who has tried to use the MSTest flavor of unit tests has eventually thrown up their arms and gone back to NUnit. It's just too painful; the commercial clone lacks the simplicity, power, and community support of the original open source version. There's simply no reason for MSTest to exist except to satisfy some bizarre corporate directive that Microsoft never ship open source code in their products. Furthermore, this blind spot hampers obvious integration points. Microsoft could build first-class integration points for NUnit into Visual Studio. But they haven't, and probably never will, because so much effort is poured into maintaining the second-rate MSTest clone.

In fact, the more I think about this, the more I think Microsoft's utter inability to integrate open source software of any kind whatsoever into their products might just end up killing them. It's a huge problem, and it's only going to get worse over time. Open source seems to evolve according to a different power law than commercial software. If I worked in the upper echelons of Microsoft, I'd be looking at the graph of open source software growth from the years of 1999 to 2008 and crapping my pants right about now.

It's a shame, because the best way to "beat" open source is to join 'em -- to integrate with and ship open source components as a part of your product. Unfortunately, that's the one route that Microsoft seems hell bent on never following.

Update: For background, do read Jon Galloway's explanation: Why Microsoft Can't Ship Open Source Code.

Posted by Jeff Atwood
140 Comments

Microsoft could build first-class integration points for NUnit into Visual Studio

They already have. See NUnitForVS (http://www.codeplex.com/NUnitForVS). It's a little old (VS2005) but demonstrates the point nicely.

Cheers
Matt

PS +1 on the Raymond Chen post.

Matt Ellis on July 4, 2008 10:55 AM

I don't believe that this is only reason.There are a lot of reason to do this.

South Yorkshire Jobssite on July 4, 2008 11:54 AM

Microsoft does ship BSD or MIT license software in the products. Just do Help-About in IE:

Based on NCSA Mosaic.
...
Portions of this software are based in part on the work of the Independent JPEG Group.
...

Joe

Joe on July 4, 2008 11:57 AM

There'a a bunch of exceptions I've used or I am using in the past few years:
Windows 2003 R2 Unix interoperability components have GNU/GPL pieces in them:
http://www.microsoft.com/windowsserver2003/R2/unixcomponents/webinstall.mspx

System Center Cross Platform Extensions uses and redistributes OPENWSMAN (www.openwsman.org) and OPENPEGASUS (www.openpegasus.org) that gets installed on unix boxes, and gets used to monitor them without having to reinvent the wheel
http://blogs.technet.com/systemcenter/archive/2008/04/29/operations-manager-2007-goes-cross-platform.aspx

http://download.microsoft.com/download/0/4/8/0486ac92-70f0-4b41-a172-4698d24a1c78/SCXPlatSetupGuide.doc


I think there are different people, different products, different thoughts and souls. I tend to agree with Raymond Chen's post quouted above about the reasons why this practice is not so common; but on the other end Microsoft is changing in this regard, or at least I feel it is, and I am glad I am part of this change: http://www.muscetta.com/2008/05/02/a-rant-about-openness/

Daniele Muscetta on July 4, 2008 12:36 PM

Great post. I love to see some actual facts and reasoning behind the old Microsoft sucks rant. Well done!

Evan Meagher on July 4, 2008 12:47 PM

Our dev environment is a mix of Subversion, Trac, Nunit, Xen and WiX.

So all open source, and all best of breed. And that last one? Microsoft open source code.

It's very capable, used to build the installers for Office 2007, Visual Studio 2008, and our inhouse software Belvedere.

Microsoft does things right occasionally.

DavidK on July 4, 2008 1:13 PM

Shipping open source with a commercial product is just not a good idea since you would immediately become (at least morally) responsible for the performance of that section of the product that you do not fully control. And certainly a company like Microsoft, who's always way more vulnerable to 'negative public opinion' just can't risk that. Don't forget that any major Microsoft product will always be used by ore people that you can probably imagine. And their level of experience may grade from absolute newbie to 40 years enterprise programming, but every one of them has the power to write a infurious blog entry on how Microsoft failed to solve their own specific problem within 24 hours.

Cees Meijer on July 4, 2008 1:16 PM

Let me preface what I am about to say; I am not a fan of Microsoft in any way shape or form. I am required to use their tools because I like the job I do and how we develop.

But Jeff man you have to give your head a shake. Open source is not the at all and the end all of software development. More often then not I find open source software is poorly written with little adherence to a set policies and procedures. There are some good open source products that I use SVN GDAL NUnit being some of them. However in lots of products I've files coded two difference ways each because the author thought their way was the best.

A lot of times open source software ceases to be supported. I recently had to use some open source software to read a particular type of file and it was my only choice. It didn't work. So I had to get a newer version which still didn't compile on windows, refactor third party code to make it compile on Windows then recompile the code that depended on my third party code. The reality is yes Microsoft releases buggy software, but show me 1 organization or developer who doesn't write/release crappy software ?

In our application we use NUnit or testing all of our .NET code, we ran into a huge problem with NUnit, so I went in thinking it was open source to make changes. I decided it was easier and quicker for me to do 80% of what nunit does right in the code rather then spending weeks trying to understand the nunit then making the changes and then working gout the new bugs. NUnit it's a great program until you start mucking with the src then it gets UGLY! This isn't all that uncommon from other open source products, very often there is no QA aside from the developer who developed the feature or fixed the bug.

Open source doesn't always make better software, It is sometimes probably more often then not worse, not because the individual developers suck, it's the nature of the beast.

It's simple that microsoft wants to release and mange their own software.
#1. They manage their own features/bugs/enhancements
#2. They control the support
#3. They control the process
#4. The developers probably find it easier to learn and update and maintain code developed in house.

I'd never agree to release an open source software with our software. I'd say 80% of general software out there sucks... whether it's open source or not.

Chris Howell on July 4, 2008 1:26 PM

If there are so many legal risks with shipping open source software, why apple isn't being sued?

Exactly!

Jeff Atwood on July 4, 2008 1:38 PM

Whats the problem with MSTest?, I have been using it for about 4 months and I haven't had any troubles. (Sorry if the verbs are messed up, English is not my first language)
Juan Zamudio on July 3, 2008 04:53 PM

-MSTest slower than Nunit
-MSTest is not flexible as Nunit. (By the way when I was talking about MSTest I'm also talking about VS+MSTest combo) Especially I hate the thing when you're trying to test by Create Unit Tests... you can't give directive to any assembly/project other than one that you've created as test project once. It totally breaks project/solution (directory) structure...
-Moreover code generation for private accessors is ok but you can't maintain this generated code when you refactor. Since it had been generated by reflection and there is one accessors file for per test project and there is only one test project for per solution.
If I am wrong at that please notify since at first glance, intuitively
and by little search I understand things like that.

After all I'm back to NUnit. I'm coming from JUnit so may be that's why or not I've found NUnit more flexible and able to learn intuitively.

And last : I was coding with Java and using open source tools... now I'm coding with C# and using MS tools. I feel that Microsoft sucks since MS is trying to control everything and it can't...

VS is good only with ReSharper + Visual SVN + NUnit... I don't know if it's funny or weird or both...

yteslax on July 5, 2008 5:41 AM

Maybe that's another problem -- Open Source software is never truly done, is it?

nor is commercial software except that someone with some power (a benevolent dictator) decides that it is done. Just as in Open Source, some releases are more stable or preferred over others.

There is no difference except that the source is open and the development process usually transparent so that the world can see just how not-done it is. Any commercial software release is equally un-done, it is simply released without transparency so that no one can see just how un-done it is.

Jay R. Wren on July 5, 2008 10:04 AM

Maybe that's another problem -- Open Source software is never truly done, is it?

Scott on July 5, 2008 1:01 PM

Maybe that's another problem -- Open Source software is never truly done, is it?

Is any software truly ever done. We're on Windows 7(9) now and OS ten, haven't they gotten it right yet?

Scott on July 5, 2008 1:09 PM

You don't outsource your core competency. MS is a software house, and using OpenSource is the same thing as outsourcing.

Apple is Software/Hardware with tight integration. It's what they've always sold, which is why they don't outsource hardware. We'll see in time if this will hold, but there's a lot to be said about stability and features of Apple products because of this.

If anything, Microsoft already relies too much on 3rd parties because they don't create the hardware. They have to make agreements with companies like HP to ship certain configurations and include features that utilize MS software, but they can't control it that much. In my opinion pc hardware (generally) isn't as solid, and the manufacturers are really the one's killing microsoft pc by pc.

MS has their head up their asses in quite a few departments, which isn't to say there aren't some really cool smart people working for them, and making some really good software. Overall though, their crime is that of hubris.

You could argue Apple's crime is hubris as well, but it's not killing them, yet. That cat will have to change it's spots too,

PS Licensing is not the same as using 3rd party code. e.g. with JPEG, they're utilizing trademark / patented technology.

Jim on July 6, 2008 4:19 AM

Now that Microsoft have retracted Windows XP from general distribution, why don't they release it as open source? This way they would be doing the global community a big favour in the sense of allowing data archaeologists 20 years from now the opportunity to still be able to run old programmes, access data in ancient formats and what not. Since they have retracted Windows XP from the market anyway there is no way it could hurt their revenue to make it available as open source. If you don't find Windows XP useful anymore, Microsoft, then why don't you donate it to the community????

Open Source Windows XP NOW! on July 6, 2008 7:26 AM

Don't get me wrong, I love open source software...

The mere fact that you CANNOT include open source code in ANY commercial package unless you release all of your source code along with it is utter BS and what destroys any and all open source compatibility with commercial software. I've read a handful of the open source license agreements and they all suck. They all state that you cannot take any of the code and put it in or package it with a commercial project without first making that commercial project source code available. It is that same snobbery that will continue to put a huge divide between commercial (Microsoft) and open source projects.

The other thing that really bakes my noodle about open source? This great, free, wonderful frontier of awesome open source projects that started the whole movement... Where have they gone? Some are completely commercial now. Look at MySQL. Their once you can use it anywhere, commercial or for open source philosophy went to you can use it in open source, or pay us $100 to use it commercially to completely you need to pay us if your are going to use it commercially. What? What kind of BS is that? It seems the snobs found out that you can't make the big bucks unless you go corporate.

Sorry, I've been beat up by the open source crowd too much to see their side as all rosey and happy little rainbows.

Aaron on July 6, 2008 7:57 AM

So if Subversion is so great, how come most of the big software houses are still using Perforce internally?

Tom on July 6, 2008 10:03 AM

The analogy to soda falls apart in one very important way. While my buddy and I can buy different sodas and enjoy them sitting watching the fireworks, different source control, testing, bug reporting and other systems proliferating diminish the amount of effectiveness we can get from them.

If I code my tests in the Visual Studio native test tool, they are far less portable. If I put my code in Subversion, anyone can get at it, whereas putting it in team system means licenses.

Nobody cares if soda is interoperable, but software does matter.

John Lopez on July 6, 2008 1:26 PM

Love this quote: We need to treat programming more like math, we need to build on our results.

I've always been of this opinion... all program code written is just consequences of maths... no ownership etc can be implied. :)

Still mathematicians also duplicate their work...

Jheriko on July 7, 2008 3:50 AM

While I understand that all open source is not GPL'ed, there is quite a bit of it that is. GPL's whole idea is to make it so commercial companies cannot benefit from free open source code. It is even on the GPL website under their philosophy. They only want free software to be able to use free software. It isn't just the commercial closed-source companies that don't want to use Open Source (GPL Open Source in this case) it's the makers of the GPL code themselves that won't allow commercial companies to use their code. The two worlds have a hard time coming together, especially when the open source is GPL'ed.

Read this article, it might be a little suprising. http://www.gnu.org/licenses/why-not-lgpl.html

Again, I do realize that not all open-source software is GPL'ed but I think it is the most recognized license.

DarkOpz on July 7, 2008 8:07 AM

Honestly the logic in the post/rant makes no since. Why would I want NUnit to be shipped with VS. Maybe I would like to use MBUnit. Why would I want Subversion shipped with VS, maybe I want to use sourcegear vault.

MS allows you to use all sorts of plugins and software with their framework and you have the CHOICE to use what you want.

Bojangles on July 7, 2008 10:07 AM

I would like to see a website which lists and reviews open source equivalents to MS tools and products. I am seeing too many open source solutions for the same product and it's getting hard to know what to choose and use.

Abdu on July 7, 2008 10:44 AM

It's not a cultural thing. It's a code licensing thing. Look, the fact of the matter is that Microsoft shares a lot of code internally between various parts of the company. Sometimes, the code is shared as a header/library/DLL and, sometimes, the code is simply cloned/forked/whatever. Either way, this is a culture which likes to share and leverage existing code. Sure, there are people who want to reinvent the wheel because they can or because they have funding to build similar/different wheels, but so what. Open source projects hit roadblocks/disagreements and fork all the time.

The problem, in my opinion, is that it's difficult to segregate open source code which has varying licensing requirements from commercial code within the various source trees around the company. I think that the lawyers (rightly so) are concerned about possibly contaminating the development infrastructure with code that would force Microsoft to open source its flagship source code. Some of you are probably thinking, What's the big deal? Comment the code, or put it somewhere 'special'. Well, it's really not that easy. Devs aren't lawyers. They just want to get a job done and, whether through error or neglect, code does get copied -- and often without knowledge or foresight of the consequences.

That said, I DO believe that Microsoft needs to find a way to leverage open source code, where possible, in order to avoid wasting/duplicating effort. Let's face it: Unless you're really deriving sufficient value from the effot, it doesn't make sense to redevelop code which already exists; plus, if a standard is already being used by the overwhelming majority of the market, it's EXTREMELY difficult to sell them on adopting a brand new, untested solution -- even if it's demonstrably better. Markets behave in strange ways. Best doesn't always mean most popular.

Anyway, my two cents...

Tom on July 7, 2008 12:33 PM

I cannot stress enough how much I appreciate having everything bundled in a single product. I have no problem with the unit test tool built-into VS Team Edition. It's not perfect but it does 90% of what I need and it's there for me to use with no extra steps. It's just there. If I don't like it *then* I'll follow extra steps and get another tool...but only then.

Hector Correa on July 8, 2008 3:01 AM

I would bet anything that the reason has everything to do with Microsoft's Legal dept. They probably frame it in terms of liability (if an open source vulnerability gets into our shipped software, WE will be the ones getting sued) and licensing (how do we engage the legal team behind this GEE ENN EWE public license?).

If Google continues to eat their lunch, their obituary should have a line in it about approaches to open source (DISCLAIMER: I am not one of those zealots who thinks that Microsoft will be gone in 5 years... it will take a hell of a lot longer than that for the paradigm to shift).


LegalUnease on July 8, 2008 10:52 AM

Funny story on NUnit:

A few weeks back we (a group of cs students) visited Microsoft Ireland. We got a presentation on Test Driven Development at Mircrosoft by a developer (not a marketing guy!). He told us that almost all of his collegues use NUnit, no one uses MSTest. *At Microsoft*, that is :)

Michael on July 9, 2008 11:20 AM

Jeff,

I really believe you are correct: open source will kill Microsoft eventually unless they adapt and ship it themselves. There is no denying this fact. It will happen. It is happening. The quality of MS software continues to deteriorate. Just look at Team System. I have had to use this software on many recent projects. Give me CruiseControl.NET, NANT, and subversion any day over Team System. True, Team System has more features, but it is so buggy and slow, what is the point?

wookie on July 10, 2008 2:39 AM

And there is a codeplex ad over on the left, how funny.

sam on July 10, 2008 2:43 AM

Microsoft *does* ship software based on open source code and has for many years. Load up a command-line client and type ftp. You're running an old version of the BSD ftp client. This is not just speculation, it's a demonstrable fact.

And that's not even mentioning S(T)FU, whose Interix component contains lots of GPLed code. You can even get the source from MS, which has a policy of adhering strictly to the GPL.

John Cowan on July 10, 2008 12:09 PM

I love the whole innovate or die talk as if, from up high, if you don't make the next big thing God will smite MS and through divine intervention, put them out of business. I'm sure theatrics help the writing and all but, come on now, you know better than that.

MS has never been a huge innovator, they've been a huge money maker. Buy some stock, use their clones (which, given enough time end up being good pieces of software), and be happy. They pay good dividends - you'll be fine.

Steve-O on July 11, 2008 10:38 AM

open source will kill Microsoft eventually unless they adapt and ship it themselves.

no, only [paradigm du jour] will [synonym for overcome] [industry leader] unless they adapt!

Not to pick on sam, but someone could make a generator for all of the doomsday predictions, that are never right, about the rise and fall of every industry leader.

Steve-O on July 11, 2008 10:45 AM

When I saw this post, I wanted to drink!

Dmitry on July 12, 2008 9:20 AM

Aaron, the BSD licence meets the fairly ideologically stringent principles of the Debian Free Software Gudielines (so is quite clearly an open source licence), yet still allows the creation of closed commercial forks of the software covered by it.

The terms of the licence amount to You can use, copy, redistribute, and derive new software from our software as much as you like, in object or source code form, as long as you don't try to hide the fact that you're using our code or try to suggest that we endorse your code.

Martin on July 12, 2008 1:51 PM

Sounds like you are saying that competition is bad. Almost sounds like you are an old Russian that grew up under communism. I'm not exactly sure why people over hype open source. I personally think its bull. Don't miss-understand me though a person has the right to do with their own software whatever the hell they feel like, but opensource is a good/nice idea, just like communism. It is however fundamentally flawed in the fact that it treats all coders/pieces of code and ideas as equal and here lies the big problem since they obviously aren't. Just like communism tries to force equalize people who arent the same either. It's just plain unfair to expect it of people/developers to open up all their trade secrets and source-code and give it to the world for free. It isn't right. It's worse than stealing.

As for TFS its not just a source-control system like subversion. The built in process control and testing and code analysis and on demmand build server is far supperior. The reason for this is because its not open source and microsoft can do serios investment into it.

MSTest unit test framework is NOT a clone of NUnit. But even if it was, its about competition. Probably the only driver for real innovation. Without the other option, nobody will have to innovate. But that is unfortunately the spirit of open source.

I guess the only thing that really bugs me is that it has become such a big trend. Pushed by shelvish companies and the media who wants better software for less than its really worth (so stealing time, IP and hard-work from developers) to increase their own profit margins ten fold and I don't mean they pay less because its free (although that has also become a nasty trend), but I do mean that a non-developer can copy and paste code from various sources and sell it on his own without giving the right people credit for their work, this means they did get the job done faster. But only because they stole IP/work/time.

Please people wake up. Don't feed this monster even if you have good intentions. Open Source will eat us all alive. Let's find a better way of competing with Big Brother. Like head on!

WeAreU on August 28, 2008 5:29 AM

Microsoft goes JQuery. See http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx . Maybe Microsoft's policy has changed?

RC on October 4, 2008 2:44 AM

Jeff,
you should try VisualSVN on a SQL Server project with Team Edition for Database Professionals. It bombed out on us and we reverted to good old TortoiseSVN. In fact I prefer to run in WE/TSVN as it frees Visual Studio from the burden of figuring what to include/exclude in version control. It always manages to mess up on its decisions about the files.

PaulG,
you have to describe what your nightmare exactly is between VSS and SVN, otherwise it is assumed you are not practising any intensive form of branching and merging if you find VSS a pure joy to use. VSS has given us file locks and content losses like no other, prevent multiple developers from properly working on same files or working in good branches for parallel development.

Aaron Seet on February 6, 2010 10:37 PM

Apple isn't being sued for shipping Open Source because their target market is vanishingly small compared to Microsoft's. They don't have anywhere near the same level of constraints and concerns. Also, I'm going to go out on a limb here and say that a lot of the FOSS weenies are willing to overlook Apple's abuse as long as they're competing with Micro$oft.

Raymond Chen has a much more down-to-earth explanation:

http://blogs.msdn.com/oldnewthing/archive/2008/02/25/7885570.aspx

It's not just Open Source, it's third-party products in general.

Aaron G on February 6, 2010 10:37 PM

Don't know if you saw it, but I wrote about this last year after someone explained that my thoughts on Microsoft and open source were pretty naive. http://weblogs.asp.net/jgalloway/archive/2007/05/02/why-microsoft-can-t-ship-open-source-code.aspx

NUnit, though? If you're shopping for a .NET unit test framework, why not MbUnit or xUnit.NET?

Jon Galloway on February 6, 2010 10:37 PM

"Apple isn't being sued for shipping Open Source because their target market is vanishingly small compared to Microsoft's"

I'm sure if a smartphone company thought they could take down the iPhone by finding a patent violation in open source used by iPhone OS or its software development toolchain, they'd make the effort to find such a violation and find some way to persuade the IP owner to sue Apple, perhaps by buying the IP first.

Jonathan Hendry on March 7, 2010 2:22 AM

My cynical explanation is that you can build a bigger fiefdom if you start a redevelopment project. If your team is just integrating with an existing, external open source product, your manager might ask if you really need so many people, you might lose status and at worst your budget gets cut.

Jonathan Hendry on March 7, 2010 2:26 AM

«Back

The comments to this entry are closed.