Thursday, 17 September 2009

Horn Rant and a cry for help

This is a recession busting blog post, you get two opposing emotions in the same blog post. I am ranting at the community and asking for help from the community at the same time. Look upon it as an unusual social experiment.

Further more, I am writing this post for a few reasons:

  1. As a cry out to the community for some help with the maintenance side of horn

  2. A cathartic aside to myself in order to vent my frustrations with the project or perhaps my failings at generating enough interest or perhaps providing a less than optimal solution to the problem.

  3. A bit of a shout or a moan at the recent trend of many OSS projects changing SCM or build tool in a group like nature that resembles a herd.

A lot of the OSS projects have suddenly changed from subversion to git. I find it quite a stretch of the imagination to believe that each of the new git converts made this choice individually and did not follow on from (a)nother OSS project doing the same. The obvious pattern being once one flips, you can bet your bottom dollar that several will make the same decision based more on envy or curiosity than sound judgement. If the move to git had been spread over a larger timescale then I would not have formed this opinion but the close proximity of the migration of the various OSS projects leads me to the last comment.

A lot has changed in a short time with the descriptors and with my day job thankfully so busy right now, I have totally lost track with all the movements.
MVCContrib has changed, rhino has changed and sharp architecture has changed to name but three. I also noticed a recent thread on the castle development list were people were getting equally hot and bothered about a similar change. I’ve observed Jimmy Bogard tweeting that automapper will move to git and I have even had people ask me when is horn moving to git? We have at the most about 5 active developers, what the hell do I need DVCS for? Somebody please tell me this is not the herd talking here.

One of the objectives of horn is to shield the developer from the SCM details and the various build tools that each OSS will inevitably favour and change on a less than predictable basis.

We could really do with some people to take charge or help with the upkeep of the descriptors. Without community input horn is not going to work. To be honest, if it does not work then so be it, at least we tried and got reasonably far or at least got further than most in the .NET space in what is the most puzzling development problem I have ever faced. If you are interested in the challenge, I urge you to get involved, please join the Horn user group.

For those not in the know, the horn descriptors are the database of package or project information that manifest themselves as DSL files on the client machine. For example below is the automapper descriptor. The horn runtime knows after parsing this file which SCM to get the files from and which build engine to use in order to build the source.

1install automapper:
2    get_from svn("")
3    build_with nant, buildfile(""), FrameworkVersion35
5    with:
6        tasks full
7    build_root_dir "build"
8    shared_library "lib"

We could also do with code patches for some of the new build engines like psake which I really have no wish to learn and could do with somebody in the know to enable psake support for horn.

One of the huge disappointments with horn is that I thought we might get some sort of buy in or even recognition from some of the bigger players in .NET OSS but it seems people get more excited about updating their SCM to DVCS or build engine to rake or powershell or whatever is du jour than providing a standard means for the community getting it’s binaries and perhaps alleviating the upgrade path which as stands is excruciating.

I do have some sympathy with the want to upgrade to the new and shinny, after all OSS is meant to be fun, you get to do things here you might not get a chance to do. git does not work on the corporate model and you might not get a chance to use it otherwise. I also have total respect for anybody who sacrifices their spare time for OSS or the community as a whole. I also do buy into the logic of DVCS (distributed version control system) but I am not sold on git or maybe it is that I am not sold on the tooling and I am definitely not sold on github. I do not like the git tooling period, and my limited experience of github seems to suggest that it can go down enough times to suggest it will be frustrating. My DVCS of choice would have been with mercurial. It has google support and you can guarantee the google infrastructure will not be down that often. But hey Ruby On Rails uses git so it must be good, right? That said, I am not suddenly going to change SCM just because another project has, I need sound reasons to do so.

Not a lot can be done about this, developers including myself will always want to use the shinny and new but essentially my interest in the project is dropping and maybe it is just low down in the wish list of the .NET OSS space or maybe somebody can come up with a better solution. I am willing to share what I have learnt with anybody wanting to mount an attempt at providing a soution.

I am really not sure how much more of my ever decreasing spare time I can put into the project. I have an expectant girlfriend and my own business to run, OSS is dropping down my priority list.

I will say this though, my respect for the contributors of OSS projects has risen tenfold, the very fact that we have Nhibernate, castle and rhino and it is free is mind blowing. I urge every developer out there to think twice before writing a lazy assed post to an OSS forum along the lines of BUGZ, PLEAZZE HELPP MEEE. If you have a query, first search the forum. Nine times out of ten, you will find the answer and if not provide a detailed description or better still, a failing test if you can.

I almost feel better after this rant. Cathartic it was.

If any of this is of interest to you then please join the Horn user group for updates or check out the source here.


  1. The reason for the move to git is probably best summed up by ayende's post on it. From my perspective ( having used both svn and git + their bastard child git svn), it is far easier for me to do many small commits on a local branch, push to my clone and then send you a pull request that for me to do all my work without the ability to commit and send you a patch. =)

    As to the sheep thing - I think you will find that's because there are a key few that are prevalent in a large number of the OSS projects and these guys are the same bleeding edge crowd that, once they see something is good for them, jump in whole-heartedly. Git is like that - you will never understand why till you start using it - then ( after some pain ), you will just get it.

    Git does work well for corporate scm, and is being used by a number of corporates and can be serviced from either side of the firewall.

    The tooling for using git on windows is definitely less than ideal, part of this is due to windows developers coming late to the scene and part of it is that git is a *nix tool with *nix philosophies - command line with args and options to drown in vs pretty gui's. Having said that, it is refreshing to use git bash on windows and the ability to do some bash scripting is rather fun.

    Keep your chin up and I'm sure we can move horn toward it's goal, maybe just not at quite the rate you were hoping. =)

  2. We will keep moving towards our goal if developers like yourself get involved. Keep the contributions coming brother.

  3. Regarding git, I can't speak for anyone else but I spent a good couple of weeks evaluating it and I strongly feel that it has benefits over svn, hence my decision to move our internal projects over to it (which is in a corporate environment) and then later mvccontrib.

    If I hadn't found a benefit, then I wouldn't have switched. FluentValidation is still on CodePlex - I'm the only committer on this project so moving to git wouldn't really have any benefits. For MvcContrib, git/github really has helped - of all the committers I apply the most patches to mvccontrib and this is a real chore using svn. Patches are built against old revisions, missing files etc. GitHub has solved this problem for me, hence the decision to move.

    Personally I haven't found a problem with the git tooling on windows. The command line tools do have a bit of a learning curve, but once you're over that it works great. I did have TortoiseGit installed at one point, but I uninstalled it as I found myself never needing to use it.

    Likewise with build tools - you yourself has mentioned your frustration with nant and I'm sure many others (including me) want to get away from XML-hell. I think Ayende's recent post about psake definitely sparked some interest. I'm not sure whether I'd consider this 'herd mentality' or simply whether his post has given it a higher profile, and therefore more people are aware of it.

    Regarding the horn descriptors, I'd be happy to help mantain those for MvcContrib and any other projects of mine that are in horn. You know, if horn was on github I could send you a pull request ;)


  4. >> if horn was on github I could send you a pull request ;)

    Ha ha, that would involve a climb down on my part wouldn't it?

    I am joking, if moving to github meant that people from other OSS projects would take care of their own descriptors then absolutely I would move there.

    The post was more of a cathartic rant and my main grief with git is that a lot of the descriptors no longer work :-).

  5. If you find git confusing or fragile, I suggest you try mercurial instead. It's the same general idea, but far simpler to learn and use. You never get that weird feeling that the tool might "get into a weird state" at any moment.

  6. The choice is not mine unfortunately. We have to cater for what the OSS project of choice is using.

    It is completelly out of our hands.

    MVCContrib, Rhino etc. use git. In order to download it, I need to use the SCM that they use.

    We have git support in horn. I just need to update the descriptors.

  7. Just published a post about Horn and your help request in my italian blog:

  8. Thank you very much for the coverage. I just wish I could read Italian!!