I spend much more time coding than I do keeping this site even remotely close to up to date. As a result, parts of this website may contradict each other, duplicate, etc. Oh well, that's life. If you don't like it, then well, there are 4 million other pages on the web about people's dogs. :) Also, I am not above using sarcasm and/or other various forms of humor on this page. While the content should be relatively close to fact, it's best read with your humor cap firmly in place.
My name is John Baldwin, and I'm a FreeBSD kernel hacker who attempts to be non-geeky every once in a while.
My music tastes vary from rock to country to techno. Being a Christian, however, I mostly listen to Christian rock (my favorite bands include PFR, Third Day, Newsboys, and Delirious?), especially praise and worship music. I also play guitar fairly regularly. Mostly I play praise and worship songs for the youth group and Sunday morning services at the church I am currently attending.
I made it through four years of college without any major emotional or psychological scars that I know (though I do have an occasional desire to bash grad students' heads in with blunt objects.. hmm) and obtained degrees in Computer Science and Math at Virginia Tech. Since school on its own has the propensity to be rather boring, I managed to get myself involved in several student organizations that took up more of my time than was readily available. The biggest consumer by far was the Virginia Tech Corps of Cadets. Having gone through four years of military college, the biggest lesson I learned is to be (mostly) calm under stress. Freaking out only serves to make matters worse and possibly get yourself and/or others killed.
As evident from the start of this, I'm a computer geek. Whee!
I first started out hacking out simple BASIC on my family's Commodore 64. The C-64 is still alive, though it currently resides in my parents' attic. Eventually I'll bring it out of retirement and fire it up again so I can play games on it. Thankfully, BASIC didn't completely rot my brain, and I managed to escape to another language before any permanent damage was done.
My second computer was built from random spare supplies. It ended up as a 286/12 (8 MHz if you turned turbo off) with 2MB of RAM. It had a Hercules monochrome graphics adapter (with an amber monitor), a Passport removable hard drive system with 4 20MB drives, and a 2 button mouse. After a few months I was given an EGA monitor and adapter allowing me to at least attempt to play DOS games. I also was given an introductory level Pascal book my older brother had used in college and a copy of Turbo Pascal 5.5. After getting over the temporary BASIC brain damage (I have to declare variables?!), I managed to turn out some almost useful programs: simple screen saver hacks, a math game for some kids next door, etc.
The next step came sophomore year in high school when I was introduced to two things: Intel x86 assembly, and networking. The assembly route at first led me to embedding small assembly routines in my programs to access the mouse via interrupt 0x33, etc. Eventually I ended up writing a DOS program that entered 32-bit protected mode, searched for the BIOS 32 service table, did some simple text output to mark each step it took in protected mode, filled in a struct in memory with relevant pointers to what it found, returned to real mode, and then returned back to a C module that converted the raw pointers and spewed out useful information on the BIOS 32 service directory. More on that later, however.
My introduction to networking came in the form of Novell
Netware in my high school. My sophomore year I ran into Kelly Yancey (another FreeBSD
geek, and a guy by the way). At the time he was mostly
administering the network at the high school along with some of
the library staff. During my sophomore year, I started hanging
out after school was over while he would fix stuff. He got me
started on another Pascal book that finally got me into records
(I had been using parallel arrays for everything, ugh),
pointers, and linked-lists. I also watched him working on the
network and acquired some rudimentary networking knowledge. By
junior year, Kelly had graduated, but I still hung around the
library after school fixing problems when they cropped but being
watched over by the library stuff until I had earned their
trust. My senior year I was given full superuser access and
started fixing things. I ended up writing a DOS device driver
to block usage of Ctrl-C and PrintScreen by students since a TSR
autoexec.bat could still be worked
around if one was quick enough while hitting Ctrl-C during boot.
We also added Windows 3.x workstations to the network during my
senior year, and I perfected a system whereby we kept a copy of
a system profile in a shared directory over the network, and
machines would automatically update their profile upon boot and
force a subsequent reboot if needed. Kelly and I also managed
to allow CD-ROM based Windows 3.x applications to be shared
across the network and run concurrently. We even taught the
county IT managers how to get it to work at other schools, but
they didn't get the hang of it. After I graduated, my high
school had earned a reputation of having students running around
controlling the network, so the county came in and reformatted
the server and started over. To this day the network at my high
school is highly unstable and never at 100% capacity. Oh
When we weren't running our high school network, Kelly and I were talking programming. We managed to write a really annoying program that used fax-modems to call up long lists of numbers to see which ones were faxes so that massive spams of faxes could potentially be sent out to the fax numbers that were found. We were even paid for it (the first time I actually made money on computers), but given my experience now, I would probably not have written that particular program again considering its intended use. Fortunately, I don't think that the person we wrote the program for ever got much use out of it. Our other big project was that we were determined to write a kick-butt multi-node BBS that used threads, virtual memory, and the other nifty features of the i386 architecture. Neither of us (well, me at least) really had a firm grasp on things like virtual memory, scheduling, semaphores and the like, but we managed to figure out many things on our own and did surprisingly well. When we saw how big this BBS was becoming, we figured we might as well write our own operating system and then just write the BBS in that once the OS was done. Thus, PhoenixOS was born. The OS itself never got beyond the rudimentary design stage. We did get fairly far into designing a file system, and started work on an abstract ACL system. The BIOS 32 program mentioned above was written as part of this effort to get some working code that ran in protected mode for example.
When I hit college, I mostly blew through my CS classes with ease. I managed to stay about 1 to 2 years ahead of my classes, so I had to find something outside of class to provide a challenge. In high school, Kelly and I had started to hear about Linux (I think Slackware was the distribution that we had heard of) but we never got around to messing with it. We did know that Unix was the "granddaddy" of operating systems, however. Kelly worked at an ISP where we grew up (Richmond, Virginia). The ISP started off using BSD/OS, but switched to FreeBSD before long. I encountered FreeBSD in spring semester of my freshman year in our Intro. to Unix course. Amazingly enough, Virginia Tech uses FreeBSD as its free Unix platform, and not Linux, though I think many of the faculty are reading too many IT trade magazine ads and are starting to second guess that decision. Regardless, I threw myself into FreeBSD and forced myself to use it and learn it.
In the dorms we didn't get Ethernet connectivity until junior year. (The cadet dorms were the last to get anything at VT.) Instead, we had an ancient "digital" phone system with built in modems. The phone had a 25 pin RS232 D connector on the back. Using that you could get a 19.2k PPP connection to get to the outside world. There was only one phone per room; however, so only one roommate at a time could be connected. As I wanted to run a web server and play with FreeBSD, I found this most annoying. During the summer before my sophomore year, I scrapped together enough old parts to build a 486/66 with 8MB of RAM and slapped FreeBSD 2.2.2 on it (I still have the CD's). I purchased some used 3c503 networking cards with 10base2 (BNC) and AUI connectors along with some BNC cable. I managed to setup this box to serve as a gateway running NAT and using PPP with on-demand dialing. At school sophomore year, this allowed both my roommate and I to be online at the same time. Considering my relative inexperience at the time (We used token ring in high school, not Ethernet. Heck, it took me months to figure out that the BNC wasn't working because I hadn't terminated it.) and that our room was the only room in the cadet dorms that allowed both roommates on concurrently, I found it rather satisfying to have it all working.
Meanwhile, I was learning how this "Unix stuff" stuff worked more and more. I installed FreeBSD next to NT on my workstation, and did all of my coding work for class in FreeBSD. All I ended up using NT for was reading mail and playing Minesweeper and Freecell. During the following summer I switched to a Unix e-mail client (xfmail, I like GUI push-button thingies and eye-candy) and stopped using NT except for the occasional game. This trend continued, and at the start of my senior year, I became a documentation committer in the FreeBSD project. I didn't do documentation for long, however. Within about two months, I stayed up late one night on IRC hacking on part of the x86 bootstrap to emulate a BIOS call needed by a RAID driver to access the PCI configuration space. The x86 bootstrap for FreeBSD uses a protected mode monitor to run the BIOS code in virtual 8086 mode. This particular BIOS call entered protected mode to read upper memory. Since we couldn't allow that, the emulation code simply examined the descriptor table and performed the memory transfer internally. From that moment on, I started hacking on the FreeBSD source tree without looking back.
Fresh out of college, I packed up about half of my stuff, shoved it into my car and drove across the country to the Bay Area. I started out working at Berkeley Software Design, Inc. doing FreeBSD stuff. At first I engaged in more x86 bootstrap hacking, but I eventually got sucked into the SMP next generation (SMPng for short) project, and have somehow ended up doing a fairly large portion of the work so far. Hopefully when 5.0 goes out the door I won't be hiding in fear under my desk from all the users.
Unfortunately, BSDi proved to be a dot-com whose sole business plan was to run into the marketplace shouting "open source" and hoping that people would stupidly throw money at us so we could IPO, sell our stock options to poor suckers, and get rich. Of course, this isn't a viable business model in the real world, so after coming close to dying, the software side of BSDi was acquired by WindRiver Systems, Inc. WindRiver (WRS) was a larger software company with a nice campus in Alameda. WRS understood commercial operating system software and the BSD/OS folks seemed to have fit into their model at least somewhat. However, with the FreeBSD group, it seemed that WRS didn't really understand what they had or how to make use of it. The end result, of course, being that most of the FreeBSD group got laid off before the rest were spun off to form FreeBSD Mall, Inc.
Prior to WRS laying off the lot of us, my boss had left to work for Apple. I really wanted to go there and work on OS X but at the time Apple didn't need someone with my skill set. I was worried that I would have a hard time finding a job that would let me continue to work on the FreeBSD kernel. However, it is surprising how many companies actually use FreeBSD out there in the world. A lot of them aren't very public about it, but they are out there. Thus, I ended up being offered a job with The Weather Channel in Atlanta, Georgia. I moved back to the Right Coast in January of 2002 and have been enjoying sweet tea and other Southern comforts once again. I only wish I could have drug an In-N-Out along with me. I can safely say that there have been several interesting coding discussions held at the In-N-Out in San Ramon, California. Of course, California could use a Chick-fil-A and lots of sweet iced tea.
As for other random programming info, I've messed around with Java 1.1.x because VT's CS department decided to teach data structures in it. Personally, I think it is cleaner than C++ as far as an OOP language goes, but after only 1 year, the CS department hastily reverted the OOP and data structures classes back to C++. I've actually only dabbled a bit in C++, but I suppose I could pick it up easily enough if I really needed too. I would rather just work in C at the moment however.
Hard to believe, I know, but there is actual non-geek stuff that I can at least mention in passing. For example, as I mentioned way back up at the top, I am somewhat of a music freak (though not a real music geek) as I love to listen to tunes and can play guitar, a bit of drums, and clarinet (back when I was in elementary school but probably not now).
I also do have some form of social life as my various friends can attest to if you happen to run into some of them. Also, while I was out doing the dot-com thing in California, I met a girl named Kimberly at a Bible study I was attending. We were engaged in April of 2002 after dating for a year and married on August 10th, 2002. Shortly after we were married, Kimberly conceived, and our daughter Janelle Hope Baldwin was born on June 12, 2003 at 12:27am. She arrived weighing 8 pounds 13.2 oz and measuring 20 inches long.
Back when I was more naive, I kept various forms of contact information on here. Since spam is such an ugly thing, I've decided to pull it. If you really want to get a hold of me for a legitimate reason, you can always e-mail me and I can get back to you.
Here are my current programming projects, some of them are much larger than others. At the moment, the list is small, but it will soon grow as older and newer projects are added.
Send any suggestions, comments, etc. to me.
$Date: 2003/08/02 16:35:20 $