The Changelog: Software Development, Open Source - .NET, NuGet, Open Source (Interview)
Episode Date: March 16, 2012Wynn caught up with Phil Haack to talk about NuGet and growing the .NET open source community at GitHub....
Transcript
Discussion (0)
The Change Log was brought to you by Pusher and they're looking for a system engineer
specializing in evented systems.
Send your cover letter, CV, and your GitHub profile to jobsatpusher.com. Don't push me away! And head to github.com slash explore. You'll find some trending repos, some feature repos from our awesome blog,
as well as some audio content from this podcast.
If you're on the Twitter, follow the changelog, not changelogshow, and also Adam Stack.
And I'm Penguin, P-E-N-G-W-I-N-N.
Fun, fun episode this week.
Talked to Phil Hack over at GitHub about.NET and the open source,
broader open source community that.NET has
and how to get those folks plugged into GitHub
and kind of merge these two communities.
We also did a circle back on NuGet.
Or is it NuGet?
You know, he pronounced it NuGet.
I'd always said NuGet in my head,
so maybe that's just my inner craving for a candy bar. I'm not sure. But package manager for
.NET, which every language platform kind of lives and dies
by the strength of its package management, so it's nice to see.NET
maybe catching up with some other communities around
package management. Yeah, certainly it's fun to see GitHub, too, embracing
the wider spectrum of open source,
not just, I guess, the usual suspects, as you say.
And we talked about that.
Right now, C Sharp's the number 11 most popular language on GitHub,
and Phil's mission is kind of to increase that a bit.
One of the challenges is just how to spell C-sharp and.net.
Okay.
Both involve punctuation, and so getting those into indexes
and search engine optimization is a bit of a challenge.
But it's number 11 right now.
His goal is to get that in the top 10.
In the top 10.
All right.
Well, sounds like a fun episode.
You want to get to it?
Let's do it.
Chatting today with Phil Hack, recently to GitHub, about.NET and open source.
So, Phil, for those that don't know you, why don't you introduce yourself?
Hi, I'm Phil Hack. I work at GitHub as a Windows badass.
At least that was what was on my offer letter. But I'm primarily focused on making Git and GitHub better for Windows developers or developers on Windows.
And I also was formerly at Microsoft where I worked on ASP.NET MVC, as well as NuGet, among other projects.
But those are the two big ones that I was responsible for.
What's the move to GitHub meant for you personally?
Well, I get to work from home, which is really nice.
And they had this philosophy of optimizing for happiness.
And moving to GitHub was a good way for me to do just that.
And I really like it a lot.
What's been the biggest challenge of promoting open source and.NET that you found
prior to being at Microsoft and with GitHub?
So before joining Microsoft, I think one of the big challenges was just getting
developers to care, right? Like a lot of developers just care about if it's free from a financial standpoint.
But a lot of times they don't realize that there's actually a different sort of freedom or free that's actually really important,
which is the ability for them to take the code and make modifications.
But also just in terms of businesses, I think
there's a lot of fear and there still is a lot of fear, but there's a lot of fear that, oh,
if I use this library that's open source, am I going to set myself up for major problems?
And if you're not careful, that could happen. But a lot of times what I've seen beforehand,
especially now, is a lot of these companies don't even realize that the developers are already
using these libraries. In the.NET space, for example, there's Log4Net,
which is modeled after the Log4J
Java logging library. And that library just
alone is probably in nearly every code base. And, you know, that library just alone is probably in nearly, you know,
every code base. And a lot of these companies don't even realize that their employees are using
open source. And, you know, what I'd love to see is for them to realize that and start contributing
back and not realize that and say, oh, well, we got to get rid of this.
One of the, I guess, biggest catalysts for sharing open source code is
just a package manager. So talk a bit about NuGet and what it's meant to sharing.NET open source.
Sure. So NuGet is a package manager for.NET and Windows developers. And its primary focus, or the thing that everyone thinks about,
is a Visual Studio add-in.
And so for a lot of.NET developers,
that's their primary way of doing development.
And what it does is it makes it really easy
to incorporate code into your project or solution.
And the problem it solves is that prior to NuGet,
for a lot of people, when you wanted to use a library,
it took a lot of steps.
You'd search around all over the web.
You might find a library.
You then have to unpack it from, you know,
it's usually zipped up, so you unpack it.
You copy the assemblies into some folder in your project,
and then you go to the add reference dialog and add a reference to it.
And so there's a lot of manual road steps, and we wanted to really automate all the steps
that people were pretty much doing anyways, and try not to change the workflow too much,
but automate all the ugly steps they don't care about.
The nice thing about NuGet, though, is that it itself is fully open source.
It's under the Apache v2 license, but it's also developed in an open and collaborative manner so that the project accepts contributions.
And for example, and other people have taken it and built really interesting
products on it.
So while Visual Studio is sort of the primary experience, there is a command line, nuget.exe,
that doesn't have any dependencies on Visual Studio that you can use outside of Visual
Studio.
And folks like the Sharp Develop folks, they a plug-in for Sharp Develop that understands NuGet as well.
And there's a lot of other things as well.
What sort of support has the project gotten from Microsoft, if any?
Well, it was started at Microsoft as a Microsoft project.
And it was handed over to the OuterCurve Foundation.
The OuterCurve Foundation is an open source foundation,
much like Eclipse or Apache,
to be the stewards of the project.
So what's nice is that Microsoft has continued to contribute the time of some of their developers and a program manager over there on NuGet.
So they have full-time dedicated staff working on NuGet.
And the big thing is that in the next big version of Visual Studio 11 that recently came out, the beta recently came out,
NuGet is a core piece inside,
let me rephrase that back up.
In the Visual Studio 11,
their next version of Visual Studio,
one of their flagship development products,
they've incorporated NuGet into the product.
So it's already there when you start doing development with Visual Studio 11.
So they've really embraced NuGet in a big way.
There's two hard problems in computer science.
I guess it's cache invalidation and naming things.
What impact is C Sharp and.NET both containing punctuation, do you think has made it harder to find.NET and C Sharp resources on the web?
Yeah, I've never been a big fan of Microsoft's naming strategy, except for maybe the Xbox, but even that has those problems. The good news is that I think Google and other search engines
have handled that pretty well,
because initially you couldn't even do a search for C Sharp,
if I remember correctly, way back when.
But for the most part now, you can,
and a lot of people have worked around it by naming their projects
by spelling out the dot in.NET or by spelling out the sharp in C Sharp.
So I don't know if that's been such a problem.
I mean, I think NuGet makes it even easier now because there's so many libraries within the NuGet gallery, the online portion of NuGet, that if you go there, you can quickly find the library to do just about anything you need. The reason I ask that, I'm looking at C-sharp's the number 11 most popular language on GitHub at the URL github.com slash languages slash c%23.
And half of these have C-sharp spelled out or.NET spelled out in the name of the project.
But number 11, that's actually quite surprising.
Is it your goal to boost that, get a little higher?
Oh, absolutely.
Yeah, I would love to see C Sharp much higher up on that list.
I think in terms of overall developers, C Sharp is much higher than that.
If you look, if you trust the, was it Tiobe or Tiobe? I don't know how you're-O-B-E or T-I-O-B-E?
I don't know how you're supposed to pronounce it,
but the T-I-O-B-E index.
So I'd love to see at least C Sharp
be representative of that.
And I think the.NET landscape in open source
hasn't necessarily been as rich
or seen to be as rich as, for example, the Ruby or Java open source communities.
But there's actually a lot of interesting good stuff going on in the.NET open source community.
And hopefully, as we continue to make using Git and GitHub easier for Windows developers, we'll see more of those developers realizing that GitHub is a great place to host that code. What are the current challenges
for both GitHub and Git specifically for Windows
users? Well, I think Git specifically
my co-worker has this phrase that he likes to use
death by a thousand paper cuts.
Line endings is probably one of the biggest things
that's a challenge when you're using Git on Windows
versus Git on the other platforms,
just dealing with line endings.
But there's also, you know,
there's not a real good place for,
just getting started with Git on Windows
is a little bit of a challenge.
And so, you know, we hope to make that just effortless.
As for GitHub, GitHub and Git kind of go hand in hand.
So once you're comfortable with Git, I think GitHub is a great place.
I don't think there's a lot of barriers to C Sharp developers or.NET developers on GitHub.
The one thing that might be there is one you know, one thing we could do better,
and I don't know, we might have done this recently, but for example, a lot of the examples assume
you're on a Mac or Unix-based operating system or in a Bash shell. So, you know, if we can detect
that you're on Windows, you know, maybe we give you commands using, like our examples might adapt
to what you're doing.
Those are some of the types of things that I think we could do to make it even friendlier.
But for the most part, we've seen pretty good uptake in.NET developer projects coming in GitHub, as far as I can tell. Are you guys working on a Windows client, a lot of your Mac client?
Yeah, we're working on something.
No comment.
Yeah.
We're working on
some tools to make
it easier to use Git on Windows
and with GitHub.
Yeah, since joining GitHub,
one of the things I've learned is
there's a phrase some of my coworkers like to use
that they prefer shipping software
than talking about software that hasn't yet shipped.
So we've been a little bit mum on in terms of specific plans.
But I think it's probably okay to say that, yeah, we're working on something.
So when you have a product called GitHub Enterprise, it kind of, I guess, casts a bigger net in the, I guess,.NET world inside the enterprise
than just your regular public-facing application.
Are you focused on any enhancements to that platform for Windows users?
I personally don't work on the GitHub for Enterprise,
so I don't really have any specific knowledge on that plan.
I mean, I think it would only make sense to make sure that it works great for both Windows and
non-Windows developers, but I can't speak to anything specific. Any.NET projects on GitHub
that have you really excited?
Oh, yeah, there's quite a few.
So one of the ones recently that I've been really into is called SignalR.
So Signal, and then with an R at the end, it's kind of a very Web 2.0 name-ish.
But it's a framework for.NET developers,
and particularly in ASP.NET developers, but where you can have persistent connections to the server.
So it allows you to have persistent connections to the server from the client.
And so you can do things like, from your browser, make a JavaScript call to some method on the
server, a server object, and that method on the server
can actually call methods back on the client.
And there's a really cool chat client
that was meant to be sort of a proof of concept
called Jabbr, J-A-B-B-R,
which, not to be confused with Jabbr,
the ICMPP chat client.
But if you go to jabbr.net, there's a website there,
and it's a showcase for using SignalR to do multi-person online chat.
And the interface is a lot like Basecamp, sorry, Campfire,
if you've ever used Campfire.
It's pretty cool.
That's one of the projects on there.
I mean, there's a lot of others.
Another project that I think is pretty interesting
is NancyFX, or just called Nancy for short.
And it's a Sinatra-like framework
for.NET developers.
I don't think it actually has any dependencies on ASP.NET,
but at least for me, web development on.NET developers. I don't think it actually has any dependencies on ASP.NET, but at least for me, web development on.NET tends to be synonymous with ASP.NET,
but in this case, it's a lightweight web framework.
And there's a lot of cool web frameworks that are up on GitHub these days.
So there's like NancyFX, there's OpenRasta, Fubu, MVC.
So there's really cool stuff going on in that area.
Checking out Nancy, you'd be shocked how many times on this podcast we've said Sinatra-like or Sinatra-inspired.
That is such a forward-looking little framework that's launched on how many copycat frameworks
or at least inspired the DSLs of other frameworks.
But on Nancy in particular, does it have dependencies on IIS?
No.
So I think the whole point of Nancy is not to have dependencies on IIS.
And in fact, that actually reminds me of another project in GitHub that I
can't believe I just blanked on it, but it's OWIN, O-W-I-N. So OWIN is a, it's basically
a dot, I wouldn't call it a port, but basically a.NET port of the rack from Rails.
Sorry, rack from Ruby.
Right.
Not everything Ruby is Rails, right?
That's correct.
And the whole point of that is to abstract the interface of a framework versus the host provider. And so I believe Nancy has OWN support built in as well as a lot of these other open source,
lightweight web frameworks that are coming out in the.NET space.
And so that removes your tie to not only ASP.NET, but your ties to any specific web server.
So while there are OWN implementations that run with IIS. There's OAN implementations that run with other web servers like
Mono the Dios or I think
gosh, I can't even remember some of these, but there's a lot of
open source web servers out there too in the.NET space.
In the last, I think, year or so, it's
really exploded.
This whole area of not only lightweight web frameworks,
but lightweight web servers all built in.NET.
So really cool stuff.
Yeah, it's funny.
You mentioned earlier Nancy being kind of a spinoff of Sinatra. The whole name is after Frank Sinatra's daughter, Nancy Sinatra.
So I thought that was clever.
We talked about Sammy J.S. on the podcast before, too, and it was an homage to Sammy
Davis Jr., part of the Rat Pack.
The Rat Pack.
Is there a framework called Rat Pack?
Because if there isn't, we should write that right now.
It's a meta- meta framework, I think.
So, you know, I was a.NET developers all that often
until two, three years ago.
It seems like there was an influx into our circles of.NET folks
where we kind of met on the front end when jQuery became adopted
sort of in the Microsoft community,
and now Backbone's starting to get an uptick.
What has it meant for Microsoft as a community
to latch onto open source front-end frameworks?
I think it's just a recognition of where the web is going.
You know, it's really interesting that you mentioned there was an influx of.NET developers into jQuery.
And we, when I was at Microsoft as part of ASP.NVC, I forget, I think it was version one.
In fact, we shipped jQuery in the box and basically sunsetted our own,
or at the time, our own AJAX library, what was called, codename Atlas.
Right. Just like the CLR ported to JavaScript almost.
Sorry, what? Yeah, yes, that's right. That's right.
It's basically an object model,
you know, very OO oriented.
And it was called Codename Atlas,
but of course, you know,
Microsoft had to give it a name of Microsoft AJAX framework,
whatever.
But it was really interesting to me
that I would get approached afterwards
from a lot of developers who would say, you know, thank you for shipping jQuery in the box because now we're allowed to use it at work.
And it wasn't so much that they weren't allowed to use open source or maybe that their employees didn't realize it, which is kind of sad.
But it was that if it was shipped by Microsoft,
it had their employer's blessing.
And so by including these things in the box,
more and more developers had the permission to use them.
And what will be interesting to see is if NuGet being in the box with Visual Studio 11 has a similar effect where it's almost like this back door where
these developers can now install these components and say, well, I just used Visual Studio to
get these things into my project, and my employer doesn't care.
Now, for a lot of employers, that might sound like a scary thing, so I would encourage people
to be careful and read the licenses and make sure you understand the implication of
the licenses you use.
But I also think it's a really good thing that hopefully it sort of reduces the fear
of using these types of components.
But going back to your original question, yeah, I think it's a recognition of where
the web is going that the web is becoming more and more rich in the client where old ASP.NET
web forms, I'm sure you're familiar with that, really have this concept of
mimicking state by shipping the data, the state of the
control, so to speak, back and forth between the server and client.
But more recently, what you realize is
really quick, speedy, interactive websites
keep all the control state in the client via JavaScript, right? So you have all these JavaScript
widgets, and then you just need to make these lightweight service calls back to the server.
And I think that is part of the reasons why you're seeing this proliferation of lightweight
web frameworks is because
they don't really need to do
all this stuff of rendering UI. They just need
to return JSON
back to the client and let the client
handle the UI thing.
And the other aspect
of that that I think is really great is just
I really like seeing
this intermingling of different
communities because I think when
these different communities tend to isolate themselves, they're missing out on a lot of
good ideas from other communities and vice versa.
So I think by sharing these ideas and intermingling, we get the best of both.
And it's one of the things I really like working at GitHub.
I had known that GitHub was a Ruby shop, but I didn't realize they were doing any kind of.NET development.
So when I joined, I was a little hesitant, wondering if these Ruby guys are going to make fun of me all the time or whatnot. learning new things and values technology in a sort of agnostic way where, you know,
I would learn some cool things that they're doing that Ruby does that I didn't maybe realize.
But at the same time, you know, like my coworker and I would talk about some of the cool things
in C Sharp that you don't really have an equivalent in Ruby that they were like,
oh, that is really cool. They're able to recognize that.
And that's why I'm a big fan of conferences like the NDC or AuraDev where they get a bunch of these different people together
from different communities and say, hey, let's all hang out,
give talks, and intermingle.
I want to take a moment to talk to you about Hover.com,
our latest sponsor. You can go to Hover.com, our latest sponsor.
You can go to Hover.com slash the changelog, and you'll get 10% off domain name purchases.
They provide domain names, easy DNS, super simple, and even email management if you need that as well.
They actually have this service called Valet Domain Name Transfer. And we recently moved 30 or more domains, something like that, over to Hover.
Super easy.
We picked up the phone.
We called their 800 number, 866-731-6556.
And we talked to a human being.
And that person walked us through the entire process of doing it, which took about five minutes.
So it's not even an entire process. But they hold your hand the entire process of doing it, which took about five minutes, so it's not even an entire process.
But they hold your hand the entire way.
They move all your domain names over, get all your DNS set up,
everything set up, like your MX, whatever you have, anything in there,
they're taking care of it.
They let you go in and approve and review whatever's going on
before they actually pull the trigger, and boom, you're moved over to Hover.
Now that valet service is absolutely free.
Now, of course, there's fees that are associated with moving your domains,
and that's just the norm, so you do have to pay those,
but you're getting 10% off with our code, so that's awesome.
So go to hover.com slash the changelog and enjoy.
What are some of the ideas from.NET or C Sharp in particular that you think are great
that the broader community could benefit from?
You know, many of these ideas, as soon as I say something, I'm sure a lot of people
say, well, that isn't old.
But I think link, the language integrated query is pretty cool within C Sharp, especially, for example, how they integrate that into going over, providing a consistent interface for link over objects, link over SQL, and then link over XML.
The other thing that I think is really interesting is reactive extensions. And this is a concept that's
finding its way not only in C Sharp, but they've also come out with JavaScript libraries. And
if you're familiar with how enumerations work in C Sharp, you've got these two interfaces,
IEnumerable and IEnumerator. And it's the way you can easily enumerate over a collection.
And reactive extension sort of reverses the polarity on that.
And so rather than enumerating over things, you have this concept of subscribers and observables.
And so like an observable over a stream of incoming events or incoming messages from some other place,
and then you can call, hand it a subscriber, and then you can build up these link expressions that describe, that are very declarative and describe what you want to happen with all these incoming messages.
For example, you know, one of the classic examples is if you were trying to implement something like an autocomplete,
there's actually quite a bit of code if you think about implementing it in a traditional way of,
well, if someone types real fast, you kind of want to not send off the service calls for every single key press.
You kind of want to throttle them.
And so with reactive extensions, that's actually really easy because you just say
you know create an observable from this event stream dot throttle specify a time and dot
subscribe and then do something and so um you've built up this structure that's very declarative
describing what you want to happen not how to do it. And then it just handles all of that for you.
It's taken me quite a bit of time to sort of wrap my head around the implications of that
because it actually kind of hurts your head at first when you first start playing with it.
But I'm starting to get the hang of it a little better.
And once you do, you realize how beautiful that sort of thing is.
Are you seeing any sort of developments in C Sharp and.NET communities for vented or async programming like we're seeing in other frameworks?
Yeah, I think you'll see a lot more of that with the next version of C Sharp, C Sharp 5.
The await keyword is one of the big things coming out, which allows you to write code in somewhat of a synchronous fashion,
but not block the thread when you use the await keyword to call something that's task-based or truly async.
So I think with that, a lot more people, writing async code will be accessible to a lot more people. I think reactive extensions is also, you know,
it may play a big part in that.
It's not quite gotten the notice or popularity in the C-sharp community as it probably deserves yet.
But I think as, you know, people try to write async code
and run into all the different race conditions
and problems that you run into, you know, reactive extensions kind of solved a lot of those things so that you don code and run into all the different race conditions and problems that you run into.
Reactive extension has kind of solved a lot of those things so that you don't really run into race conditions as much.
Your code might not work or it might work,
but you won't run into a lot of those things
if you follow the patterns that they supply.
So I think that's a big area.
And especially in the JavaScript realm
where web developers are going to be writing
more and more JavaScript, and they're going to need to understand how to do a lot of things
async so that they don't block the browser.
Was it a culture shock moving from Microsoft, and you mentioned earlier the naming of the
Atlas project, to the culture at GitHub?
A little bit, yeah.
I think, but in kind of a good way.
I think I had read pretty much every blog entry
from their blog and a lot of the writings
of some of their people.
So I sort of knew what to expect.
And I've worked from home before,
so I even kind of knew what to expect.
But even so, it is kind of,
I was telling some people the other day
that when they say that nobody's kind of watching you,
seeing how you're spending your time
or are you in the office in certain hours,
they really mean that.
And I think for many people at Microsoft,
they have sort of that culture.
But the other thing people at Microsoft, they have sort of that culture. But the other thing is, at Microsoft, they sort of fill your day with so many meetings
that you're really not in control of your own schedule as much as you'd like to be.
Whereas at GitHub, you know, when they say we don't have meetings, they really mean that,
you know, there's really, you know, no, like, meetings at all. Hardly. I mean, you know no like meetings at all hardly i mean you know sometimes we meet to hang out and
stuff but i mean there's no you know concept of oh let's call a meeting invite a bunch of
uninterested people you know together and waste everyone's time you know instead you know we try
to keep all the communication async via you know online chat um and uh I think that has really freed up so much of my time, whereas instead of
spending my time in meeting, I'm actually spending time getting things done. And to me, that was a
huge culture shock. I remember the first few days of working, I was just exhausted by the end of,
you know, by five o'clock, simply because, you know, I spent all day working instead of sitting
in a meeting. So I think I'm the opposite. If I'm in meetings all day, I'm drained.
But if I'm creating and shipping, I leave the day feeling a little bit more fulfilled.
You mentioned the online chat.
I know you guys use Hubot.
You got a favorite Hubot script?
I'm trying to think which ones can I talk about.
Yeah, we have this one called Potty Mouths.
So it kind of tracks how many times different people have said a swear word in the chat room.
And I'm always in the top 10, but not quite near one or two.
So I've been working on that.
That's great.
My favorite is the sweet and dude from Dude, Where's My Car?
Type sweet or dude, it tells you the opposite with an
exclamation mark. I'll have to try that.
That one, the Mustachify Me was also pretty great. I'm still amazed
at its ability to put a mustache on any random photo that you
drop into HipChat. Yeah, that one's amazing.
Someone posted, we had a
company photo in our last summit and someone posted it into the chat room and it auto
mustachifies any photos of people that you post in there and to see like all these tiny little
mustaches on everybody was pretty pretty darn cool did you move to the Bay Area for this game? No, I still live in
Bellevue, Washington, so I'm like a couple miles from Microsoft
campus. My family really likes it up here, so we decided
not to move down. Any other GitHubbers in your area?
Yeah, there's one new one who lives in Seattle, but
I think there were two others before,
but they've both moved down to San Francisco.
All right, we've already covered what open source
that you're following on GitHub.
Did you see how we closed out episodes?
Another question that a lot of times we'll ask at the end
is we put you on the spot to ask
who your programming hero is.
Good question.
All right.
Well, he's a friend of mine.
So, you know, there's,
I'm going to pick someone
that isn't like world famous.
Although there are like a lot of,
I'm sure plenty of world famous
open source developers.
But a friend of mine, David Fowler,
he's a developer at Microsoft,
but he pretty much wrote a huge amount of the core of NuGet.
He's also a developer on SignalR and a developer on Jabber.
And so a lot of the cool stuff that I mentioned, he was the key developer working on that stuff.
So if you ever work with him, he's just quality.
David Fowle on the Twitter.
We'll be sure and put it in the show notes.
Yeah, yeah.
Well, we're excited to help us find some.NET out in the GitHub area to feature on the changelog.
Phil, thanks for coming on the show and talking about.NET and open source.
My pleasure. Thank you very much.