When we first reported on Jamie Cansdale's TestDriven.NET, it sounded like the classic big company bullies the little one. But as the full story was been revealed, sentiment has begun to swing from die-hard support for Jamie Cansdale to a call to boycott TestDriven.NET . InfoQ looks back at how this unfortunate incident came to pass.
The story begins back in 2003 or 2004 when Dan Fernandez, lead product manager for Visual Studio Express, and his colleges decided that VS Express should be free. He, along with several other Microsoft employees, managed to convince Microsoft that the hobbyist market was being woefully underserved. In an April 2004 blog entry, Dan wrote:
My other problem is that I passionately believe in a product decision and I'm “going to the mat” as Joe would say to try and defend it. It's a losing battle right now and I don't think I'll be able to stop the train (it'll run right over me), but I have to try. At Microsoft you definitely need to pick your battles, because you can't have *everything*. Sometimes though, you just need to fight a fight because it's what you believe in, no matter how badly the odds are stacked against you. That's me, right now, 8:02PM PST in my office, no dinner, no sleep and over 400 pages of PowerPoint slide decks in front of me. Hopefully this post will make sense sometime at the end of this year, but I'll let you know if I'm even standing next Friday :).
When it was released in November of 2005, VS Express was expected to be free for one year. After which point, it could be purchased for approximately $99 US. Five months and five million downloads later, Dan's team got their wish and VS 2005 Express was made permanently free.
Visual Studio Express didn't come without limitations. The biggest is that it is not extensible via macros, add-ins, or VS packages. Michael Leworthy writes,
We did this for two reasons. First, we wanted to ensure a consistent user experience for all Express users. When we build content and tutorials (examples of which you can see at our Beginner Developer's Learning Center), we do so expecting the IDE to be the same all the time. In order to preserve a good first-time experience, we had to ensure the IDE was always going to be in a predictable and supported state and would only contain features appropriate for novice developers. Second, we wanted to make sure that the Express product line didn't cannibalize our professional tools business. This is reasonable given the amount of R&D we spent on building the product and the ongoing amount we spend on building content and support materials for the community of Express users.
Meanwhile, Jamie Cansdale of Mutant Design Limited was working on a commercial product called TestDriven.NET (http://www.testdriven.net/overview.aspx). This product supports test frameworks such as NUnit, MbUnit and Microsoft's Team System.
All of the following letters were provided to InfoQ by Jamie Cansdale.
It appears that Jamie's product first came to the attention of Microsoft when he applied for membership in Microsoft's Visual Studio Industry Partner (VSIP) program in December of 2005. This program was developed for 3rd parties that develop add-ons for Visual Studio.
In a letter dated Dec. 8, 2005, Jason Weber wrote to Jamie discussing the process for joining the VSIP program, the possibility of Jamie becoming a VSIP MVP, and asked if he already removed support for VS Express from his product. Excerpts from that letter follow:
I've sent your name to Mark Colburn, the program manager who drives
our Visual Studio ecosystem team. Mark is looking for Visual Studio
Extensibility MVP's, and as we discussed I believe you would be a great
addition to the program, and it would be much more applicable than your
current ASP.Net MVP involvement. Please look for mail from Mark in the
coming months.
Sorry to spring the bad news about the Express SKU's. I see that you
updated your build today. Did you already remove your hack? Man that was
quick ;-)
Take care, and good luck!
- jason
In response to a request from Jamie about the specific EULA clause that he was violating, Jason wrote this email on December 9.
Since I'm not a lawyer I shouldn't comment on the license. However if
you read the Express SKU EULA you'll see verbiage around reverse
engineering, and if you read the VS SDK license (the license that covers
all native API's that you're accessing when you QueryService from your
add-in) you'll see additional terms that are relevant to your hack.
Sorry that I can't be more specific, but I'm just a developer ;-)
After two weeks without contact, Jason wrote to Jamie again:
It's been two weeks since we last spoke. I wanted to send a quick mail
to see if you've had an opportunity to think through our previous
conversation (specifically about further integrating unit testing into
VSTS and also about your Express extension). I was hoping that we could
schedule a conference call for early January to answer any questions you
might have. I've included Lorna and Ben who would like to attend the
call. It would be appreciated if you could propose a date and time!
To which Jamie responded on the 20th with:
I have indeed been thinking about this. Obviously I am concerned about
the licence issue. However I think there may have been a
misunderstanding as to how my "hack" works. You mentioned my use of
QueryService to access the native APIs. I am in fact using the add-in
extensibility API and have intentionally not been touching the VSIP
interfaces.
To be on the safe side, I asked a friend who works as a lawyer in the
UK to go through the Express licence with me. In his opinion I'm not
in breach of anything as my technique didn't require any reverse
engineering or decompilation.
As things stand, I am reluctant to remove support for the Express SKU
as the reason for doing so is unclear and I would be unable to justify
it properly to my users (and to myself).
Discussions seem to have pretty much stalemated beyond that point, though it was still cordial.
On Jan 6, Jamie wrote:
I am sorry I was unable to get back to you yesterday. I have given
more thought to the issue of TestDriven.NET's integration into the
Express SKU. I remain of the opinion that I'm not technically in
breach of the licence. However I do not want the shadow of legal
action hanging over me, especially as I intend to release a commercial
version in the Spring.
I have therefore decided to drop support for the Express SKU, provided
that we're able to draft an acceptable announcement for my users. This
has not been an easy decision to make as I have invested a
considerable amount of time into developing and testing this feature
(on all of the Express languages).
I would appreciate it if you could draft an announcement stating
Microsoft's position towards TestDriven.NET and its integration into
the various SKUs, including the fact that Microsoft doesn't consider
unit testing integration appropriate for the Express SKU target users.
I am also keen to reassure my users that Microsoft is fully
supportive of TestDriven.NET's future integration with VSTS.
Regards, Jamie.
To which Jason responded:
Thank you for your careful consideration and decision to remove Express
SKU integration. I would be happy to help you craft justification for
your customers, and you're welcome to use my name. Microsoft however
can't provide you a quote for your website. My recommendation would be
something like this...
"After speaking with Jason Weber from Microsoft I realized that by
adding features to Visual Studio Express I was in breach of the Visual
Studio license agreements and copyrights. I have therefore decided to
remove support for the Visual Studio Express SKU's from TestDriven.Net.
Jason was very supportive of TestDriven.Net's integration into the other
Visual Studio 2005 products and I was invited to join the VSIP program.
This would allow me to fly to Redmond each quarter and work closely with
the Visual Studio development team on deeper integration."
If you have other ideas let me know. I would be happy to review your
proposed messaging.
Thanks - jason
At his point Jason seems to have been under the belief that the issue was settled. However, a few days later a conversation between Ben Miller and Jamie Cansdale showed that it wasn't.
On January 12 Ben wrote:
I am following up on the conversation and the email that you sent that
you would take down support for the Express SKU’s.
I want to make sure that you got the email from Jason Weber, and also
that you are going to be able to comply with taking this down by the
end of the week.
Please reply to me so that I can help avoid any further calls and we
can wrap this up ASAP.
Jamie's responds to him with:
I'm seeking some more advice on the matter tonight. I hope to reply
with something more definitive tomorrow.
To which Ben asks:
More advice in what way? I thought that you indicated that you were
going to remove the support and take it off the site.
Are you still considering not taking down the support for Express?
Jamie answers in an email to Jason, Ben, and Lorna Williamson on the 13th with:
I'm afraid your recommended wording is totally unacceptable. As I
mentioned in my previous email, I remain of the opinion that I'm not
in breach of the licence. I would like to know if Microsoft is
officially requesting that I remove support for the Express SKU and if
so on what basis. I do insist on this if there is to be any
announcement.
At this point it seems that the only thing Jason cares about is removing the add-on from VS Express and the announcement and admittance of breach of license, which was Jamie's idea, isn't important to him or Microsoft.
Yes, we are requesting that you remove your current extensions to the
Express SKU. As I explained in both calls, we believe that neither the
Express license terms nor the Visual Studio SDK license terms permit you
to create and offer these extensions.
We can work with you on the wording of the announcement. We don't need
you to admit breach of our license agreements or copyright infringement.
Instead, we would be comfortable with a statement essentially saying
that 'Microsoft does not believe the extensions are permitted under the
relevant license terms', and that although you may disagree, you have
decided to remove your extensions for the Express products.
Please let me know how you would like to proceed, or propose different
verbiage for the announcement.
The last email Jamie sent in January reads:
In our last conference call you mentioned numerous ways in which you
believed I was in breach of the Visual Studio SDK licence agreement.
You also said that adding buttons to the Express SKU may be a breach
of Microsoft's copyright.
The code you believe violates the Visual Studio SDK licence agreement
is present in all versions of TestDriven.NET (but is only actually
invoked when executing inside a Visual Studio 2005 Team Edition). It
is therefore the case that removing support for the Express SKU
wouldn't remedy the licence situation. Even if Microsoft chose not to
pursue this perceived licence breach, it would still leave any future
versions of TestDriven.NET in a vulnerable position.
I have therefore decided to remove all references to Visual Studio SDK
assemblies. I find this situation regrettable as it does limit
integration possibilities. I'm planning to discuss the issues raised
and find out how other add-in developers interface with the Visual
Studio SDK. I have seen many blog entries that seem to encourage
add-in developers to circumvent the PLK mechanism (assuming that is
what casting the DTE object to IServiceProvider does).
As far as copyright is concerned, I still fail to understand - despite
having researched the subject - how extending an application could be
construed as a violation. I would appreciate if you could clarify
further this issue.
Two months later the emails resume, but since they seem to be just going back and forth over arranging a conference call that eventually took place on March 30th. While things were not completely resolved, they did seem to be moving towards both a resolution and a new MVP award for Jamie. However, during this time another sticking point was brought to a head.
Visual Studio 2005 introduced a new product line called Visual Studio Team System (VSTS). Among the products in VSTS is MSTest, Microsoft's unit testing suite. Jamie has asked for permission to distribute the libraries used by MSTest so that he could support it on the less expensive VS Standard and Professional editions. On April 18, Jason denied Jamie's request:
Unfortunately we can't give you permission to redistribute these VSTS
components for use in the Visual Studio Standard and Pro SKU's. There
are technically challenges (servicing, deployment, IA's, etc.) not to
mention business challenges (need to license to all VSIP partners, would
have to restrict scenario, etc.). Today we don't allow anyone partner to
change our SKU lineup.
Other correspondence likewise showed a lack of agreement between Jamie and Jason. Jamie appears to have made several more demands in exchange for dropping VS Express support. On April 22, Jason wrote:
Jamie,
I would much prefer that we reached an amicable solution, but I don't
feel that we're trending in that direction. I had already replied to
this email. To ensure that we're on the same page let me explicitly
answer your requests:
1.) We will not allow you to redistribute VSTS unit testing components
with your product for use in Standard/Pro SKU's.
2.) We will not allow you to redistribute Visual Studio below Select B
pricing (our standard pricing model).
3.) We are not offering you a free VSIP Premier, Open Tools and/or IDE
redistribution partnership.
4.) We will not allow you to extend the Visual Studio Express SKU's
under any conditions.
5.) You will not be accepted into the VSIP program until you conform to
our license agreements.
To be clear Microsoft is not going to compensate you for discontinuing
your Express extensions. We are willing to work with you through the
VSIP program once you are in conformance with our license terms. That
said we are willing to entertain any other suggestions you might have.
Do be fair, it seems that Jamie wasn't actually asking for compensation for VS Express. Jamie makes this clean when he wrote:
hank you for spelling out Microsoft's position so clearly. I find
this directness constructive and feel that we're moving forwards. In
this same spirit I would like to lay out my position:
1.) All of the interfaces and methods I used to extend the Express SKU
are public and documented on the MSDN website.
2.) I have sought legal advice on the Express SKU EULA and as far as
my lawyer is aware I am not in breach of the licence.
In our second teleconference Ben Miller told me this issue would not
impact my MVP status or prospects for renewal (baring Microsoft taking
legal action). I feel a constructive way forward would be if Microsoft
were to make a gesture of good faith by renewing my MVP award for this
season. I would then be happy to remove Express SKU integration from
my website and engage with Microsoft through the VSIP program as you
have suggested.
To be clear I am not asking to be made a VSIP MVP as compensation for
discontinuing my Express SKU extensions. I am simply asking not to be
punished over an issue that everyone would like to move away from.
Assuming we can agree upon this as an amicable way forward, I will
publish the following installer on my website:
http://www.mutantdesign.co.uk/downloads/TestDriven.NET-2.1.1586_Basic.zip
Regards, Jamie.
On May 13, 2006, Jason thanked Jamie for removing the parts of the VS Express integration and offered to help him with other develop issues unrelated to this incident.
Nearly a year later, Jamie Cansdale once again started claiming he wasn't in violation of the agreement. The email is dated February 22, 2007:
In our teleconference last year with Ben an Lorna you mentioned 3 ways
in which you believed I may be in breach of Microsoft's license terms.
On this basis that Ben requested that I comply and take down support
for the Express SKU's.
1) You said that by using Intellisense I may be in breach of the
dissasembly clause in the VS SDK license.
2) You said that by working out how to use an API by looking at the
public type and method names I may be in breach of the reverse
engineering clause in the VS SDK license.
3) You said that by adding a button to the Express SKU interface I may
be in breach of Microsoft's copyright.
After the teleconference I said that I would need a statement that I
could give to my users about why the Express SKU was no longer
supported. I continue to get emails asking why TestDriven.NET no
longer works with Express. Please can you confirm that the points
above are why you believe I was in violation.
It is followed on February 26 by a threat to reinstate VS Express support for TestDriven.NET.
Your delayed response leads me question whether you ever had
reason to believe I was in violation of Microsoft's license terms. If this
is not the case I request that you let me know immediately. Any further
delay will lead me to re-enable Express SKU support without notice.
On the same day, Jason asked Jamie to focus on other areas of VS integration:
Jamie, for the reasons we discussed at great length, we believe your
various extensions to the Visual Studio Express products necessarily
violated the relevant license terms. We don't think it's productive to
rehash those discussions. Instead, we encourage you to focus your
energies on legitimately extending the Visual Studio products, as
permitted under the Visual Studio Industry Partner (VSIP) program and
the associated terms and conditions.
On April 17 Jamie made good with his threat to reenable VS Express Support for his product and, for the first time, Jason threatened to bring in the lawyers.
We just noticed that you recently re-enabled extensions to our Visual
Studio Express products:
http://weblogs.asp.net/nunitaddin/archive/2007/04/02/express-sku-support.aspx
This is extremely disappointing. We spent a lot of time last year
explaining to you, over a period of many months, that our Express
products are not designed or intended to be extensible. As we also
explained to you many times, our license terms for the Express
products do not permit extending them with new functionality or by
enabling access to latent Visual Studio functionality that we
purposely de-activated for our Express products. Your various
extensions, in both their former and current incarnations, necessarily
violate those license terms and infringe our rights in our products.
You are also putting your own customers in a difficult position, since
you are encouraging them to breach the license terms, too.
We thought that you ultimately recognized this, when you withdrew
support for Express from your products last year. We can't help but
conclude that, by re-enabling Express support now, in light of all of
our conversations (including the email exchange below in February),
you have consciously decided to flout our rights.
What makes this especially puzzling is that you are undermining the
economic model that you rely on for your own products. Nearly all
software vendors offer limited versions of their products for nominal
or no cost, often as a marketing or entry-level tool. More
sophisticated or feature-rich versions of the same software are then
supplied at a higher price. We do this with Visual Studio Express (our
free products) and Visual Studio Standard and above (our commercial
products). You use this model for your own products, the "Personal,"
Professional" and "Enterprise" versions of TestDriven.NET. Your
actions subvert the model that we all rely on.
Instead of extending Express, I'd urge you again to focus your energy
and talents on extending our commercial Visual Studio products, under
the terms of our publicly available VSIP program. Hundreds of other
partners are successfully doing this, all the while respecting the
restrictions on extending the Express products. There's no reason why
TestDriven.NET can't be successful doing this, too.
We'd really like to resolve this amicably. Please remove support for
our Express products from your software as soon as possible. Please
also let me know when you have done this, and confirm that you will
not make such support available in the future. If you do not remove
support by that date, then this matter will be out of my hands and I
will have to turn this over to the lawyers. I really hope it does not
come to that.
On May 25, Jamie heard from Microsoft's lawyers.