This is a followup to The Rollover of Doom: a Trap for Good Programmers. That post ended “This problem is a Chinese finger-trap for careful and conscientious programmers. The better you are, the worse this problem is likely to hurt your brain. Embrace the suck.”
That last phrase is a take on a military objurgation which translates as “The situation is bad. Deal with it.” Well, my friends, I am about to tell you how bad the GPS rollover situation really is.
GPS, the Global positioning System, was designed in the 1970s under hardware-cost constraints that would seem ridiculous today. This makes interpreting the data it sends into a black art, and produces some really painful edge cases.
There’s one edge case in particular that I’ve come to think of as the Rollover of Doom. This morning I came up with an evil, clever hack for getting around it. I call it clever because you have to think your way out of a conceptual box to see it. As to why it’s evil…well, you’ll see. If you can figure it out.
Welcome, ladies and gentlemen, to another darkly humorous tale of the seamy side of GPS interfacing. GPSD working with USB GPS mice has, when properly installed, lovely plug-and-play self-configuring behavior. That is, you plug a USB GPS into a USB port, the hotplug system notifies the gpsd daemon that the GPS is available, the daemon records this fact…and subsequently when you start up any GPSD client application It Just Works. Well, usually. There’s a dangerous weakness in the machinery, and yesterday it came around and bit us in the ass.
In discussion of the GPSD project, a commenter suggested that its role might be going away in part because the NMEA 0183 protocol historically used in GPS sensors is being replaced by NMEA2000. So far, this is not true, and the reasons it’s not true are worth a look because they illustrate a sort of flip side of the economic and technological tends driving the adoption of open source and open protocols in the wider technology market.
I released a new software tool today. The surprise about this one is that it turns out to be consistently more useful than I expected. And thereby hangs a tale.
I’ve written software for a lot of different reasons besides pure utility in the past. Sometimes I’ve been making an aesthetic statement, sometimes I’ve hacked to perpetuate a tribal in-joke, and at least once I have written a substantial piece of code exactly because the domain experts solemnly swore that job was impossible to automate (wrong, bwahahaha).
Here’s a new one. Today I released a program that is ugly and only marginally useful, but specifically designed to shame other hackers into doing the right thing.
So, while trying to discover the minor version of the Android 2.2 running on my G-2, I touched the tab labeled “Open source licenses”. Scrolled down, and “Eric S. Raymond” popped out at me.
One of the comments that got lost in the recent database restore was a pointer to a backup program I can’t offhand remember the name of. I remember that it’s a command-line tool written in Perl (alas) and meant to be done by a cron job; what it does underneath is rsync with hardlinks to the remote target, so you get a Time-Machine-like effect for not much beyond the space requirement of the initial dump. Can someone remind me what this is. please?
Also, I’m in the market for a dropbox-like service that I can rsync to and from, for off-site backup. Any suggestions?
UPDATE: rsnapshot is what I was trying to remember. A very elegant little tool, thoughtfully written and handy. I may go with rsync.net for offsite backup.
OK, I’m officially coming out of my cave now, after what amounted to a two-week coding orgy. I’ve shipped reposurgeon 0.5; the code looks and feels pretty solid, the documentation is written, the test suite is in place, and I’ve got working repo-rebuild support for two systems, one of which is not git.
The rest is cleanup and polishing. Likely the next release or the one after will be 1.0. It’s time for an after-action report. As usual, I learned a few things from this project. Some are worth sharing.
I’ve been mostly blog-silent for the last week because I’ve been working my tail off on a new project. It’s reposurgeon, a tool for performing surgery on repository histories, and there are several interesting things to note about it.
Regular readers of this blog are probably pretty clued in about my better-known software projects – gpsd, fetchmail, giflib, libpng, INTERCAL, ncurses, Battle for Wesnoth, Emacs VC and GUD modes, and the like. If those are the best, what about the rest? Here’s a tour of some of the lesser-known stuff I’ve written or had my fingers in. Warning: obscurity, trivia, and obsolescence lie ahead!
This is the story of the INTERCAL Reconstruction Massacree, an essay in risk versus skepticism and verification in software development with a nod in the general direction of Arlo Guthrie.
About three hours ago as I began to write, I delivered on a promise to probably my most distinguished customer ever – Dr. Donald Knuth. Don (he asked me to call him that, honest!) had requested a bug fix in INTERCAL, which he plans to use as the subject of a chapter in his forthcoming book Selected Papers on Fun And Games. As of those three hours ago Donald Knuth’s program is part of the INTERCAL compiler’s regression-test suite.
But I’m not actually here today to talk about Donald Knuth, I’m here to talk about risk versus skepticism and verification in software engineering – in five part harmony and full orchestration, using as a case study my recent experiences in (once again) calling INTERCAL forth from the realm of the restless dead.
During the controversy I described in Condemning Censorship, Even of Werewolves one of the parties characterized me as “nuts and in decline.”. This failed to bother me, and not because I’m insulated against such insults by my natural arrogance. OK, I am largely insulated against such insults by my natural arrogance, but that’s not the main reason I easily shed this one.
In general I’m much less bothered about people who think I’m crazy than they usually think I should be because I know a lot about the life cycle of reform movements. I studied this topic rather carefully in early 1998, just after Netscape announced its intention to release the Mozilla sources, when I noticed that a burgeoning reform movement seemed to need me to lead it. I was particularly influenced in my thinking by the history of John Humphrey Noyes and the Oneida Community.
Here is part of what I learned: There comes a point in the development of every reform movement at which it has to kill the founder. Or anathematize him, or declare him out of his mind. Or neutralize him in a more subtle way by putting him on a pedestal so high that he can’t actually influence events on the ground.
An article published yesterday, I could license you to use this software, but then Iâ€™d have to kill you calls out some odd outliers in the open-source licensing space – odder, actually, than any I ever reviewed when I was the founding president of the Open Source Initiative. I wonder, though, if the author actually gets all the levels of the joke.
Yes, GPSD is way cooler than your project. You know how I can tell?
Because my latest feature request is from a scientist who wants to use GPSD as part of the control software for an autonomous robot submarine. That’s how I can tell.
No word yet on whether the robot submarine will have a frickin’ laser mounted on its frickin’ head. But I’m hoping.
A correspondent pointed me at a paper by Carliss Baldwin and Eric von Hippel, Modeling a Paradigm Shift: From Producer Innovation to User and Open Collaborative Innovation, which builds on my papers in some interesting ways. Here’s one of the money quotes:
Building on arguments of Ghosh (1998), Raymond (1999), and von Hippel and von
Krogh (2003), Baldwin and Clark (2006 b) showed formally that, if communication costs are low
relative to design costs, then any degree of modularity suffices to cause rational innovators that
do not compete with respect to the design being developed to prefer collaborative innovation
over independent innovation. This result hinges on the fact that the innovative design itself is a
non-rival good: each participant in a collaborative effort gets the value of the whole design, but
incurs only a fraction of the design cost.
IBM has issued another statement on the TurboHercules imbroglio. This one is reported by the Linux Foundation, but comes from Dan Frye. Dan Frye heads IBM’s Linux Technology Center and was actually at the top of my mental shortlist of likely voices of sanity over there. (Full disclosure: Dan kept me supplied with IBM Thinkpads for a couple of years as a thank-you gesture.)
The good news is that Dan says IBM will stand by the letter of its 2005 pledge. Furthermore, the second sentence of Dan’s pledge leaves no room for doubt that Hercules is a covered project. This is in flat contradiction to whatever brainless droid the Wall Street quoted yesterday on IBM reserving some right to decide that Hercules is ineligible. It also contradicts the previous implication that IBM is prepared to go to court over those two patents.
The bad news is that Dan leaves open the possibility that IBM may sue over the other close to 200 patents. I think it’s important not to overreact to this; his statement was clearly immediate damage control rather than a final ukase. The effect is that IBM now looks as though somebody with a clue has woken up to how much reputation damage their previous blunders have done them.
My guess is that the matter is now being debated (or soon will be) at a level higher than Frye or either of the pair of clowns who had previously made IBM’s posture look so very wrong. This might, still, blow over.
But IBM should hear this, loud and clear: the letter of your pledge is not enough. You cannot simultaneously hold yourself forth as an ally of open source and conduct patent warfare against an open-source project. Betrayal stings; we won’t abide it, and I wouldn’t argue that we should even if I thought I could win that argument. If you try to have this both ways, you will enrage the community more than if you had been a frank enemy all along.
Understand that our intransigence on this score this is only partly on behalf of Hercules itself. We detest the patent weapon, even in the hands of a sometime ally, because we fear it so much. What IBM does in this matter will set a precedent for the behavior of others; if IBM chooses to set the wrong precedent, it will make enemies of us.
Yesterday I blogged about the escalating dispute between IBM and TurboHercules SAS. I said, and will repeat now, that the central issue for the open-source community in this matter is not the antitrust allegations, but rather the fact that IBM has raised a patent threat alleging that Hercules violates its intellectual property. And especially, that IBM in doing so has cited two patents that were explicitly listed in its 2005 pledge to the open-source community.
IBM has now made matters worse. Much worse.
Sadly, Florian Mueller’s scream of outrage (IBM breaks the taboo and betrays its promise to the FOSS community is not an April Fool’s joke. IBM has done what it swore not to in 2005 – picked up the patent weapon and aimed it to block an open-source project.
I was thoroughly briefed on this about ten days ago by Jay Jurata, a lawyer working for CCIA (Computer and Communications Industry Association), which is even now bringing an antitrust action against IBM over the matter. Assisting him was Jay Maynard, an Armed & Dangerous regular who happens to be the lead of a project called Hercules.
Hercules is an open-source emulator for IBM mainframes. Words cannot easily describe my degree of bogglement the first time Jay brought it up an a Linux laptop in my presence and I saw the unmistakable arcane runes of a 360 boot sequence – and in an old-school band-printer-style font, too. Now, after 11 years during which IBM nodded when its own employees used and contributed to Hercules, Big Blue has brought down the hammer.
No, not the Central Intelligence Agency. I refer to CIA.vc, a nifty free service that monitors commits on open-source repositories in real time and echoes notifications to IRC. And not really abuse, either – rather, I just implemented a way to make it do something else useful. Others might consider doing likewise.