Open Source
Thoughts on Open Source
In some recent talks I make a reference to Conway’s Law named after Melvin Conway (not to be confused with British Mathematician John Horton Conway famous for Conway’s Game of Life nor to be confused with Conway Twitty) which states: Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure. Many interpret this as a cynical jibe at software management dysfunction. But this was not Melvin’s intent. At least it wasn’t his only intent. On his website, he quotes from Wikipedia, emphasis...
Someone recently emailed me to ask if I’m speaking at any upcoming conferences this year. Good question! I’ve been keeping it pretty light this year since my family and I are doing a bit of travelling ourselves and I like spending time with them. But I will be hitting up two conferences that I know of. <anglebrackets/> April 8 – 11 Ohmagerd! That’s this week! I better prepare! I’ll be giving two talks this week. One of them will be a joint talk with the incomparable Scott Hanselman. Usually that means him taking potshots at...
In my last post, I talked about the MonkeySpace conference conference and how it reflects positive trends in the future of open source in .NET. But getting to a better future is going to take some work on our part. And a key component of that is making NuGet better. Several discussions at MonkeySpace made it clear to me that there is some pervasive confusion and misconceptions about NuGet. It also made it clear that there are some dramatic changes needed for NuGet to continue to grow into a great open source project. In this post, I’ll cover some...
At the end of last year, I wrote a blurb about the Open Source Fest event at Mix 2011. Imagine the typical exhibition hall, but filled with around 50 open source projects. Each project had a station in a large room where project members presented what they were working on to others. You could see the gleam of inspiration in the smiles of developers as they exchanged ideas and suggestions. I left this event completely fired up. This is the spirit we tried to capture with the MonkeySpace conference this year. And at least for me, it succeeded. I’m...
Changing a big organizations is a slow endeavor. But when people are passionate and persistent, change does happen. Three years ago, the ASP.NET MVC source code was released under an open source license. But at the time, the team could not accept any code contributions. In my blog post talking about that release, I said the following (emphasis added): Personally (and this is totally my own opinion), I’d like to reach the point where we could accept patches. There are many hurdles in the way, but if you went back in time several years and...
Disclaimer: these opinions are my own and don’t necessarily represent the opinion of any person or institution who are not me. The topic of sexism in the software industry has flared up recently. This post by Katie Cunningham (aka The Real Katie), entitled Lighten Up, caught my attention. As a father of a delightful little girl, I hope someday my daughter feels welcomed as a developer should she choose that profession. In general, I try to avoid discussions of politics, religion, and racism/sexism on my blog not because I don’t have strong feelings about these things, but I...
In my previous post, I attempted to make a distinction between Open Source and Open Source Software. Some folks took issue with the post and that’s great! I love a healthy debate. It’s an opportunity to learn. One minor request though. If you disagree with me, I do humbly ask that you read the whole post first before you go and rip me a new one. It was interesting to me that critics fell into two opposing camps. There were those who felt that it was was disingenuous for me to use the term “open source software” to describe...
UPDATE: I have a follow-up post that addresses a few criticisms of this post.
It all started with an innocent tweet asking whether ASP.NET MVC 3 is “open source” or not? I jumped in with my usual answer, “of course it is!” The source code is released under the Ms-PL, a license recognized that the OSI legally reviewed to ensure it meets the Open Source Definition (OSD). The Free Software Foundation (FSF) recognizes it as a “free software license”1 making it not only OSS, but FOSS (Free and open source software) by that definition. Afterwards, a healthy debate ensued on...
Recently, the Log4Net team released log4net 1.2.11 (congrats by the way!). The previous version of log4Net was 1.2.10. Despite which version of version you subscribe to, we can all agree that only incrementing the third part of a version indicates that the new release is a minor update and one that hopefully has no breaking changes. Perhaps a bug fix release. This is especially true if you subscribe to Semantic Versioning (SemVer) as NuGet does. As I wrote previously, SemVer is a convention for versioning your public APIs that gives meaning to the version...
I’ve seen a few recent tweets asking about what’s going on with NuGet since I left Microsoft. The fact is that the NuGet team has been hard at work on the release and have been discussing it in various public forums. I think the feeling of “quiet” might be due to the lack of blogging, which I can easily correct right now! In this post, I want to highlight a few things: What the NuGet team has been working on How you can track what we’re doing And how...
Mary Poppendieck writes the following in Unjust Deserts (pdf), a paper on compensation systems (emphasis mine), There is no greater de-motivator than a reward system that is perceived to be unfair. It doesn’t matter if the system is fair or not. If there is a perception of unfairness, then those who think that they have been treated unfairly will rapidly lose their motivation. Written over seven years ago, the paper is just as insightful and applicable today. For example, let’s apply it to the recent dust-up about the legitimacy...
T’is the season for “Year in Review” and “Best of” blog posts. It’s a vain practice, to be sure. This is exactly why I’ve done it almost every year! After all, isn’t all blogging pure vanity? Sadly, I did miss a few years when my vanity could not overcome my laziness. This year I am changing it up a bit to look at some of the highlights, in my opinion, that occurred in 2011 with open source software and the .NET community. I think it’s been a banner year for OSS and .NET/Microsoft, and I think it’s only going...
We made a recent change to make it easy to update the NuGet documentation. In this post, I’ll cover what the change was, why we made it, and how it makes it easier to contribute to our documentation. Our docs run as a simple ASP.NET Web Pages application that renders documentation written in the Markdown format. The Markdown text is not stored in a database, but live as files that are part of the application source code. That allows us to use source control to version our docs. We used to host the source for the docs site...
The moon goes around the earth and when it comes up on the other side, Hark! There’s a new release of NuGet! Well, this time it was more like one and a half revolutions, but I’m happy nonetheless to announce the release of NuGet 1.4. A big thank you goes out to the many external contributors who submitted patches to this release! Your enhancements are much appreciated! I’ve written up much more details about what’s in this release in the NuGet 1.4 Release Notes, but I’ll highlight a few choice things in this blog post. NuGet Self-Update...
Most developers I know are pretty anal about the formatting of their source code. I used to think I was pretty obsessive compulsive about it, but then I joined Microsoft and faced a whole new level of OCD (Obsessive Compulsive Disorder). For example, many require all using statements to be sorted and unused statements to be removed, which was something I never cared much about in the past. There’s no shortcut that I know of for removing unused using statements. Simply right click in the editor and select Organize Usings > Remove and Sort in the context menu. ...
Almost two years ago, I announced the launch of http://letmebingthatforyou.com/, a blatant and obvious rip-off of the Let me Google that for you website. The initial site was created by Maarten Balliauw and Juliën Hanssens in response to a call for help I made. It was just something we did for fun. I’ve been maintaining the site privately always intending to spend some time to refresh the code and open source it. Just recently, I upgraded the site to ASP.NET MVC 3, refactored a bunch of code, and moved the site to AppHarbor. Why AppHarbor? I’ve...
It’s a common refrain you hear when it comes to documentation for open source projects. It typically sucks! In part, because nobody wants to work on docs. But also in part because good documentation is challenging to write. What is good documentation in the first place? The following is a list of some qualities that make for great documentation. This list is by no means complete. Good docs are… Written for the right audience Comprehensive and accurate Easily browsable and searchable Written in...
Not too long ago, I posted a survey on my blog asking a set of questions meant to gather information that would help the NuGet team make a decision about a rather deep change. You can see the results of the survey here. If there’s one question that got to the heart of the matter, it’s this one. We’re considering a feature that would only allow a single package version per solution. As you can see by the response to the question, that would fit what most people need just fine, though there are a...
When installing a package into a project, NuGet creates a packages.config file within the project (if it doesn’t already exist) which is an exact record of the packages that are installed in the project. At the same time, a folder for the package is created within the solution level packages folder containing the package and its contents. Currently, it’s expected that the packages folder is committed to source control. The reason for this is that certain files from the package, such as assemblies, are referenced from their location in the packages folder. The benefit of this approach is that...
In continuing our efforts to release early, release often, I’m happy to announce the release of NuGet 1.3! Upgrade! If you go into Visual Studio and select Tools > Extension Manager, click on the Update tab and you’ll see that this new version of NuGet is available as an update. Click the Upgrade button and you’re all set. It only takes a minute and it really is that easy to upgrade. As always, there’s a new version of NuGet.exe corresponding with this release as well as a new version of the Package Explorer. If you have...
Eric S. Raymond in the famous essay, The Cathedral and the Bazaar, states, Release early. Release often. And listen to your customers. This advice came from Eric’s experience of managing an open source project as well as his observations of how the Linux kernel was developed. But why? Why release often? Do I really have to listen to my customers? They whine all the time! To question this advice is sacrilege to those who have this philosophy so deeply ingrained. It’s obvious! Or is it? When I was asked this in...
The Magic 8-ball toy is a toy usually good for maybe one or two laughs before it quickly gets boring. Even so, some have been known to make all their important life/strategic decisions using it, or an equivalent mechanism. The way the toy works is you ask it a question, shake it, and the answer to your question appears in a little viewport. What you’re seeing is one side of an icosahedron (20-sided polyhedron, or for you D&D folks, a d20). On each face of the d20 is a potential answer to your yes or no question. ...
Another Spring approaches and once again, another Mix is over. This year at Mix, my team announced the release of the ASP.NET MVC 3 Tools Update at Mix, which I blogged about recently. Working on this release as well as NuGet has kept me intensely busy since we released ASP.NET MVC 3 RTM only this past January. Hopefully now, my team and I can take a moment to breath as we start making big plans for ASP.NET MVC 4. It’s interesting to me to think that the version number for ASP.NET MVC is quickly catching up to the version...
Hi there, it’s time to shine the bat-signal, or better yet, the NuGet-Signal! The NuGet community needs your help! We’re wrestling with some interesting wide ranging design decisions and we need data to test out our assumptions and help us make the best possible choices. I won’t go into too much detail about the specific issue as I don’t want to bias the results of the following survey. I simply want to gather information about common practices by answering a set of questions that mostly have empirical answers. I think it’s a given that most Visual Studio solutions...
I’m happy to announce the release of NuGet 1.2. It took us a bit longer than we expected to get this release out there, and I’ll explain why later, but for now, go install it! Upgrade! If you go into Visual Studio and select Tools | Extension Manager, click on the Update tab and you’ll see that this new version of NuGet should be available as an update. It only takes a minute and it really is that easy to upgrade. For more details about what’s in this release, check out the announcement on nuget.org. There’s also...
Today I’m pleased to announce the release of NuGet 1.1 to the VS Extension Gallery and CodePlex. If you have NuGet 1.0 installed, just launch the VS Extension Manager (via Tools | Extension Manager menu) and click on the Updates tab. If you don’t see any updates, make sure to enable automatic detection of available updates. If you are running VS 2010 SP1 Beta, you might run into the following error message when attempting to upgrade to NuGet 1.1 if you have an older version installed. The workaround is to simply uninstall NuGet...
Over a decade ago, Tim Berners-Lee, creator of the World Wide Web instructed the world know that cool URIs don’t change with what appears to be a poem, but it doesn’t rhyme and it’s not haiku. What makes a cool URI? A cool URI is one which does not change. What sorts of URI change? URIs don't change: people change them. In a related article, URL as UI, usability expert Jakob Nielsen lists the following criteria for...
Over the past couple of years, I’ve written several blog posts on ASP.NET Routing where I provided various extensions to routing. Typically such blog posts included a zip download of the binaries and source code to allow readers to easily try out the code. But that’s always been a real pain and most people don’t bother. But now, there’s a better way to share such code. Moving forward, I’ll be using NuGet packages as a means of sharing my code samples. In the case of my routing extensions, I’ve compiled them into a solution I call RouteMagic (source...
For those of you who enjoy learning about a technology via screencast, I’ve recorded a video to accompany and complement this blog post. The screencast shows you what this package does, and the blog post covers more of the implementation details. A key feature of any package manager is the ability to let you know when there’s an update available for a package and let you easily install that update. For example, when we deployed the release candidate for NuGet, the Visual Studio Extension Manager displayed the release in the Updates section. Likewise,...
The changing of the year is a time of celebration as people reflect thoughtfully on the past year and grow excited with anticipation for what’s to come in the year ahead. Today, there’s one less thing to anticipate as we announce the final release of ASP.NET MVC 3 and NuGet 1.0! Oh yeah, this never gets old. Install it via Web Platform Installer or download the installer directly to run it yourself. Here are a few helpful resources for learning more about this release: What’s New in...
As David Ebbo blogged today, the NuGet Gallery is now open to the public. The goal of the NuGet Gallery is to be the hub for NuGet users and package authors alike. Users should be able to search and discover packages with detailed information on each one and eventually rate them. Package authors can register for an API key and upload packages. We’re not quite where we want to be with the gallery, but we’re moving in the right direction. If you want to see us get there more quickly, feel free to lend a hand. The gallery is...
Note, this blog post applies to v1.0 of NuGet and the details are subject to change in a future version. In general, when you create a NuGet package, the files that you include in the package are not modified in any way but simply placed in the appropriate location within your solution. However, there are cases where you may want a file to be modified or transformed in some way during installation. NuGet supports two types of transformations during installation of a package: Config transformations Source transformations ...
The polls have closed and we now have a new name for our project, NuGet (pronounced “New Get” and not “Nugget” and not “Noojay” for you hoity-toity) which had the most votes by a large margin. For those who missed it, the following posts will get you up to speed on the name change: A few days ago I wrote about our need to rename NuPack I followed up with more details about the rename And then I wrote about how the community offered its own choices...
Just a quick follow-up to my last posts about naming NuPack. Looks like the community is not content to sit back and let the project be labelled with a lame name. I’ve seen a couple of community inspired names created as new issues in the CodePlex issue tracker. However, NFetch has a huge lead, but the community chosen NRocks is a close second. The name I like the best so far is NuGet. (vote for it here) As before, voting still closes on Tuesday 10/26 at 11:59 PM PDT. If you feel strongly enough around a name,...
There are only 2 hard problems in Computer Science. Naming things, cache invalidation and off-by-one errors. I’m always impressed with the passion of the open source community and nothing brings it out more than a naming exercise. In my last blog post, I posted about our need to rename NuPack. Needless to say, I got a bit of angrypassionate feedback. There have been a lot of questions that keep coming up over and over again and I thought I would try and address the most common questions here. Why not stay with...
UPDATE: The new name is NuGet
The NuPack project is undergoing a rename and we need your help! For details, read the announcement about the rename on the Outercurve Foundation’s blog. What is the new name? We don’t know. You tell us! The NuPack project team brainstormed a set of names and narrowed down the list to four names. I’ve posted a set of names as issues in our NuPack CodePlex.com site and will ask you to vote for your favorite name among the lot. Vote for as many as you want, but realize that if you vote...
Note: Everything I write here is based on a very early pre-release version of NuGet (formerly known as NuPack) and is subject to change. A few weeks ago I wrote a blog post introducing the first preview, CTP 1, of NuGet Package Manager. It’s an open source (we welcome contributions!) developer focused package manager meant to make it easy to discover and make use of third party dependencies as well as keep them up to date. As of CTP 2 NuGet by default points to an ODATA service temporarily located at http://go.microsoft.com/fwlink/?LinkID=204820 (in CTP 1 this was an...
In my last post, I described how we’re trying to improve and streamline contributor guidelines to make it easy for others to contribute to NuGet.
Like all product cycles anywhere, we’re always running on tight time constraints. This helps us to maintain a tight focus on the product. We don’t want to the product to do anything and everything. However, we do want to deliver everything needed (along with double rainbows and unicorns) to meet our vision for this first release.
The best to meet those goals is to get more contributions from outside the core team. And the best way...
A couple days ago I wrote a blog post entitled, Running Open Source In A Distributed World which outlined some thoughts I had about how managing core contributors to an open source project changes when you move from a centralized version control repository to distributed version control. The post was really a way for me to probe for ideas on how best to handle feature contributions. In the post, I asked this question, Many projects make a distinction between who may contribute a bug fix as opposed to who may contribute a feature. Such projects...
When it comes to running an open source project, the book Producing Open Source Software - How to Run a Successful Free Software Project by Karl Fogel (free pdf available) is my bible (see my review and summary of the book). The book is based on Karl Fogel’s experiences as the leader of the Subversion project and has heavily influenced how I run the projects I’m involved in. Lately though, I’ve noticed one problem with some of his advice. It’s so Subversion-y. Take a look at this snippet on Committers. As the only formally...
NuGet (recently renamed from NuPack) is a free open source developer focused package manager intent on simplifying the process of incorporating third party libraries into a .NET application during development. After several months of work, the Outercurve Foundation (formerly CodePlex Foundation) today announced the acceptance of the NuGet project to the ASP.NET Open Source Gallery. This is another contribution to the foundation by the Web Platform and Tools (WPT) team at Microsoft. Also be sure to read Scott Guthrie’s announcement post and Scott Hanselman’s NuGet walkthrough. There’s also a video interview with me on Web Camps TV...
The June issue (also in pdf) of the online PragPub magazine, published by the Pragmatic Bookshelf has two articles on ASP.NET MVC. The first is called Agile Microsoft and is an introduction to ASP.NET MVC geared towards those who’ve never seen it. It’s nice seeing ASP.NET MVC featured in this magazine which in its own words tends to cater to a non-Microsoft crowd. To some developers, Microsoft’s technologies are a given, the river they swim in. To others, not using Microsoft’s tools is the default. PragPub being an open source- and Agile-friendly kind of magazine,...
Hot on the heels of the release of ASP.NET MVC 2 yesterday, I’m happy to announce that we are releasing the source code to ASP.NET MVC 2 under the Ms-PL license, an OSI approved Open Source license. This continues the trend from nearly a year ago when we released ASP.NET MVC 1.0 under the Ms-PL. You can read my blog post there to learn more about the hard work that goes into such releases. While I’m one who loves lawyer jokes, I do appreciate the work that they do (one of my best friends is a lawyer) and...
Ayende just announced the release of Rhino Mocks 3.0. The downloads are located here. If you aren’t subscribed to Ayende’s blog, I highly recommend it. This guy never sleeps and churns out code like a tornado.
Ever since I discovered mocking frameworks in general, and especially Rhino Mocks, mocking has become an essential part of my unit testing toolkit.
A while ago I wrote a short intro demonstrating how to write unit tests for events defined by an interface. This small example shows the usefulness of something like Rhino Mocks.
If you’re wondering what the difference between a mocks, stubs, and fakes, be...
I have a few great openings available that I have to share with you. These are really great positions working with really interesting and smart people all over the world. Some of the outstanding benefits include: Work from home. Work for a great project lead (me!). Work with an international team of really great developers. Work on a product used by thousands of people and seen by many more. Work tasks are pretty much self-directed. Nobody is looking over your shoulder. Set your own schedule and work at your own pace. Interesting cutting-edge ASP.NET...
In my previous post, I outlined some minor changes to the skinning model for Subtext. In this post, I will give a high level overview of how skinning works in Subtext. Subtext renders a Skin by combining a set of CSS stylesheets with a set of .ascx controls located in a specific skin folder. If you look in the Skins directory for example, you might see a set of folders like this. Skin Template A common misperception is that each folder represents a Skin. In fact, each folder represents something we call a Skin Template, and can...
Jeff “The CodingHorror” Atwood takes issue with the idea that software developers have any moral obligation to contribute to Open Source projects.
And you know what? I agree. However I do take issue with his conclusion as well as some of the points that he makes in an attempt to bolster his argument.
The whole point of open source-- the reason any open source project exists-- is to save us time. To keep us from rewriting the same software over and over.
snip...
It's exactly what open source is about: maximum benefit, minimum effort.
Well no. Not really. Back in...
Recently I highlighted a site named DotNetKicks which is like Digg.com, but targetted to .NET technology. In particular I thought it was a smart move for them to share in their advertising revenue with those who submit stories.
Well to make it easier to kick stories from the convenience of your favorite RSS Aggregator, I wrote an IBlogExtension plugin so that you can submit/kick/unkick stories from RSS Bandit or any RSS Aggregator that supports the IBlogExtension plugin model (.NET 1.1 must also be on the machine).
Just download and unzip the extension to your plugins directory. The default location for RSS...
Good news! SourceForge now supports using Subversion for source control!
One complaint I received from developers who read my Quickstart Guide To Open Source Development With CVS and SourceForge is the sheer amount of complexity just to get started (not that it was my fault, I was just the messenger). With Subversion, contributing to a project on SourceForge is now much simpler.
Benefits of Subversion over CVS
Subversion has several key benefits over CVS, a few of which are listed here...
Subversion supports WEBDAV+DeltaV which works over HTTPS so that whole...
Every open source project has its own procedures for granting the all-important commit access to developers. Some require a set number of submitted patches (which Fogel, author of Producing Open Source Software, warns against). Others do not have any clear process and rely on the whims of those with the ability to add other committers. Whichever procedure your project chooses, it is important make sure make sure it is clearly published in a visible location such as in the developer guidelines.
Fogel discusses the methods by which the Subversion project grants commit access, emphasis mine.
In the Subversion project,...
I just finished reading the book "Producing Open Source Software - How to Run a Successful Free Software Project" by Karl Fogel (pdf available). CollabNet has employed Karl Fogel for the past five years to work on Subversion. Prior to that he has been involved with GNU Emacs and CVS development.
If you fall in one of the following categories, I highly recommend taking the time to read this book. Especially if you fall in one of the first two.
Planning to start an open source project
Currently running an open source project
Involved with an open source project
Managing a team of...
sub text
Function: noun
1. The implicit or metaphorical meaning (as of a literary text)
2. A story within the story.
What is .TEXT?
.TEXT is a popular (among .NET loving geeks), scalable, and feature rich blogging engine started by Scott Watermasysk and released as an open source project under a BSD license. Scott did a wonderful job with .TEXT as evidenced by its widespread use among bloggers and being the blogging engine for http://blogs.msdn.com/ among others.
Sounds great. So why fork it?
There are several reasons I think a fork is waranted.
.TEXT is dead as an open source...
After much hard work by Dare and Torsten (and a little bit of hard work by yours truly), the Wolverine edition of RSS Bandit has been released to the public.
If you're still using a 1.2.* version, I think you'll really like the extra polish and speed of this latest version.
Some highlights to note:
Newspaper Styles - Compatible with FeedDemon.
Column Chooser - Specify the columns to display in the list view.
Item Deletion - A hotly demanded feature.
and more...
For the full release notes, visit here.
Also be sure to check out the updated docs for more details on these new features.
Run, don't walk,...