Community Live - Open Source .Net eXchange
Community Live aims to be inclusive of all parts of the open community, and with this in mind we went along to the Open Source .Net eXchange, an evening mini-conference for open source developers who use Microsoft's .Net platform.
In the minds of some people, the words "open source" and ".net" do not go together, but as I discovered at the Open Source .Net eXchange, open source is actually thriving on Microsoft's platform. One thing in particular probably opened the way for this thriving community, Microsoft's attempt to reinvent the Java language as C#. C# code resembles Java; Java programmers can make sense of C# code and vice versa; what is completely different though is the surrounding ecosystem of libraries. However the similarity of code allows for Java to be ported to C# probably far more easily than any other language.
Now in part this was Microsoft's plan, to make it easier for Java developers to migrate to C#, but what they were probably hoping for was for them to move over purely to the Microsoft ecosystem. It was there though that open source came into play. With no restrictions on how they could re-use open sourced Java frameworks, libraries and best practices, a plucky band of C# developers brought over Java frameworks, sometimes porting them, sometimes rewriting them, and made them part of their .Net ecosystem. And so the Open Source .Net eXchange was all about this Alt.NET or "Progressive .Net" environment.
For an old Java developer like myself it was almost like stepping into a "Bizzaro" world where the letter J had been replaced by the letter N. Where Java developers talk of POJOs (Plain Old Java Objects), Alt.Net developers talk of PONOs (Plain Old .Net Objects). The Hibernate persistence framework becomes NHibernate in this world and the Spring framework sports a .Net at the end of it's name. At the Open Source .Net eXchange, well over a hundred developers turned up to discuss this alternate ecosystem and the mini-conference didn't disappoint.
Next up, David Ross introduced PostSharp, an Aspect Oriented Programming (AOP) system for C#. This was one of the few projects presented in the evening which didn't have a direct code lineage back to Java. AOP attempts to take the work out of ensuring consistent behavior across an application by weaving "advice" code into an applications classes and methods, according to a set of rules. You can perform this weaving at compile time, using the LGPL flavour of PostSharp, or at runtime, using the GPL flavour.
This was followed by a talk on ActiveMQ and NMS with David De Floreiner. NMS is a C# implementation of JMS, the Java Messaging System, which allows for persistant messaging between applications. NMS talks to ActiveMQ to provide its connection to the JMS network, and requires Java to run.
There was then a break, complete with pizza, beer and soft drinks, with much mingling and chatting, then it was back to the talks. Mike Hadlow talked about the Repository Pattern, a technique for managing and storing data for a domain model and discussed the issues around using this pattern when architecting applications.
Russ Miles from SpringSource talked about Spring.NET, a re-implementation of the Spring Java framework's concepts for .Net. Spring.Net deals with the plumbing of enterprise applications by providing DI (Dependency Injection) for configuration, AOP for adding behavior and service abstractions, for portability. Spring.NET deals with PONOs, allowing a developer to take a plain .NET object, set it up for use (DI), add runtime rules (AOP) and let it access services, all through the Spring framework. A show of hands with the audience appeared to show nearly half of them were already using a DI container. It was noted that one thing Spring.NET has over Spring is a library of aspects – ready rolled code to handle many common tasks, such as adding an ability to retry, available to the developer.
The final talk of the evening was Sebastien Lambla on Fluent NHibernate. NHibernate is a port of the Hibernate Core, the Java object-releational mapping (ORM) framework. Hibernate, by default, uses XML configuration files to map POCOs (Plain Old CLR Objects; synonomous with PONOs) to a database, but Fluent NHiberate allows developers to express those mappings in code, which proponents of the approach feel, makes it easier to manage. The talk worked a live example from XML mapping, to a code based mapping and showed Fluent NHibernate's various schema creation mechanisms.
The evening wrapped up with a draw, with top prize being a ticket to SkillsMatters Web Tech eXchange in May and other prizes including books, ebooks and tutorial vouchers. Despite the whirlwind of talks, people still wanted to talk and compare notes.
By the end of the night, I was somewhat impressed by how much of Java's common open source frameworks and techniques were available on .Net, and in many ways how much stronger it made the .Net developers there, that they were using open source as a way of keeping a common cause for better enterprise development, with Java developers and creating a wider community for the concepts behind the code. A .Net developer using the technologies talked about over the evening would have a lot less trouble changing underlying platforms, and that's another dimension of freedom for them.