Nicholas Piasecki
unread,Feb 10, 2009, 7:36:45 PM2/10/09Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to Castle Project Users
Thanks for the advice, y'all. We will stay on RC2 for now and backport
the required fixes.
I didn't mean to be inflammatory or to invoke knee-jerk reactions, and
if that was the result, then I apologize. To be clear, MonoRail has
been incredible for us and particularly at a time when Microsoft
offered no alternate solution. When I'm talking about the health of
the project, however, I'm not talking about bugs or submitting
patches. There are plenty of MonoRail users and enthusiastic MonoRail
developers submitting patches, but it is the patches themselves that
are the problem. Developers all scratching their own itches and
submitting their own features and improvements each week in ways that
do not always consider backwards compatibility greatly reduces the
accessibility and utility of those fixes.
Let's take the NVELOCITY-12 issue as an example. Once this severe
threading problem was discovered in our codebase, developers worked
around it by adding a static lock in the Controller's InternalSend()
method, along with a scary comment that indicated to never alter that
code without validating that the issue was fixed by performing the
load balancing stress tests. It is not performant and not ideal, but
it is safe. And so it sat there for some time. Now let's suppose that
after many moons of furious feature-adding, and the dust has settled
on this project, I want to go back and clean up this code wart.
How do I get this bugfix? I could immediately try downloading the RC3
binaries and update the whole framework, but this breaks an
unexpectedly large number of bits of unrelated code in our project. I
could download the latest NVelocity DLL from RC3, the next public
release candidate where the issue was fixed, but then the
Castle.MonoRail.Framework.Views.NVelocity DLL complains about not
finding the expected version, which is indeed only to be expected. In
a typical release candidate scenario, where few changes are expected,
I could grab the two new versions of just these two DLLs, and since
they are loaded from configuration, expect things to just work. But
there were in fact many changes to the *interfaces* that the views DLL
itself uses, making the whole shebang dependent on changes that
occurred later in the trunk.
Now I have two choices. (1) I could make massive code changes to bring
everything up to the trunk level to get this fix. Even with unit
tests, this move simply does not make sense--the bulk of RC2 and its
feature set are not broken, just this one bit. It's been running well
and serving thousands of requests for two years now. And post-RC2, the
new routing system, the new extensibility points, the easier unit
testing: these are all neat things, but I don't need them right now to
finish this task with minimal impact. Software is not a business
advantage for this company and mainly exists to "make things work" and
"keep them working." To that end, (2) I could also use the new
NVelocity DLL and recompile the RC2 views DLL against it. I'll take
this option, but it's not ideal because I'm now out of sync with *any*
public release candidate and am effectively maintaining my own
miniature branch of the NVelocity view template implementation. One
more thing to take under my wing.
And this is what I was trying to state about the health of the
project: not in terms of bugginess, lack of patches, or developer
enthusiasm, but in terms of release management and source control.
NVELOCITY-12 is exactly the type of blocker issue that would be fixed
in a release candidate. MR-ISSUE-180, where routing broke under the
Turkish locale, is another good example of a release candidate change.
Adding features or breaking interfaces, however, is something that
would happen on a completely separate code branch, say, MonoRail 1.5,
with the major applicable bug fixes backported down. Doing everything--
bugs and features--on the trunk and only the trunk makes cherry
picking the really important bug fixes difficult. And though I have
seen this issue discussed before on both hammett's blog and in the
developer discussion list, after keeping an eye on the commit logs
over the past year, I don't see the sea change happening anytime soon.
I'm not a configuration management expert, but I do recognize what
will cause maintenance issues down the line, and my nailing a list of
code breakages and grievances to the users forum is my humble of way
of making this opinion known. Take it with a grain of salt, leave it
as you please.
Thanks for working on MonoRail, and thanks for listening! I appreciate
every MonoRail developer and user and only hope to strengthen the
community with my feedback.
V/R,
Nicholas Piasecki