Tuesday, February 21, 2017

What is discrimination? (part 1)

For a long time now I have wanted to write this blog post. I just never got around to doing it the justice it deserves. It was called "What is racism?" in my head, but just as I was finally starting on it, I realized that it was really about discrimination in general. I will be using both terms, though.. At the end of the day, racism is just a form of discrimination.

Racism ain’t what it used to be. Time was, if you were racist, you bloody well knew it. [..] No more. [..] racism has become recast as a kind of bad etiquette, where merely saying the wrong thing, even unintentionally, is enough to mark you out as a moral leper.

A couple of years back, I was riding my bike from the train station to my home. As I live in the Netherlands, there were plenty of other people riding their bikes as well. One of them got me in a bit of an annoyed mood because he delayed me by not indicating that he was taking a right turn at a traffic light. Then, I approached the next traffic light. There was someone else who slowed down because he had to wait for the light to go green. However, he did this on the left side of the bike lane, making it impossible for me to pass him and take the right turn for which there was no wait.

It was at this moment that a comment towards him sprang into my mind. I wanted to say something like "hey, this is the Netherlands and here we ride on the right side of the road". However, I kept my mouth shut and avoided the conflict. It wasn't until a couple of minutes later that I realized how racist that sentence would have sounded if I had actually said it. After all, this guy did look like his parents weren't born in this country.

To me, the statement wasn't racist at all. I hadn't even registered yet that this person looked a bit foreign and I would have said the exact same thing to someone who looked like he had thorough Dutch roots. It was just a way of me ridiculing that the person for not following the single most basic traffic rule. I didn't really think anything of where that person was from, I just made the ridiculous assumption that this was a misunderstanding of the rules and commented on the fact that there are some countries where they drive on the left side of the road.

But then was that comment truly racist? Did it matter that I didn't mean to offend him over his race? Did it matter that I would have said the same thing to someone who looked more like a native? Would it still have been racist if I had said it to someone who looked more native? Would it have mattered whether that person was as native as he looked? Would the same sentence have been racist if it had been uttered by someone who did so because of how the person in question looked?

My personal interpretation of what racism is - and in fact what discrimination is in general - has not lined up with what it popularly is for a long time. Let's take the word "nigger". This is widely recognized as a racist term. This is because of its historic ties of the word to slavery. I am not trying to deny the hurt the use of this word may incur, but I would like to question the fact that just using a word like that is discrimination or racism. To be honest, I think that for many black people there isn't in fact an association to this slavery. They will be offended by the word just because they were taught it is a bad word. Of course, it's also connected to the more recent usage of the same word as a slur and it can hurt in that way. But that use of the word as a slur is also just because people have been taught it's a bad word. Once again, I don't mean to deny the hurt that this word causes, no matter whether it is because of it being a bad word or because it's because there are people that do experience a connection between the word and slavery. I'm not even trying to say it's not a bad word either.

However, there is this strange other side to this word, where it is accepted if a black person says it. I would understand this if it was about intention and sometimes a bit of it is about intention. However, the word is also considered racist if it is used by a white person without intending to insult. If anything, the fact that white people cannot use the word while black people can sounds like racism to me. Of course, as a privileged white male, I don't have much to complain about. I'm really just trying to get to the issue what discrimination and racism are. To me, it really just seems that the word isn't inherently racist.

If it's just about intention, though, things get very hairy. Take the example from the traffic light situation above. My intention was to take a verbal stab at this person without it relating to where he - or his parents - were from. However, he wouldn't have been able to tell that. If there was a third traffic light he had to take and he did the same thing there and someone else made the same comment to him there, but this time with the intention to hurt him based on his race it would have sounded exactly the same. Moreover, it would have felt exactly the same to that person.

What about racist jokes? A racist joke really just evokes a stereotype for the sake of comedy. However, racist jokes are considered a bad thing. They may very well hurt people. However, jokes about dead babies are considered much more acceptable. Not everyone likes these, but they don't carry the same stigma. That's while such a joke can hurt very much to someone who has lost a baby.

Let's take the combination of racism and comedy a bit further. Let's talk about such things in the context of entertainment. The satire of shows like South Park spring to mind immediately. They had a whole thing about gingers not having souls. Basically, their characters were discriminating other characters. It sounds strange to me to call a piece that has fictional characters discriminating other fictional characters as being discrimination itself. However, when episodes on this theme aired, the number of children with red hair being bullied skyrocketed.

Maybe we can shine a different light on this. Imagine you are making a period piece. A movie, let's make it a movie. It's set mid-1900s. Women were discriminated against in that period. Should you not show that in your movie? Is being authentic in that respect discrimination all by itself? Of course there is room for a movie showing those troubles, but say you just wanted to make a police drama set somewhere in that time period. Does that mean you can't show a man being a pig towards the typist woman?

If anything becomes clear to me through all of this, it's that discrimination is not the same as "shouldn't do". Of course you shouldn't discriminate. That's something that's so important that many countries (at least the ones in the West) ingrained this in their constitution. However, there are things that you shouldn't do, but not because they are discrimination. In the extreme, hate-mongering is often not discrimination in itself, but it does move others to discriminate and it should be clear that it's not acceptable behavior.

In my opinion you shouldn't ask yourself if what you're saying is discrimination. It should be clear when it is discrimination and you should know to stay well away from that. However, I do think it's good to ask yourself whether what you're doing is offensive to people. It doesn't even necessarily have to do with something you can discriminate about. Likewise, it's good to ask yourself if what you're doing may validate people hurting others, through discrimination or something else. I'm not against free speech, but I would like those practicing free speech to take their responsibility.

Today, I really just took a look at what I think isn't discrimination. In the next part, I will take a look at what I think is discrimination. I hope you'll join me for that part as well.

Saturday, February 11, 2017

MinGW? MinGW-w64? Msys? MSYS2?

I've got a more serious blog post in the pipelines. However, right now, I just want to take a moment and complain about a mess I came across.

So, it's been a while since I have last programmed in C or C++. In fact, I have never done any real C programming and it's been over half a decade since I was serious about a C++ project. I have recently done some Arduino work, but there you don't really have to worry about the compiler yourself, so it's not relevant here. And because the compiler is what I am talking about here, so C++ and C can be thrown on the same pile, as I use the GNU Compiler Collection (gcc) for both.

Man, the gcc for windows situation is a mess...

So, there has always been MinGW and Cygwin. Cygwin is a whole POSIX emulation stack. Programs had to be compiled specifically for running in the Cygwin environment, but it was easy to do this for any linux program. Such programs would always need at least the Cygwin compatibility layer dll to run. Many people also just use Cygwin for a linux-like environment (since the GNU tools provide what many people consider "linux-likeness") on Windows without using the compiler. I've always used some version of msys for this, but I'll get to what that is in a moment.

The other option was MinGW. Rather than a full compatibility layer, it just aims to provide a compiler that can compile things natively for Windows. You will need to talk to the Windows APIs just like you would when using a different c----ompiler like Visual C++. It's just a way to get gcc to compile for Windows.

However, MinGW was married to MSYS. MSYS was forked from Cygwin at some point, but it did away with its compatibility layer. Instead, it used MinGW to compile some of the core GNU utils for native windows. This also gives you sort of a linux-like system on Windows. This was necessary to run mingw and meant that msys was a part of the mingw project. However, you could also use mingw to cross-compile from linux to windows, in which case you didn't need msys.

Unfortunately, mingw only supported 32 bit applications. When I say around the time when this started being an issue, I mean during the days of Windows XP x64 and Windows Vista and 7, which had had 32 bit and 64 bit versions which were both used (yes, a lot has changed since then). So around that time, there was a company that developed a mingw version for 64 bit application in house. At some point, it donated this code to open source and it was tried to merge it with the mingw project. However, this project suspected there were some licensing issues and a rift occurred. A second project started, called mingw-w64. It also had its own msys version (I think) and if I remember correctly it could actually compile for 32 bit and 64 bit applications.

During this time, mingw had a bit of an installer problem. The person who had been maintaining the installer left the project and basically nobody wanted to work with the same installer building tool. This led to the installer version they provided to be horribly out of date. You had to mess around with packages to get a more recent version. They were rather hostile to help offered by volunteers from outside the project, demanding that such help would be maintained by the same person indefinitely. There was some work on a new system inspired by the apt-get interface, but there was no temporary solution in the mean time. This system got done eventually, but by then the project had suffered greatly already.

Enter git. Git is not a compiler. However, it relies on GNU tools to do its job, so it needed some of them to be able to run on Windows. So, they created their own version of msys (msysgit) which makes them relevant to this story. At some point I switched from mingw's msys to msysgit for my "proper command line" needs and since then I haven't really kept up with the mingw project.

That is, until now. I want to make a utility that uses I2C on linux and my best bet seems to be C. So, I went to look for a compiler. What I really need is a cross-compiler from Windows to ARM linux, or perhaps an ARM compiler on the device itself or maybe even a cross-compiler from x64 linux to ARM linux to run from a (virtual or other) linux installation, but I ended up looking at mingw first. I had a very old version installed as part of the haskell project (oh joy!) and a slightly more recent version from my C++ development days. So, I started looking into the mingw situation.

The mingw project seems to have bled to death. Their site is still online, but nothing seems to have happened for them in over three years. In a way, this is logical. They were already struggling in those days and today you don't really have to bother with 32 bit applications anymore as 64 bit is commonplace enough. mingw-w64 is still alive and kicking and it seams to be the way to go. However, there's also msys2.

The project page describes them as a rewrite of msys and they mention the reason for their existence is the fact that the original msys wasn't able to keep up with Cygwin. However, what I think is one of their main accomplishments is that they divorced from mingw. Don't get me wrong, they are still seeing each other, just not living together anymore. The tools are still built with a mingw version (I think the w64 version) and it is still an important way to run mingw, providing support for both (the outdated) mingw and mingw-w64 out of the box. However, they are just not the same project anymore, so the coupling is not as tight anymore (i.e. they are not wearing rings and they are allowed to see other people).

The new msys2 also does away with the apt-get inspired installer in favor of a new port of Arch's package manager, pacman. Oh, and they apparently don't play well with msysgit or the original msys. Things never get simple, do they.

Confused yet? I definitely am!

Edit: It seems there still was an important bit I missed. The more recent version of git for windows (incidentally, called Git for Windows rather than msysgit as the older versions were called) don't actually use their own msysgit anymore. Instead, they are already packaging msys2, which means that I have already been using it for quite some time...