Part 4: Terminal Emulation and the Shell

The terminal emulator and shell are critical components of any developer’s toolbox. The terminal provides features to customize the look and feel of the text interface. Most importantly, the terminal emulator runs a shell. The shell is the program that takes your text input, interprets the input as a set of one or more commands, and passes on those commands to the OS. All emulators and shells provide this basic set of features....

July 22, 2024 · 5 min

Part 3: An I3 Desktop Environment

The next step in optimizing your development workflow is to setup the desktop environment (DE). Linux has many different DEs to choose from: Unity, XFCE, KDE Plasma, just to name a few. Which should you choose? This series argues that the i3 tiling window manager is the optimal choice. Why i3 Listed below are the benefits of a tiling WM: Small CPU and memory footprint. Highly customizable in regards to look and feel....

July 13, 2024 · 4 min

Part 2: Choosing a Distribution

The Linux distribution you choose has a large impact on your Linux development experience. What’s a Linux distribution or distro for short? A distro is the OS. It’s the combination of a Linux kernel, package manager, and userland programs. You might think there are two or three Linux distros. As of today, DistroWatch shows there are over 20 different distros to choose from! Where do you start? Selection Criteria What makes a good developers distro?...

July 6, 2024 · 3 min

Part 1: A Modern Linux Development Workflow

As a Linux developer, you have probably spent some time optimizing your workflow. In the world of Linux, you’re both blessed and cursed with many choices. You have a choice of distro, shell, terminal emulator, desktop environment, package manager, editor, the list goes on. It can get overwhelming to upgrade tools let alone start from scratch. This is the first in a series of articles that presents a modern Linux development workflow....

June 28, 2024 · 2 min

Linux Kernel Development 3rd Edition

This is the third installment in a series of posts where I share notes taken while reading an interesting book or article. This post includes the notes made while reading the book titled “Linux Kernel Development” by Robert Love. Getting Started The following are key differences between userspace application development and Linux kernel development: No access to the C library or C headers. There are versions of certain libc functions included in the kernel under lib/....

April 4, 2024 · 31 min

Linux Kernel Development Using QEMU

This article gives an overview of how to setup a Linux kernel development environment that leverages QEMU. Why should you bother with this setup? Here are the highlights: Make changes to core kernel code or modules without the risk of loading buggy kernel code onto real hardware. Up the speed of the edit, build, run cycle while developing kernel code. The ability to test code across different architectures (for example, aarch64, x86_64, etc....

February 20, 2024 · 8 min

Linux Driver Development for Embedded Processors 2nd Edition

This is the second installment in a series of posts where I share notes taken while reading an interesting book or article. This post includes the notes made while reading “Linux Driver Development for Embedded Processors” by Alberto Liberal de los Rios. Notes weren’t taken for every chapter so keep in mind that the book actually covers more topics than what’s shown here. If you are considering buying the book, you might want to checkout this review before buying....

February 15, 2024 · 7 min

What Every Programmer Should Know About Memory

This is the first installment in a series of posts where I share notes taken while reading an interesting book or article. This post includes the notes made while reading a series of articles by Ulrich Drepper titled “What Every Programmer Should Know About Memory”. Part 1: Introduction There are a number of different computer architectures each with their own tradeoffs. The commodity HW setup has the CPUs attached via a Frontside Bus (FSB) to a Northbridge and indirectly via the Northbridge to a Southbridge....

February 14, 2024 · 9 min

Signing Git Commits With GPG

If you’ve been around the open source community long enough, you’ve probably heard of people signing their VCS commits/tags. This post covers the why and how of signing your Git commits. The focus will be on commits but keep in mind that these tips equally apply to tags. Why Sign Your Commits The short answer is, signing your commits makes it harder for an attacker to impersonate you. Sure, if you work solo on rinky-dink toy projects, having your commits signed isn’t a big deal....

January 21, 2024 · 6 min

Dotfile Mgmt With GNU Stow

Do you have a bunch of dotfiles? Do you maintain a GitHub repo with all your dotfiles? Whenever you upgrade your machine, do you find yourself manually placing the dotfiles in the right spots in your home directory? If you answered yes to these questions, read on. Enter GNU Stow GNU Stow is a dotfile management utility. Stow has all the makings of a varsity athlete: Stow is small (a 32KB Perl script)....

January 20, 2024 · 2 min