Update 2015-03-18: This post was originally written in 2008, more than 6 years ago. Everything has changed, as Distributed VCS’ have become the de-facto standard for most open source projects, and GitHub is the current go-to host for OSS projects. There are still many large projects running on CVS or patch bombs via email, and these work well. There are also other services like Bit Bucket worth looking into, but if you don’t know where and how to host your OSS project, check out GitHub first.
So, I do have some Open Source projects now. Not many, nothing big, but nevertheless something that got me thinking about “Where to host them?”. A year ago, this was a no brainer, as SourceForge was the only real alternative. But during 2008, other sites have emerged to be real competitors. At the end, I wanted to make a decison between SourceForge and CodePlex, ruling out all other choices for various reasons.
Now, when reading this post, please keep in mind that this is a) subjective and b) possibly biased and flawed. I had a set of criterias and made a decission, but that does not mean that you should come to the same conclusion. I do not even guarantee that anything here is actually correct – it is written to the best of my knowledge and understanding. Okay, enough disclaimers, let’s start out with what I actually want:
- Source Control, preferably using Subversion. I use Visual Studio 2008 Professional as my IDE with the VisualSVN plugin. Since I actually paid money for that plugin and really like it, and because I already know Subversion, I really want SVN support.
- A simple bug tracker. I am a single developer, making rather infrequent releases, so I do not need tons of custom fields. I just need something to be able to track bugs and suggestions.
- A simple way to push new releases. I usually use .rar files because it allows me to lock and sign the archive, and because rar.exe is an excellent command-line version, supporting a lot of useful parameters.
- Generally, really simple user interface. I want to do stuff quickly, and I want my users to do stuff quickly, be it downloading the newest release, reporting a bug or browsing the source.
Creating a Project
On SF, you can categorize your project really deeply. You start with the choice what you are actually hosting – SF does not only host Open Source Software, but also Software Documentation for other projects or producing content for an open source project. You need to specify a title, an internal name that will be your URL (the Unix name), a public description and a description for the Sourceforge team. All projects on SourceForge need to be approved by their team first, so you need to tell them something about it.
The next Step is selecting a license. It displays the most common ones per default, but you can pick all OSI-approved licenses or even specify a properitary one. Step Three is a bit more complicated: You have to categorize the project. That is, you need to tell SF about the target Operating System(s), intended end user, category (i.e. Vector-Graphics) etc.
CodePlex also asks you for a Title, a desired URL and a public description. The second step is answering a captcha and accepting the EULA. Your project will be immediately created and is only visible to you. You have 30 days to upload source code and make it public, otherwise it will be deleted.
The SourceForge project categorization seems to be a neat idea at first, and it was possibly great 10 years ago. But with thousands of projects hosted, I personally only use the Search function to find projects. Sure, if I wanted to learn a new language (i.e. Ruby), I could just browse all Ruby Projects and have a look at other peoples code, but in reality I never see me using that. Also, having to have the project approved and not being able to do anything before it is approved is somewhat of a letdown. As I do not work for SF, I of course do not know how many projects they reject, but that does not mean I do like it.
I think that CodePlex clearly wins here: My Project is available immediately (so I do not lose any momentum and euphory while waiting), and they force me to put up source code within 30 days. There are many Projects on SF that do not have any “meat” in them (shame on me: I own one such project myself) and even though I can circumvent the CodePlex barrier by just adding some bogus to the repository, it looks a lot better. Also, not having the categorization is a good thing in my opinion, because I believe it just adds clutter without adding any value (at least not for me).
Setting up Project Features / Project User Interface
SF offers a lot of features: Discussion Boards and an Issue Tracker, a tab for screenshots, Shell access(!), a Website for your project (yoursite.sf.net), a Wiki and more stuff. In fact, I found it overwhelming, and I first disabled everything that I do not need, which is a lot. SF is entirely self-sufficient, in theory you don’t need any other website for your project as you have everything available. The downside is that there is a lot of clutter at first and you should spend maybe 30 minutes to just look around what everything is.
On the default page, you will see a nice big download button, your public project description, and recent product news. The Source Control browser is based on ViewVC and offers a really nice interface to browse the code, look at older revisions and download a revision. It also supports Syntax Highlighting for my C# code.
In terms of Project Features, CodePlex does not offer much customization. You get a Wiki, an Issue Tracker, a Source Code Browser, some Stats, and a Release Tracker. As far as I see, you can not remove/disable any of those.
The default page is the Wiki and as such customizable by you, with the “Download latest release” on the right side. Compared to the big green Download button on SF, this is not as visible. The Source Code browser is really usable, but somewhat more complicated. At first, you see a list of all commits, which can be quite long. You can then browse the files within that version of the archive. Sadly, you only see the filenames, but not the last commit revision and commit comment for that file. Also, in both Firefox 3 and Internet Explorer 7 it did not like some special characters.
SourceForge got a re-design in 2008, which was long overdue. The new UI is much nicer, although still somewhat busy and overwhelming due to the wide range of features. Overall, I think it’s a tie, because both have some weaknesses and strengths. CodePlex has a very clean UI compared to the cluttered/busy SourceForge one. Also, it lets me better customize my main project page because the Wiki is the main page. SourceForge scores with the option to host your web site (which seems to compensate for that), but I don’t need that as I already got a web site. SF shines when it comes to online Source Browsing because the interface displays the last commit revision and comment for each file. Syntax Highlighting is available in both, but somewhat flawed compared to the “real one” in Visual Studio (which is not surprising), but it gets the job done well.
Feature wise, CodePlex has what I want, whereas SourceForge has what I want and then about 500% more. Some really nice features, but I don’t need half of them.
SF gives you a Subversion repository. Not much to say about it, except that it works well and supports https. You cannot install your own hook scripts though, which means that if you want to use SVN integration i.e. for FogBugz, you’re out of luck. Speed and stability was really good, and when you use svn-keywords like $Id$, it will properly replace it with your SourceForge username (i.e. $Id: Admin.aspx.cs 100 2007-11-21 23:13:51Z mstum $).
Uhhh, Source Control on CodePlex, the evil topic 🙂 CodePlex is based on Microsoft Team Foundation Server, which means that it supposedly works best with a TFS Client. There is the Team Explorer Client, which is a full TFS Client that works with Visual Studio 2005 or 2008 Standard or better. There are smaller ones available, but if you want to use TFS, that’s seems to be the “proper” Client.
Now, what about Subversion? TFS is surely nice but it’s a) not compatible with VisualSVN and b) completely different in terminology and usage than Subversion, which means that the learning curve is steep. The CodePlex team has released a tool called SvnBridge, which essentially acts as a “proxy” that translates between SVN Clients and the TFS Server. When SvnBridge was first released, you had to run it on your PC, and from what I’ve heard, it had some not so nice bugs. Up until 2 days ago, I believed that this was still the case, hence I still believed that CodePlex has no proper SVN Support. But thanks to the power of Twitter, Sara Ford told me that they now host SvnBridge server-side, which means that it looks like a real SVN server from my client tools. I have to say that this works quite well, at least for my simple usage. I do not use some of the more complicated SVN Features (i.e. svn:externals) so I cannot comment on that. There are just two issues that I have found:
- When browsing the Source Code on the Web, you get ..svnbridge folders everywhere, containing meta-data. This is needed, but should possibly be removed from the website browser as it just adds clutter
- $Id$ tags are not properly expanded on checkout: My Username is missing, instead it says “unknown”: $Id: Program.cs 18767 2008-12-12 22:41:58Z unknown $
Also, on CodePlex you do not have your “own” Repository. My Commit Revision is 18767, but I only made 4 or 5 commits. This is not a direct issue because you do not interfere with other people’s projects, but I don’t really like that my Revision number is essentially randomly increasing with every commit now.
There also seem to be some bugs with svnbridge still left, for example this one, and the stability seems a bit shaky. I got the “The source control server is currently unavailable.” a lot on a newly set up project (which is at least somewhat tolerable, but does not exactly build confidence), but also occasionally on some “mature” project, which gives me the impression that there is either a bigger issue, or that they run maintenance scripts in the morning between 8:00 and 13:00 PST, which means I am just unlucky to encounter them on my evenings due to me being in France 8 hours behind the US time. But that is pure speculation on my side.
Even though CodePlex has a better SVN interface now, SourceForge wins clearly. You can’t really beat a native SVN repository, and with svnbridge not expanding my $Id$ Tag correctly and adding clutter in the Web Source Browser, it’s not really that pleasing. That being said: It does work reasonably well for me, but I think I’d rather learn to use TFS if I start a large project on CodePlex.
SF allows you to set up multiple trackers, i.e. a Bug Tracker and a Suggestion Tracker. You can then specify categories (i.e. “User Interface”) and groups (which are essentially outcomes). Entries in the tracker are called “Artifacts”, and you have a variety of filtering options available.
CodePlex has only one issue Tracker. When users create a new item, they just type in a Title, a description and optionally upload a file. The project admin can then categorize it as an Issue, a Feature or a Task. users can vote for entries. Filtering is possible through the advanced view.
For my uses, CodePlex very narrowly wins. The SF Tracker seems really powerful when dealing with large projects, but for small projects I found it a bit to complicated. It is also not very prominently placed in the UI (which seems to be due to the fact that you can have multiple trackers), unlike CodePlex which puts the Tracker prominently into the top bar. Now, CodePlex has some downsides. The first one is speed – CodePlex is slow. There is a reason for that and the team is apparantly working on a solution, but at the time of writing, those optimizations were not live. The second one is that the first page is somewhat ugly. You see a list of recent items, but no filter (filters are on the advanced view). You can of course search, but search is also slow. As in “30 Seconds Response Time” slow.
Performance is actually why it’s only a narrow win. I really like the overall usage of the CodePlex Tracker because it works really well for me, compared to the more complicated SourceForge one. But a tracker that lets me wait 30 seconds for results is a good recipe to lose a lot of credit.
On SF, every Project can have multiple “Packages”. For example, you can have your main application, but also some additional Libraries or Utilities which are part of the project, but appear seperately on the UI. To create a new Release, you go into the File Manager, click “Add release” and enter a name. Next, you have to upload your files onto the SF Server, using WebDAV, SFTP or rsync. You can also upload Release Notes/Change Log. You then click a button and add one (or all) files you just uploaded to the release.
In the past, there was one global upload directory, so after uploading your file and clicking “Refresh”, you would see all the files in the upload directory, including files from other users. While not really a security concern (stuff in that folder is meant to go on the site anyway), you could accidentially (or on purpose…) add other users files to your releases, making them unavailable for them. Luckily, this has been changed – every user only sees his files now, which is good.
Not so good is the file type management. Essentially, you have to pick a File Type for each file. Unfortunately, there is no filetype for .rar, a request which is open since August. August 2003. So the files show up as “Other” or “Other Source File”. Well, at least Ross Turk (Director of Community at SF) has acknowledged that now.
CP does not have the notion of separate Packages. You only have releases. To create a new one, you click on “Create a new release” and type in a Title. You have a Wiki-Editor to edit Release notes and then you can upload files through the Web UI. There is no notion of file types, there are only 4 general types: Application (Runtime Binary), Source Code, Documentation and Example. You can set a development status for that release (Planning, Alpha, Beta and Stable), decide whether the release is publically visible and whether it’s the default release.
For my purposes, CodePlex wins. On SourceForge, I have to use an external program to upload files (even though WebDav is part of some browsers now), and I have to work with the strange notion of file types. I think (actually, I guess) this is because of the large *NIX community on SF, because some projects are available in .zip, .tar.gz and .bz2 format, and often for multiple architectures. So there it may make sense to specify “this is the .tar.gz binary for x86”. But for me, this is just clutter. I rarely have more than one architecture. So CP allows me to upload me releases a lot quicker, although you can now argue that web based uploads are somewhat unstable for big files, and that it’s tedious if you want to upload many files at once. You may be right, but if I look at what I’ve had in the past and what I plan to have in the future, this simply does not apply to me. I prefer the much simpler approach of CodePlex by far.
SourceForge is on the internet since the dawn of time. It is really stable and has eleventy billion features. It supports large projects with many developers and many architectures. It offers 2 different Source Control backends. It is really mature and good. But it is also insanely complicated. You have to apply and wait for approval, you have to categorize your project in some categories, and you have to spend some time to learn how the file upload feature works.
CodePlex is relatively new. It offers much fewer features, has a somewhat weird Source Control and some performance issues. But it is also really simple. Creating a project takes a minute, creating a new release takes two. There is not much to customize and to tweak.
But if I look at my needs as a single developer who just wants to get an OSS project up, CodePlex is my choice for now. I really respect SourceForge, but I want something simpler and something with a nicer UI. Sure, that big green “Download” button is nice, but the front page of my project does not really look as clean and nice as I’d like it to be, even though it became a lot better after the re-design.
The performance issue on CodePlex should be something that Microsoft can resolve. The Source Control issue requires constant improvements on svnbridge, but I think that SVN will always be a second-class citizen unless CodePlex offers a real, native SVN repository. I think I’ll spend some time with TFS.
I was positively surprised by members of both sites. After tweeting about me thinking whether to choose SF or CP, I was tweeted by both Ross Turk of SF and Sara Ford of CP, asking about feedback. It’s really great to see high-profile employees pro-actively asking for more feedback. After Sara pointed out that SvnBridge is now hosted (which I completely missed), I decided to give it a fair chance.
CodePlex HAS issues, and if I were to host a project that would involve many developers I would pick SourceForge, because it has reached the maturity and feature set to really support large projects. But I do not have that need. I want something simple that just works, and CodePlex fulfills that need. And I even have a Project on CodePlex now, with some more to follow shortly.