_ __ __ ___ (_)___/ /__ ___ ___ / / ___ _______ / _ \/ / __/ '_/(_-</ _ \/ _ \/ -_) __/ -_) /_//_/_/\__/_/\_\/___/ .__/_//_/\__/_/ \__/ /_/
From the title of this journal entry alone, you might think it's about my story struggling to graduate without nonfree software. But I've already beaten that topic to death on this journal. It's time for someone else's story: Wojciech Kosior. He faced the same sort of difficulties graduating that I did, except he graduated. His story is one of incredible determination and persistence. He fought hard to graduate in freedom and won. I don't know of many people with the resolve displayed in his narrative.
The revised narrative of his struggle can be found on gnu.org. It went through at least 20 revisions before being published. Many of the details were stripped. He kindly sent me the unedited original copy of his narrative which I personally find more inspiring than the one on gnu.org. I modified the narrative's formatting to make it more presentable here. It was originally sent as a .org. If you want the original .org file (for emacs), I've uploaded it to this web server for download.
If you enjoyed reading my story struggling to graduate without nonfree software, then you're in for a treat. Without further introduction, I present to you Wojciech Kosior's narrative.
Title: Struggle to graduate without nonfree software
Author: Wojciech Kosior
Due to pandemic many people experienced deaths of their relatives, others became jobless. Those are some severe losses, many of which couldn't be prevented. At the same time we also witnessed an embrace of proprietary videoconferencing platforms, that brought a huge loss of freedom. Most ppl would disagree over how severe this loss is, but one is certain - it *could* be prevented.
As a university student, I struggled to avoid losing freedom and pass my courses without surrendering to the imposed not-free-as-in-freedom services, often by proposing free/libre solutions instead. I didn't expect to win this fight - but now I think it may happen. I describe my fight below so as to build up and inspire others.
For over 3 years I've been studying informatics at the AGH University of Science and Technology in Kraków, Poland. Over that time I was becoming more and more determined to avoid nonfree software. That, among others, meant getting a librebooted ThinkPad and switching to GNU/Linux distros that only include libre packages.
"What about studies?" - one could ask - "Weren't You required to use Windows? Or MS Office? Or some other proprietary tools?"
Actually, a great majority of the jobs could be completed with (or even required) free software. In present times there we have the luxury of having excellent libre operating systems and libre tools for most tasks, including free software implementations of most popular programming languages. On those few occasions some nonfree tool was required, I was either able to convince given professor to let me do a replacement homework (e.g. doing the same exercises under Postgres database instead of Oracle's) or do it at the university during other groups' classes. I admit running nonfree software on someone else's computer doesn't fully solve the problem of nonfreeness and is not something to be proud of. Nevertheless, it just seemed fair.
Without bigger problems I completed the 5th semester of my studies. At the beginning of 6th - the pandemic began. Universities closed, most students traveled home and professors started organizing remote lectures and classes. You guessed it - they all chose proprietary platforms. The ones used were Cisco Webex, MS Teams, ClickMeeting and, duh, Skype. Each of those either doesn't have a free software client or I couldn't find one. Of course, the professors expected everyone to be able to easily connect using web interface. They didn't realize the problem of nonfree js.
Lectures didn't pose a real problem, since they're not obligatory at the AGH. As to lab classes, their form varied from professor to professor. Some only described what they want us to do for homework. Then we had to just upload the completed homework to UPEL (AGH's modified version of Moodle). Some organized non-obligatory consultancies. Many didn't care about actual presence on classes and only wanted student to appear at specified time to interactively hand homework in. Finally, one expected us all to attend the meetings at lab class hours and was very angry about me having issues with it.
What were my actions in those circumstances? I would *very* politely email every single professor who announced something would be done via one of the problematic platforms. In my mails I usually linked the Costumed Heroes video and some free videoconferencing tools (Jami, Jitsi Meet). I often remarked, that the service used by them has no free software client available. Centralized nature of those services and surveillance being possibly conducted through them are also severe issues, but to me - software freedom was the decisive factor.
I'm under impression, that few professors didn't understand the issue or only understood it partially. Hence, replies like "the solution would be to run the program in a virtual machine" or "You don't need the source code to use the service". Fortunately, even though many professors were irritated by my emails, most of them eventually agreed to for example use another tool (Jami/Jitsi Meet) to receive my homework. I think what helped me a bit is the fact, that they are all teaching some field of computer science. Otherwise, the fraction of those who don't understand the problem would be way higher. That's why I think it could be more difficult on other faculties or in case of lower-level education (e.g. schools).
As the universities were closing, I was in the middle of doing some kind of group homework for machine learning course. It was quite natural, that I asked one person doing that homework with me to forward what the professor said during Skype sessions. She later continued to do me this favor and everything else could be done in free software.
The first real problem was with the artificial intelligence methods course (I shall later just call it AI). It was rotational and we managed to have one lab class on-site before the pandemic. The homework for this class was to be done in proprietary Framsticks application. When emailed, the professor allowed me to do some neural networks exercise instead. But I did have double stress, because I then had to ask him to provide me with the required materials using some method other than Google Drive (which I would be able to download from, but only if someone gave me a link to a single file and not to a folder).
Later in march we learned another professor teaching AI wanted us to complete an online NVIDIA course and send him a certificate. This was supposed to serve as a replacement for a single lab class. The course, obviously, required nonfree js. I wrote an email to that professor, but did not receive any response.
Also in the early part of the semester, I was supposed to hand in distributed systems homework via Webex. When I emailed the professor, he agreed to use Jami for that. That was a little victory, but classes of this course were also rotational - I knew I would have to ask 3 more professors with subsequent homework. The grading system was such, that if one refused, I would fail the entire course.
Near the end of March, system programming (i.e. meddling with guts of Linux) classes started. Those were obligatory and during Webex meetings students would present their homework. The professor didn't want to lose time connecting to other services than Webex. At that point, his response didn't give any hope. Especially that I knew him from earlier semester and he didn't seem very kind. I kept uploading homework exercises to UPEL but I was to live in uncertainty through the Easter and long after it.
At some point I emailed two professors about the use of nonfree platforms for lectures. One didn't respond at all and the other replied rudely and seemed not to understand the issue. That's how I stopped caring about lectures.
It was April. I presented second distributed systems homework. But even in cases proprietary videoconferencing platforms were not needed, there were other difficulties. For example, some lab classes assumed using Java packages from Maven repository. Even though I knew given library is free software, I would always attempt to avoid using a language-specific package manager for it. That's because repositories used by tools like Pip (for Python) and Gradle (for Java) allow some sorts nonfree packages and also lack good security verification. This deserves its own essay. Eventually, I would install libre libraries from there, but only if they were not packaged for my distro and there were too many dependencies to install them manually. You can imagine, that this costed some time and on my faculty - time is precious.
Also in April, the lazy "do an NVIDIA course" professor sent us a list of students who did not send a certificate. Surprisingly, my name was not on the list. Instead, I was rated 100% for this exercise. I concluded, that he just wrote down surnames of all students who sent him emails with certificates and also mistakenly included my surname from my mail... I did not want to be a cheater, so I later emailed him about his mistake, but he didn't respond anyway.
More problems with AI were to come. Another professor wanted us to do homework in proprietary Choreographe simulator. After learning about the nonfreeness issue, he proposed that I use Webots instead and I agreed.
Around that time I was to realize, that the most unkind professor of that semester wold the one giving software engineering course. The course had the form of a group project, but we were still expected to appear on meetings every week. The professor first didn't answer my emails and eventually wrote a long reply in which he threatened, that if I miss one more meeting, I'm going to fail the course. He wrote why he thinks I'm obliged to connect to ClickMeeting and the way he wrote that showed great annoyance or even anger. He did, however, write, that he doesn't care whether I connect directly or my voice reaches him through colleague's computer. And that's what we did. Me and 1 buddy from my project group were connected through Mumble and he was also connected to the meeting (as he would anyway). He moved his microphone close to the speaker so that I could hear the others and vice-versa. That was so provisional I am very surprised it worked!
May. Distributed systems homework presented to 3 professors and 1 left to convince. Another AI homework was also supposed to be handed in interactively, but the professor first agreed to use Jami and later decided, that he's already seen so much AIML stuff, that he doesn't even need my commentary.
End of May was when the situation seemed to be the most overwhelming. There was yet no course I knew for sure I would pass, there were still many emails to be written and I was already having delays with some homework due to lack of time.
In June the semester was theoretically ending, but in practice grades could be given until the middle of September. Everyone, who hoped they would be able to conduct some classes at the university, now knew it wouldn't be possible. One of those ppl was the last professor I had to hand in distributed systems homework to. Although he was not eager to use another platform, he agreed for Jitsi Meet, which doesn't require installation.
Professor giving network security course also put up with the impossibility to organize stationary finals, as he used to. He instead gave us some exercise to complete and upload. Unfortunately, we were supposed to use Cisco Packet Tracer to simulate networks. The professor was unkind at some point earlier, so I was not sure if he would allow me to do some replacement task. But he did. The new exercise involved Mininet and nDPI library.
The last AI homework could only be fully done using Jupyter Notebook on Google servers. I did what I could on a local Jupyter Notebook instance. I did not need to have this 100% completed in order to pass the course.
System programming classes were also finishing in June. I wrote another email to the professor. I was afraid he would just say I failed, but no. He said he would look at my solutions and decide and *maybe* it would be possible to meet at the university in September. Hence, I had some hope, but no guarantee.
Now, another, bigger problem - the compilers course included an exam, that was supposed to be done through MS Teams. I wrote to the professor preparing it. Even though he always seemed to like me, he did not (could not?) give me an option to write the exam some other way. I though I would fail then, but funnily - Teams failed to handle the load of over 100 students connecting and the exam was instead conducted via email (sending photos of solutions).
In that semester we already had seminar classes. The professor wanted students to present their prototypes on some meeting, but I didn't have mine ready yet, so he allowed me to finish it during summer holidays and eventually I avoided the meeting. I also had little contact with my thesis supervisor. We were to talk in July and that was the first time free software videoconferencing failed me by refusing to work properly (there were some issues earlier, but not so severe). At least it didn't happen during handing in of some homework...
In summer I also had to do an internship. I first backed out of a well-paid (as for internship) offer after learning, that there is no way to negotiate a contract, that would allow my code to be released as free software. I eventually did another, unpaid internship, which had the benefit, that I was able to spend some of its time working on my thesis.
In September I finally met with the professor and presented my system programming homework. He turned out not to be as unkind as he seemed before.
So after all the struggle I finally passed the summer semester and even had decent grades. What at some point seemed almost impossible, was now a reality.
The winter semester was the last semester of the first-cycle studies, so it was shorter - all classes had to finish by the middle of December or earlier. Before the semester started in October, university had specified some formal rules as to what platforms and tools can be used to conduct classes and exams. This was mostly to comply with GDPR. Allowed videoconferencing solutions lecturers and teachers can officially use were MS Teams, Cisco Webex, ClickMeeting and Google Meet, although didn't see anyone use the last one.
This time most professors required presence on meetings. The only exception was introduction to security engineering where the professor announced there would only be consultancies and uploading homework on time equals presence on lab classes.
There was a cryptography course. The professor did not agree to use Jitsi Meet citing too big amount of work to bother using another platform. Even though he suggested that I write to university authorities, I didn't do that, for reasons not related to the topic. I just kept writing tests (those were conducted through UPEL, so it was not a problem for me) and uploading Jupyter notebooks with completed exercises. This course didn't involve anything like interactive handing of homework, so the only problem were my "absences".
Situation with computational geometry course was very silimar, with the exception, that all homework was to be presented through MS Teams.
Another course I chose was optimization of code for different architectures. I knew the professor teaching this. During fortran course on one of the earlier semesters he required us to use proprietary ifort compiler. On the other hand, he was one of the professors showing appreciation for stuff I do well. When I emailed him, he was kind, although afraid of using any other platform that those allowed. He suggested me to contact student council of our faculty to suggest Jitsi Meet to dean and eventually get it hosted by university itself. The professor even said, that he would then happily use it for all his classes. Unfortunately, student council never responded to my emails. I was allowed to gain presence by writing reports instead of participating in the meetings. This took more of precious time, but I was glad anyway.
For second and final part of the seminar course the professor made obligatory consultancies. He initially wanted to stick to allowed platforms and even pointed out, that Jitsi Meet also runs on someone else's server and hence - is not safer. I then responded with my counterpoints and once again asked politely that we use Jitsi Meet. I made it clear, that I'd rather fail, than use any proprietary platform and he finally agreed.
For optimization of code we were also supposed to be presenting our homework interactively, 2 times during the semester. The first time was at the beginning of November and the professor wrote, that he agrees to use platform not from the official list. He just noted, that he doesn't take responsibility for security of any data exchanged through it.
Then I had an argument with my supervisor, who got annoyed with me (although there were probably other factors, too) and gave an ultimatum that I use MS Teams. I didn't agree and my supervisor was supposed to inform dean about resignation from supervising. Perhaps the dean didn't read the email? I'm just guessing. Anyway, I wrote again a few weeks later and even borrowed some electronics from my supervisor - almost as if the argument never happened.
Around that time someone told on the professors giving security course and they started organizing classes via MS Teams, but they still didn't require students to do anything during those classes and they allowed me to just send them emails at the right time and they marked me present based on that. There were also difficulties with Windows VM being required for some exploit exercise - but I eventually also avoided Windows, even though it required some additional work.
At the beginning of December it was clear, the only problems were cryptography and geometry. I wrote another email asking for a way to pass the first one. The professor told me to implement some hashing algorithm in Jupyter. I suspect he might have needed that as a teaching resource. I chose BLAKE2b, implemented it, sent it to him and this way passed the course and even got the highest grade for it, despite my mistakes in tests. That was surprisingly easy.
I also wrote to the professor giving geometry course. At first, she didn't respond. The semester was supposed to end on 15 December (although only some of the professors gave final grades that early). Before that I wrote another email and I eventually received a determined response, that I am being failed for absences. She did not mention some of my homework being uploaded late, but I guess that's good for me.
At that point I was going to stop arguing. My supervisor in an email got back to the topic of meeting on MS Teams and I responded, that I'm not going to pass this semester and thanked for cooperation.
Then, someone convinced me not to hesitate to argue more or seek help from university authorities. Or rather, I still didn't want to do the second thing, because I already declared to the professor, that I won't. But I did write subsequent emails. She agreed for an online meeting on 8 January... but on MS Teams only. And I refused again and yet again wrote why it is wrong to fail me like that. She was not responding to all of my emails and I ended up spending a lot of time waiting for replies. She eventually told me again to contact the authorities for a permission to use another platform and CC'd associate dean in that email. Given that, I no longer felt obligated not to inform him about the issue.
As he's always busy, quite a few reminder emails were needed. In the meantime, the deadline to upload thesis passed. Actually, that was the deadline for those, who wanted to defend in January. Defense in March was still possible, it would just be too late to apply for second-cycle studies - something I wouldn't be interested in, given all the difficulties I faced so far.
The dean eventually responded, but he didn't read into the right email in the thread, so another set of reminders was needed. On 13 January he finally wrote, that he talked to the professor and she would allow me to correct the reports she considered bad. No mention of videoconferencing services. Was there another misunderstanding?
The email i received from the professor explained the situation to me. The dean pleaded for her to allow me to pass without interactive presentation of my homework. So she would then give me a positive grade and I would pass the semester, right? In theory only.
She then wrote about how bad my homework is. I never claimed it to be perfect, because it was all done in a hurry and I even couldn't fix some problems I knew about. But I don't think it was bad either, especially considering the mere amount of it. She eventually wanted me to correct 2 exercises. So I did. I finally uploaded those on 15 January. I had to actually wait 4 more days for the grade, but I got it. I finally passed my 7th semester.
Now, there are still some possible pitfalls, e.g. getting statement from my supervisor. But after a month of stagnation the case seems to be finally heading into the right direction.
When I look behind, I'm actually glad I acted how I acted. Perhaps I won't be able to please those who want to see me graduate. But I don't think graduating by surrendering to nonfree platforms would bring any long-term benefits. Only more compromises. Come back in some time to see how this compromise-less effort ends. This article will be updated :)
I called all university teachers professors, although only the Framsticks and seminar ones have that title.
This first draft doesn't say it, but Wojciech ended up graduating and successfully defending his thesis. Hurray!
After reading his inspiring narrative, I couldn't help but wonder what it was that allowed Wojciech to succeed where I failed. Is it because AGH was ranked by surveys and magazines as one of the best Polish universities? I don't think that necessarily had anything to do with it. Is it because Wojciech had more determination than I did? Maybe.
I believe at some point Wojciech and I both asked someone else to use proprietary software on our behalf. Wojciech made the point in his narrative that since others were going to use it anyway, it probably didn't diminish their freedom more by assisting him. Wojciech and I both resorted to using proprietary software on others' computers as well. Wojciech admitted that he was not proud of this and I ended up regretting doing it. But those are similarities. They don't account for the difference in outcome.
There is however one major difference between mine and Wojciech's situation: money. In Poland, attending university is tuition-free for nationals. In the United States, college is very expensive. Since I'm not wealthy, continuing college for me would've meant thousands of dollars in student loans every semester. Every time I failed a class for refusing proprietary software, that would've been money down the drain. If college were tuition-free in the United States, I'd consider returning because even if I failed for refusing proprietary software, I could try again. It would only cost my time. Unfortunately free college in the United States doesn't seem likely within the near future.
In conclusion, I think the cost factor made a major difference in the outcome. Did it make *the* difference? I don't know. Nonetheless, I salute Wojciech for his dogged persistence in completing his studies in freedom. He's the only other person I know of who insisted on his computing freedom to the point of being willing to fail classes. We need more stories like his. Success or failure doesn't matter. What matters is putting pressure on the educational system to transition to free software. Even a small number of vocal students fighting for their computing freedom in universities has the potential to break big tech's stranglehold on education.
1: gnu.org: How I Fought to Graduate Without Using Nonfree Software
2: Original .org File
Unless otherwise noted, the writing in this journal is licensed under CC BY-SA 4.0.
Copyright 2019-2021 Nicholas Johnson