The new OpenEverything organization

OpenRasta has been there for many years, and is the most widely used alternative framework for ReST applications.

OpenWrap has been there for a year and a half, and has some usage for advanced users wanting a nicely-architected package manager that doesn’t take dependencies on lots and lots of other technologies and doesn’t require VS.

And we have sub-projects, such as OpenFileSystem, an IO abstraction library that ought to  make using the file system easier, shipping with an in-memory version that should work the same way as your target operating system.

Now all those projects are at varying stages in their life, and the amount of work I used to give to only OpenRasta has been vastly disolved, which in turns means that some users are starting to get quite annoyed with our dreadful homepage and our lack of binary downloads.

Add to this the competitive pressure on OpenRasta introduced by Nancy and the future openrasta copycat WebAPI from the photocopier machine Microsoft, and you’ll understand that the current trend is not sustainable.

This year I’ve decided to simplify my life and delegate much more of my work to a community that has been so far very supportive but very unwilling to contribute anything back. I also want to go back to enjoying working on OSS software to build great solutions and not focus my energy on simply competing with any tool and framework microsoft invents to duplicate existing OSS solutions. I have a vision and I want to deliver on that, OpenRasta and OpenWrap are two sides of that, and I want to start making them work together the way I want without having to be dragged in competitive races with Microsoft’s marketing dollars.

So we had a planning meeting with some of the companies that use OpenRasta in anger in London and want to step up their contributions (7digital and huddle, we love you guys!), and decided that we were going to change how things are done in the OpenEverything projects.

Project organization

First and foremost, I’m going to contribute much less to the 2.1 branch of OpenRasta, and patches / merges / new builds are going to be handled by the contributors that are given write access to the git repository. This gives away a lot of my power.

I’m going to be focusing on the outstanding modules for OpenRasta that add a whole bunch of functionality that will be rolled-back in 3.0: the caching module (soon to arrive in 0.2 version), the new config API (with compact fluent API and convention-based config) and the dynamic / json out-of-the-box support. There’s also a new openrasta-diagnostics module that I’ve started building and want to get out there. I’ll also contribute some work towards the async support that has been requested by some.

OpenFileSystem 2.0 is going to be under Henrik Feldt supervision, and will be a merge of the amazing work he did on long-path and transactional file system support.

All of our versioning is going to be a strict application of http://semver.org 2.0 (which is now the only standard in OpenWrap), so that will solve any breaking changes being introduced without knowing.

Of course, OSS is not a democracy, so I keep a veto right on certain changes that would impact future versions, or architectural changes that do not fit with the vision I have for all those projects. This is give and take, I give some of the control of more than 4 years worth of my development time, but I will keep the main architect role for the time being.

As for releases, anytime someone with commit access wants to create a new release, the process is very simple: they email on the mailing list, and if there’s no majority opposition, we have a new build. Simples.

Orphaned projects

Sadly, we do have some orphaned projects in all this. Mostly, the container support for each of the IoC containers is not up-to-date for StructureMap (tests are broken) and Unity (I have no understanding of the code, so while I *think* I fixed the latest build, I can’t try it out). At this stage, anyone with a vested interest in those projects should start contributing and come help out, or risk that code not being maintained anymore.

OSS is not just take, it’s give too

That leaves a real question for those companies that have used OpenRasta to make money and provide a killer-architecture and have contributed absolutely nothing back since the beginning.

I’ll let you in on a little secret. I give the code away on everything, so it is a company’s legal right to take and not give back. As a side-effect, it is my complete right to completely ignore those that make money on our hard work and want to keep it all to themselves, and my responsibility to not prioritize the needs of those that contributes over those that are selfish..

OSS is also about giving back, and this year it’s what is being enforced on the OpenEverything projects. Fostering contributions is what we want to get to. No more free-lunch though, that’s for sure.

Conclusion

This new organization should let OpenRasta absorb patches and get on the 2.1 release cycle faster, and then on to 2.2, etc. This will allow me to focus on what I want to build for 3.0, and this will also allow more contributors to own projects more directly than before.

If you have comments or feedback on all those new plans, please let us know on the now unified openeverything-dev mailing list.

Please don’t use it for user questions, we’ve moved all support of all those frameworks to stackoverflow where google can do its job and users can find their answers more quickly.

Posted in Uncategorized | 3 Comments

HTTP tour: Manchester, Edinburgh, Glasgow, Dundee and Aberdeen.

I’ll be touring the north of Britain from the 18th of January with two talks: HTTP caching 101 and Links, forms and Unicorns.

The details are at http://www.gep13.co.uk/blog/?p=609 so if you’re interested in HTTP or/and ReST, do come along!

Posted in Uncategorized | 2 Comments

Free OpenWrap workshop Saturday 10th December in Lier, Belgium

You get 4 hours and a lunch (complimentary from PeopleWare) to come and talk about package management and how it can change the way you build software. It’s completely free, you just need to register on eventbrite.

As I highlighted before, if you’re anywhere in Europe where you know of a user groupb, I’ll be happy to come and share what I learnt in the last two years building composite systems and how to build them using a package manager. Just email me at seb at serialseb dot com, and let’s make it happen!

Posted in Uncategorized | 1 Comment

#oredev ReST talk – Links, forms and Unicorns

Here are the slides for the talk I just delivered at Oredev. If you like secret agents, assassination attempts and ReST, those are for you.

Posted in Uncategorized | Leave a comment

OpenWrap 2.0.1–a better way to look at dependencies

There are many many features in OpenWrap 2.0, and at this rate it will take me many weeks before we go through them all. As such, I shall only blog about the things that are fully finished (and why you’ve not seen anything about remotes in 2.0 yet, that’s coming, you’ll like it, trust me).

Before

One of the things that has been difficult in the past with OpenWrap was knowing exactly what dependencies you had and how versions got selected. Worse than that, while in a project, the list-wrap command would only show you the list of packages currently in your folder, be it that they are in use or not.

A better list-wrap

So we’ve worked very hard to give you a better way to see what’s going on from the command line (and it’s always my belief that if you can make something understandable in 80*120 characters, you can make it understandable in *anything*).

Listing project packages

The first change is when you issue a list-wrap command within a project.

C:\src\openwrap [exp_list_wrap +5 ~25 -4 !]> o list-wrap
# OpenWrap Shell 2.0.0.10
# Copyright © naughtyProd Limited 2009-2011
# Using C:\src\openwrap\wraps\_cache\openwrap-2.0.0.86438072\bin-net35\OpenWrap.dll (2.0.0.1)
─default scope
 ├─SharpZipLib 0.86.0
 ├─openfilesystem 1.0.0.61263243
 ├─openwrap 2.0.0.86438072
 ├─tdnet-framework 2.0.0.48555719
 └─Mono.Cecil 0.9.4.1
─tests scope
 ├─NUnit 2.5.9.10348
 ├─SharpZipLib 0.86.0
 ├─openfilesystem 1.0.0.61263243
 ├─openwrap 2.0.0.86438072
 ├─tdnet-framework 2.0.0.48555719
 └─Mono.Cecil 0.9.4.1

A couple of things are visibly different 1.0.

First, we now show the currently-used package for each of the scopes. if you don’t know what scopes are, I’d refer you back to the wiki documentation, the feature is one of the first we built for the now defunct 1.1, and will be blogged about when I consider the feature *complete*.

Second, we show you the packages *currently in use*. No more showing you lots and lots of package versions that are available but not used anymore, we only show you *the same thing your projects will get*.

Third, we show it as a tree. I love ASCII art and thought it absolutely had its place in a package manager.

Gimme gimme gimme a packaaaa aaage per line…

Of course, that’s also a vast improvmenet on what we had before. But as you know, package resolution ca get a bit hairy when a lot of packages have different rules, and trying to check manually what the heck is going on requires checking the package itself, something I’m sure you don’t want to be doing.

So now we can look at the whole of the resolution tree by adding an –includeDependencies flag. What’s the output then, I hear you ask with excitement and awe in your voice?

C:\src\openwrap [exp_list_wrap +5 ~25 -4 !]> o list-wrap -iD
# OpenWrap Shell 2.0.0.10
# Copyright © naughtyProd Limited 2009-2011
# Using C:\src\openwrap\wraps\_cache\openwrap-2.0.0.86438072\bin-net35\OpenWrap.dll (2.0.0.1)
─default scope
 ├─depends: sharpziplib = 0.86
 │ └─SharpZipLib 0.86.0
 ├─depends: openfilesystem = 1.0
 │ └─openfilesystem 1.0.0.61263243
 │   └─depends: openwrap content
 │     └─openwrap 2.0.0.86438072
 │       ├─depends: sharpziplib = 0.86
 │       │ └─SharpZipLib 0.86.0
 │       ├─depends: openfilesystem = 1.0
 │       │ └─openfilesystem 1.0.0.61263243
 │       │   └─...
 │       ├─depends: openwrap content = 2.0
 │       │ └─openwrap 2.0.0.86438072
 │       │   └─...
 │       ├─depends: tdnet-framework
 │       │ └─tdnet-framework 2.0.0.48555719
 │       └─depends: Mono.Cecil = 0.9.4
 │         └─Mono.Cecil 0.9.4.1
 ├─depends: openwrap content = 2.0
 │ └─openwrap 2.0.0.86438072
 │   ├─depends: sharpziplib = 0.86
 │   │ └─SharpZipLib 0.86.0
 │   ├─depends: openfilesystem = 1.0
 │   │ └─openfilesystem 1.0.0.61263243
 │   │   └─depends: openwrap content
 │   │     └─openwrap 2.0.0.86438072
 │   │       └─...
 │   ├─depends: openwrap content = 2.0
 │   │ └─openwrap 2.0.0.86438072
 │   │   └─...
 │   ├─depends: tdnet-framework
 │   │ └─tdnet-framework 2.0.0.48555719
 │   └─depends: Mono.Cecil = 0.9.4
 │     └─Mono.Cecil 0.9.4.1
 ├─depends: tdnet-framework
 │ └─tdnet-framework 2.0.0.48555719
 └─depends: Mono.Cecil = 0.9.4
   └─Mono.Cecil 0.9.4.1



Now, that’s a lot of information, but you should be piping this stuff to less anyway. The –includeDependencies flag (which I’ve shortened to –iD here, thanks to our great console algorithm that does the right thing most of the time) lets you see *exactly* what happens.

From your original descriptor (“default scope”), you can see all the dependencies you have declared, as you’ve specified them. For each of the packages that were found in your current project for those dependencies, you see their dependencies too, and on and on. The only time we don’t show something is when the tree is recursive (say, openwrap depending on openwrap), in which case we show you the “…” line you can see above.

Remote packages

There’s a bit of changes to the remote packages too.

First, we’ve fixed the silly bugs where you got all the remote packages even if you specified –remote name, A very annoying stupid issue that appeared in 2.0 when we rewrote the remote support (yes, I do know that’s not been blogged about either yet, be patient, we’re nearly there).

Second, we’ve changed the displaying to show you what packages were found in which repository, so you can understand where things come from without cluttering the actual output. Say I have two remotes, remote1 and remote2, and they each have copies of openwrap. A simple o list-wrap –remote is now much easier to understand.

C:\src\openwrap [master]> o ls-wrap -query openwrap -rem
local
└─openwrap (1.0.2, 1.0.1, 1.0.0)
└─openwrap-bootstrap (1.0.0)

local
└─openwrap (2.0.1, 2.0.0, 1.1.0)

Couple of things have changed.

We now segregate packages by remote, so you can see immediately which remote has which package, making knowing where things come from much easier.

The second change is that we only show the first three components of package versions by default, as this is what OpenWrap understands and what you should rely on.

Conclusion

Understanding dependencies between packages can be a bit of a challenge. The new list-wrap should give you better understanding of what is actually going on.

Posted in Uncategorized | 1 Comment