BCL Extensions Source Code released on CodePlex

"Is this thing still on?"

Yes, It's been a while *cough*, but better late than never, right?

We (Solutions Design, creators of LLBLGen Pro) are in the process of releasing some of our general frameworks as open source, namely BCL Extensions and Algorithmia. Yesterday we released BCL Extensions on CodePlex, using Mercurial as the source-control system. Algorithmia will follow soon, likely later this week. We also re-released our Helpdesk / forum system HnD again to the public, on bitbucket.org and plan to add new features soon. We decided to release BCL Extensions and Algorithmia (algorithm/datastructures library) as open source as it was the plan all along anyway: for so long I've been talking about algorithms and I can never point to example code and give you a solid piece of code into your hands, and with Algorithmia soon out in the open and BCL Extensions (which is used by Algorithmia) as well, I can. Both are also written with this in mind, to function both as a critical pillar of our work and also as an educational tool, so it isn't a lot of work.

About BCL Extensions

BCL Extensions is a small .NET 3.5+ extension method library which contains some handy and sophisticated extension methods for various .NET Base Class Library (BCL) classes. The main purpose of BCL Extensions was to form a central place for us to store our generic extension methods we wrote to avoid clutter in our .NET 3.5+ codebase, namely the LLBLGen Pro v3 designer. We tried to avoid defining an extension method for everything, that's why there's not a tremendous amount of extension methods on a lot of types, just a couple. The main reason is that the more extension methods you define, the more you pollute intellisense dialogs and often you don't need the extension method anyway, or there's a better way to write the functionality.

"Why CodePlex / Mercurial?"

After we decided to release HnD again for LLBLGen Pro v3 as an example project, we looked into which repository sites we could use for this. Before, we hosted the subversion repository ourselves, but nowadays it's not really necessary to host your own repositories anymore. There are really just 5 candidates: Sourceforge, Google Code, Bitbucket, GitHub and CodePlex. I can be short about Sourceforge: not ever will I go back there. Google Code, it's OK, but to me the site feels a bit too simplistic, as if I'm using a v0.1 system. I know most of what you need is there, but one thing feels missing: it's as if you and your project are all alone on a big site.

So three sites were left on our list. My experiences with CodePlex were very bad, but mostly based on experiences from 3+ years ago. So I initially simply looked at Bitbucket and GitHub. Both sites have pros and cons and offer what one wants. They don't use the same sourcecontrol system, so picking a site is also picking a sourcecontrol system. We use subversion internally, so whatever site we choose, it would be different. We had done testing and internal usage of both git and mercurial in the past year to see whether we needed a switch from subversion, but in the end we decided to stick with subversion. What we did learn though is that we liked Mercurial over Git as it felt more complete, a more solid package: we see source-control as a tool which should just work and not require extensive changes of how we want to work and require a box of small tools to get things done etc. Mercurial fits us better. This made the choice between Bitbucket and GitHub easier: HnD was released on Bitbucket.org.

After using it for a week or so, I felt a bit on an island on Bitbucket. Bitbucket, similar to GitHub, is mainly used by open source devs outside .NET land. This might not look like the case at first, but look deeper. As our code is .NET code and targeted towards .NET developers, we looked at CodePlex again after 3 years, to see whether it is the .NET 'code hub' we were looking for. We were pleasantly surprised how much the site had improved: Mercurial sourcecontrol, the site is very quick, nice features per repository, active development on the site... So for our next project, BCL Extensions, we chose CodePlex, the main reason is that it's the site Microsoft releases all open source code for .NET developers and thus it will have a solid and big .NET developer audience. This is important: you don't want to host your project on an island, and you want to release your sourcecode at the place where users of your sourcecode will look for it.

I personally am very pleased so far with the experience I had with CodePlex, its Mercurial hosting and the features provided. Not that Bitbucket is bad, it just doesn't have what CodePlex provides: a massive amount of .NET developers visiting the site. So for Algorithmia, our algorithm and data-structures library, we also chose CodePlex. It's not unlikely we'll move HnD to CodePlex in the future.

"But I like Git! I hate you! GitHub is better!"

Last week I was flamed on twitter because I chose Mercurial and CodePlex and didn't choose git and GitHub. That alone told me I made the right decision to chose Mercurial over git and CodePlex over GitHub. You see, first of all, it's our code, we give it away, for free. If you don't like it, move on and write it yourself. Second of all, it's of no importance which source-control system is used or which repository hoster is used to use the sourcecode. Only to some extend if you want to contribute. If one really wants to contribute back, it's a small step to download the particular client to use the sourcecode and to commit the code back. You see, the real problem with writing software isn't the tools used, it's the problem solving, the way you express functionality in the language chosen. And besides that, mercurial and git work very familiar.

The same lame discussion about which source-control system to use can be held about which language we used: C# (all VB.NET developers who want to contribute have to switch!) or which license we used: BSD2 (for BCL Extensions and also for Algorithmia. GPL for HnD), or which platform we chose (for HnD, it's ASP.NET 2, as it exists for a while now and uses webforms. Boo!). The person who owns the copyright decides the license, which language, what platform and where to get it. Those choices will restrict the person who wants to contribute, that's always a given. Though it restricts the user of the code much less, up to a point where there's almost no friction, except perhaps for the licensing part.

In the end, these debates are pretty stupid: the code is there, if it helps you in any way, use it. If you think you can do better or extend it, do it, it's there to allow you to do that. If you, in a generous mood, want to give back to us, feel free to send us a pull request, but you don't have to, you're free to never give back (but it would be great if you have special code which fits right into the library to contribute of course).

In the future we'll also release LLBLGen Pro examples and 3rd party contributions to one of the repository hosters, likely CodePlex.

Hopefully you can use HnD and BCL Extensions and find them useful. We hope to enlighten your world and make your work more easy later this week with Algorithmia as well. Stay tuned!

Comments

# re: BCL Extensions Source Code released on CodePlex

Monday, November 29, 2010 6:52 AM by Michel van den Berg

Hi Frans,

Which Mercurial clients do use?

# re: BCL Extensions Source Code released on CodePlex

Monday, November 29, 2010 7:03 AM by FransBouma

Just the mercurial client from Mercurial itself. It's easy,  just install TortoiseHg and you are set (as it installs mercurial as well ;))

# re: BCL Extensions Source Code released on CodePlex

Monday, November 29, 2010 8:04 AM by Wilbert van Dolleweerd

Hello Frans,

I was a witness of that Twitter flamewar. Let me just say that particular person (I will not mention names) does not speak for the entire Git community.

I personally like Git - even if the Windows support is lacking when compared to Mercurial. I prefer its flexibility over Mercurial. However, Mercurial is a fine tool and it always looks silly to me if people argue about their tools. Hey, I like Vim and I don't understand Emacs users. Live and let live.

Good for you that you contribute your code to the world.