zet

Absolutely, no more shitty GPLv3 for me (including bash)?

Update: I simply cannot avoid GPLv3, but I can definitely try to help others avoid using it. ShellCheck uses it, for example. And I simply cannot encourage people to install an additional shell just to avoid GPLv3.


I am adding FreeBSD installation to the Beginner Boost, which has always been about UNIX (not just Linux). While I was preparing I started reading the mission of BSD and was reminded of the soul I once had, the one that would never allow anything with GPLv3 into my core toolkit. This was the very motivation for giving zsh a try two years ago but it was so inferior to—and more dangerous than—bash it just didn’t make any sense.

I’ve long been a POSIX advocate. In fact, it wasn’t until 2020 when I started streaming that I questioned my obsessive commitment to POSIX. POSIX shell compliance is actually a very bad thing having glaring, horrible security problems dating back decades involving shell expansion. Bash addresses these with if [[ ]] (instead of if [ ]). I’m completely torn on this point.

At one point I would be scolded at IBM for creating any shell script that wasn’t 100% POSIX compliant even though this was long before shellcheck was available to validate that compliance, which would have silenced a debate I once had with a co-worker about a ksh-ism that they used that they thought was POSIX. I’ve long advocated for creating tools that work on the most UNIX systems possible, when possible, and to use standards where they exist and make sense (getopts has never made sense). But POSIX security is such a huge issue that I don’t know if bash or dash is actually better.

Bash is more secure by default. But does that even matter in 2023 now that we have shellcheck? There is absolutely no question that running shellcheck (and probably shfmt) on every single shell script should always be done no matter what shell. It could be strongly argued that writing 100% compatible POSIX shell scripts—that are secured with shellcheck—is better in 2023 than starting with the more secure and bloated bash to begin with. When the leading container shell is POSIX compliant (not bash) and when FreeBSD is now the preferred micro-VM for Firecracker it makes sense (again) to return to baseline POSIX compliance backed up by shellcheck during development and CI/CD.

In 2020 I allowed myself to consider that maybe a new standard had emerged, that Linux had dominated and the bash Linux shell become the new reigning (default) shell. I had a lot of Go experience at that point as well as Perl. I contemplated that perhaps bash could do everything that I needed in Perl (spoiler alert: it can’t, but does do a lot). Cross-compilation of Go tools made it trivial to use very powerful constructs in code that could run anywhere just as easily as copying over a file—even more than Perl or Python scripts because you can never know if that system has those interpreters installed. So I accepted Perl’s fate (and Python’s for utility scripts) and chose to code everything in bash or Go. But I was wrong. I missed one very important detail (at that time).

Bash is released under GNU Public License v3 (GPLv3). I really don’t care that Apple moved to zsh instead of bash because of this. I now know that GPLv3 is one of the most insidious, broken, non-free, hypocritical, downright evil licenses to have ever been released. It sought to trick those using tools licensed under it to infect their systems with it so that GNU legal teams could go on the attack and force (that’s not hyperbole) any hardware vendor bundling GPLv3 software onto their devices to make them “free” so that the owner/user of that hardware always had the option of updating or changing that software.

Like all hypocritical liberal “revolutions” Stallman doesn’t realize he is repressing more freedoms than they are allowing “for the people.” Paulo Friere wrote a whole book about it (which Stallman has obviously never read).

This “hardware freedom” idea is bullshit. If a vendor wants to make a closed hardware device that is their prerogative and right. In fact, it is more secure in most cases and allows more hardware to be created. Forcing every single possible bit of hardware—no matter how small—to create functionality that allows it to be flashed and accessed with firmware that the “user wants” is ridiculously naive in the age of edge computing.

Imagine a digital lapel pin or convention credential that would now be forced to add a USB port in order to flash the firmware to be whatever just because the designers choose to use GPLv3 even if no one would ever use it?

Keep thinking like this and you realize how fucking stupid the FSF and Richard Stallman actually are. But more than stupid, Stallman’s Bolshevik ethics allow him to justify sneaking this shit onto everyone without them even realizing it by adding “or later” to the GPLv2 license instead of calling it what it is, an entirely different license now affecting hardware. Torvalds is justifiably pissed and just won’t use it.

Therefore, I will never willingly choose use anything Stallman has touched ever again. While it is true that I cannot escape his influence using anything in the Linux world, I can choose to use POSIX UNIX compliance—secured by shellcheck—and use whatever is available as an acceptable alternative that does not. Most importantly, I simply cannot willingly use and promote anything with GPLv3 ever again, including bash.

So, I am search of another shell that does not use GPLv3. It absolutely will not be the completely stupid zsh. The developers have proven how stupid they are at every turn. Everything else is up for consideration. My interactive shell simply must not burn into my finger memory things that won’t work on all systems. I do not even need tab completion using set -o vi properly makes not having tab completion a trivial detail. But I would, in fact, like it. I know because Dennis (lastmiles) has never had tab completion and never needed it and out-codes every fucking Twitch/YouTuber who has ever made a video. If I’m going to aspire to be like someone, it is him, not the others.