March 17, 2018

Waterboarding your brain / becoming a BSD curmudgeon

Buckle up, this is going to be a wordy, disjointed one.

“There is nothing noble in being superior to your fellow man; true nobility is being superior to your former self.”

― Ernest Hemingway

tacky, lofty quote opener: ✔️

Over the years I've been thrown into tasks at work I had zero experience or knowledge of. As those who work in the tech industry know, this isn't uncommon or even undesirable (for most).

One of the big pulls for people who are intellectually driven is the perk of getting paid to constantly tackle new and potentially interesting challenges and become better and stronger. For many, this is what makes the tech work fulfilling and satisfying. I assume this parallels in any other industry with creative or open ended efforts.

Drive and the perversions of nerdy desire

While I want to say "nobody would enjoy copy pasting mindlessly for 8 hours a day!" I worked with people doing just that for years in a few entry level jobs. For example, processing ten digit triggers in telephone switches. Another example would be 'ACDVs', Automated credit dispute verifications which consisted of copy pasting personal information from one form to blank along side it. Back when I worked in collections (over 10 years ago now..) it could not legally be automated, hence 'verification'.

boredom

Aside, let me be perfectly clear: That is completely ok. These people were not interested in becoming LLVM core contributors or porting the OCAML compiler to a MIPS processor for fun. They were working one of the only jobs in town, that they despised, to feed their family. All without complaint. And as mentioned, a few people actually enjoyed it. A certain Zen to it. I get that. I was not sitting there, stewing, thinking I was better than the work or anyone. More importantly, I was sitting right there too, grinding it out.

Barely passing high school and never going to college, I thought programming was going to probably remain just a hobby while I went through the motions at entry level jobs indefinitely unless I changed something (I didn't). And that's exactly what happened. But I practiced at home, and roughly knew what I was capable of. Getting paid to explore this further was a pipe dream. I got very lucky, That's a story for another day

The point

I want to really push myself in something I've never done before that is also technically very challenging (for me, of course). This may be a recipe for disaster, but, I'd rather face frustration and 'failure' (learning stuff on the way doesn't make this a loss) instead of becoming complacent or niche'd. Finding where your current capabilities lie and pushing them even further is about as core nerd experience as you can get.

So with that said, here's what I got in mind

UNIX and BSD operating systems

As I grow older and learn more and more about OS design, either through osmosis or casual reading, I find UNIX and modern BSD descendants growingly interesting. I couldn't tell you why, I can't run MUH GAMEZ on them. UNIX is the essence of bygone development simplicity.

unix teletype session Attracting ladies on OKCupid

The BSD family is the modern descendent of UNIX, though the family tree is quite nuanced and a story of copyright and tribulations, you can see the full thing Here (wikipedia)

I've been meaning to really get into BSD for a while, too. John Carmack having a honeymoon with OpenBSD recently really resonated with me, even just as a user of the OS.

Heck. You can run the first UNIX in docker or still read the first UNIX programmers manual. I think anyone with an interest in OS legacy owes it to themselves to get familiar or at least know about the UNIX bloodline. Yea, I'm a big hit at parties!

As I was writing this blog, I saw this tweet fly by:

https://twitter.com/BrendanEich/status/975514575012425728

I've used BSDs a little bit, but very superficially. I run FreeBSD on servers, but I couldn't tell you how to do more than install and configure PostgreSQL on one. Never mind fancy ZFS stuff.

So taking a break from complaining about there being no good video games to play, getting intimate with a BSD is probably a good deep dive choice.

Which one? Well, I was going to pick either NetBSD or OpenBSD under the impression they are still smaller than FreeBSD, whichever had a smaller USB installation media. For the current releases, by chance they are both exactly the same size.

I picked NetBSD because I find the project goals more interesting, and it seems to be in more of a need. Another one of my primary interests that I do not act on and just fetishize is embedded development. And most importantly, the deeply logical fact I like the logo.

At the end of the day, I find the folks hacking on BSDs hardcore of the hardcore (or maybe just most oldschool) of this realm, maybe unfairly so. Do I want to 'hang out with the big boys' or embarrass myself trying?

What about GNU/Linux

GNU/Linux would definitely be a more usable choice when it comes to contemporary hardware. It also has far more developers, more people using it, banging on it and writing about it too. I'm also just not as interested in it from a nerdy lore background if nothing else. I'll definitely dig into it later on. BSDs also have the advantage of the entire system being built together, userspace and kernel. I find this a huge benefit to the system expectations and stability. Not to mention no intrusive updaters or systemd (bandwagon: ✔️)

New challenge

I have some lofty goals in mind. I'd be happy to get 2 or 3 of these under my belt, especially with the way work has been going lately, I'll probably be weekend warrior'n these out. Battle plan:

  1. Install and setup NetBSD, basic usage and configuration
  2. Compile NetBSD from sources, run current/srcs
  3. Dissect boot process (mostly for extra credit real goal below)

I really haven't done any of the above, but this is all straight forward and documented. There are a lot of other minor tasks this involves. For example, The BSD projects still use CVS (for some good reason I presume), so that would be another thing to learn. These will all probably not be a challenge, just prerequisites. Hell, I should admit, I've never done any sizable development in C, so I'll need to brush up on that (along with compiler extensions, buildchain etc).

Here is a nice NetBSD milestone:

bring up NetBSD on a new or unsupported SBC/board

How cool would that be? It'd require a good understanding of the hardware AND the software from ground zero if it was a new board.

I have a lot of single board computers, a few of which are newer, like the Libre Computer and ASUS tinker board, surely I can find one that isn't currently supported. Of course I have Raspberry PIs too, but I'm sure lots of others will try to get those going (not that I'm opposed to helping out).

They are both ARM processors, so I don't think it would be a soul crushing endeavor. I'll likely just pick one and go until I get things booting (if no one else has), I'd prefer the Libre computer (Amlogic ARM Cortex A-53), I think the Rockchip ARM Cotrex-A17 the ASUS Tinker board has more coverage.

If I wanted to go an extra step, I could even try to do so for a MIPS board, the MIPS Creator CI20 from imgtec. It's basically dead in the water and they've sold back MIPS, probably not the most fruitful. In fact, one of the NetBSD devs started the process years ago.

I'm also, for the first time in my life, well equipped to tackle early boot (well, as much as you can be) debugging. I own a logic analyzer, several USB FTDI serial cables, an oscilloscope, etc. But this would be more for new board bringup. Slightly different ARM SoCs is probably not as bad.

Yep, that's it! How hard could it be right? How long before I lose interest and just stop talking about it like all those other projects? Only time will tell. If I could even finish the first 3 things, that'd be a net win for me (no pun intended). This post is already far too long so I shall document the journey in more discreet chunks! Instead of a glacier of content!

<titanic picture here>

Previous post
MSP430 assembly part 1: Blinking LED hello world Lets blink an LED on a MSP430 launchpad the old fashioned way! Assembly! Don't worry, MSP430 has a nice, small RISC instruction set. It's only true
Next post
Installing NetBSD: amd64 pain ahoy As covered in a previous post, I decided to deep dive a more UNIX'y operating system, ultimately NetBSD. And so it begins When I want to learn