Death of irrtoolset?
Nick Hilliard
nick at inex.ie
Fri Oct 9 18:02:37 UTC 2009
On 09/10/2009 16:38, Faidon Liambotis wrote:
> All in all, I don't understand this sudden change of heart.
> Could you please give more details about your plans, especially
> regarding ISC's position on this?
Please excuse the melodrama in that talk. It was the first talk of the day
after a well-attended social from the night before, and I deliberately set
out to provide a modicum of entertainment, so perhaps it would be useful to
explain my position. It is this:
The code is unmaintainable. Completely and utterly unmaintainable.
It is a tangled mess of irreconcilably licensed C++ libraries. It is an
inheritance nightmare, with all sorts of objects pretending to be all sorts
of other objects, and no documentation whatsoever about how they are linked
together and how they should be used or anything. The class structures are
built such that debugging of any sort is almost impossible using gdb.
Internally, there is virtually no library / api or even coding style
consistency. There are two separate error management systems, and strings
are variously managed using nul-terminated c strings, stringstream and a
variety of other libraries. iostream is horribly overloaded. Operators
are overloaded all over the place and you just have no idea what they're
doing. Same thing with iterators.
Adding to the code is very difficult indeed, and almost nothing can be
trivially done. I'll stick my hand straight up and say that I'm not a c++
coder, but I've been playing around with computer programming for long
enough to know what you should or shouldn't be able to do or understand,
stared at code for a given time period. But the internals of irrtoolset
are still completely opaque to me. Maybe it needs smarter people than me
to work on it - like Cengis or Katie. But they cost lots of money and I
don't have lots of money to pay them. Nor does the RIPE NCC or ISC.
Also, the code may not be used for commercial purposes, according to the
licenses. In particular, the re2dfa license is dually owned by IBM and
ISI, and this code is critical to rpsl regexp management. Outside academic
and not-for-profit institutions, this means that you are simply not allowed
to legally use it. This alone is crazy. It doesn't affect me or you, but
it affects the majority of people who are interested in using RPSL for
their policy routing management.
I've no idea how to get the licensing changed. I seriously doubt that IBM
have any knowledge of their I.P. interest in the code, and I suspect that
the re2dfa lib was snatched from some weird version of gated without their
knowledge anyway. ISI, being an academic institution could go either way.
Some halls of academia are quite reasonable about licensing their code;
others see all I.P. as a potential cash cow. I have no idea which way ISI
would go on this.
As one person at the talk later noted, irrtoolset is a great example of a
project which was designed by someone who was clearly incredibly smart and
which would lead to a fine grade in a master's or even a phd thesis.
However, it is just not suitable for release as a maintainable production
package.
My take on it is this: 5.0.0 is tagged as r300 and is about ready to be
released. I need to check it out on some platforms first before getting
ISC to put it up on their ftp site. But as far as I'm concerned, there is
so much wrong with the current code base that it would be a lot more useful
for all concerned to develop a sensibly licensed rpsl client library using
a sensible scripting language which has easy-to-use template libraries
(perl springs to mind for a variety of reasons, not least because of
Template::Toolkit and lots of other really useful goodness on CPAN, but I'm
open on this). librpsl isn't massively cpu intensive and doesn't need
bare-bones C speed. A scripting language should do the job fine.
As I said in my talk, INEX has ridiculously large router configurations
even though we're a small exchange, and there is simply no way that we can
manage them manually. We need a tool like rtconfig, but we also need a
tool which can do more than this, and which can be made much more flexible.
Right now, there is no flexibility, not least because the strongly typed
nature of C++ means that adding anything means all sorts of crawling around
on your hands and knees doing stuff that it trivial in loosely-typed
scripting languages.
I also believe we need to revisit RPSL/RPSLng. But that's a separate
issue. The pdf of my talk on the ripe web site doesn't include the actual
stats, but the distribution of objects in the ripe DB is:
inetnum, 2751953
domain, 450991
route, 109857
inet6num, 28114
aut-num, 18837
as-set, 8772
key-cert, 5769
as-block, 2147
route6, 1210
route-set, 895
peering-set, 169
inet-rtr, 113
filter-set, 90
rtr-set, 14
Many of these objects are quite stale. Figuring out how stale is an
entirely different matter, but the point is that most of the more advanced
features of irrtoolset/rtconfig and rpsl are barely used.
I'm not going to do a whole lot more on this code base. If someone reports
a bug, I'll certainly take a look at it, and if someone asks a question,
I'll do my best to reply. But any time I get to spend on rpsl / client
policy routing is going to be spent on a rewrite, starting out with the
most useful and used features and leaving a framework for the less used
stuff in rpsl.
I don't know what the RIPE NCC's position is on this, or whether they have
a position. ISC do not have the resources to put a whole lot of effort
into the project. They'll happily host it, though. Other than that, any
individual that I've talked to with knowledge about the internals of
irrtoolset has agreed that it's not worth pursuing in its current form, but
that it could be worth pursuing in other forms. If I get some time, I
would like to explore this option.
Nick
More information about the irrtoolset
mailing list