News

Miguel de Icaza Leads Uproar Over Closed-Source VS Code C# Tool

Xamarin co-founder and former Microsoft exec Miguel de Icaza blasted the company -- along with many others -- for introducing closed-source functionality in a new scheme for the official C# extension for Visual Studio Code, calling the move "an unacceptable abuse of power."

That C# tool is powered by OmniSharp, but Microsoft is introducing a new extension based on the Language Server Protocol (LSP), used between an editor/IDE and a language server to provide language-specific functionality such as auto complete, go to definition, find all references and so on.

Language Server Protocol for HTML and PHP
[Click on image for larger view.]Language Server Protocol for HTML and PHP (source: Microsoft).

"As we move towards a more dynamic future for the C# experience in VS Code, we intend to switch the extension to communicate entirely using LSP and plan to update the existing OmniSharp component to communicate in this manner as well," said Microsoft's Tim Heuer in a June 15 announcement in the VS Code/OmniSharp GitHub repo. "Utilizing LSP will allow us to bring innovative new features to the C# for VS Code extension. This includes making advanced capabilities available and, in some cases, closed-source experiences, such as IntelliCode. We plan to create a new 'LSP Tools Host' component (not an official name 😊), which integrates both open-source components, like Roslyn and Razor, with closed-source components, offering a wider array of tooling capabilities."

The OmniSharp C# Extension Has Been Downloaded More than 16 Million Times
[Click on image for larger view.]The OmniSharp C# Extension Has Been Downloaded More than 16 Million Times (source: Microsoft).

That caused quite an uproar among developers who support open source, led by some biting Twitter comments from de Icaza, who in March left Microsoft after joining the company in 2016 when it acquired Xamarin. Along with co-founding that company, he is well-known for his pioneering efforts in big, popular projects including GNOME, Ximian and Mono.

Lipstick on a Pig
[Click on image for larger view.]Lipstick on a Pig (source: Microsoft).

His initial Twitter reaction read: "Truly disappointing that Microsoft would subvert an active open source project by ramming in a proprietary extension to continue to lockdown .NET. An unacceptable abuse of power from the stewards of the platform, and a betrayal of the community." Follow-on comments in a give-and-take with other developers included:

  • After last year's debacle, I authored a paper to address the question "What should we do instead of shooting ourselves in the foot?" - now we know, it soared like a lead balloon.
  • They did the same to MonoDevelop, hard fork into fully closed VSMac
  • You don't communicate negative decisions clearly, you need to hide them behind a bunch of other stuff, this is what the post does

Other developers weighed in with similar commentary on the Twitter post and on Heuer's original post (95 comments and growing as this is being typed), which saw comments like:

  • Embrace, extend and extinguish.
  • While "C# in VS Code" getting some love is very much welcome, the new LSP implementation not being open source is a weird decision. I hope Microsoft reconsiders it. If it's about IntelliCode, then they can make the LSP server extensible and open source, with some optional closed source components like IntelliCode. GitHub Copilot lives as a separate extension and works everywhere, maybe a similar method can be used for IntelliCode in VS Code too? Anyway, because of Copilot I don't think IntelliCode is that important in VS Code
  • I echo the sentiment that this being officially close sourced is a turn off. It is great that C# for VS Code gets more love, but this was also a weird omission in the past. Glad to see it starting to get corrected, but can't help to feel another mistake is being made. IntelliCode can be a separate extension like copilot, open source what you can.
  • It's sad and short-sighted when Microsoft tries to jockey for power in the short-run (or reap rewards on existing market share) by making user-hostile decisions. This seems like another instance of embrace/extend/extinguish. It's predictable by now, but I'm not happy about it!
  • Can you provide reasoning on why this new tools host will be closed source? This seems contradictory to the spirit of VS Code. MS has gained a ton of goodwill from developers by building open source, it would be a shame for this to change and old habits come back in to play.
  • Can Microsoft share the rationale behind making the aforementioned “LSP Tools Host” closed source? I think that the lack of justification makes the whole issue more open to misinterpretation. This kind of rug pull with open source projects isn't welcome at all. I hope you fix this before it turns into another PR crisis.

Heuer may have been attempting to forestall such a PR crisis with a follow-on comment to his announcement:

UPDATE:
Thanks for the passionate feedback. I'd like to clarify a few things stated in the feedback that we failed to make clear.

The LSP implementations for Razor and C# will remain open-source (Roslyn and Razor) as they are today. The VS Code C# extension (ms-dotnettools.csharp) itself will also remain open-source. That which is open source today remains so and in active OSS development. This ensures that others outside of VS Code that use LSP continue to have access to C#.

This new host component is the bridge between open and closed source functionality letting us deliver both at the same time.

After becoming a Microsoft Distinguished Engineer (following what he described as the "longest job interview of my career"), de Icaza became a strong advocate of the company's open source initiatives, which mark a stark turnabout from decades ago when it was widely viewed as a monolithic, proprietary, industry bully in developer tooling and other areas, earning a reputation for closed-source secrecy amid those "embrace, extend and extinguish" characterizations.

When he left Microsoft in March he said he wasn't going to another job right away, instead planning to spend some time with his family before choosing his next direction, which is likely to involve a start-up experience.

Judging from his comment about "last year's debacle" and authoring a paper about the company avoiding shooting itself in the foot, he clearly had some disagreements with management, but he didn't clarify what exact situation he was referring to. His Xamarin co-founder, Nat Friedman, left his position as CEO of Microsoft-owned GitHub last November.

Coincidentally, a Dusted Codes article last year titled "Can we trust Microsoft with Open Source?" said: "Do you trust Microsoft with Open Source or do you actually trust people like Jon Galloway, Scott Hanselman, Scott Hunter, Guido van Rossum, David Fowler, Damian Edwards, Miguel de Icaza and a handful of other OSS champions who have been pushing the OSS message internally from the bottom up? What if these people leave .NET? Will Microsoft continue to play nicely with the community?"

Time will tell.

About the Author

David Ramel is an editor and writer at Converge 360.

comments powered by Disqus

Featured

  • Compare New GitHub Copilot Free Plan for Visual Studio/VS Code to Paid Plans

    The free plan restricts the number of completions, chat requests and access to AI models, being suitable for occasional users and small projects.

  • Diving Deep into .NET MAUI

    Ever since someone figured out that fiddling bits results in source code, developers have sought one codebase for all types of apps on all platforms, with Microsoft's latest attempt to further that effort being .NET MAUI.

  • Copilot AI Boosts Abound in New VS Code v1.96

    Microsoft improved on its new "Copilot Edit" functionality in the latest release of Visual Studio Code, v1.96, its open-source based code editor that has become the most popular in the world according to many surveys.

  • AdaBoost Regression Using C#

    Dr. James McCaffrey from Microsoft Research presents a complete end-to-end demonstration of the AdaBoost.R2 algorithm for regression problems (where the goal is to predict a single numeric value). The implementation follows the original source research paper closely, so you can use it as a guide for customization for specific scenarios.

  • Versioning and Documenting ASP.NET Core Services

    Building an API with ASP.NET Core is only half the job. If your API is going to live more than one release cycle, you're going to need to version it. If you have other people building clients for it, you're going to need to document it.

Subscribe on YouTube