Linus Torvalds’s “communication style”

Linus Torvalds recently wrote a long rant rejecting a patch. Read it now.

Fellow Mozillian Nick Nethercote commented on that rant. Now read that.

I began commenting on Nick’s post, but my thoughts spiraled. And I’ve been pondering this awhile, in the context of Linus and other topics. So I made it a full-blown post.

Ranting is sometimes funny

Linus’s rants are entertaining, in a certain sense: much the same sense that makes us laugh at a teacher’s statement (to a student, if an odd one) in Billy Madison:

What you’ve just said is one of the most insanely idiotic things I have ever heard. At no point in your rambling, incoherent response were you even close to anything that could be considered a rational thought. Everyone in this room is now dumber for having listened to it. I award you no points, and may God have mercy on your soul.

We’re entertained not because we approve of the teacher’s (or Linus’s) rants. We laugh because they’re creative. (Linus’s rants are creative, if not screenwriter-creative.) The flame can be an art form, even to flame war participants. My college dorm mailing list had regular flame wars (sometimes instigated or continued by regular trolls). I hated flame wars as a freshman. But eventually I grew to appreciate the art of the flame. In utter seriousness, that learning process was a valuable part of my college education, as it’s been for others.

(Yes, Billy Madison is low-brow humor. So are Linus’s flames, as entertainment. Not all humor must be high-brow.)

Even funny ranting is sometimes bad behavior

We also sometimes laugh because the behavior’s bad. (Humor’s core, I think, is a contradiction between expectation and reality. I highly recommend Stranger in a Strange Land for, among other things, its meditations on the nature of humor.) That’s one reason we laugh at the Billy Madison teacher-student interaction (allowing for its fictionality), and at Linus.

But somewhat pace Nick, I absolutely cannot equate laughing, or being entertained, with approval or celebration. This and this don’t celebrate ISIS, no matter ISIS appalls us. Naming Linus’s mail an “epic rant” doesn’t celebrate it. It’s just a description of five hundred over-the-top words when fewer words and less drama would have been better (as Nick observes). (At least one place calling the rant “epic” also linked this ironically-abusive decrial.)

Linux thrives despite Linus’s behavior, not because of it

Many of Linus’s rants are unacceptable. (I’ve seen a few that were overheated but not abusive.) Many developers weather them. But some developers have left the Linux community in response, when they wouldn’t have for gentler criticism. That’s a problem.

Linus gets away with bad behavior because: he’s abusive just infrequently enough; Linux has unusually high technical barriers to entry; it’s indispensable to many companies; and those companies fund development no matter Linus’s behavior. Linux led by Linus would have died already, absent these considerations. Linux is one of very, very few projects that can survive Linus’s abusiveness.

Linus is still very smart, and his rants can be right

I often recognize reasonable technical criticism beneath Linus’s rants. Regarding this patch, Linus is right. The proposed changes are harder to read than his suggestion — I’d reject them, too. I don’t agree with every Linus rant. But it’s normal to sometimes disagree even with smart developers.

What’s not normal, is being required to sift through abuse for usable feedback. It’s a skill worth having. If you can weather excess criticism from a coworker having an off day, you’ll be more productive. But it still shouldn’t be necessary (let alone routine), especially not for new open source contributors.


Linus is really, really smart. Because of that, and because Linux is really valuable, Linus unfortunately can keep being Linus. Barring a strongly-backed fork, nothing will change.


Quote of the day

During at least five of the passengers’ phone calls, information was shared about the attacks that had occurred earlier that morning at the World Trade Center. Five calls described the intent of passengers and surviving crew members to revolt against the hijackers. According to one call, they voted on whether to rush the terrorists in an attempt to retake the plane. They decided, and acted.

At 9:57, the passenger assault began. Several passengers had terminated phone calls with loved ones in order to join the revolt. One of the callers ended her message as follows: “Everyone’s running up to first class. I’ve got to go. Bye.”

The cockpit voice recorder captured the sounds of the passenger assault muffled by the intervening cockpit door. Some family members who listened to the recording report that they can hear the voice of a loved one among the din. We cannot identify whose voices can be heard. But the assault was sustained.

In response, Jarrah immediately began to roll the airplane to the left and right, attempting to knock the passengers off balance. At 9:58:57, Jarrah told another hijacker in the cockpit to block the door. Jarrah continued to roll the airplane sharply left and right, but the assault continued. At 9:59:52, Jarrah changed tactics and pitched the nose of the airplane up and down to disrupt the assault.The recorder captured the sounds of loud thumps, crashes, shouts, and breaking glasses and plates. At 10:00:03, Jarrah stabilized the airplane.

Five seconds later, Jarrah asked,“Is that it? Shall we finish it off?” A hijacker responded, “No. Not yet. When they all come, we finish it off.” The sounds of fighting continued outside the cockpit. Again, Jarrah pitched the nose of the aircraft up and down. At 10:00:26, a passenger in the background said, “In the cockpit. If we don’t we’ll die!” Sixteen seconds later, a passenger yelled, “Roll it!” Jarrah stopped the violent maneuvers at about 10:01:00 and said, “Allah is the greatest! Allah is the greatest!” He then asked another hijacker in the cockpit, “Is that it? I mean, shall we put it down?” to which the other replied, “Yes, put it in it, and pull it down.”

The passengers continued their assault and at 10:02:23, a hijacker said, “Pull it down! Pull it down!” The hijackers remained at the controls but must have judged that the passengers were only seconds from overcoming them. The airplane headed down; the control wheel was turned hard to the right. The airplane rolled onto its back, and one of the hijackers began shouting “Allah is the greatest. Allah is the greatest.” With the sounds of the passenger counterattack continuing, the aircraft plowed into an empty field in Shanksville, Pennsylvania, at 580 miles per hour, about 20 minutes’ flying time from Washington, D.C.

Jarrah’s objective was to crash his airliner into symbols of the American Republic, the Capitol or the White House. He was defeated by the alerted, unarmed passengers of United 93.


New changes to make SpiderMonkey’s (and Firefox’s) parsing of destructuring patterns more spec-compliant

Destructuring in JavaScript

One new feature in JavaScript, introduced in ECMAScript 6 (formally ECMAScript 2015, but it’ll always be ES6 in our hearts), is destructuring. Destructuring is syntactic sugar for assigning sub-values within a single value — nested properties, iteration results, &c., to arbitrary depths — to a set of locations (names, properties, &c.).

// Declarations
var [a, b] = [1, 2]; // a = 1, b = 2
var { x: c, y: d } = { x: 42, y: 17 }; // c = 42, d = 17

function f([z]) { return z; }
print(f([8675309])); // 8675309

// Assignments
[b, f.prop] = [3, 15]; // b = 3, f.prop = 15
({ p: d } = { p: 33 }); // d = 33

function Point(x, y) { this.x = x; this.y = y; }

// Nesting's copacetic, too.
// a = 2, b = 4, c = 8, d = 16
[{ x: a, y: b }, [c, d]] = [new Point(2, 4), [8, 16]];

Ambiguities in the parsing of destructuring

One wrinkle to destructuring is its ambiguity: reading start to finish, is a “destructuring pattern” instead a literal? Until any succeeding = is observed, it’s impossible to know. And for object destructuring patterns, could the “pattern” just be a block statement? (A block statement is a list of statements inside {}, e.g. many loop bodies.)

How ES6 handles the potential parser ambiguities in destructuring

ES6 says an apparent “pattern” could be any of these possibilities: the only way to know is to completely parse the expression/statement. There are more elegant and less elegant ways to do this, although in the end they amount to the same thing.

Object destructuring patterns present somewhat less ambiguity than array patterns. In expression context, { may begin an object literal or an object destructuring pattern (just as [ does for arrays, mutatis mutandis). But in statement context, { since the dawn of JavaScript only begins a block statement, never an object literal — and now, never an object destructuring pattern.

How then to write object destructuring pattern assignments not in expression context? For some time SpiderMonkey has allowed destructuring patterns to be parenthesized, incidentally eliminating this ambiguity. But ES6 chose another path. In ES6 destructuring patterns must not be parenthesized, at any level of nesting within the pattern. And in declarative destructuring patterns (but not in destructuring assignments), declaration names also must not be parenthesized.

SpiderMonkey now adheres to ES6 in requiring no parentheses around destructuring patterns

As of several hours ago on mozilla-inbound, SpiderMonkey conforms to ES6’s parsing requirements for destructuring, with respect to parenthesization. These examples are all now syntax errors:

// Declarations
var [(a)] = [1]; // BAD, a parenthesized
var { x: (c) } = {}; // BAD, c parenthesized
var { o: ({ p: p }) } = { o: { p: 2 } }; // BAD, nested pattern parenthesized

function f([(z)]) { return z; } // BAD, z parenthesized

// Top level
({ p: a }) = { p: 42 }; // BAD, pattern parenthesized
([a]) = [5]; // BAD, pattern parenthesized

// Nested
[({ p: a }), { x: c }] = [{}, {}]; // BAD, nested pattern parenthesized

Non-array/object patterns in destructuring assignments, outside of declarations, can still be parenthesized:

// Assignments
[(b)] = [3]; // OK: parentheses allowed around non-pattern in a non-declaration assignment
({ p: (d) } = {}); // OK: ditto
[(parseInt.prop)] = [3]; // OK: parseInt.prop not a pattern, assigns parseInt.prop = 3


These changes shouldn’t much disrupt anyone writing JS. Parentheses around array patterns are unnecessary and are easily removed. For object patterns, instead of parenthesizing the object pattern, parenthesize the whole assignment. No big deal!

// Assignments
([b]) = [3]; // BAD: parentheses around array pattern
[b] = [3]; // GOOD

({ p: d }) = { p: 2 }; // BAD: parentheses around object pattern
({ p: d } = { p: 2 }); // GOOD

One step forward for SpiderMonkey standards compliance!


San Francisco v. Sheehan: opinion and analysis

Last time I gave my last pre-opinion thoughts on the Texas specialty license plate case, Walker v. Texas Division, Sons of Confederate Veterans, whose oral argument I attended in March. The other case I saw that day, San Francisco v. Sheehan, was recently decided. Today I discuss the opinions in that case.

Ninth Circuit overturned, film at 11

My dismissive suggestion that San Francisco would win because Ninth Circuit and qualified immunity was on target. The Court ruled, 6-2, that the officers should receive qualified immunity — giving the win to San Francisco.

The Americans with Disabilities Act and accommodating the disabled

Recall that Justice Scalia and others alleged that San Francisco had improperly changed its argument from the time it got the Supreme Court to hear the case, to when it presented its formal argument. San Francisco initially argued that the Americans with Disabilities Act categorically didn’t require officers to accommodate armed and violent suspects who are disabled. But then later it argued that the ADA didn’t apply specifically to Sheehan, because she had posed a “direct threat”.

Every justice agreed that San Francisco’s tactics precluded the Court from deciding whether the ADA applied to armed and violent disabled suspects. So that’s still an open question awaiting a case properly presenting it.

Disposing of the rest of the case

But then what happens to the case and its remaining questions, if the ADA question is dismissed? The six-justice majority decided that the officers deserved qualified immunity. Justice Scalia, joined by Justice Kagan, argued that San Francisco shouldn’t be given a win for “snookering” the Court, when the Court wouldn’t have answered the qualified immunity question if presented alone. Instead the Court should have dismissed the entire case, leaving San Francisco to its loss in the Ninth Circuit.


I previously wasn’t entirely certain that San Francisco had changed its argument. But in light of the Court’s unanimous agreement on the matter, and in light of other commentary, it seems clear that it did.

I wasn’t aware the Court could dismiss “half” a case; that seems reasonable for the ADA question. For the remainder of the case, I think I lean toward Scalia’s and Kagan’s view. It’s unfair to parties in cases to allow one side to make an argument, then not be held to that argument come decision time. But I didn’t trace the majority’s cites far enough to conclude that its position was definitely wrong, so count my agreement with Scalia and Kagan as only tentative.

Next time, discussion of the ultimate opinion in Walker v. Texas Division, Sons of Confederate Veterans. The case is still pending, so I can’t yet say when that post might be ready.


Final thoughts on Walker v. Texas Division, Sons of Confederate Veterans

Two months ago I began a blog post series about my recent visit to the Supreme Court for oral arguments in two cases. San Francisco v. Sheehan concerned police use of force in San Francisco; Walker v. Texas Division, Sons of Confederate Veterans concerned Texas’s specialty license plate program and its restrictions on permissible designs. Seven weeks ago I discussed oral argument in the Texas license plate case. Today I return for final thoughts on the Texas license plate case, in which a decision is expected any day now — perhaps even in an hour today.

(Why the seven-week delay when I’d promised merely “a day or two”? The day of the last post, I underwent [relatively] minor surgery for pain from a high ankle sprain, that hadn’t fully responded to approaches short of arthroscopic ankle surgery. [The surgery seems to have been successful, but I probably can’t be sure til I regain full ankle flexibility/strength. I can walk almost entirely normally now, but strength and flexibility are still noticeably diminished, albeit improving daily.] Although I had spare time immediately afterward, I wasn’t particularly inclined to post-writing, and as time passed I never got back in the groove. Time winding down before the ultimate opinion has put me back on track. 🙂 )

Back to forum analysis

Before I tackled oral argument, my previous posts discussed offensive speech. I left one question hanging: what sort of forum is Texas’s specialty license plate program? Is it a designated public forum or a limited public forum?

This turns out not to matter. To judge offensiveness requires adopting a particular viewpoint, but regardless which sort of forum Texas specialty plates are, restrictions must be viewpoint-neutral. As for Texas’s argument that judging offensiveness is “objective” and viewpoint-neutral, this plainly must fall in light of the Court’s repeated insistence that “the government may not prohibit the expression of an idea simply because society finds the idea itself offensive”.

Censoring based on offensiveness is not viewpoint-neutral. But in either a designated public forum or a limited public forum, restrictions must be viewpoint-neutral. So it doesn’t matter which Texas’s program is: prohibitions based on offensiveness must fall.

My opinion

On Texas

If you’ve paid any attention to this series, it should be obvious that I think Texas must lose. When Texas opened up a forum for speech on plates and invited essentially everyone onto them, they lost control over what can be said there. An amicus brief from the Rutherford Institute best captures my thoughts on this case. (Which isn’t to say I disagree with other briefs supporting Texas SCV, simply that the approach here best matches my reasoning.)

Other specialty plate programs

So much for Texas’s program. What about programs in other states? Such disputes previously have centered on Confederate flags (by other SCV divisions), but perhaps the most prominent topic of controversy has been adoption/abortion/pro-life/pro-choice advocacy. Some states have explicitly ordered designs taking sides in that controversy, or have approved such designs submitted by private parties. Inevitably the other side files suit for a chance to say its piece. What should happen? I think it depends on the contours of the program.

If a state legislature passes a law ordering a design be produced, or delegating that to the state DMV, that legitimately does seem to me to be government speech. Private parties have no right to butt in to demand alternative designs. The place to challenge such programs is in the voting booth, not the courthouse. The same is true if privately-submitted designs receive legislative approval in a pick-and-choose process: the available designs are government speech (although the designs themselves may be hybrid speech).

On the other hand, if a state provides a specialty plate program in which private parties may request designs, and those designs aren’t explicitly limited to particular topics, the specialty plate program is a designated public forum in which permitted private parties can say whatever they want. (Subject to the usual traditional public forum restrictions.) (This is Texas’s program.)

If the state provides an open program with restrictions, then we have a limited public forum. A specialty plate program along these lines might or might not be able to exclude speakers. For example, many Texas designs recognize particular colleges. A state program allowing only colleges to submit designs, consisting of a color scheme and a logo, wouldn’t be required to accept a specialty plate on some other topic, or from a non-college. A specialty plate program that allowed, say, “non-political” designs only would be a much closer question that would probably swing the other way. (Who’s to say what’s political and what isn’t, “viewpoint-neutrally”?) But if criteria were objective and viewpoint-neutral, restrictions might be permissible.

Justice Kennedy’s concern that striking Texas’s program “curtails” speech

One slightly disconcerting moment at oral argument came after Texas SCV argued that Texas pretty much couldn’t prohibit anything on specialty plates. With minor adjustments for readability:

Justice Scalia
So you’re — you’re really arguing for the abolition of Texas specialty plates, aren’t you? I couldn’t make a better argument for — in that direction than — than what you’ve been doing.
Mr. George
Well, we had got along without it a long time before we got it, and we can get along without it again.
Justice Kennedy
So in a way, your argument curtails speech?

I’m not sure whether this ever received an answer. But the answer I’d have given is simple: “We call Texas’s bluff.” As I’ve noted, other states have had to respond to court cases in favor of unliked speakers: on license plates, in Adopt-A-Highway programs, in municipal transit ad programs, and so on. The states and cities operating these programs generally haven’t shut down the programs to prevent undesirable speakers from speaking, and many don’t even adjust program parameters to work around court decisions. No matter what it might bluster, Texas won’t shut down its program if it loses. Only very few ill-mannered states are likely to pick up their toys and leave, rather than share them with speakers they don’t like.


My prediction is that Texas will lose unanimously. The justices generally were somewhat taken aback by the sprawling assertions made by Texas SCV, but that seems only natural when good people contemplate potentially allowing vile, racist speech. The justices, as judges, ultimately must be, and are, less susceptible to these emotional tuggings than it might seem in the moment of argument. This is a very pro-speech Court; I think they’ll have very little trouble getting over their prejudices against speech they might not like.

Only Justice Scalia seemed to have particular sympathy for Texas, and for Texas being permitted to run its program however it wants. I think he viewed specialty plates and programs as mostly one giant exercise in frivolity: “Why aren’t bumper stickers good enough?”, “Why does anyone care what’s on their license plate?”, to put words in his mouth. There’s something to that: if we returned to a world where license plates were solid-color letters on a solid-color background, it’s hard to say anyone would really be much worse off. But just because a particular means of speech seems unbelievably stupid doesn’t justify shutting it down. I don’t think Justice Scalia would hang up on that in an opinion.

Ultimately I think the open nature of Texas’s invitation, combined with the standardless system by which Texas can reject designs, will sway him against Texas, even if he thinks the entire controversy is a waste of time. Justice Scalia was one of the votes striking down statutes criminalizing flag-burning on the basis of its offensiveness. I don’t see how he would abrogate that position on offensive speech just because Texas nominally exercises “effective[] control” over the specialty license plate program but doesn’t specifically cabin designs to limited topics.

Next time I return to San Francisco v. Sheehan to discuss the opinion in that case. And unlike last time, I’ll guarantee this discussion will issue tomorrow. (Barring Dreamhost downtime, server issues, Judgment Day, &c.) 🙂

« NewerOlder »