I recently started a new WordPress theme, Moderately Austere (GitHub link), as a fork of the canonical Twenty Seventeen theme from WordPress.
I started a new theme for a few reasons. Most acutely, Twenty Seventeen has real janky scroll behavior on iOS (Safari and Chrome, at least). Because the mobile browser’s navbar diminishes smoothly (from its original size down to a shorter read-only version) as you start scrolling, the viewport height increases correspondingly, but the web content definitely doesn’t update at 60 fps. For the Twenty Seventeen theme in particular, the result is stuttery updates to the header image size and positioning, since the header height uses vh units and the image uses position:fixed. So, my first order of business was making the header static. I don’t get the nice depth effect anymore, but the stutter jankfest was driving me crazy, so this is the better tradeoff. I’m much relieved, visually.
Beyond that, using a predefined theme is like renting a pre-furnished apartment. It’s reasonably suited to a wide audience, but is cookie-cutter and lacks personality. By forking, I can make my web home more homey and more me.
If I were a seasoned web developer, I might style a website from scratch. However, I’m not a seasoned web developer; I’m more a dabbler who just wants to get particular things done. So forking an existing theme is the pragmatic way to go.
Thinking more broadly, though, Fork–Exec really is one of the great patterns of Computer Science. Wikipedia describes it thusly:
fork() is the name of the system call that the parent process uses to “divide” itself (“fork”) into two identical processes. After calling fork(), the created child process is an exact copy of the parent except for the return value of the fork() call. This includes open files, register state, and all memory allocations, which includes the program’s executable code. In some cases the two continue to run the same binary, but often one (usually the child) switches to running another binary executable using the exec() system call.https://en.wikipedia.org/wiki/Fork–exec
This is not the obvious first solution to process creation in operating systems, compared to the Windows CreateProcess approach, which creates a new process much more conventionally “from scratch”. See this StackOverflow post for a historical view of the origins of Fork–Exec: “it seems reasonable to suppose that it exists in Unix mainly because of the ease with which fork could be implemented without changing much else.”
Ease of progress: a pretty good guiding principle to learn. From Fork–Exec to Stack Overflow to Github, or languages like Python compared to C++, making programming progress easier improves the productivity of millions of developers. That’s big.
And it’s not just about saving time or energy in a proportional sense. Often times, these “progress hacks” are the difference between getting something done at all, or nothing. In my case, if I had to start a theme from scratch, I probably wouldn’t bother. For other people, it might mean the difference between learning to program or not. Rounding to zero is bad. On the other hand, enabling incremental, durable progress is a pretty good deal.
WordPress has explicitly worked to make themes GPL-based; see this blog post for some context. Kudos to WordPress for that effort, as it creates a lot of benefit for people like me and the bazillion other WordPress users.
And why the name Moderately Austere? Well, that’s how the theme looks to me, and that’s the visual line I intend to follow.
Finally, some of you might argue that “new” and “fork” are incompatible and immiscible, that a copy can’t be a new thing in some grand First Cause view of the world. I disagree. Just as “new” ideas, like inventions or hit songs, don’t spring full-grown from the heads of toddlers, but rather from people who have experienced and processed quite a bit of the world, and have significant agency therein, so too the “newness” of my theme requires the springboard of experience inherited in the fork. The newness comes from the novelty of where I take it.