Three Cheers for Norbert Sudhaus!

Originally published at: https://javacc.com/2020/11/05/three-cheers-for-norbert-sudhaus/

It was at the 1972 Olympic Games in Munich that 22-year-old German student Norbert Südhaus had his Warholian 15 minutes of fame – or infamy, rather. As a prank, he snuck into the stadium (security was much more lax back then) just before the winner of the marathon, the American Frank Shorter, was set to arrive to run his victory lap. As described in Wikipedia:

As Shorter was nearing the stadium, German student Norbert Südhaus entered the stadium wearing a West German track uniform, joined the race and ran the last kilometre. Thinking he was the winner, the crowd began cheering him before officials realized the hoax and Südhaus was escorted off the track by security. Arriving 35 seconds later, Shorter was perplexed to see someone ahead of him and to hear the boos and catcalls that were meant for Südhaus.

Now, like most people, I have never been in the exact position that Frank Shorter was in that day, but even so, how hard is it to imagine how he would feel about this? Understand that it is not just that he ran the race on that day and happened to win. No, what he achieved that day was the culmination of years of hard work and dedication. Yet, this moment, that was supposed to be a jewel in his life, was ruined by this immature prankster, Südhaus.

I think that it is safe to say that, when we describe this incident, everybody sympathizes with Shorter and nobody sympathizes with Südhaus. In fact, we would likely feel deep suspicion of anybody who did not feel that way. If anybody started saying that Shorter was a villain and that Südhaus was treated unfairly, we would start thinking: Holy cow! WTF is wrong with this guy?

Well, that's how we would react if we were convinced that the person was serious. (But how could he be?) Surely if anybody was expressing any support for Norbert Südhaus, it would just be tongue-in-cheek.

All of that just seems obvious. However, there is another point about this scenario to be considered: none of the preceding has anything to do with how likable a guy Frank Shorter was (or is) or any of that. It is simply not relevant. Shorter won the race and he earned his moment of glory.

Now, most likely, Frank Shorter is a nice guy and a very admirable individual -- but that said, I actually don't know for sure. But more importantly...

I don't care!

Whether Shorter is a nice guy or a jerk, whether he holds the appropriate politically correct views or does not... none of that matters. He ran the race and won and his achievement must be recognized. Well, surely it was, for the most part. I assume that, once the confusion was cleared up, he did receive the rightful applause from the crowd. And, doubtless, when he went back to his home town in America, he received a hero's welcome. Of course he did. He achieved what he achieved and had earned that.

Well, finally, what all of this is about is elementary sportsmanship -- really, basic decency. Not just sporting achievements either.

Accomplishments must be acknowledged.

Well, the astute reader, knowing the situation I find myself in with my efforts to resuscitate this JavaCC project, may sense where I'm going with this. I feel it's a delicate matter to take on this subject because I have this fear that I will sound like a whiner or something like that. Nonetheless, I feel that certain things must be said. The lack of any sense of basic sportsmanship that predominates in this open source software field is absolutely striking. I don't really understand it either. But I see it, even if I'm maybe supposed to pretend that I cannot see it. Finally, I feel like I have to get a few things off my chest.

My Very Own Frank Shorter Moment(s)

In my work on JavaCC, there have been various significant technical milestones that could be perfectly well thought of as Frank Shorter moments. When I implemented the INJECT directive back in 2008, when the project was still called FreeCC, in retrospect this was quite something. I had unified the JavaCC and JJTree tools as a single tool and I had solved this major problem that made JJTree (the automatic tree-building component of the legacy JavaCC package) so problematic to use.

Just as Frank Shorter deserved acclaim for what he achieved on that day in 1972 (and the Norbert Südhaus incident aside, surely did) I think I deserved some recognition from the JavaCC "community" for solving cleanly this whole problem of having to post-edit the generated XXXNode files in JJTree. Unfortunately, very few people got any benefit from my work. This was because the gatekeepers, the nothingburger artists, sitting on the canonical JavaCC project decided to pretend -- month after month and year after year, eventually decade after decade -- that the work I had done simply did not exist.

More recently, I achieved another such technical milestone. As I reported here a few months ago, I finally fixed that longstanding bug of nested syntactic lookahead not working. Just as Frank Shorter, properly understood, did not achieve what he achieved on that one day, but it was the culmination of years of hard work, so it was with this bugfix. In fact, truth told, I did not consciously set out to fix that bug. What happened was that, after yet another cycle of code cleanup and refactoring, I just suddenly saw that this longstanding bug was trivially fixable! This, by the way, is something that nothingburger artists never really understand, that real software development is a process of constant creative destruction, and what frequently happens is that, after a round of cleanup, certain features that had not previously occurred to you, just suddenly suggest themselves! And this happens by taking a very aggressive, fearless attitude towards the codebase. The fearful attitude of the gatekeepers, terrified of touching the code, simply cannot produce any meaningful progress.

The Norbert Südhaus Fan Club

Nested syntactic lookahead working properly is a game changer because it means thatall sorts of elegant solutions to parsing problems that should have worked but, due to that bug, never did, now do work.

It struck me (and I guess still does) as borderline incredible that anybody would continue to use the legacy JavaCC tool, in which this is broken, in preference to my version, where it is fixed -- at least, if they knew my version exists! (Ay, there's the rub!) I also reasoned that no ethical person, in good conscience, could continue to advocate the use of the broken, obsolete legacy JavaCC tool. (I see I was dead wrong about this!)

So, what I am calling out in no uncertain terms is this absolutely unsporting refusal to acknowledge the work I did. Again, as I pointed out above, it has nothing to do with liking me or thinking I'm a nice guy or any of that. I did the work and an honest, ethical person surely must acknowledge that!

Hopefully, I have made my point on that, but amazingly, it even goes beyond that. What is truly extraordinary about this situation in which I find myself, in this second run at resuscitating that crufty old JavaCC, that has effectively been abandoned for 20 years, is that there are actually people who believe (or they say they believe it...) that I am doing something terribly wrong. They think that I, Jon Revusky, am victimizing the likes of Sreeni Viswanadha or his mini-me, Francis André, or any of the other nothingburger artist gatekeepers sitting on that old nothingburger of a project.

Somehow, it does not occur to them that it is these gatekeepers who are victimizing not just me, but everybody who stands to benefit from the project being actively developed! Moreover, they believe apparently that these kinds of people have some sort of unquestionable right to sit endlessly on some well-known open source project, doing nothing meaningful for years and eventually decades -- and if somebody actually decides to pick up the thing and do something with it, it is those people who are doing something wrong!

Well, for crying out loud! Sun Microsystems open-sourced the code in June of 2003 and in 17 years, the people sitting on the project have put out all these releases (from a 2.x to a 7.x) and none of that incorporates a single new feature or any sort of new idea! (Is this anything more or less than just a total FRAUD?) In any case...

Was the intention of this operation of open-sourcing the code to open it up to further development or to enable a bunch of gatekeepers to sit on the thing and not only do nothing themselves but actively prevent anybody else from doing anything?

How could anybody believe this? Yet they maintain this position even though they are the ones who stand to benefit directly from my work! Over the last few months, I have fixed bugs that are over twenty years old!

How despicable of me!

And, actually, the above is, if anything, an overly generous characterization of the situation. Not only do these gatekeepers do nothing themselves, but they do not even do the most minimal maintenance level work. For example, the legacy JavaCC project only supports a 10-year-old version of the Java language (JDK 7) and this is only because somebody donated the incremental work for this. I had some private correspondence with the person who donated that patch and he told me that it took something like a year for them even to look at his patch. In any case, keeping the existing tool up to date with the evolution of the Java language would be a minimum baseline of project activity such that, if they decline to do even that, it is effectively abandonware.

I am quite satisfied that the stance of these people, by and large, is about as absurd as the notion that Frank Shorter was the one victimizing Norbert Südhaus!

Poor Norbert!

Not long after fixing the nested syntactic lookahead bug, I wrote to Theo Norvell, who had been the maintainer of the JavaCC FAQ for at least a decade, and still regularly answers JavaCC-related questions on StackOverflow telling him that I had fixed this longstanding bug issue. I had a vague feeling that Theo did not like me very much (not clear why, since I never did anything to him) but I still thought he had enough of a sporting mentality that he would write back a congratulatory note.

Well, I was wrong. (It is an unfortunate fact that I just never manage to underestimate any of these people.) Well, what is one to expect from card-carrying members of the Norbert Südhaus fan club? Norvell did not write me back any such congratulatory note -- or any note at all. I also see that he continued to answer questions on Stackoverflow about JavaCC, never mentioning that there was a more advanced, fixed version -- i.e. my work.

That was my second-last email to Norvell. I later wrote him again (sometimes it is downright impossible to abstain from scratching an itch) and simply expressed how I felt about his behavior. Here is a key extract:

This whole approach that you seem to be taking, which is basically to pretend... (I know that is not terribly flattering but I can't find another word...) to pretend month after month, year after year that the real work in a space does not even exist.

snip...

I'll make this very brief. The point is this: what kind of person do people who behave like this come off as? At least to a discerning observer. (Granted, you can always hope that there are very few discerning observers out there!) But to the discerning observer, you just end up coming across as... well, not really a very good person, somewhat mean-spirited and ungenerous. And it's fundamentally very dishonest behavior. Obviously, my main problem with it is that it's outrageously unjust towards me, but properly understood, it's not really about me specifically. Again, you can do what you want, but you can't affect being surprised when I resent it. Right?

This message also received no response. (This time, that did not surprise me. I can be very slow, but eventually I do learn the lesson.)

Of course, I have no certainty about Norvell's views on any of this, since he declines to answer my emails. However, I suspect that he is one of these people who believes that I have somehow mistreated the people in the legacy JavaCC project.

To believe that I have mistreated Sreeni and the rest of the nothingburger artists who make up that "community" is about akin to believing that Frank Shorter somehow mistreated Norbert Südhaus. After all, we all know that Norbert was the rightful winner of the 1972 Olympic Marathon! (If Frank Shorter gets openly indignant about this, that just shows what a bad guy he is!)

So, there it is.

Three Cheers for Norbert Südhaus! Hip Hip Hooray!

I was rereading this post today, a few days after having written it, and there are a couple of nuances that I feel like I should make clear.

On the one hand, if anything, what I wrote above understates the case. The implicit comparison of certain people to Norbert Südhaus is actually unfair to old Norbert. You see, for one thing, Norbert Südhaus could not possibly have thought that he was ever going to convince anybody for very long that he was actually the winner of the Olympic marathon. Obviously not. He wasn’t even enrolled as a competitor in the race! He could fool the spectators for at most a few minutes – about as long as it would take for the officials to become aware of what was happening and take the appropriate action.

That’s one thing, and the other thing is that there is absolutely no reason to believe that Südhaus pulled that stunt out of any mean-spiritedness or envy or hostility towards the real winner of the race, Frank Shorter. Quite likely, he had no notion of who was even winning the race.

In short, it was just a silly prank. However, if you look at the nothingburger artist types, the gatekeepers who sit on a well known open-source project like JavaCC, they really do want people to believe that they are responsible for a body of work that they had nothing to do with creating. Not only did they have nothing to do with creating the software in question, but they are not even doing the minimal maintenance level work that being a project maintainer would entail. For whatever reasons, these people are engaging in a fraud.

Also, even though I would be the first to admit that I do not have mind-reading ability, I think certain things are very very palpable: the refusal to acknowledge the real work taking place in the space really does stem from mean-spiritedness, envy – towards me. Well, towards me in this specific case. Properly understood, the general phenomenon has quite little to do with me. But it seems pretty clear that, in this specific case, the people who do not want to acknowledge my work in the space know full well that they are not capable of doing this work themselves, and they really do feel this burning resentment towards me because I am capable of doing it. I do not really believe that there is any other viable explanation of their behavior.

Well, one aspect of this post that makes me a tiny bit uncomfortable is that it may look like I am singling out Theo Norvell. Granted, I am quite unhappy with that individual’s behavior, but I do have to say that, of these various people, he is even very far from being the worst. If I didn’t mention hardly anybody else by name, it was simply because it would have made the post too long.

But regardless, it’s actually not about any one specific person really. It’s about the whole phenomenon. It’s not pleasant or pretty but I feel that I have no choice but to lay it out like this. I find myself at the receiving end of such a level of viciousness from people that I have no choice but to lay out what is going on with this. In my first run at resuscitating that JavaCC project, I never really did what I’m doing now. But I now feel that that was a mistake and what I’m saying now needed to be said.

Below is the full text of the last email that I sent to Theo Norvell, on 4 October. Since he didn’t deign to answer the message, I guess I’ll just post it here as an open letter. The thing is, though, that I am actually a bit uncomfortable about giving the impression that I am singling out Norvell. I could have sent this same message almost verbatim to a number of different individuals. However, this email was addressed to Norvell, not those other people.

Theo,

First of all, to be clear, everybody can do what they want, in principle, but I think it’s still in your interest that I explain a thing or two to you.

This whole approach that you seem to be taking, which is basically to pretend… (I know that is not terribly flattering but I can’t find another word…) to pretend month after month, year after year that the real work in a space does not even exist. Well, it’s not just about you. It’s that whole scene around the legacy JavaCC project. This seems to be their game plan. They are aware of my work and I can’t think of what their plan is wrt that. They’re certainly not going to try to compete with me in any legitimate way technically. (One can be absolutely sure of that!) No, they’re just going to pretend indefinitely that the more advanced version of the tool does not exist!

I’ll make this very brief. The point is this: what kind of person do people who behave like this come off as? At least to a discerning observer. (Granted, you can always hope that there are very few discerning observers out there!) But to the discerning observer, you just end up coming across as… well, not really a very good person, somewhat mean-spirited and ungenerous. And it’s fundamentally very dishonest behavior. Obviously, my main problem with it is that t’s outrageously unjust towards me, but properly understood, it’s not really about me specifically. Again, you can do what you want, but you can’t affect being surprised when I resent it. Right?

But that’s how it comes across to me, but somehow, I don’t think just me. It isn’t behavior with any tendency to enhance your credibility or reputation – again, at least for any discerning observer. Partly, because one is supposed to stay abreast of the state of the art in a space. You can’t just pull a 56K baud modem out of the drawer and dust it off and say this is something so wonderful… there is always the state of the art in a space.

Out of curiosity, are you simply unaware of the sheer extent to which I have left the legacy JavaCC project in the dust technically? There was INCLUDE and INJECT, which existed already back in 2008. But now there are the lookbehind predicates, the up-to-here marker, the streamlined syntax generally… and just the basic fact that nested lookahead now works correctly! There’s an article on dzone.com (which I had to write myself, of course) that gives a rundown of all the new features that JavaCC 21 has.

https://dzone.com/articles/javacc-21-parser-generator

It’s really now a much more powerful, usable tool. So, really, are you just going to be there on sites like stackoverflow pretending that the more advanced version of the tool simply does not exist? What is this, the Prince song? Party like it’s 1999!

You know, I can’t really hide that I have not developed a particularly high opinion of you. So I don’t even anticipate you answering this, but you could still surprise me. And the low opinion I have of you is probably not irremediable. Yet…

Best Regards,

Jon Revusky