I've always banged on about how Adobe deal with ColdFusion bugs, and what my opinion is of this. I have not - to date - cast my magnifying glass in Railo's direction...
Part of this is because Railo have a far superior bug tracking system - Jira - and one can very easily do one's own analysis (so if anyone is interested, they can DIY). The other part was on the whole I have found myself satisfied with Railo's approach to bugfixes. Well that's the impression I had got, anyhow. Having done some analysis... hmmm.
Realistically on the whole the Railo guys are great. I've added a table below listing how all the bugs I have raised have been dealt with (or ignored).
I will also add that Railo is an OSS operation, so I have less expectation of them to fix issues I raise, as I have paid them nothing, and if I really wanted to, I could fix the bugs myself. On the other hand I have paid for ColdFusion, so if I find a bug that gets in my way, I consider that I have already paid for working software, so there is a burden on them to fix significant bugs ASAP. Which, obviously, they generally don't do. However this article is about Railo, not Adobe, so I'll stop there.
Here's a table of the bugs/issues I have raised with Railo, and their current status. This was taken from an export from Jira, and a bit of dollying up. I've colour-coded some bits and pieces, in what I think are in an obvious way: green: satisfactory; red: not satisfactory; orange: in the middle.
Issue Type | Key | Version | Summary | Status / Resolution | Created | Updated | Triaged? | Important? |
---|---|---|---|---|---|---|---|---|
Bug | RAILO-3065 | 4.2.0.009 | Semi-colon required before array literal | Closed / Rejected | 15/5/2014 | 16/5/2014 | Yes | No |
Bug | RAILO-3047 | 4.2.0.005 | listFilter() doesn't correctly handle multi-char delimiters | Resolved / Done | 27/4/2014 | 2/5/2014 | Yes | Yes |
Bug | RAILO-3038 | 4.2.0.007 | Typo in error message | Resolved / Done | 21/4/2014 | 13/5/2014 | Yes | No |
Bug | RAILO-3030 | 4.2.0.007 | list iteration functions need to pass the delimiter into the callback | Resolved / Done | 11/4/2014 | 17/4/2014 | Yes | Yes |
Feature | RAILO-3029 | 4.2.0.007 | listSome() seems to exit prematurely? | Open / Unresolved | 11/4/2014 | 11/4/2014 | No | Yes |
Bug | RAILO-3016 | 4.2.0.006 | CFCACHE doesn't seem to work with simplest example | Resolved / Rejected | 5/4/2014 | 8/4/2014 | Yes | Yes |
Feature | RAILO-3008 | 4.2.0.006 | Revise approach to savecontent | Open / Unresolved | 31/3/2014 | 31/3/2014 | Yes | Yes |
Feature | RAILO-3006 | 4.2.0.006 | Open / Unresolved | 30/3/2014 | 30/3/2014 | No | No | |
Bug | RAILO-3000 | 4.2.0.006 | Bug with scoping inside iterator functions | Resolved / Rejected | 26/3/2014 | 8/4/2014 | Yes | No |
Feature | RAILO-2942 | 4.2.0.002 | Iterators and generators | Open / Unresolved | 6/3/2014 | 6/3/2014 | No | Yes |
Feature | RAILO-2934 | 4.2.0.001 | Callback versions of listSort(), structSort(), querySort() to match arraySort() | Open / Unresolved | 28/2/2014 | 28/2/2014 | No | Yes |
Bug | RAILO-2928 | 4.2.0.001 | Many string member functions not implemented | Open / Unresolved | 24/2/2014 | 24/2/2014 | Yes | Yes |
Feature | RAILO-2926 | Feature toggle system | Open / Unresolved | 22/2/2014 | 22/2/2014 | No | No | |
Bug | RAILO-2925 | 4.2.0.001 | Fix isNull() | Open / Unresolved | 22/2/2014 | 8/4/2014 | Yes | No |
Bug | RAILO-2924 | 4.2.0.001 | Fix null-coalescing operator to do what it says on the tin | Resolved / Rejected | 22/2/2014 | 8/4/2014 | Yes | No |
Bug | RAILO-2889 | 4.2.0.001 | Semi-colon required after BREAK and CONTINUE statements | Open / Unresolved | 1/2/2014 | 1/2/2014 | No | No |
Feature | RAILO-2887 | 4.2.0.001 | arrayEach() should pass the array index into the callback | Open / Unresolved | 30/1/2014 | 30/1/2014 | No | Yes |
Feature | RAILO-2883 | 4.2.0.000 | Add format mask to parseDateTime() | Open / Unresolved | 29/1/2014 | 30/1/2014 | Yes | Yes |
Feature | RAILO-2882 | 4.2.0.000 | Deprecate ODBC functions, enhance date-formatting functions | Open / Unresolved | 29/1/2014 | 30/1/2014 | Yes | No |
Bug | RAILO-2881 | 4.2.0.000 | parseDateTime() doesn't interpret just a YYYY ISO date correctly | Resolved / Done | 29/1/2014 | 8/5/2014 | Yes | No |
Feature | RAILO-2880 | 4.2.0.000 | createOdbc~() functions do not do what they say on the tin | Open / Unresolved | 29/1/2014 | 29/1/2014 | No | No |
Bug | RAILO-2861 | 4.2.0.000 | Bug in scientific notation parsing | Open / Unresolved | 21/1/2014 | 21/1/2014 | Yes | No |
Bug | RAILO-2828 | 4.1.2.005 | Glitch in parser | Resolved / Done | 7/1/2014 | 8/1/2014 | Yes | No |
Feature | RAILO-2814 | 4.1.2.006 | Allow the type of variables to be specified | Open / Unresolved | 23/12/2013 | 24/12/2013 | Yes | Yes |
Feature | RAILO-2788 | 4.1.2.005 | Railo ignores chr(0) in strings | Open / Unresolved | 7/12/2013 | 7/12/2013 | No | No |
Feature | RAILO-2650 | 4.1.1.005 | Make sure isValid("email") matches ColdFusion's implementation | Open / Unresolved | 9/10/2013 | 10/10/2013 | Yes | No |
Feature | RAILO-2629 | 4.1.1.004 | Make built-in functions first class | Open / Unresolved | 28/9/2013 | 28/9/2013 | No | No |
Bug | RAILO-2616 | 4.1.1.003 | QoQ CAST() bug | Open / Unresolved | 20/9/2013 | 23/9/2013 | Yes | No |
Bug | RAILO-2606 | 4.1.1.003 | param does not support associative array syntax | Open / Unresolved | 10/9/2013 | 11/9/2013 | No | Yes |
Bug | RAILO-2605 | 4.1.1.003 | param does not support scoped variables | Open / Unresolved | 10/9/2013 | 31/5/2014 | No | Yes |
Feature | RAILO-2582 | <=>: compare operator | Open / Unresolved | 19/8/2013 | 21/8/2013 | No | No | |
Feature | RAILO-2581 | ==~: regex compare operator | Open / Unresolved | 19/8/2013 | 21/8/2013 | Yes | No | |
Feature | RAILO-2580 | ?.: safe navigation operator | Open / Unresolved | 19/8/2013 | 17/2/2014 | Yes | No | |
Feature | RAILO-2579 | .. and ... range operators (and Range data type) | Open / Unresolved | 19/8/2013 | 5/12/2013 | Yes | No | |
Bug | RAILO-2575 | 4.1.1.001 | TOP functionality not quite implemented correctly in CFDUMP | Resolved / Done | 19/8/2013 | 22/10/2013 | Yes | No |
Feature | RAILO-2278 | dbvarname on cfprocparam | Open / Unresolved | 31/1/2013 | 31/1/2013 | No | Yes | |
Bug | RAILO-2256 | 4.0.2.000 | Bug in hashCode() | Resolved / Duplicate Issue | 18/1/2013 | 18/1/2013 | Yes | No |
Bug | RAILO-2228 | 4.0.2.002 | listToArray() incompat with ColdFusion | Resolved / Done | 29/12/2012 | 11/1/2013 | Yes | Yes |
Feature | RAILO-2128 | 4.0.0.013 | Typo in info screen | Open / Unresolved | 26/10/2012 | 26/10/2012 | No | No |
Bug | RAILO-2096 | 4.0.0.013 | RESTful web services do not correctly handle character encoding | Open / Unresolved | 8/10/2012 | 8/10/2012 | Yes | No |
Feature | RAILO-2078 | 4.0.0.013 | valueList() should take any expression that evaluates to a query column | Resolved / Done | 29/9/2012 | 4/10/2012 | Yes | No |
Bug | RAILO-2070 | 4.0.0.013 | arrayReverse() should update the array inline like other array functions | Open / Unresolved | 18/9/2012 | 18/9/2012 | No | No |
Feature | RAILO-2069 | 4.0.0.013 | Locale support for arraySort() | Resolved / Done | 18/9/2012 | 18/9/2012 | Yes | No |
Bug | RAILO-2059 | 4.0.0.013 | Bug with parameter parser in Query.cfc | Open / Unresolved | 7/9/2012 | 7/9/2012 | Yes | No |
Bug | RAILO-2048 | 4.0.0.013 | Incompatibility with ColdFusion in arraySwap() behaviour with sparse arrays | Resolved / Done | 27/8/2012 | 27/8/2012 | Yes | No |
Bug | RAILO-2046 | 4.0.0.013 | arrayDelete() | Resolved / Done | 23/8/2012 | 27/8/2012 | Yes | No |
Bug | RAILO-2045 | 3.3.4.003 | arrayContains() should take any data type in the second argument | Resolved / Done | 23/8/2012 | 27/8/2012 | Yes | No |
Bug | RAILO-2042 | 3.3.4.003 | Probable bug with duplicate() | Resolved / Done | 22/8/2012 | 29/8/2012 | Yes | No |
It's interesting that they've actually fixed far fewer issues (proportionally) than I thought. I was under the impression pretty much everything I raise gets fixed. It's less than 50% (closer to 33%). That said, I raise everything I notice, and not all of it is important to me (I should add a column for that, I guess. Done).
Update:
As Ryan points out in the comments below, I'm being a bit harsh with my analysis here (actually it's just a case of me being in a rush, and forgetting to consider this): I include feature requests in that calculation, and he rightly observes there ought to be no expectation as to when they're implemented. Indeed as I have no expectation of them being implemented, I should treat them accordingly. That being the case, the ratio comes down to [counts on fingers] 10/26, so around 60% fix rate.What I think is not great is that there are so many issues that simply haven't been looked at at all: a full third of them. And a few of those date back to 2012. Harrumph.
Anyway, there you go. I've not much else to say on this, and it's time for me to start work.
--
Adam