Monday, 28 March 2016


Jesus of Nazareth, Whose Messianic Message Captivated Thousands, Dies at About 33

Why didn't he quickly drift into the same irrelevance as his predecessors? What happened next made all the difference.

Thursday, 17 March 2016

Running Firefox For Windows With rr


OK OK, this is cheating a bit. Wine can run Firefox for Windows on Linux (if you disable multiprocess in Firefox; if you don't, Firefox starts up but nothing will load). rr can run Wine. Transitivity holds.

Caveats: it's slow (rr's syscall buffering optimization is mostly disabled by Wine), and the debugging experience is pretty much nonexistent since gdb doesn't know what's going on. But hey.

Tuesday, 15 March 2016


The ptrace man page is not for the faint-hearted. It's a well-written, generally accurate guide to a maze of hideous complexity, a maze that I've thoroughly explored while working on rr. One area where it could be more clear is its description of the interaction between SIGKILL and PTRACE_EVENT_EXIT.

The man page says:

If the PTRACE_O_TRACEEXIT option is on, PTRACE_EVENT_EXIT will happen before actual death. This applies to exits via exit(2), exit_group(2), and signal deaths (except SIGKILL), and when threads are torn down on execve(2) in a multithreaded process.

This isn't quite correct. In modern kernels, at least, the SIGKILL exit path always does generate a PTRACE_EVENT_EXIT ptrace-stop. It even waits for the ptracer to resume executing the tracee before killing it, so you can protect processes from exiting due to SIGKILL this way (but only if you're being pernicious, since the process can't run or do anything else useful).

However, there is one very nasty problem that crops up when you're ptracing a process that receives SIGKILL. The SIGKILL can wake it up from a ptrace-stop and continue executing it until you reach the PTRACE_EVENT_EXIT stop. So, imagine you have a stopped tracee and you decide to send a PTRACE_CONT to execute it further, but just as you send the PTRACE_CONT, some other task SIGKILLs your tracee. The SIGKILL processing races with your PTRACE_CONT and if you're unlucky, your PTRACE_CONT takes effect just after the tracee has reached the PTRACE_EVENT_EXIT ptrace-stop ... causing it to resume running and exit completely. You'll still get the PTRACE_EVENT_EXIT event, but when you do, your tracee will be dead and gone, which is a problem if you want to do something in its final state, e.g. walk memory to capture the effects of robust-futex handling...

Tuesday, 8 March 2016

Digital Spring Cleaning

We're heading into autumn here, but whatever.

I've taken advantage of my change in focus to have a massive clean-up of my data. A whole lot of email and files related to Web stuff I just deleted. After that, it was pretty easy to completely clear my inbox. The hardest part was that to honestly clear it I had to fix a gnarly rr bug breaking Samba tests. For the first time ever, maybe, I went through all my email filters and unsubscribed from almost every email list I was filtering, and removed the filters.

I bought a Yubikey and transferred all my TOTP-using accounts to it. That makes me feel more secure than keeping them on a smartphone. Speaking of which, I need to buy a new Android phone to replace this Nexus S so I can actually get security updates.

I renamed my blog. "Well, I'm Back" might have been confusing for people.

Monday, 7 March 2016

My Self-Identification

The Hackernews discussion about me leaving Mozilla touched on how I identify myself as a Christian at the top of my blog. I do it for a few reasons.

One person said it does turn me off because of what it might imply As far as personal biases. That's close to one reason why I do it: my Christian worldview should pervade everything I do, and I think it's honest to declare those "biases" openly so people can take them into account. When this leads some people to form negative first impressions, I think that's better than letting them proceed with false assumptions.

A pitfall for that approach is that so many people's impression of what it means to be a Christian is inaccurate. But that's another reason why I self-identify this way: the more "ordinary Christians" stay in the closet, the more people's impressions of Christians are shaped by the extreme cases the media likes to dig up.

One reason I don't do it is virtue signalling. For the great majority of people who encounter me through my blog, being a Christian is no virtue.

Some people in the Hackernews thread saw it as proselytising. It really wasn't, just as "repatriate Kiwi, Mozilla hacker." was not encouragement to move to New Zealand and work on Firefox. Having said that, I'm all for proselytising in the right context. You can't be a Christian, believing that you have found the key to having your sins forgiven and being granted a relationship with the God of the universe, and decide to keep it to yourself. Sure, I often find proselytisers of various kinds annoying, but I respect them for following through on the logic of their convictions.

Wednesday, 2 March 2016

Leaving Mozilla

I'm leaving Mozilla. My last day will be this Friday, March 4 --- NZ time.

This isn't the time to go into all the reasons why, but I will mention a couple of big ones. I've been working on the Web platform for sixteen years, full-time for eleven. It was necessary and I'm so proud of what we did, but it was never the most fun thing I could have been doing and I'm very tired of it. And now there's rr. People think it's amazing, and it is, but we're only scratching the surface of what could be done. I'm bursting with ideas, and realizing them will require a lot of resources, resources that Mozilla cannot and should not provide --- we probably need to capture some of the value of this technology via a for-profit company. We can change the way people debug software, and in its own way that may be as important as my Web platform work, and it's work I desperately want to do.

I do not plan to disappear entirely from the Mozilla project. rr is the best research I've ever done partly because we've relentlessly focused on addressing real developer needs, so I want to stay engaged with Mozilla developers, helping them use rr and building tools for them that are a lot more awesome.

This is hard. I love Mozilla and its people so much, and this is a bit of a step into the unknown. I'm been singing this a lot lately...