_ __ __ ___ (_)___/ /__ ___ ___ / / ___ _______ / _ \/ / __/ '_/(_-</ _ \/ _ \/ -_) __/ -_) /_//_/_/\__/_/\_\/___/ .__/_//_/\__/_/ \__/ /_/
This semester I took Intro to Artificial Intelligence at SIUe. Artificial Intelligence is a senior level course. I'll call the professor, "Professor X" to preserve anonymity.
Since my time giving in to using Visual Studio in software engineering class and seeing the inner conflict that caused, I was much more prepared to stand up for my beliefs in A.I. class. The very first assignment we got was to write an A.I. that solves a "cat in the hat" problem involving finding certain values for the height of the cats and number of cats in each hat (each cat has a hat with more cats except the cat at height one). I was intrigued. I could have written a program that simulates the cats, but I instead went for an analytical approach and derived two single logarithmic equations that yielded the values efficiently. I still wasn't sure how to solve both equations, so I developed a binary search algorithm for the right value instead. I was disappointed however when after reading the specification I discovered the project had to be completed using Visual Studio and written in C++. Visual Studio is proprietary software made by Microsoft that requires users to agree to a license agreement (which I read) and submit themselves to privacy-invading telemetry. Ew.
I was not thrilled about this, so I opted to write my program using a different IDE and compile it with the gnu-c++ compiler. I wanted to get ahead of this so there wouldn't be any issue, so I emailed Professor X explaining why Visual Studio is proprietary malware, or at least potential malware. Professor X responded that he did not believe it is malware and I should use it anyway. So I responded over email again explaining my beliefs about free software and why students ought not be required to use Visual Studio. He said he would consult with his colleagues about it and the grader as well. Professor X and the grader got back to me explaining that they couldn't change the assignment just for me as there were over thirty students in the class and allowing students to submit their work differently would be too much hassle. Maybe don't ask students to use proprietary software?
After I had already written my program, I spent over four extra hours learning how to use CMake so hopefully it would open in Visual Studio when the grader went to grade it. This was extra work I did that no one else in class had to do because I refused to use proprietary software. After I submitted it, I got a grade of zero because the grader was unable to run my program in Visual Studio. As a side note, it seems ludicrous to me that we were demanded to submit our C++ programs in the form of Visual Studio project files. That is just not a sane way to submit a project. But anyway, I sent a long email to the professor again explaining that my program did compile and run and that I spent four hours trying to use CMake to get it to work for the grader. He emailed back saying how me using CMake was a huge waste of everyone's time, and if I had such a strong problem with Visual Studio, then maybe I should go talk to the dean about it instead of talking to individual professors about my beliefs. I guess his point was if the dean didn't agree that the university should only use free software then I should just accept proprietary software?
The professor and grader agreed, just for this one time, to regrade my program to reflect the work I put in instead of my willingness to agree to Microsoft's insane licenses and run proprietary malware just to write a C++ program, and I got a 90% losing 10% only because I submitted a day late. For the next two programs, the professor and grader agreed that I can submit only the source code cpp files because the grader had figured out how to run them in Visual Studio.
The second assignment was Huarong Path, also called Klotski. It is a sliding puzzle where you try to get a particular piece into a particular spot on the board by sliding all the tiles around until you have the piece in the destination spot. There are many heuristics you can develop for this, but I found that implementation was just as important as heuristics. The third assignment was Fore & Aft where you try to reverse the positions of the differently colored pegs. Imagine a large square broken into four quadrants, but two quadrants that are diagonal to one another are missing, and there is one empty center peg and the quadrants have differently colored pegs. The rules are that you can move any peg into an empty adjacent peg or jump over pegs like in the game checkers. I ended up using A* to solve the puzzle. I was able to submit these two assignments with only the source code files, so I didn't have to use Visual Studio and there was no problem.
Fast forward to the fourth assignment. It was an N Queens puzzle. For N=8, this is better known as the 8 Queens Puzzle. This was my favorite puzzle to write a solution for. I found a simple hill-climbing algorithm from our textbook that was much faster at finding solutions than was asked of us. We had to find three unique solutions. I just allowed my program to take as input the board size as well as the initial position of the first queen. For some reason it was stipulated that we had to enable one queen in the solution to be "fixed" to a certain square so she was guaranteed to be there. It didn't take me long to have this solution written up and submitted, but my grade unexpectedly returned with a failing grade for the assignment. It was because gnu-c++ allowed specifying C arrays without a size, but the standard C++ compiler didn't, so it didn't compile in Visual Studio.
When I turned on warnings when compiling with gnu-c++, I immediately saw what the grader was talking about and fixed it. The grader allowed me to fix it since it was just an issue with the compiler compatibility and not my code. I got full points back for this assignment. I was told after the first assignment that it would be my responsibility to make sure my code worked in Visual Studio and if it didn't, I would be graded accordingly. But the grader was willing to allow this to slide since it was such a minor issue and strictly to do with compiler compatibility.
I talked with Professor X in person outside of class about proprietary Visual Studio. The first thing I remember that he mentioned was how hard it would be for me finding employment with my philosophy about software. This is undeniably true. There is far less money in creating free software than proprietary freedom-destroying software. So I explained to him that my primary focus isn't just employment or living the easiest life possible.
If I wanted to live an easy life and disregard my ethics totally then yes I could do that. But I need to do something to make the world a better place, or at least not worse. There's already enough people making it worse. Also, it's obvious that I'll have to work somewhere that is going to allow me to work within my free software values. I'm not going to be working at AT&T, Google, or Microsoft. If I'm not able to make a living with free software, I'll do some job unrelated to computer science for an income and write free software on the side. It would be much easier to sleep at night doing that instead.
He then suggested I use the university computers instead of my own. I explained to him how this doesn't solve the issue because Visual Studio is still proprietary and I would have to use the Windows malware that is installed on campus computers as well. He said that the university has a deal with Microsoft in which Microsoft deactivated their surveillance features for university computers. SIUe does have a deal with Microsoft (which is why they use so much Microsoft software), but I seriously doubt Microsoft deactivates the spying (telemetry) features for their programs at SIUe. Even if they do, Windows and Visual Studio are still proprietary so there's no way to confirm that.
There was also the extremely common confusion about how software companies will make money producing only free software. Beforehand, I had emailed Professor X supporting links from the FSF website explaining about free software. I tried explaining that it's not about price, but freedom. I could have been misreading the situation so don't take this as fact, but it seemed to me that he didn't have any interest in learning about free software or the ethical implications. He seemed more interested in getting me to conform to using Visual Studio so that it would make his and the grader's job easier. The reason I think that is because throughout our entire prolonged exchange, emails and in person, he didn't mention ethics once and expressed his sentiment that the conversation was "pointless". I don't think conversations about ethics are "pointless". I think a conversation about ethics is important before starting any project, not just writing software.
I have seen this theme again and again having conversations with professors. Perhaps I just don't explain free software well enough, which is why I provided links and video resources to Professor X. One thing I often see, which is true of anyone changing their mind in general, is that people won't do it on the spot in realtime. Reading a post like this you may think that I wasted my time. But people do change their minds and it almost always happens in private, not under the pressure of a realtime conversation. And even if people don't change their minds completely, they can often be nudged in the right direction. So don't lose hope just because someone doesn't immediately see things your way. Many professors at SIUe that I've talked to just aren't accustomed to thinking about software freedom as an important issue. I expressed my frustration to Professor X about how the issues he was bringing up were peripheral to me, and that if he really wanted to convince me to use Visual Studio and Windows he would have to show me why my ethical beliefs are wrong.
The truth is unless someone is very brave and intellectually honest, they're not going to change their mind (admit they were wrong) on the spot. Especially professors because they would have to rewrite entire assignments to use different software and restructure their coursework which is potentially a lot of work. I think they are also strongly encouraged from above to use particular proprietary software because of the university's deal with Microsoft. They would have to go against that. But I have seen professors use their own computers in class, so it's still very feasible. It's a lot of work that professors aren't required to do and for reasons most of them aren't accustomed to considering. I'm not defending their decisions to continue using proprietary software, just explaining why they don't change things. I'd like to engage with a professor and see them realize my point on the spot and decide then and there to restructure their course to be more ethical, but that never happens.
Nonetheless, I do think the conversations I've had do have an impact. And most of that impact I'm not seeing because it happens in private after a lot of thought given to ethics, but it does happen. As a matter of strategy, my advice to anyone trying to spread the word about free software at work or universities is twofold.
Keep having conversations with people about free software, every opportunity you get that seems appropriate. Especially have conversations with those with the most authority to do something to make change. Don't worry about looking like a fool because times are desperate and if free software philosophy doesn't spread more, we risk losing more ground to encroaching proprietary software. We cannot let the free world disappear.
Encourage others to reject proprietary software and reject it yourself. Get a few people who agree with you and form a club or pact to reject it. There's not always free software that perfectly replaces proprietary software, in which case you must reject the proprietary software entirely with no substitute. At SIUe and any other universities, professors aren't going to take much notice if you go off on your own trying to create little workarounds for the proprietary software they want you to use. The only action which they have to respond to is when you outright refuse to use the proprietary software and most importantly tell them why you're rejecting it. It's helpful to propose free software at the same time, but most important is telling them you refuse to use proprietary software and stand behind that decision with unflinching stubbornness. The only way to slow the encroachment of proprietary software in schools, universities and workplaces is to refuse to use or develop it, demand alternatives, and spread the word.
Unless otherwise noted, the writing found in this journal is licensed under CC BY-SA 4.0.
© 2019-2021 Nicholas Johnson