In case you haven’t already heard, effective immediately NHibernate 2.0 has been released and is available for download on SourceForge! This effectively brings NHibernate into feature-parity with the Java Hibernate 3.2 codebase, which is tremendous news for us NHibernate users.
For a sense of the feature-set that is now available to us .NET users, see the Hibernate 3.2 reference docs (which are a pretty accurate descriptor of the NHibernate 2.0 features).
My Position on Pre-Release Software
Many readers of this blog have asked since the beginning of the Summer of NHibernate screencast series whether I was planning to cover anything about NHibernate 2.0. My answer was always the same: I don’t spend much time on coding with software libraries that are in alpha, beta, RC1, RC2, CTP, or any other colorful sobriquet that otherwise means "we aren’t ready to release and stand behind this yet".
I will admit to a single recurring exception to this rule: the tremendously valuable Castle Project is still in RC status but I routinely make use of its very valuable capabilities (and indeed, NHibernate 1.x leverages parts of the very same unreleased Castle Project for its dynamic proxy support that drives its lazy-loading infrastructure). I think that much as Google’s GMail is still in beta three years after release and yet is reliable and stable (relatively), the RC releases of the bits that make up the Castle Project have been proven quite reliable and a dependable foundation upon which to base your work.
Despite Google’s increasingly-blurring of the lines of what it means to be ‘in beta’ (other than their actual search engine, does Google actually have any non-beta software out there????), I still stand by my basic position that when you are building software for people who are paying you for your work (e.g., for other than your own personal consumption) you have an obligation to base your work on release-class libraries (whether they are OSS or commercial).
There are certainly situations where this rule may need to be violated, but I firmly believe that you have a moral obligation to your client to disclose both the dangers and the benefits to them of what you are doing before you go down this route. And for most if not all of our work, NHibernate 1.2 provided sufficient capabilities to get the job done without having to expose clients to the dangers of using pre-release NHibernate 2.0.
That being said, none of this means that I don’t watch, read about, experiment with, and otherwise keep up to date on the development of pre-release software that I consider to be of potential future value to my work. Whether its Microsoft’s CTPs of their frequently-name-changing Task Parallels Library or NHibernate 2.0, I routinely download pre-release code, experiment with it in non-production environments, and watch closely the progress on much of these kinds of things like any good professional software developer should be expected to.
What does this mean for the Summer of NHibernate?
Now that NHibernate 2.0 has been officially released, it seems certainly reasonable that the Summer of NHibernate would start to address it in addition to NHibernate 1.2 upon which the series has thus far been based. And it will certainly do so. Fortunately, the base functionality of NHibernate is little-changed in the move from 1.2 to 2.0; there are very few breaking changes and this will mean that there are few challenging gotchas in migrating existing code from 1.2 to 2.0.
Since so much of the series has been based on 1.2 thus far, its my intention to finish out the presently-planned curriculum using NHibernate 1.2 and then in the final session cover the migration process of our sample code from 1.2 to 2.0 so that viewers can get a sense as to these breaking changes and what needs to be done to support a migration of any existing application to the new release. If time allows, I will also include in that final session a summary of the more significant new features that have been introduced so that viewers can get a taste of them and begin to experiment with them at their leisure.
So, patience: NHibernate 2.0 is coming to the Summer of NHibernate, just not until the end .