Sep 25

C++ Considered Harmful

My blogging will be sporadic to nonexistent for a while, as my friend Rob Landley and I are concentrating heavily on writing a paper together. The working (and probably final) title is “Why C++ is Not Our Favorite Programming Language”. It begins:

C++ is an overcomplexity generator. It was designed to solve what
turned out to be the wrong problems; as a result, it lives in an
unhappy valley between two utility peaks in language-design space,
with neither the austere elegance of C nor the expressiveness and
capability of modern interpreted languages. The layers, patches, and
added features designed to lift it out of that valley have failed to
do so, resulting in a language that is bloated, obfuscated, unwieldy,
rigid, and brittle. Programs written in C++ tend to inherit all
these qualities.

In the remainder of this paper we will develop this charge into
a detailed critique of C++ and the style it encourages. While we
do not intend to insult the designers of C++, we will not make
excuses for them either. They repeatedly made design choices that
were well-intentioned, understandable in context, and wrong. We
think it is long past time for the rest of us to stop suffering
for those mistakes.

Yes, we are attempting to harpoon the Great White Whale of modern programming languages. I’m announcing this here to give my commenters the opportunity to contribute. If you know of a particularly good critical analysis of C++, or technically detailed horror story around it, please cite. Superb apologetics for the language would also be interesting.

The paper is developing primarily from a software-engineering perspective rather than out of formal language theory. I’m particularly looking for empirical studies on the importance of manual memory management as a defect attractor (I have the Prechelt paper from the year 2000). I’m also interested in any empirical studies comparing the productivity impact of nominative vs. structural vs. duck typing.

After about 3 days of work our draft is over 600 lines of clean narrative text in asciidoc. It’s going well.

Sep 20

The Limits of Open Source

A mailing list I frequent has been discussing the current financial meltdown, specifically a news story claiming that Wall Street foooled its own computers by feeding them risk assumptions the users knew were over-optimistic.

This is also a very strong case for F/OSS software. Had such software been in use, I strongly feel that the inherent biases programmed in would have been found.

But then, that’s also true for voting machine software.

As the original begetter of the kind of argument you’re making, I’d certainly like to think so…but no, not in either case.

Continue reading

Sep 10

Kansas and the Vanishing Gap

In my last essay, The Vanishing Consumption Gap, I presented several lines of evidence leading to the conclusion that the consumption disparity between rich and poor in the U.S. is drastically less than the income disparity, and seems to be decreasing even as income disparity rises. This continues a historical trend, and there are causal reasons (ephemeralization and the efficiency-seeking effects of markets) to believe it’s happening everywhere on earth.

I concluded the essay by observing that the vanishing consumption gap has political consequences. Among other things (as I hinted in a comment on Oh, those bitter clingers!) it explains what’s the matter with Kansas.

Continue reading

Apr 17

In the Belly of the Beast

In the beautiful-irony department, I have just learned that my name
and copyright now appears in the EULA (End-User License Agreement) of
a Microsoft product. A vector-graphics editor called “Microsoft
Expressions”, apparently — thanks to Martin Dawson for the

The history behind this is that GIFLIB is open-source software for
hacking GIF images — the direct ancestor of libungif, which is
the name under which the codebase is more widely known these days.
The original software was by Gershon Elber for DOS; around 1987 I
ported it to Unix, cleaned up the architecture, added numerous new
features, and wrote documentation. When Unisys started to jump salty
about the GIF patents in the mid-1990s, I handed the project off to a
maintainer outside U.S. jurisdiction, Toshio Kuratomi.

I have no idea why the copyright on this EULA is dated 1997, I
think that is a couple of years after I passed the baton to Toshio

Subsequently I did a lot of work on libpng, implementing 6 of the
14 chunk types in the PNG standard and designing a new more
object-oriented interface for that library. So if you use open-source
software that handles either of the two most popular raster-image
formats, it is rather likely that you rely on my code every day. Yes,
that includes all you Firefox and Netscape and Konq and Safari users
out there.

And now, my code is in a Microsoft product. This may not be the
first time; in fact, thinking about all the other places it would
have been silly for Microsoft to pass up using libpng and giflib,
it probably isn’t even the dozenth time.

I’m OK with this, actually. I write my code for anyone to use, and
‘anyone’ includes evil megacorporate monopolists pretty much by
definition. I wouldn’t change those terms retroactively if I could,
because I think empowering everyone is a far more powerful
statement than empowering only those I agree with. By doing so, I
express my confidence that my ideas will win even when my opponents
get the benefit of my code.

Besides…now, when Microsoft claims open source is inferior or not
innovative enough or dangerous to incorporate in your products or
whatever the FUD is this week, I get to laugh and point. Hypocrites.
Losers. You have refuted yourselves.

Dec 01

Take the WRT54G challenge!

So, LinkSys (formerly independent, now a tentacle of Cisco) has
brought the Linux version of their WRT54GL wireless router back to
life. We’d previously heard that Version 5 of the box would run
proprietary VxWorks firmware. But according to this
over at,

LinkSys is shipping a Linux-based WRT54GL model that it says it
created specially for Linux hobbyists, hackers, and aficianados[sic]. The L
version is identical to the “series 4” WRT54G units that Linux
hobbyists have long enjoyed hacking, according to the company. […]

Here’s the key ‘graf:

VxWorks allowed the company to halve the amounts of Flash and RAM in
the device, while retaining similar functionality. Apparently,
reducing memory-related BOM (bill-of-materials) costs more than offset
the costs of licensing a proprietary OS

You know, to me that sounds like a challenge. Personally, I have
no firmware-hacking or cross-development skills; my interests lie in
other directions. But some eager band of Linux hackers out there
should strip Linux down far enough that it can fit in the reduced
footprint, just to prove it can be done and undercut the idea that
proprietary firmware is ever a good idea. And I have no
doubt it can be done; heck, we’ve made Linux run on a Z80!

(I maintain the
Blue Box Router HOWTO
. There might be a new version, reflecting the
fact that Cisco has dropped its lawsuit against Michael Flynn, up on the
LDP site by the time you read this.)

Nov 24

LISP — The Language That Will Not Die

I’ve spent large parts of the last week editing maps for a game
system I’m working on. I’ve been using the GIMP graphics editor, and I’m pretty
impressed with it. I haven’t found anything I can’t easily make it do
— except, oddly enough, draw straight lines between defined
endpoints. (I suspect there’s actually a way to do this using the
path facility.)

I have a requirement to prepare about six different variants of a
base map, using the same topographic map but with different
arrangements of national borders. I’ve handled this by creating a
multi-layered XCF file with the topo map as the background and the
different borders as optional overlays.

OK, so I save the variants to flat PNGs by hand whenever I change the
image, but that’s a pain. What I wanted was a way to put in my makefile
instructions that say, for each variant map, that it depends on the XCF
and the way to make it is to composite a particular selected subset of layers
by running GIMP in batch mode.

Fortunately, GIMP has an embedded Scheme interpreter that’s good
for exactly this kind of thing. Looking at some Python-Fu code by
Carol Spears taught me enough about the API to get started; the fact
that I’m an old LISP head got me the rest of the way.

Here it is.

;; Batch-mode select and save of a layer set as a PNG.
;; Has to be copied into  ~/.gimp-2.2/scripts to work
;; Note: This assumes that gimp-drawable-get-name returns a list with
;; the actual string name as its car.  This is what gimp-2.2 does, but
;; not what the documentation says it should do!

(define (layer-set-saver infile select outfile)
   (let* ((image (car (gimp-file-load RUN-NONINTERACTIVE infile infile)))
	  (layers (cadr (gimp-image-get-layers image)))
	  (ind 0))
     (while (< ind (length layers))
	    (let* ((layer (aref layers ind))
		   (layer-name (car (gimp-drawable-get-name layer))))
	      (gimp-drawable-set-visible layer (if (member layer-name select) 1 0)))
	    (set! ind (+ ind 1)))
     (file-png-save-defaults RUN-NONINTERACTIVE 
		     (car (gimp-image-flatten image)) 
		     outfile outfile)
   (gimp-quit 0)

Here's one of my makefile productions. The second arg is a list of layer names.

basic.png: basic.xcf
	gimp -i -b '(layer-set-saver "basic.xcf" (quote ("topographic" "skinny-borders" "grey-switzerland")) "basic.png")'

Apologies for the long line.

LISP truly is The Language That Will Not Die. And that’s a good thing.

Jan 06

Narcissism and the American Left

John Perry Barlow, referring to the 2004 elections, writes:

We can’t afford to lose this one, folks. If we do, we’ll have to set our watches back 60 years. If they even let us have watches in the camps, that is.

“If they even let us have watches in the camps.” This is a perfect example
of a kind of left-wing rhetorical posturing that makes me want to go out and
vote for conservatives I normally loathe. In this it has exactly the opposite
effect from what John Perry Barlow intends.

Barlow wants to leave us with an if-this-goes-on image of a Bush-dominated
future in which Barlow and his friends are hauled off to concentration camps
by mirrorshaded thugs, crushing dissent as though the U.S. were pre-liberation
Iraq or something.

I would love to be able to echo Charles Babbage and say that I am
not able rightly to apprehend the kind of confusion of ideas that
could provoke such a statement. Unfortunately, I’m afraid I find it
all too comprehensible, and not in a way that’s very flattering to
John Perry Barlow or others like him. It’s a form of posturing by
anticipatory martyrdom, simultaneously demonizing Barlow’s enemies and
inflating his own importance.

“Oh, look at me!” it says. “I’m a brave speaker of truth
to power, so brave that I’m going to say bad things about Republicans
despite the fact that they will certainly throw me in the gulags as
soon as they think they can get away with it.” I’ve been around long
enough to know that this is a line lefties of Barlow’s and my age
originally learned in order to pick up women back in those halcyon
radical-chic days of forty years ago. It gets a bit old after your
third decade of waiting for the Man to bust your door down.

Let’s get real. Even supposing Bush were really the concretization
of all those 1960s nightmares, an evil bastard backed by a cabal of
goose-stepping minions, from their point of view throwing John Perry
Barlow in the Lubyanka would be a ridiculous thing to do.
Remember how conservatives think: from their point of view, Barlow is
just another aging hippie burnout given to occasional quasi-coherent
rants about that Internet thing. In their model of reality, all
they’d be doing by giving him the Solzhenitzyn treatment is conferring
an importance on him that he doesn’t possess.

I have somewhat more respect for Barlow myself, enough that it
survived the fact that the last time I was actually face-to-face with
him he was obnoxiously drunk and patronizing. He’s an erratic but
occasionally brilliant polemicist. But trying to imagine anybody in
the inner circle of Skull & Bones (or whatever the left-wingers’ hate
focus is this week) taking him seriously enough to bother bagging and
tagging him just makes me laugh.

And if I can’t believe John Perry Barlow is enough of a threat to
get gulaged by the mythical Bush stormtroopers, how seriously am I
supposed to take the-Man’s-coming-for-us posturing from the rank and
file of the Bush-haters? Yeah, sure, the black marias are coming for
all of you, all you twentysomething unemployed sysadmins and riot grrls
and latte makers with your piercings and your Green Party T-shirts.
As if.

There are lots of objective reasons this scenario is silly. One of
many is that our institutions won’t support it. I know the police in
my town; they wouldn’t obey orders to throw Dean voters in jail. I
just got through reading a book about the force structure of today’s
U.S. infantry, and I can tell you that even if the second Bush
administration were to complete the trashing of the posse
laws that Clinton began and withdraw every damn grunt
from overseas, there aren’t enough troops. Even assuming
100% of them signed up to be concentration-camp guards, there
wouldn’t be enough of them to man the camps.
And the trends are all
towards a smaller, more skill-intensive military, so in the future
assembling enough goons for a darkess-at-noon scenario will be
harder rather than easier.

Then, of course, there’s the fact that Attorney-General Ashcroft is
not pushing for federalized gun control and a ban on civilian
firearms. Which is the first damn thing any right-wing cabal (or any
left-wing one, for that matter) would do if they were contemplating
really serious dissent-crushing. Again, the trend is in the other
direction — the assault-weapon ban is going to lapse, and the
Bush crowd is going to let it happen. Much of the American left
fools itself that civilian firearms don’t matter in the political
power equation, but conservatives know better.

For that matter, I am certain — because I’ve discussed
related topics with him — that John Perry Barlow himself knows
better. Which makes his willingness to posture about the Man coming
to throw us in concentration camps less forgiveable than it would be
in someone who’s a complete moron on the subject, like (say) Michael

But what really repels me about the kind of posturing I’m nailing
John Perry Barlow for isn’t the objective silliness of it, it’s the
fact that it represents a kind of triumph of paranoid self-absorption
as a political style. People in the (mainly left-wing) anti-Bush
crowd snort with derision when they hear hard-right propaganda about
how the Zionist Occupation Government is going to come after all true
American white men with those black helicopters; why do they tolerate
rhetoric that is just as narcissistic coming from their own?

Idiots. They make me want to go vote for somebody like Pat Buchanan
just out of spite. Fortunately, I’m not a spiteful person, and have so
far resisted this temptation.

And I don’t think it’s just me that sees people like John Perry
Barlow actually dealing themselves out of the future when they make
remarks like this. Narcissistic politics is not a luxury we can
afford any more. It was OK during our holiday from history,
1992-2001, between the fall of the Soviet Union and 9/11, but we’re in
serious times now. Our nation, and our civilization, are under
continuing threat by terrorists who have demonstrated both the will
and the ability to commit atrocities against Americans, and who loudly
trumpet their intention to keep killing us.

We need people like John Perry Barlow to be in the debate
about how to cope with this. That means we need people like John Perry
Barlow not to trivialize and disqualify themselves with silly
posturing. Please get real, people. George Bush has flaws I could
list from here to Sunday, but pretending that you’re all doomed
victims if he’s re-elected is pathological.

And deep down, you know better, too. The last two years have given
us not just relatively smart people like John Perry Barlow but legions
of mindless show-biz glitterati making a particularly ironic spectacle
of themselves — protesting the crushing of dissent in front of
huge audiences. Thereby demonstrating their own lack of
contact with reality in a way that can only help the very opponents they
think of as a sinister cabal. With enemies this visibly stupid and
feckless, who needs friends? They’ll drive the big middle of the
electorate right into Republican arms.

Let’s state the consequences very simply: Every time somebody like
John Perry Barlow goes on in public about how the camps are waiting
for us all, Karl Rove laughs and, quite rightly, figures his guy Bush
is more of a lock this November. And you know what? He’s right.
Because if I hear much more of this crap, even I am going to
vote Republican for the first time in more than a quarter-century.

Nov 14

Funny, but incorrect

From the November 12 “Kernel Panic”:

Nov 12 2003 strip

In fact, this strip is incorrect. I did not coin the term “open source”;
I only popularized it. It was coined by
my friend Christine Peterson of the Foresight Institute. While it’s true that I more or less ran the brainstorming session and fortunately had enough of a clue to recognize a winner when it popped up, the creative leap was all hers.

UPDATE: Yes, it now reads “popularized”. Chris Wright changed it.