27
2016
Microsoft’s little decision is a big mistake
Anyone that knows me knows that I have been a supporter and adopter of Microsoft technologies for decades. I prefer not to use the word “fan”, because I’m an active participant, not a passive onlooker. I’ve attended almost every Microsoft developer conference since 1993, back when it was called PDC. I’ve built small and large software on Microsoft technologies my entire career. I built a framework on top of Microsoft VBA. I started a company with a former Microsoft employee. I’ve contributed to Open Source Microsoft projects. I’ve built an e-commerce platform on .NET and IIS that has transacted over $1B and has endured the tests of time. My license plate used to be CEESHRP! My ties to Microsoft have been a big part of my career path. I understand how Microsoft works, and I understand what .NET is and what it’s not. I’ve heard from countless Microsoft naysayers, and defended Microsoft for decades. It’s been a tireless fight – and I’m not ready to give it up.
.NET is often misunderstood. It’s doesn’t only run with “expensive Windows licensing” and it is definitely not a big and slow monolith. It is a mature framework that runs on the big 3 (Windows, OS X, Linux) operating systems and is behind the fantastic cross-platform mobile app product, Xamarin. .NET has been cross-platorm for a while, and with the efforts of Mono, even runs on iOS and Android. .NET is indeed portable.
And recently, Microsoft did something really bold – they decided to open source .NET. From its mature and reliable lineage, .NET Core was born. Finally, the .NET Framework will be truly native, truly open source. The community can contribute to it and make it even better than it already is. This was a big move, a big announcement, and part of the “new Microsoft” that new CEO Satya Nadella has been building. The Microsoft developer community was buzzing with excitement over this. The rest of the developer community – a bit skeptical. After decades of closed source, these transitions take time. They don’t happen overnight. This was the beginning of something really, really right.
Flash forward from the announcement to today, about 18 months later. .NET Core is turning out to be AWESOME. I ported a few of my projects to RC2 easily, and one of the best parts about the experience was this very simple, project.json file that is at the root directory of every project. This file basically tells .NET Core which dependencies to include and how to output the result of a compile. It’s simple, it’s easy to read, and it’s aligned with the way many, many open source projects work. Open Source developers are used to this – a product, and a config file. Config, run, modify config, run again. Get it right, tweak, tune, rinse, test, push, deploy – REPEAT. This is the way we work.
Microsoft built this cool command line interface for the .NET Core Framework – the CLI. It’s what makes .NET Core as simple as:
$ dotnet new
$ dotnet restore
$ dotnet run
These commands use the project.json file and figure out what to do with code. What to do with all the C# and F# files that make up your project. Simple, elegant, and easy to understand and read. Everyone working with .NET Core has gotten used to it. It’s part of what makes .NET Core the “new Microsoft”. I was planning on blogging and extolling the virtues of .NET Core and how fun it was. But then something disappointing happened…
This week, I saw a tweet announcing a new blog post from the .NET Team, and was excited to see what’s new.
Changes to project.jsonhttps://t.co/Lytqwa7ID4
— .NET Team (@dotnet) May 23, 2016
I thought, “Uh, what’s this…?”. In reading this post, I had to consider for a second if this was April 1st and they were joking. I wish it was. So now, instead of doing a deep-dive on .NET Core goodness, I ask Microsoft…
Dear Microsoft,
This is it. This is your chance to go head-to-head with Node.js and all the developers using Javascript and cobbling together libraries. This is your chance to grow .NET into an amazing cross-platform, open ecosystem. This is the opportunity, right now, with .NET Core to build something the community will get behind. This is your chance for a new generation of programmers to be exposed to all the amazing ideas and methodologies you’ve spent decades building. It’s this. It’s this simple, little thing, this ONE file, this root of the beginnings of an idea that often starts with “Hello” and ends with “World”. It’s the thing that keeps it simple – like Go, which doesn’t even require a project file at all.
This decision you announced this week will be perceived as going back to unreadable XML .csproj throws the simplicity out the proverbial window, and will ruin all that you have built with the tooling around .NET Core. It won’t kill it, but it will severely limit it. It will turn people off and they will miss out. Tooling matters – a lot. I imagine that you felt the need to do this because to support complicated projects, the project.json structure would handcuff you. Maybe that’s true, or maybe it’s not, but either way, I see 4 solutions:
Option 1: Keep project.json, work around the complex projects, and make it work. Simple, or complex, depending on the size of the project. One file.
Option 2: Support BOTH project.json and myproject.csproj, and if both exist for the same project, display warnings or errors, and/or have different output assembly root targets for each project type.
Option 3: Stick to this decision to abandon project.json, and watch .NET Core grow slowwwwwly, and watch new frameworks rise up and pass you.
Option 4: Get Forked. The community outside Microsoft decides that this issue is forkworthy, forks the CLI, and preserves what has been built so far for project.json while keeping up with the rest of the runtime changes.
Option 3 is the beginning of the end. You may not see it now, but it will hurt you long-term. It will absolutely fuel the flames of the bad stigma Microsoft has in the open source community.
Option 4 is a question of Why? Why have two factions with different goals? That didn’t work out for io.js and Node.js, and it won’t work here either. It will spark mistrust, resentment, and the product will suffer. I really hope this doesn’t happen.I hope you decide to do the right thing and re-think this. Your long-term respect, adoption, and company growth are at stake. It may seem like a small decision now, but it’s these small decisions that have large impact. Look back on your own incredible history. Look within and you’ll find the answer right in front of you.
Sincerely,
Brett
This tweet should not exist. I hope they make it right.
Dear Mr. Drabek,
I first met you during my sophomore year as a Computer Science student at the University of Arizona in 1988, where I had my first class with you. I’m writing you to let you know how much of a positive impact you had on me. I’ve taken what you’ve taught me and built a career on the lessons I learned from you.
You were very strict, very serious, and I respected your skill, your style, and your knowledge. I remember focusing on what you had to say more than any professor I had. I didn’t want to miss a word.
I remember anticipating your class more than any other, eagerly wanting to learn all the cool things you knew. I learned a lot from you and it’s stayed with me – always.
One way you influence me every day is simply – coding style. You were very careful about teaching the “right” way to code and pointing out the wrong way to code. Your style still influences every line of code I write. I now use a code analysis tool, ReSharper, to validate my work and every time I look up at the indicator in the editor and see what it needs to fix, I’m always happy when I see it’s only one or two improvements. I feel like you made my brain ReSharp code as I develop it.
I came to you my senior year with an Independent Study project to write a Golf Handicapping Program on Microsoft Windows 3.0. The first thing you said to me was – “Everyone here thinks Windows is a toy and will never go anywhere”. I replied back, “Well sir, it’s not, I think it’s going to grow really fast”. Too bad I didn’t have any money to buy Microsoft stock back then, but you agreed with me and you let me do it. I remember showing you an early version of my work and the code behind Windows events and you nodding how clever it was. I remember seeking your approval so much so I was so nervous delivering the final version of the software, and after taking you through it, I finally got a smile from you. Moments like that could have gone either way, and who knows where chaos theory would have taken me had you not believed in what I was doing.
My success in that project motivated me in such a way, that 2 years after I graduated, after I moved to Silicon Valley, I convinced my company to port all the software from Motif to Windows, and I led the way.
In 1998, I started my first company, ememories.com, a photo sharing web site co-founded with fellow UofA CS alum Carlos Blanco. Once I got the company funded, I bought us an awesome new 8U server from Dell, and when giving it a hostname, of course, I chose to name it after you: DRABEK. Throughout the company’s life, all server requests flowed through a machine with your moniker proudly labeled in our data center.
Thanks for the impression you made on me. Thank you for the teachings you gave me. I really appreciate it and will never forget it. You’re a great man, sir.
Sincerely,
Brett Morrison, Class of 1991, University of Arizona
Brett Morrison – Official Site
Links
- Brett @ Facebook
- Brett @ Flickr
- Brett @ Github
- Brett @ IMDB
- Brett @ Keybase
- Brett @ LinkedIn
- Brett @ Nostr
- Brett @ X
- Brett via Google
Archives
- November 2022 (1)
- December 2020 (1)
- August 2020 (1)
- March 2020 (1)
- August 2018 (1)
- March 2018 (1)
- May 2016 (1)
- July 2015 (1)
- June 2015 (1)
- March 2014 (1)
- August 2013 (1)
- February 2013 (1)
- November 2012 (1)
- September 2012 (1)
- July 2012 (1)
- October 2011 (1)
- March 2011 (1)
- January 2011 (2)
- December 2010 (1)
- April 2010 (1)