I have been meaning to blog about the status of horn for some time now but have not got round to it for one reason or another.
For those unfamiliar with horn which I am guessing is pretty much everyone, horn is an effort to try and take the pain out of both getting and building open source projects. This also includes resolving the sometimes complex maze of dependencies that exists between projects.
You can read an introduction about the project here or here is a video of a talk I gave about horn at the Dsl DevCon conference.
As with anyone who contributes to OSS, time is the most precious and scarce commodity. A spare couple of hours here and a spare couple of hours there is all I have to offer. If you are engaged in an active relationship like I am then it is very much like committing adultery. You make pathetic excuses in order to steal a moment with your forbidden lust. I have lied through my teeth for a romantic interlude with my mistress. I have been writing mythical invoices or working overtime just to try and get some small feature done.
It is a very strange stop/start style of development and I do worry that the code base is suffering from this staccato style of development. I have tried to keep the code base as clean as is possible and there is currently over seventy percent test coverage on the main Horn.Core project. But is it the best code I have ever written? Definitely not but it never was going to be with this broken up development cycle.
This does bring up an interesting moral dilemma. Recently I spent some of these stolen moments refactoring the code and I am now questioning whether this was a good idea. Surely at this stage in the life cycle of such a fledgling OSS project like horn it is more important to just get it out there and get people using it? Getting interest and other contributors is the goal of any new OSS project and there must be many in my position struggling to push things forward on a limited budget of time. As I am a child of Belfast, I have recently been drawn to the idea of using some slightly more controversial and overt tactics to recruit committers. If a gang of baseball bat wielding paddies adorned in balaclavas break into your house one night shouting in strong Belfast accents "are you going to commit? Are ye?", I strongly advise you think long and hard before answering. We are masters of making you an offer you cannot refuse. I always wondered why so many sports shops in Belfast sold baseball bats but you never ever seen anybody playing baseball. Very strange indeed.
The thing is though, I believe horn's cause is just and right and it is amazing that nobody has set out to solve this difficult problem. In .NET we seem to be all hands to the pump when it comes to creating YIOC yet another inversion of control container, YATR yet another test runner or YAMF yet another mocking framework. But we really need synergy with other platforms by providing a .NET rubygems or a .NET appget. I did hear some rumblings of a rocks project or an ngems but that is all they were rumblings. They seemed to want to use binary dependencies which I don't think will prove very effective in .NET. You need the ability to build dependencies from the source code that borne them.
I have spent too many days knee deep in subversion and nant upgrading my whole stack just to apply a bug fix or acquire some new feature. This pain is very much a harsh reality for many who employ the use of tooling forged from open sourcery. If it is not horn then I hope it is something else. In fact if something else solves this then great, I can move onto some other ideas I have that might actually make me some money and are more selfishly driven.
I started this post with the intention of giving a horn update but have failed and got lost in my ramblings.
In my next post I will give that update and explain how we are able to split castle up with a bit of injenuity and brute force.
If any of this is of interest to you then please join the Horn user group for updates or check out the source here.