The Hot Reload debacle happened last week, and the .NET Foundation Board held a “Tell me Anything” (TMA) Thursday on youtube. I livetweeted that event here.
I should point out that while the “Tell me Anything” is fortuitous in that it came in a timely fashion after an epic screw-up, that the purpose of the TMA was not Hot Reload, but rather to address the many recent screwups that happened prior to HotReload .
In case you haven’t been keeping up (and that’s to be expected, as it is a lot):
- Using the dnfadmin service account and reaching out to Github Support directly to move projects to the Foundation’s control without maintainers finding out
- Making odd statements like projects “projects may have not understood what they were agreeing to when they were brought under the .NET Foundation umbrella”
- Saying a board member left for ‘personal reasons’ when he left due to the nature of the Foundation itself
- And really the straw that broke the camel’s back was the Executive Director merging a PR without any discussion into a member project.
Now, did the .NET Foundation try to explain why any of these subjects happened — except for the last? No. Have they promised to conduct an investigation into all of these subjects and issue a report? No. Have they been forthcoming with what ‘contributing code’ to the .NET Foundation means? No. Have they even backtracked on their misleading news on why a Director of the .NET Foundation Board left? No.
With those facts in mind, it’s rather hard to explain what the .NET Foundation was hoping to accomplish with the TMA. Maybe they thought a good substitute for answers to these pressing issues was the ability to have a moderated chat for an hour? Again, it’s hard to say.
On the github side, members of the .NET community took to the Discussions on Github to ‘start discussions’ on these areas; but since those discussions started, there’s been no followup from the Board to the questions asked, or even a timeline for when the questions will be answered. Much like the “Tell me Anything” yesterday, the discussions seem to be an outlet valve for the community’s frustration rather than a means to get the .NET Foundation and its community back on the same page.
And that is the fundamental problem the .NET Foundation has: Its board members don’t see the disconnect between why the community thinks the Foundation exists and why the board thinks the foundation exists. We even asked that question and were met with “We have to have discussions” to get on the same page about that. The irony here is that if you asked the Board members why the Foundation exists, and if you asked the community, you’d get different answers — but over and above that, if you pull up the articles of incorporation (and even their amendments that came 5 years later), you get a completely different answer!
Now when you think about something so fundamental as the purpose of a legal entity, you gotta figure it’s crystal clear, right? Apparently not. Luckily we can use the .NET Foundation articles of incorporation to suss out its purpose:
Article III – PurposesThe original incorporation document for the .NET Foundation.
The Corporation is organized to promote the interests of the .NET programming community, including developers, independent software vendors and platform providers, by: fostering open development and collaboration of open source technologies for .NET developers to strengthen the future of the .NET ecosystem and wider developer community by promoting openness, community participation, and rapid innovation.
At the risk of creating a rather juicy straw-man for myself, it’s clear what the .NET Foundation is for: It’s an interest group designed to promote .NET and the interests of the .NET community.
What are the interests of the .NET community?
Well, if more developers don’t’ pick up .NET, we’re going to continue to be seen as an “Enterprise Only” product. That’s fine for making money, but you need new blood; and new blood — especially in this generation — is interested in what gives them joy and what aligns with their moral and ethical principles. And maybe I’m wrong there, after all plenty of developers see the evil that is Facebook1 and yet love React and React Native. Plenty of Developers see the evil of Google2, and yet love Go. I can’t explain it.
The dangers of an ‘enterprise only’ product is that it naturally excludes hobbyists, startups, and external sources of inspiration. Say what you will, but I’ve never heard anyone refer to enterprise software as inspirational. But this is not a critique about enterprise software, this is a critique on the current path of the .NET Foundation, and that path leads to enterprise only software.
So if the .NET foundation doesn’t want to be known as the ‘enterprise only’ foundation, they’re in a particularly well-suited place to change that outcome. After all, their entire mission is to change that outcome. The last part of the legal purpose of the .NET foundation even says so:
…to strengthen the future of the .NET ecosystem and wider developer community by promoting openness, community participation, and rapid innovationLast clause of Article III in the .NET Foundation incorporation documents
What does the Board think the .NET Foundation does?
I’ve been trying to answer this question, and it’s hard because no one at the board will give a definitive answer as to the .NET Foundation’s purpose. They each focus on a microcosm, or a tactical implementation of that purpose, but not on the purpose itself. You’ll hear things like “fund meetups” or “promote open source projects” or “give open source projects legal tools to help them administer their projects”, but these are all tactics, none of this is a strategy.
First Steps to a better .NET Foundation
To make the foundation better, we have to change the direction of the Foundation. That means figuring out the mission and purpose, and here’s where the Board should spend its time first. Read the incorporation documents, and decide if they as board members want to promote .NET in the way their own incorporation documents stand for, and if they don’t, to step aside and allow others who want to carry out the purpose to do so.
I can provide my own vision for the .NET Foundation, but to be clear: it’s a group project. We need different voices, and one voice will only result in the same myopia that got us into this mess.
The .NET Foundation should:
1. Create and encourage the conditions for .NET to grow and thrive outside of an ‘enterprise only’ environment.
2. Zealously defend .NET against any entity that goes against the ideals of the Foundation, regardless of whether the victim is a .NET Foundation project. You’re an interest group. Be an interest group. Take an interest. Take a stand.
3. Put together a strategic planning committee to use those first principles and the state of .NET to put together a plan for where we should be in 3-5 years, with finance, communications, and sustainability.
4. Complete the by-laws; they’re incomplete, they reference documents no one has access to, and they’re legally a mess.
In that future, where the .NET Foundation has done these things, I can see a future .NET Foundation reacting very differently to these crises we had.
To me, here’s a piece of what that would look like:
If the .NET Foundation’s purpose is to promote openness and rapid development, they should absolutely have an opinion when a member project or corporate sponsor goes against that. Note that ‘have an opinion’ is different than “tell the member projects what they can and cannot do”. If you’re an interest group, you should have an interest. In the case of the Debugger License change, AppGet, and HotReload, the board should have absolutely issued a statement. After all, .NET is their baby, and anything that harms the .NET Community should be by definition be something they talk about.
What would these statements look like? The typical “We’re not mad, we’re just disappointed.” statements, like this:
It’s got some rough edges, but that’d be my first draft for a .NET Foundation statement on the debugger and hot reload changes.
The .NET Foundation exists to promote openness and rapid innovation on .NET. Actions like changing the license for the .NET Debugger, and removing Hot Reload from the CLI only to make it a “Visual Studio only” feature — and then shutting down discussion, do not promote openness and rapid innovation in .NET. These actions reinforce age old stereotypes about .NET, that it is the commercial province of Microsoft. We at the .NET Foundation are working hard to change that view so that .NET can thrive, and these actions hurt that progress. We ask that Microsoft, a founding member of the Foundation and a Corporate Sponsor, rethink its actions and to continue to promote innovation and openness in .NET as it pledged to do when it helped found the .NET Foundation. We believe each member project has the authority to conduct its project as it sees fit, but we would fail in our duty as guardians of the .NET community if we did not speak up when a member project acts contrary to the .NET Foundation’s ideals.
The .NET Foundation is salvageable, but it takes leadership and vision. Right now I see board members trying to step up, but without a vision, and without a common mission articulated, they’re all just bailing water out of the sinking boat, without plans for patching the hole and getting us all to dry land.
1: If you want to argue the many ways Facebook is not evil, this isn’t the place to do it. Either you accept the argument, or you don’t. (I can actually see HN Commenters spending thousands of words on defending Facebook and Google because they have nothing substantive to say on this subject otherwise).
2: See 1, just substitute Facebook with Google.