🔗 The aesthetics of color palettes
I just saw screenshots of the Amiga classic “Another World” zip through my timeline.
..and it really drove home to me how distinctive the color palette is in that game. That game is praised for its art style and I think people most often mean the shapes, but the colors play a part that is just as important into building its aesthetic.
My artform of choice has always been music, but amusingly enough a friend once called me a “visual” person and I think that comment wasn’t too off the mark.
Ultimately, I exercised my visual muscles through software. I always paid attention to colors, and thinking about this made me think of how I centered the GoboLinux visual identity around its palette back in the day (archive.org copy from 2006). It was weird seeing that color scheme become a tech cliché for startups 10-15 years later.
htop’s visuals was also very centered around its color scheme. I picked cold colors deliberately, focusing of cyan (because I like it) and green (for that Matrix-y look; it was 2005 after all, and I wanted to use a UI like the ones we saw in movies; top circa 2005 looked like an 80s bank terminal). Hot colors only appeared in the htop UI very sparingly, as red accents (”red alert!”).
Seeing other top-like tools use the same colors made me feel like “I made it” as a dilletante graphic designer.
🔗 Western civilization
And here’s our regular reminder that “Western Civilization” is a colonialist concept.
Whenever you hear that term used, ask yourself: who are people specifically wanting to exclude when they prefix “civilization” with “Western”?
For any non-racist definition of “civilized”, people are civilized in every country of the world; East and West, North and South. The idea that there’s some other chunk of the world “which doesn’t share our values” is us-and-them propaganda.
🔗 Why I no longer say “conservative” when I mean “cautious”
As you can guess from the title, this piece is about politics and language. Still, I need to preface it with a disclaimer. I was very deliberate about my title: I am not telling you how to use language, I am only telling you how I use it. I obviously understand the implications of the previous sentences, given that telling others how to use language has become a sticking point in political discourse. The very way I am approaching this paragraph is itself insinuating a certain position, one that is perhaps against the so-called language policing of the so-called identity politics. But don’t get me wrong: while I do have contentions with regard to identity politics, they come from a place of finding them not misguided but insufficient. I feel that the interests of liberalism have been well-served by the superficial treatment of oppression shaped instead as identity politics kept in a vacuum. In plain words, in case it’s not obvious, yes, we must continue and strengthen our defense of transgender rights; not just in a self-serving “if we tolerate this then who might be next”, true as that may be, but because this is another instance of treating people as people. In the recent past, those in power were happy to accomodate this into an “identity issue” and add pronoun boxes to their user interfaces to keep their well-paid transgender programmers content and productive, along with other watered-down displays of Corporate Pride. But even by the late 2010s that was already a contention strategy to delay the inevitable: the growing solidarity among the struggle of the oppressed. Once the conversation progressed from pronouns and rainbows to systemic discrimination, unionization, and ultimately the concentration of economic power, then there was no longer accomodation and they came crashing down. Power found the threat to be real and decided to act; this is where we are as of 2025.
But that doesn’t mean that language isn’t important. I am not saying that language, or even identity politics, are a distraction. The right tried, and to a big extent succeeded, in making identity politics into a distraction—and here, in the grand scheme of things, it helps to perceive the American liberal left as part of the right, heartbreaking as it may be to so many well-meaning Americans. The fact that they made it into a distraction does not take away that identities are part of politics: we must not throw the baby with the bathwater because our adversaries succeeded in shaping the discourse for so long. And as I proceed closer to the point I actually want to make, I feel the need to dispel in the reader the focus on the transgender topic. I used it as an example of the relationship between power and the oppressed because I knew it would come to people’s minds as soon as I started talking about politics and language. So I chose not to walk around it, even though it’s not really my theme to discuss. Identical points as the above could have been made instead replacing the example to racism in the US and the Black Lives Matter movement, or to the treatment of immigrants in Europe, or to women’s rights anywhere in the world, ultimately the largest oppressed group of all. All of these are stories of oppression which have had a period of liberal containment through language and accomodation.
This containment broke apart as soon as the oppressed groups themselves became able to bring their own narrative to the forefront, and now that the hypocritical appeasement is gone, I can finally arrive at the point I want to make, which is that the shaping of language as done by the right has been a lot more effective than we give it credit for. It happens in three fronts: they shape the language of the right (in both radical and mainstream varieties), they shape language of the mainstream left, and, most invisibly, they shape the language of the public in general.
At first it may seem odd to make that third distinction, especially in a time where everyone seems to have been fit into a “right” or “left” bucket. But first, this bucketing is in reality far from being the case, even though it doesn’t seem so within our politically-engaged bubbles. And second, what I mean by shaping of language for the public in general, I mean that which crosses the barriers and spreads into the vernacular of people both in the left and in the right. And no example of that is more amazing than that of “conservative”.
In recent years, I have observed a phenomenon, which, thanks to my own age, I am pretty certain that has not been the case since forever. All the time, I see people, from the left, from the right, and everything in between, using the word “conservative” with the meaning of “careful, cautious, well-measured”, especially in non-political contexts. And, by extension, “liberal” adopts the opposite meaning of “not careful, lavish, unmeasured”.
When I pointed this to people, they were quick to disagree, but then I gave them an example: if you’re baking a cake and the recipe says “apply cinnamon liberally on top”, what does that mean? If I told you I was making a soup and say “the recipe didn’t specify how much pepper to put, so I went conservative about it”, what does that mean?
You might now say that well, these are just the meanings of the words, but — really? What does a cinnamon topping on a cake has to with liberalism? Where is the liberty? Is it because you’re at liberty to put how much you want? Not really, because that liberty would mean you’re free to put a little, or a lot. But if I tell you “add sugar liberally”, does anyone ever understand it to “add just a little?”. No, any person will understand that as “add quite a bit”. People understand “being liberal” as meaning “don’t be sparing”.
Likewise, what does the spiciness of a soup has to do with conservatism? What are you conserving? When one says they were being conservative about adding pepper, everyone understand that it means that the person didn’t want to add too much pepper. But that wasn’t about conserving pepper, even though putting not too much pepper would save pepper in the end. It is clearly understood as being careful about not making the food to spicy to whoever will eat it. People treat “being conservative” in everyday language as “being careful about the end-result”.
To which I reply: what is the effect of introjecting that concept in people’s minds? Are conservatives, now in a political sense, really careful about the end-result? When the left pushes for environmental policies, deeply concerned about the immediate future of our planet in the face of climate effects, and the conservatives resist these initiatives, which side is being cautious and which side is being reckless?
In politics, what conservatism really fights for is conserving the status quo of their power relations. That’s where their name really comes from. They will adopt cautious positions when they serve that goal, and they will adopt reckless positions when that is the one that promotes the perpetuation of their power. That is why you hear today people talking about a “conservative left” when groups defend more egalitarian economics alongside social policies that throw minorities under the bus; it is a way to appeal to the majority’s vote by means of their own prejudices.
But the widespread use of “conservative” to mean a well-measured approach and “liberal” to mean a carefree aproach makes a strong subconscious argument that the conservative approach is that of the “adults in the room”.
A second-order effect is perpetuating this false dicothomy between “conservative” and “liberal”, on which so much of the American perception of mainstream politics is founded. By framing them as opposites, it sounds like the spectrum has been covered, when in reality, true leftist politics are left out of mainstream discourse.
This is so much the case that one can perceive the difference across languages. Due to the vast cultural influence of the US in the Western world, I do see the same phenomenon with the word “conservative” happen in the Portuguese language, here in Brazil. However, because here the political establishment of the left is different from that of the US, we do not have the same linguistic phenomenon happen with the word “liberal”. I could translate my conservative/soup example word-for-word into Portuguese and that would sound idiomatic, but I couldn’t do the same for my liberal/cake example. This is because here, “liberal” is an adjective that is not considered to be part of the left, but instead of the right: in Latin America, the people who label themselves liberals are those aligned with what the global left would call neo-liberals1. In this context, it is common to find people labeling themselves as “conservative liberals”, which might at first blow minds in the US, but which makes perfect sense once one thinks of those Americans who label themselves “fiscally conservative, socially liberal” — a milquetoast position that comes from a position of comfort, defending a watered-down appeasement in social politics that fails to admit that truly dismantling the systems of social oppression will inevitably require fighting the forces of the economic status quo defended by conservatives. Consider now a mirror form of “conservative liberal”, which is how the term is most used in Brazil: those who are socially conservative, defending the maintenance of the existing systems of oppression, and economically liberal, defending unregulated laissez-faire markets that preserve the powerful in power. In the US, that is just what one calls a “conservative”.
One might argue that this commonplace meaning of “cautious” is that regular meaning of the word, and that the political conservatives are the ones who hijacked the word’s meaning for the sake of their ideology. I disagree, given that the word itself is somewhat recent, and their ideology is not so much about being careful as it is really about conserving (their power). Etymologically, the political meaning matches the word better. And if word frequency in book corpuses is anything to go by, the expression “conservative estimate” appeared a few decades after the word “conservatism” itself.
That is why I decided to stop using “conservative” in that non-political sense: it is essentially a very effective form of propaganda that has gotten ingrained the language. But the reason why I am not telling you stop using it is because that would be a very weak form of activism: changing reality is not changing the language. This is what the liberal establishment wants you to believe: change your language and that’s sufficient, you’ve made a change. This goes back to the “political correctness” movement of the 1990s, which was a form of institutionalized hypocrisy. Saying “you shouldn’t use racist language” is very different from “you shouldn’t be a racist”. The former is a way of preserving racism by hiding it from plain sight. The latter is about changing human relations, of which a change in the language is just one consequence. Changing the language is not a way to change reality. If the reality of oppression itself doesn’t change, the change in the language just accomodates the reality underneath, and over time the new term becomes loaded with the oppressive charge and people decide to change it again, in an inflationary chain of euphemisms or neologisms.
What needs to happen is not a change in the language, but a change in perception. Racism is shattered not by political correctness, but by perceiving other races as equally valid people. Changing perceptions changes reality, and that then changes language. My evolving perception of what it means to be conservative affects how I use the word.
But didn’t I say that the right is effective at shaping language? Isn’t that changing language to change reality? No, Language as propaganda is a way to change perception, and from there then change reality. And this is done is a much more subtle way than just saying “don’t call it X, call it Y”, which just leads to hypocritical euphemism. When they succeed at associating the idea of a “conservative approach” with that of the “adults in the room”, or when they use terms such as “private initiative” or “intellectual property”, they are using language as a means in their advocacy to affect the world, and not making their advocacy as a means to affect language. We need to understand the power of language. We need to change language. But most importantly we need to change the world, otherwise they will keep conserving their position of power in the world, while they keep us busy changing language.
1 - It is interesting to note how much “neo-liberal” is a term strongly derided by the neo-liberals themselves, to the point that one of them once told me that “neo-liberalism doesn’t exist”. They know the power of language and they want to frame their position as being the true liberalism: they want to normalize their stance as a naturalized “love of freedom”, and not as the particular strand of reckless economics that it is.
🔗 Frustrating Software
There’s software that Just Works, and then there’s Frustrating Software.
htop Just Works. LuaRocks is Frustrating Software. I wrote them both.
As a user and an author of Frustrating Software, there’s a very particular brand of frustration caused by its awkward workflows.
I recognize it as a user myself when using software by others, and unfortunately I recognize it in my users when they fail to use my software. I know the answer in both cases is “well, the workflow is awkward because reasons”. There’s always reasons, they’re always complicated.
I wonder if I would know that were I not a developer myself.
Well-intentioned awkward free software still beats slick ill-intentioned proprietary software any day of the week. Both cause frustration, but the nature of the frustration is so, so different. The latter pretends it Just Works, and the frustration is injected for nefarious reasons. The frustration in the former is an accidental emergent behavior. I feel empathy to that, but it’s no less frustrating.
I wonder if non-developer end-users feel the difference, or if the end result is just the same: “this doesn’t work”. I’ve seen people not realizing they were being manipulated by slick ill-intentioned software. I’ve seen people dismissing awkward well-intentioned software outright with “this is broken”.
If users were looking at a person performing a task in front of them (say, an office clerk) rather than a piece of code, everyone would be able to tell the difference instantly.
In the end, all we can do as authors of well-intentioned free software is to be aware when we ended up building Frustrating Software.
Don’t be mad at users when they don’t “get it” that it’s “because reasons”.
Don’t embrace the awkwardness retroactively as a design decision; just because it can explained and “that’s how it is” it doesn’t mean that “that’s how it should be” (and definitely don’t turn it into a “badge of honor” to tell apart the “initiated”).
Once we step back after the defensive kneejerk reaction when our work is criticized, it is not that hard to tell apart someone just trolling from genuine frustration from someone who really tried and failed to use our software. Instead of trying to explain their frustration away to those people, take that as valuable design feedback into trying to improve your project into something that Just Works.
As for me? LuaRocks has a long way to go (because reasons!), but we’ll get there.
🔗 That time I almost added Tetris to htop
Confession time: once I *almost* added a terminal version of Tetris as an Easter egg in htop.
I managed to implement a real crude but working version of it code golfing to make it as short as possible and got it pretty tiny, then added it to the help screen so it would activate by typing h, t, o, p (since h would take you to the help screen and the other keys would be nops in that screen).
Then there’s the question of how to hide an Easter egg in a FOSS codebase… The best I could think of was to make it into a long one-liner starting at column 200 so that most people looking at the code without word-wrapping editors would miss it. But after everything was coded, I decided that trying to “sneak code in”, even in my own codebase, was a bad practice and the good intention of innocent fun wasn’t worth it.
My fascination with Tetris goes way back. I first implemented it when I was in high school, and it getting it done really gave me pause: that was a real program, something that people paid real money for in Nintendo cartridges. It was the first time I thought I could really call myself a programmer for real. At the same time, it was my first contact with the ethics of software. I had never heard of FOSS then, and yet I asked myself: “what if my friends ask for the source code? what should I do?”
Years later, when we did the first CD version for our GoboLinux distro, I took an existing ncurses version of Tetris and hacked it into our installer, adding a progress bar that showed the status of files copying from CD to disk, while the user played the game (distro installers took forever back then!). Everyone loved it–except for the fact that it was supposed to auto-quit when the installation was finished but we changed the list of packages last minute so it got the count wrong.
A lot of people just kept playing for a long time without realizing the installation was done! (But it wasn’t too bad, they could just press Esc or something to quit and finish the install.)
Our early Gobo releases were full of little fun tweaks like that. In one release we included an emulator and legend has it that some hidden folder contains a ROM (not Tetris!), but not even I remember where that is, and that ISO probably isn’t even online anymore. (We really should have preserved our old stuff better!)
The memory of the Tetris installer in Gobo having a last-minute bug was another thing that dispelled me from the idea of the Tetris Easter egg in htop: while having bugs is just normal, I couldn’t bear the thought of htop having some serious bug caused by code added for silly reasons…
htop has its fair share of “unnecessary code”, such as the “big-digit LCD” meter and the themes, which are more artsy than utilitarian and I stand by them. If anything, I think software in general should be more artsy.
But “hidden Tetris in htop causes buffer overflow” would be terrible PR for the project (and my reputation by extension, I guess). That along with the bad taste in the mouth of the idea of hiding code in FOSS left made me drop the Easter egg idea.
I wish I still had that code, though! If only to keep it to myself as an autobiographical side-note.
Come to think of it, after writing all of this I realize I probably _should_ have included that code… as a comment!! Maybe that’s the way to do Easter eggs in FOSS? Add a fun/silly feature but leave it commented out, so that someone tinkering with the code finds it, enables it and has fun with it for a bit. I know that *I* would have enjoyed finding something like that in a codebase.
Oh well, maybe someday I’ll pull this off in some project.
Follow
🐘 Mastodon ▪ RSS (English), RSS (português), RSS (todos / all)
Last 10 entries
- Aniversário do Hisham 2025
- The aesthetics of color palettes
- Western civilization
- Why I no longer say "conservative" when I mean "cautious"
- Sorting "git branch" with most recent branches last
- Frustrating Software
- What every programmer should know about what every programmer should know
- A degradação da web em tempos de IA não é acidental
- There are two very different things called "package managers"
- Last day at Kong