About Me

Last updated: 2019-04-01

I am an enthusiastic tinkerer, focused on low-level programming and system integration. Generally everything I do as a hobby is open source. You can find more information about my personal projects on this website, as well as on my GitHub profile.

Contact Information

My usual online handle is smaeul, a permutation of my first name.

The best way to reach me directly is through email at samuel@sholland.org. It is the common communication medium that practically everyone shares, and it has a vendor-independent mechanism for push notifications, so most of my other contact methods get forwarded there anyway.

I do not participate in proprietary, advertising-filled social media.

My background

I come from the American Midwest: the land of corn, cows, and Google Fiber. I started reading books on programming from a young age, first on C++ (what a syntactic mess!), and then on x86 assembly. Playing with DOS programs and boot sectors written in assembly was a hobby of mine until I got to university and started using POSIX-flavored C in earnest.

My first introduction to Linux was Red Hat 8, installed from a pair of scratched CDs in the back of a book checked out from my local public library. These were the days of HAL, and Kudzu, and out-of-tree Fast Ethernet drivers. Having no Internet connection at the time, it wasn't terribly useful, but I remember fondly the KDE desktop and the sample songs that shipped with Kmid.

The first public project I released was a "BuildSkin", a tool to customize skins for The Lord of the Rings Online (an MMORPG). It allowed users to combine XML fragments from various sources; most "skins" were expanded or rearranged versions of a single in-game window. It also provided an engine for resolving mathematical expressions in the X/Y/Width/Height of UI elements. This made life easier for skin developers, who no longer had to do all the math by hand, and (in some cases) no longer had to ship a separate copy of their skin for each supported screen resolution.

My first summer job was Windows Server administration, but once I entered university and started using Linux and writing C on a daily basis, I realized what a mess that was. To me, the beauty of free and open source software is that it is as flexible as your imagination! When a proprietary program doesn't work the way you want, you're out of luck. But if you want to make an open-source application behave differently, all you have to do is write a patch. So I stopped caring about Windows beyond its utility as a gaming appliance.

I don't like having unused or excessively-complicated programs and libraries on my computing systems. Some call it "ricing", others "avoiding bloat", but I refer to the concept as "minimizing the problem space". Simply put, fewer lines of code provide fewer places for bugs to hide. This principle led me first from Debian to Arch (to rid myself of the mess of Perl wrapper scripts that Debian adds to everything), and then to Gentoo (to reduce the number of library dependencies).

At the time (2015), I had several other reasons for choosing Gentoo. For one, its use of keywords provided more stability than what was available on Arch. Second, I had a growing number of patched or custom packages on Arch; Gentoo's overlay facility and /etc/portage/patches made these much easier to manage. And finally, Gentoo was one of three distributions that had musl support, which I wanted to use as soon as possible.

Nowadays, the ecosystem around musl is much more mature. I still write a lot of patches, but they are mostly trivial. So I made things harder by switching to a big-endian CPU archicture (powerpc64). One of my goals for 2019 is to upstream the several hundred patches I have sitting around. See my projects page for more details.

Other Interests

I occasionaly game on my PC, though I have been trying to eliminate this time sink. I play LOTRO because I love Tolkein's universe, and 7 Days to Die because I like building things. Other than those two, I sometimes pull out older strategy games: various versions of SimCity and Railroad Tycoon. Personally, I care more about the quality of the gameplay (is it challenging and logical?) than graphics. Of course, realistic visuals require less suspension of disbelief, so good-looking graphics are a plus when they don't mean sacrificing the gameplay.

When not in front of my keyboard, I prefer to be outdoors: hiking, biking, camping, or just admiring the intricacy of nature.

Projects

Last updated: 2019-04-01

Low-level development

ARM (sunxi)

I saw in the sunxi family the opportunity to have a fully owner-controlled mobile device, with no hidden managment engine or binary blobs. With the availability Pinebook and PinePhone, mainline Linux support has become the limiting factor for that dream. My contribution is the power management firmware and some of the surrounding infrastructure.

I have also helped with various bugfixes and improved support for some of the less popular sunxi single-board computers:

x86 (coreboot)

I ported coreboot to the Foxconn G41S-K motherboard, with the hope that it would allow me to use my SATA controller in AHCI mode. Unfortunately, that turned out to be a chipset limitation, not a BIOS limitation. But I had fun and learned a lot in the process.

I also contributed the coreboot framebuffer drivers to Linux. This allows smaller Linux payloads, since a full graphics driver (like i915) is no longer needed.

Application development

I wrote the initial version of the WireGuard Android app.

Back when it was still relevant, I helped port Cyanogenmod and other aftermarket firmware to the Samsung Galaxy Player 5.0. I also developed a stock-based custom Gingerbread firmware for that device.

Packaging and system administration

I have published the system-wide and user-specific portions of my service bundles for s6-rc.

My Portage configuration (including /etc/portage, my overlay, and my patches to the main Gentoo tree) can be found on my binhost.

Licensed CC-BY 4.0 by Samuel Holland.