It’s been an interesting summer. It didn’t at all turn out how I expected, but it is what it is. TianoCore as a software project turned out to be massively more complex than I anticipated when I submitted my proposal, and the level of knowledge required was quite a bit deeper than I expected… it’s one of those cases where I didn’t know what I didn’t know. I’ll have to talk to a couple of my professors about that, to see if there’s some elective class that explains the things I’ve missed.
Sorry, that’s vague, let me give an example. Coreboot does it’s thing, hardware initialization, then passes control to the payload. This seems to be the equivalent of the dreaded “goto”, which is actually pretty cool. Coreboot doesn’t care what happens next. So hypothetically, I have some code, anything, I want to use it as a payload. I compile it, then what? Well, it depends (as you all know), how was it compiled? Is it an elf? PE32? Something else? Where exactly is the entry point to this binary blob? (That’s a rhetorical question, please don’t answer it in the comments.) You would have thought at some point in one of my classes executable formats would have come up, just as an example. Or calling conventions. Or hundreds of other little things that I’d never seen or heard of before I suddenly realized that I needed to understand them. So that’s what I ended up spending much of the summer on. Write code… stop and realize what I’m doing doesn’t make sense/won’t work/is the wrong approach, then start over.
One of the things that drew me to coreboot as a project was that as a computer engineering student, I took a lot of classes focusing on the physical side of computing, starting with physics and circuits classes, moving up through logic gates to chip design. On the other side, programming started at a pretty high level with c++, then worked down, till I got to the computer architecture and operating system classes, and assembly language (not x86, unfortunately). I would expect that as a “computer engineer” I should understand the whole stack, that the physical, EE stuff and the CS stuff would meet in the middle. But they haven’t (and they won’t: I’m about to graduate, and there aren’t any crucial classes left to take). I knew this going into GSoC, and coreboot seemed like the perfect project to fill the gap (and give something back to the open source world that I’ve gotten so much out of). Well, like I said, the gap turned out to be a lot bigger than I expected. (To abuse the metaphor a little more, anyone remember when Evel Knievel tried to jump the Snake River Canyon? That’s kind of how I feel about my summer of code.) Continue reading GSoC 2010, TianoCore as a payload 🙁