Preface: a great programmer
There are a few programmers who I really admire, but one that stands out. That is Chris McDonough, creator of Pyramid, the best framework for developing web apps in Python.
I don't know him except for 1 or 2 questions he personally answered to me in the IRC chat about Pyramid. But through the example of Pyramid I learned to code better ― it's as if I acquired a kind of good taste by reading the code of Pyramid and seeing how things were separated and related. You acquire this knowledge from books by Martin Fowler and others, but seeing the example in Pyramid was an important piece in actually learning it.
McDonough is an important creator of free software in Python. He also created Colander which even today is one of the 3 best schema validation libraries in Python for sure.
My main point
I never knew this, but my history as a programmer mirrors McDonough's with several years of delay. I only became aware of this today, as I found...
this video of his, which contains 3 or 4 anecdotes from his career, all of which prove a single point.
The mirror is especially strong in, through the years, having accumulated reasons to hate Microsoft, then Apple, then Google. And realizing that the open source, freedom-respecting alternative is always better, even when it's technically worse at present.
As he says, all roads lead to open platforms. So leave.
I won't repeat his interesting tales here; please do watch the video. Instead, I will sum up my own history with my own anecdotes.
The choice: C# or Java?
Microsoft first tried to kill Java through its famous embrace and extend technique. It made a Microsoft Java. And that already had some market share when Microsoft got sued by Sun Microsystems for calling something "Java" which had features that were not present in all the other things called "Java", thus breaking the fundamental promise of Java: "write once, run anywhere". Microsoft lost the case and paid an enormous indemnification to Sun. This was probably the first time "embrace and extend" failed.
In the early 2000s I was abandoning my first profession (lawyer) and came back to programming in Visual Basic 6. Now I decided it was time for me to learn object-oriented programming, so I had to choose a new language. The main 2 choices were Java and the new C#, which was Microsoft's second attack on the Java platform, when the first didn't succeed. The choice was not clear at all, because:
- Java was well-established and open source, which I already knew enough to like.
- C# was a copy of Java, except it had a couple of better language features, lacked Java's misfeatures, and everyone was saying the standard library was very well organized.
- Python interested me, but there was no job market for it in Brazil.
The dilemma was, do I choose what is technically better, or do I choose what is green. Here I made the wrong choice (like McDonough) and learned from it.
I chose C#, and the reason was, the Mono project existed ― an open source implementation of Microsoft's Dot Net platform. I wanted to have it all: the better language, in an open source environment.
My Microsoft phase
So I got jobs developing in C#, and I was good at it, because I had been enthusiastic when learning it. However, I was unhappy, because the community around C# was Microsoft-centric, seldom used any open source library, and ultimately I was not allowed to use Mono even once. At home I was running Linux versions whose names you wouldn't remember today, and doing my own things with Mono. But at work, no chance. There were many people then who didn't understand the necessity of open source, and I think they only changed years later, when Microsoft finally told them it was OK to do open source.
Conversely, the open source community already had the allergy to Microsoft that I was about to develop, so they feared the Mono project. They were afraid Microsoft would bring its lawyers out (even if not fair) to attack the technically wonderful Mono project. So it was never accepted.
Now I wish to tell the most colorful episode from this time. But I need to set the stage.
Bear with me in this section
Around 2005 I had already been coding for a while but I still didn't know a couple of essential things. I already had made several websites before I learned how HTTP worked. This was definitely Microsoft's fault. Visual Studio endeavored to hide HTTP and made the developer think as if it were a desktop application. You could develop quite a few things without knowing how the web worked, and suddenly when you finally had to know... you were in a bad place.
McDonough feels shame as he remembers the day he asked someone what a transaction is. I remember this moment in my life, too! You see, it was probably not my fault, or his. We were in a Microsoft ecosystem, and up to then, Microsoft software had never been transactional, that I know of. This was a big part of how Microsoft software was so unreliable. Microsoft did care about transactions, but only of another kind.
I learned the concept of a transaction from Subversion / SVN.
Subversion was the best thing before git. It was a re-implementation of CVS (the version control system that was famous before) with a few features added. Subversion was a transactional system: when the programmer sent her altered files to the Subversion repository, the operation either succeeded or failed as a whole ― there was no way for a couple of files to be accepted by Subversion but for the other files to fail. This is good because it ensures each version in the repository is always consistent.
The tale of SourceSafe
You know what was NOT transactional? Microsoft Visual SourceSafe, the versioning system included with Visual Studio circa 2005.
I worked at Unibanco coding in C# in a team of about 20 people. And everyone struggled with SourceSafe. Every afternoon someone would finish a feature, send the files to SourceSafe, half of the files would be written, then some network error occurred, and the other half didn't go through. Now further communication between client and server was dodgy, and the latest version in the central repository was inconsistent and probably wouldn't even compile. Imagine dealing with this problem every day!
I got curious about this problem ― which nobody seemed to try to really solve at the bank. I found an article that said, using SourceSafe is equivalent to printing out your code, deleting the code from your hard drive, burning all floppy disks, and dumping the printed copy on a paper shredder. The article said, once every 6 months, SourceSafe will die and not work at all, the system administrator will run the MS utility to recover it (yes, SourceSafe had it own chkdsk utility!!!), the recovery will fail, and a new SourceSafe repository will be set up from someone's local copy, therefore losing all history.
Well, you know what happened at Unibanco? I had been working there for 5 months or so, and one day I came to work and was told the entire team could not work, we should go out for a coffee or something, because there was a problem with SourceSafe and they were running a utility to recover it. The team got to know each other better that day. In the afternoon, the utility had failed and they were setting up a new SourceSafe repository from someone's local copy of the system, which meant all previous history was forever lost.
At this moment I summarized the article in Portuguese, sent the link to a couple bosses and started showing information about Subversion to my colleagues. But they were not convinced! They had some issues:
- "Subversion" is a name that banks don't like.
- Everyone was used to "checking out" the files they needed to change. In SourceSafe, this meant temporarily locking the files so nobody else in the team could edit them. If you needed to alter a file and someone else was already working on it, you had to wait until they were finished. This was seen as something good! The branch, diff, merge way of Subversion, which was later made better in git with better merge algorithms, was hard for these people to understand, and they feared it.
- Subversion was open source, therefore there was no paid support. Who could they call if anything bad happened? (Contrast this with all the support MS gave to SourceSafe!)
On this last point, I remember a sentence said by the project manager. He said, "it is even inappropriate for a large, rich company such as Unibanco to use open source". I couldn't believe what I was hearing ― of course it was exactly the opposite, it was criminal for such institutions NOT to foment and use open source. His mindset was common then ― the idea that open source was killing small businesses in software (which never really happened). These people really liked reinventing wheels, a problem that only free software solves.
I insisted on Subversion some more, since the new SourceSafe repository malfunctioned daily just like the old one. Finally a meeting about version control was held, but I wasn't invited; I think only one or two developers from the team were present.
And now the punch line.
The colleague told us how the meeting went, more or less like this:
"There is an improvement being made, but it's not what you anticipate. First off, Subversion is out." (I cannot remember exactly why, probably all the "reasons" above.) I was disappointed.
"However", he continued, "the bank is licensing from IBM their version control system, called Rational ClearCase". I thought "OK, at least we are trying something new, the IBM thing cannot be worse than SourceSafe".
"Just one more thing. Because the license is expensive, ClearCase won't be licensed for every team member. In fact, the team will continue to use SourceSafe, and at the end of each day, one employee of the bank will put the latest version in ClearCase."
"You jest", we replied. "You have got to be joking."
I believe this is how most banks work even today: teams are not empowered to solve their own problems. I never took that job seriously after this. I immediately started looking for another job, and it was time to learn that Python language that had such beautiful and elegant syntax, was open source, had nothing to do with Microsoft, and finally had some jobs in the Brazilian market.
Best decision ever. Using Python I never missed anything from C#.
Problems with Apple
Plenty of other reasons to hate Microsoft, if you read up on the company and its commercial crimes. Now let's talk about Apple.
Apple's presence in our lives is characterized by the following practices:
- slave labor in China
- they make everything incompatible on purpose
- they love DRM
- they tried to push video DRM onto web standards
- they tried to push their own patented codecs onto web standards
- Safari is currently the most incompatible browser (it's really the new Internet Explorer), costing everyone loads of development time
- they have an evil scheme to make every developer buy a Mac to develop any website, which is, Safari will not give you any debugging information unless you are using Apple's development tools on a Mac
- they have an evil scheme to prevent real competition to Safari in their platforms, which consists of a rule that says, a browser cannot be offered on the app store unless it uses for rendering a Safari component
- as a result all browsers on Apple devices are just skins over Safari
- Apple also invented the phone without a headphone jack
- Apple's headphones are technically bad and expensive
- Apple doesn't let people upgrade or service broken phones or computers, they go out of their way to make everything impossible, difficult or expensive so you can't fix the things ― and this gave origin to the Right to Repair movement.
The new villain: Google
Google, for a long time, was the only tech giant with a serious "don't be evil" behavior, but that's clearly history. Now you are the product, you have no privacy, they know exactly where you are in the world, you cannot prevent this from happening, they are going out of their way not to solve your problems but to kill AdBlock and make you pay, the advertisements are more numerous than ever, Google projects continue to be killed and users left without options, they have made the development of new, small web browsers impossible through multiplication of extremely complex web standards (such as the Web Component standard which has a terrible API), and finally, but most importantly, they are attacking the open web itself by pushing DRM for websites onto browsers. They no longer think content should be open (which was their opinion when they were a search engine) ― now that they have all the content, they think it should be closed, very closed.
The fracture of the web is coming, unfortunately. Greed doesn't listen to moral arguments. Mozilla is the only one that still deserves some respect.
McDonough's video is from 7 months ago; Google's betrayal (creating DRM for websites), which is the final drop of water for me, had not happened yet, but he was already saying, "Google is definitely next". Now I am looking at options to de-google my life, including email, cell phones, search engines and video platforms.
Nextcloud is the key to replacing Google utilities with something open source and self-hosted.
Conclusion
Like McDonough, I wonder how it is possible that people stay with these companies, continue to fortify them, just for convenience, instead of supporting an alternative earlier. The price is high, and will be even higher.
McDonough is absolutely right: Open platforms will always win out at the very end. Be the change and leave.
I have been following NixOS at a certain distance. I see McDonough now has more than 50 videos about NixOS. Feels like a prophecy of what I am doing next...