In this interview, we talk to Scott Densmore about Microsoft’s CodePlex and the Patterns & Practice’s work on the Enterprise Library Version 4:
- Forking the Enterprise Library
- How Microsoft product teams are using the CodePlex repository for open-source code.
- How CodePlex is different from SourceForge
- Favorite CodePlex projects
- How CodePlex itself is community driven
Scott Swigart: We talked to some people in Patterns and Practices about the Enterprise Library, which is probably the biggest piece of color that Microsoft released under an OSI-approved license. I think, if I remember right, you had your own sort of fork of the Enterprise Library and were rewriting some pieces of it. Is that correct?
Scott Densmore: This is true, yes.
Scott Swigart: Talk about that a little bit. The Enterprise Library is out on CodePlex. P&P had gone a certain direction with it, and you decided to fork it.
Scott Densmore: When we built version 1 and version 2 of the Enterprise Library, we made some decisions. After a while you start thinking, "Maybe it’d be easier if we did things a different way." One of the things that came up a lot, just reading the forums and talking to customers, was why don’t we have a container model? How do you manage the dependencies between these libraries?
When we designed it, we thought about how to do dependency injection. Dependency injection has a lot of different pieces, and one of the ways you can do it is through factories. That’s the way we did it in Enterprise Library 1 and 2.
After that, I started thinking about some of the stuff we did in CodePlex and some of the things that we did with Object Builder. I started wondering how we could put a container in here and have all these libraries tied together through some container mechanism, rather than through all these configuration files and factories.
I wanted to make a proof of concept and build a container on top of Object Builder, and use that container to tie all those libraries (caching, loggings, data access, etc.) together through that container. Instead of having huge configurations and having all those dependencies managed through a configuration file, I wanted to do it through a container. That would make it easier to plug in and out different implementations of logging, for example. If I wanted to use something different than what comes with Enterprise Library but still wanted to use some of the Enterprise Library functionality, I could do it with a container. That was the basis of having that fork of Enterprise Library.
After going through a couple of alterations, I also wanted a way to implement the container and not change the external API of Enterprise Library. This wouldn’t break people who are using the Enterprise Library, but it would let you use it inside the container. The container would be an independent thing.
Scott Swigart: Because the Enterprise Library was open source and was available on CodePlex, anybody could have done this, right? The work you were doing on the Enterprise Library you didn’t have to be a Microsoft employee to do. Anybody could go out there and make a fork and maintain it, and even try to build community around their fork.
Scott Densmore: In my first version, I basically did a rewrite to remove a lot of the factories and make it smaller. And I had a couple of people who were very interested in that and used it, saying this was an interesting way to solve the problem.
I have also talked to other people who’ve said, "Oh, we did this too, and we forked our own version." Anybody in the community can do this. You don’t have to be a Microsoft employee, although some of the Microsoft teams that use the Enterprise Library have forked it and maintain their own version.
Scott Swigart: Now you’re back with Patterns and Practices and working on version 4. You’ve said you hope this will be the last version, because ultimately you just want it to be part of the platform. You want it to be part of the .NET framework class libraries, I am guessing.
What do you think is the advantage of doing it that way versus the other direction you could go, which is that it stays a library and actually becomes owned by the community and would have committers on it who aren’t Microsoft employees?
Scott Densmore: When I say that it should be in the platform, I think there are two pieces that go into that. I don’t think everything will go into the platform. I think it is interesting to have the platform own the infrastructure pieces that make it easier to build these assets. But the assets themselves I would love to see out in the community, and to have them be built by the community. It would be interesting to have the community own it because they are the ones working with the Enterprise Library every day. We here at Microsoft build it, and we use it, but we don’t necessarily use it in the same way as our customers do.
They would actually be able to contribute to it more often than the Microsoft plan probably allows us to. We have a cycle we have to ship on and we have commitments that we have to keep. It is much easier for the community to do that themselves and be able to drive it themselves than it is for us to do it.
We can provide the infrastructure to make it easier for them to drive it, but I think it is awesome that they can drive it themselves. When I say I don’t want to ever do another version of Enterprise Library, I envision it as driving some of the infrastructure into the platform, and then letting the community take the rest of it on.
Scott Swigart: I don’t think Microsoft has ever done what you are talking about. On the one hand, companies want to have community involvement in their stuff, but on the other hand, they don’t necessarily want to lose control over it.
If you take a look at something like the Linux kernel, you will have employees at IBM, Red Hat, and other places who are staffed full time writing code. But it is not entirely up to them whether or not their code makes it into the kernel. It has to pass this community bar, it has to pass the bar of these maintainers, who probably aren’t IBM or Red Hat employees.
If you look at the way an Apache project is governed, for example, each of the 60 Apache projects has to have maintainers from at least three different companies, so that no one company ultimately owns it.
If you take a look at the way that Sun does it, on the other hand, it is exactly the opposite. For some Sun open source projects, the governance documents say that it has to be controlled by Sun employees. If those employees leave the company, then the people governing the project would be replaced by people who work for Sun.
Across open source projects, there are a lot of different ways that projects can work. Can you foresee a day when projects like the Enterprise Library have people in Microsoft who are contributing to them but the actual maintainers might not be Microsoft employees? They might actually be people in the community, people in other companies who’ve invested in this, and so Microsoft would just be a contributor like everybody else.
Scott Densmore: That is hard to say. It would be nice to see that, but unfortunately, since I am not a lawyer, I don’t know all the realities of it. I don’t even play one on TV. But I do believe that there is this idea that Microsoft can help foster the community.
I think Microsoft can help foster that and help put that in place. Microsoft could help recruit some of those people, just like we have the MVP nominations. That could help build a community around these projects and we could say that these people are probably the best initially at governing the project.
The project gets started, and it is put out there, and we need to think about how you build the community and get everybody involved, and make sure that everything is up and running. As you send it on its way, it is not going to just fall on its face. Or if it does, it happens on the merits of the project, not because you didn’t give it a chance.
Scott Swigart: There are a lot of examples of that, where people just throw the source code out there and say, "Well, we hope somebody in the community picks it up," and nobody does. There is definitely a right way to do those kinds of things.
Let’s switch gears. We mentioned CodePlex, but talk about it more broadly for people who don’t know what CodePlex is, don’t know what kind of a playground it provides for people interested in working on open source projects.
Scott Densmore: CodePlex is a great collaborative development environment. CodePlex is a way for you to go out, start a project, and then try to build a community around your project. You can interact with other projects that are on the site and be able – through tagging, your forums, and other things – to build that collaborative environment.
For example, if I want to start a project, I can relate it to another project through my own taxonomy of tagging. I can let other people contribute to it. There are no ads on CodePlex, it is not like SourceForge with ads. Not that ads are a bad thing, but CodePlex is just clean and easy to use.
CodePlex is big about building the community around your projects. That is the biggest focus you see. CodePlex itself is very community-driven. I think the greatest thing we have is that I can create an issue, and then people can vote on it. CodePlex really listens to those, and that is what drives the site. If you put something out there and people vote on it, we look at that and say, "Wow, people really want to have this feature; we should do this, because it is the highest voted item."
Sean Campbell: What are some examples where CodePlex has influenced official Microsoft products?
The product groups are still learning how to do this, but they want to build a community around their products, and around some of the things that they ship out of the regular release cycle. Look at the AJAX Control Toolkit. They have people who are non‑Microsoft who commit to the toolkit. People download and use that the toolkit everyday.
They also have Microsoft people here in Redmond looking at it, triaging issues and monitoring the forums. They built a successful community around the AJAX Control Toolkit.
Sean Campbell: It is rare to find a project that is completely disconnected from anything that came before it. There is some level of inspiration from what existed before.
When you guys started CodePlex and you looked at something like SourceForge or Google Code, what did you look at and say, "That would be great to emulate, but this thing I don’t think they’ve done so well, so we’ll take that in a different direction"?
Scott Densmore: When you look at SourceForge, and there are other things like Collab.Net, one of the things that you think about is user experience and navigation, and what are the features that drive you most.
One of the things that CodePlex wanted to do was keep it simple. That’s what everybody always says, but we wanted to keep it simple enough and provide useful features. When we looked at SourceForge, we decided we didn’t want a bunch of ads. We wanted something that allowed you to showcase your project, and have feature requests, and let people log issues around the project. How do you do that in a way that’s easy to use?
We were using Team Foundation Server. That lets you connect right from the Visual Studio IDE. We have other clients that connect to TFS. There are even ones that work on Linux and Mac. There’s also a command line TFS client for Windows.
We wanted to let people vote for features. We wanted to provide an easy place to put the releases that was easy to manage. We did simple things with the UI that made the site much easier to use. We have people who come to the site saying, "Hey, I’ve heard this is a cool project. I’m not necessarily a contributor. I’m just a user. I’m going to come to CodePlex to find it. I can get to the default release, and I can easily find the one I’m looking for." Project owners have the ability to customize the text for their project. They have a wiki for the contributors and the coordinators of the projects so that they can talk about their project.
Sean Campbell: Where do you think CodePlex hasn’t quite achieved the level of success you think it could? What’s the next step for CodePlex?
Scott Densmore: I think one of the things that would be nice is a community around CodePlex and the UI itself. I think there are even better ways we can go about making it simple. People still get confused and ask, "How do I go to a project and post something to the forum for the project? When I come to the home page of CodePlex, I don’t really know how to get to the project." It’s amazing the amount of questions you will get about Ent Lib, or the AJAX Control Toolkit, that get posted to the actual discussion forums of CodePlex itself.
Sean Campbell: So it sounds like it’s a discoverability piece.
Scott Densmore: Right. So making that experience better is key. I think the other thing is building the community around CodePlex itself: how do you get coordinators and developers in touch with one another, how do you build that community? If I am a developer and I am looking for projects to work on, how do I find one? Who do I talk to and what do I do?
I think there are different kinds of personas, classifications of people, who use open source. There are the people who start a project. There are people who want to contribute to a project. There are people who lurk around projects. There are people that just go, "Oh, this project does what I need. I’ll just use it."
So how do you build a community around that? Maybe CodePlex could have an online chat, or let you view the availability of people on the project. Maybe you could use CodePlex and say, "Hey, I’d like to work on a project, or I would like to start a project. Who would be willing to help out?"
Sean Campbell: What are some CodePlex projects that have caught your attention?
Scott Densmore: There are two projects that I was blown away by. One is called the Vista Battery Saver. Some guy went through and found all the services and things that, if turned off in Vista, help save battery power on your laptop.
Sean Campbell: I came across that project when I was reading a post where some guy was complaining about the fact that Vista just soaks up the battery when you run it in boot camp on a Mac.
Scott Densmore: It just organically grew, and it was the most popular project for a couple of weeks. It’s still very popular. That one just blew me away. It is something very useful for people, but it is not something that is like an AJAX Control Toolkit. It is not something that is true software in terms of what I do day to day. It is more of an end-user thing. It is not something I would have thought would have ever made it up on CodePlex, but it did, and that is cool.
The other one is – I am sure you’ve heard of this game called World of Warcraft?
Sean Campbell: Oh yeah. [laughs]
Scott Densmore: They built a Visual Studio package for writing World of Warcraft add‑ons. A Microsoft guy in the DPE put this package out there, and I was like, are you kidding me? I can’t believe this. It is just not something you would expect to come from Microsoft.
But there is a developer community out there for writing LUA. World of Warcraft isn’t the only thing that uses LUA. This guy built a package for the Visual Studio IDE, for LUA scripting. There are a lot of open source projects that are LUA based. For example, there’s WowAce, where you can get a lot of LUA scripting for
World of Warcraft. They built in pieces for using the WowAce libraries in this Visual Studio package.
Sean Campbell: These seem like precisely the types of projects that would be somewhat difficult to incubate inside a pure closed source development environment.
I mean if you look at the power management project, that’s potentially difficult because Microsoft has OEM partnerships, you have issues with discussing the sanctimonious nature of battery life on a given platform and how many hours it really has. In Warcraft, that one is a little more obvious, right?
You’re not going to take some dev’s time, even if they are working on Express or some kind of community-facing product, and say, "Go build this plug‑in for Warcraft." It seems to me that’s a benefit Microsoft gets from having an open source portal attached to a closed source company.
Scott Densmore: That’s exactly right. I think if you look at the add‑in for scripting for World of Warcraft, it’s not something that Microsoft is interested in doing. But the fact that someone is doing it helps promote Visual Studio as a platform for doing these types of things.
Scott Swigart: How much does the community influence the way CodePlex itself is going to get enhanced and the features that are going to be added?
Instead, we built command line clients, and you don’t have to have Team Explorer installed to use those. We actually built a thing called subversion bridge, or SVN bridge, which basically allows you to use the subversion client, but it will take the SVN commands and convert them into something TFS understands, so you get the best of both worlds. That’s an ongoing project we’re doing so that people who are interested in using SVN can still use it. As people vote on issues, we just take the highest voted issues, or if they are bugs or anything else like that we look at that and use that, bring it in, fix it, put it out. And since we release on a three-week schedule, that’s kind of how the pace goes; every three weeks this is what we do.
We also look at other things, like how people are using CodePlex, and how we can help them be more community‑driven and build more community around their projects. We try to do that every day. We look at that, think about it, and try to come up with a solution for it. By having a release every three weeks, if we make the wrong decision, well, we can fix it in three more weeks.
Scott Swigart: Right.
Scott Densmore: It’s not something that happens every three years. We are going to make mistakes and that’s OK, but I think we’d rather have people give us feedback on an ongoing basis than having them give us feedback and wait five years.
Scott Swigart: What are some examples of surprises? I’m guessing there’s got to be times when people on the CodePlex team think, "Wow, I had no idea so many people would have wanted such and such a feature, but it looks like people really do, so let’s work on that."
Scott Densmore: In the beginning, we exposed everything through RSS, and it’s amazing that people like mailing lists better than RSS. People want mailing lists. They want to be able to do digests and everything like that. I guess we just assumed that everybody was RSS-happy.
We got a little RSS-happy ourselves and came to find out that it was not the right decision, so we’re working on that and trying to integrate mailing lists with the discussion forums. We have a simplified version of that right now; it’s not the greatest in the world, but we wanted to get something out there. And again, we like to get these things out there so people can use them and give feedback on them, so that we can fine-tune the direction we’re going. One of the things that surprised us was that RSS wasn’t as popular as we thought it was.
Scott Swigart: Any final thoughts?
Scott Densmore: I would like to see Microsoft foster more community. I think we are doing a better job. We haven’t hit the sweet spot yet, and I don’t know exactly what that is. It’s kind of one of those "feeling" things. Once we completely get there, we will know it.
But I feel like we are moving in that direction, and I would really like to see us build even more community, because it is about the adoption of the platform. How do you get people out there excited about something, and then with CodePlex, how do you build infrastructure that helps people run projects and build their own community? CodePlex is getting better at that all the time.
Scott Swigart: Thanks for taking the time to chat.