Upstream Last

Building a booting kernel for Android using their own code still eludes me. I guess it would help if I knew anything at all about the ARM platform, as I have no idea what I am doing. Still, the code dump fails the “anyone should be able to build it” test rather strongly, judging from posts on the android mailing lists.

Build problems aside, the more egregious failure of the Android open source project is the lack of the “upstream first” mentality. Most Linux software providers follow this strategy to a large extent, which is simply: any patch that goes in my distribution should go to the mainline kernel first. The benefits are obvious: no need to maintain a fork forever, and everyone gets the goods as soon as possible. Even if the patch only serves the developer’s own interests, upstreaming it often has the benefit of vetting the interfaces and producing more universal APIs (the wakelocks discussion that followed the code dump is an example of this done backwards).

Google, however, sadly took the other road: get the product out the door, then worry about pushing bits upstream when we get a chance. The problem is “when we get a chance” never, ever happens, and there’s no motivation to push changes upstream when your product has shipped and it’s now forever in deep maintenance mode. That job of upstreaming is left to the community.

So far there’s no real indication (apart from the userland stuff) that you actually can build the G1 kernel and userland from the code dump. Google engineers are unclear whether everything on the phone is in the codebase (clearly some proprietary bits are not). Meanwhile they have their own fork of qemu, their own fork of the kernel, their own fork of webkit, and so on.

I suppose we should not fault Google too hard: after all, some code is better than no code at all. And if they want to maintain forks of .* forever, that is clearly their prerogative. However, had they worked more closely with the community at the start, the Android platform would be stronger today. They might already have a decent wireless driver, for example.

Recent Readings

The Historian, Elizabeth Kostova; Back Bay/Little, Brown & Co.

**** A wonderfully paced horror novel marred only by the discovery that Dracula is a big nerd.

*** Boy finds more than he bargained for in a dusty old library (a book to be exact).


**** Journalist perseveres through cooking lessons, Batali’s drunkenness.

*** A pun-filled glance at the crossword industry that can be completed in less time than the Monday puzzle.


***** Exceeds industry standard woe quotient.

** A good story about cathedrals, badly written.

**** Surrealism reigns in this book about what, exactly?

*** Never visit India under any circumstances.

*** Like Mutiny on the “Bounty”, but true. Maybe.


* Man stumbles upon Christian dieties in the woods, and they make him pancakes.

Moby Dick: Level 2, Herman Melville ; PENGUIN LONGMAN PUBL

** (e-book) A fantastic, gripping novella about a whale hunt, embedded inside a long, boring treatise on the intricacies of whaling ca. 1847.

Fit to be TIed

The Android G1 phone uses the TI 1251 for Wifi.   This is pretty useful for when you need an internet connection for the laptop and there are no alternatives: you can bridge the wifi and the 3G connection and then connect to the wifi device using ad-hoc mode.  However, I normally keep the wireless off because it sucks down battery like mad.

But Kalle Valo from Nokia is working on a driver for the chip called wl12xx, and he is putting a lot of effort into making sure it uses power conservatively (presumably some future version of the Nokia internet tablets will be using this device).  This driver is SPI, whereas the G1 uses the same chip in SDIO mode.  So I started writing the SDIO port for the driver — hopefully it will be ready when wl12xx is included in mainline.

The TI reference code that actually runs on the G1 is, sorry to say, total crap.  It registers an interrupt handler that printk()s a static string.  It has unbalanced sdio_claim_host() calls.  And from a code style standpoint, well, there is none.  I suspect Valo’s driver will be a big step up if and when it can run on the Android.

Oh, and Google’s open source tree for the Android hasn’t built all weekend.  Great job!

Re-opening

Welcome old and new readers to my blog’s new home. This used to be hosted elsewhere on the net, but I eventually grew annoyed with that provider. Most of the old content survived the move (by the way, a rather fearsome and annoying task. I learned more than I ever wanted to know about the wordpress codebase last weekend. Oh, don’t turn on threaded comments, it’s borked.)

So why the title? This blog began without any real theme, just random observations, trivialities of my life, and so on. Lately however it has also been a useful place to discourse on my technical projects and other computer age detritus. So insignificant bits, both the minutia of the day to day, and the rightmost digits in a binary number. Well, it seemed like a good idea at the time.

Anyway, here’s hoping that I at least maintain the same level of awesome that you’ve come to expect from me (.002 milli-awesomes per post).

FiOS

Dear Verizon,

Thank you so much for the thoughtful racial profiling you sent us. However, despite my wife’s last name, no one at our address can read Chinese. Can you send us your ads in English again so that we may more easily peruse and purchase your products? Or better yet, not send them at all? Warm regards, us.

Backup re-revisited

I’ve reconsidered using git as my backup choice du jour. The main problem (and feature) of using git was having a checked out repo in my home directory. I found I was forever worried, given my admittedly horrid muscle memory habit of doing ‘git reset –hard’ periodically inside source trees, that I’d accidentally do it from the wrong directory and lose any recent work. Luckily, I never did that.

Two obvious solutions: don’t use a checkout in the home directory, instead using rsync to the repo; or use a wrapper/custom command name for the git-as-backup program to avoid accidents. Well, I went with the third option: use rdiff-backup like a normal person. It’s packaged by Fedora and Debian, so I only needed a small tweak to my backup scripts to make that happen every night. And someone wrote a FUSE filesystem (archfs) to mount the backups as normal directories, so there’s no real loss of convenience under this scheme.

My RPM database is now corrupted. Just in time.

sizeof()

Renaming your class variables to shorter names reduces your EJB network footprint. Finally, those people who said that removing vowels from variable names improved performance are vindicated! Ok, well they were correct already in Javascript, but that doesn’t count.

Smolt

The stats from smolt are pretty interesting if, like all stats, entirely useless. Some curiousities:

  • i686 still beats x86_64 by a ton
  • A (very) few people change their runlevel
  • Acer is high in the vendor list, I guess they are still killing the netbook market
  • People don’t configure their swap appropriately
  • SMP is now the norm, outside of embedded kit anyway
  • I want a 4+ GHz cpu
  • No one uses omfs 🙁 …I guess I need to submit a profile.